@@ -237,6 +237,14 @@ literals = mkPattern' match
237 return . prettyPrintCpp1 $ CppApp (CppVar $ mapNS <> "::get" <> angles (prettyPrintCpp1 i)) [val]
237 return . prettyPrintCpp1 $ CppApp (CppVar $ mapNS <> "::get" <> angles (prettyPrintCpp1 i)) [val]
238 match (CppDataGet i val) =
238 match (CppDataGet i val) =
239 return . prettyPrintCpp1 $ CppApp (CppVar $ dataNS <> "::get" <> angles (prettyPrintCpp1 i)) [val]
239 return . prettyPrintCpp1 $ CppApp (CppVar $ dataNS <> "::get" <> angles (prettyPrintCpp1 i)) [val]
240+ match (CppUnary op val) = return $ s <> "." <> f <> "()"
242+ v = prettyPrintCpp1 val
243+ s | CppVar {} <- val = v
244+ | otherwise = parensT v
245+ f | Size <- op = "size"
246+ | Empty <- op = "empty"
247+ | otherwise = error $ "Incorrect match on unary " <> show op
240 match (CppVar ident) = return $ renderName ident
248 match (CppVar ident) = return $ renderName ident
241 match (CppSymbol ident) = return $ "symbol" <> parensT (safeName ident)
249 match (CppSymbol ident) = return $ "symbol" <> parensT (safeName ident)
242 match (CppDefineSymbol ident) = return $ "define_symbol" <> parensT (safeName ident)
250 match (CppDefineSymbol ident) = return $ "define_symbol" <> parensT (safeName ident)
@@ -417,6 +425,8 @@ unary' op mkStr = Wrap match (<>)
417 match :: Pattern PrinterState Cpp (Text, Cpp)
425 match :: Pattern PrinterState Cpp (Text, Cpp)
418 match = mkPattern match'
426 match = mkPattern match'
428+ match' (CppUnary Size _) = Nothing
429+ match' (CppUnary Empty _) = Nothing
420 match' (CppUnary op' val)
430 match' (CppUnary op' val)
421 | op' == op = Just (mkStr val, val)
431 | op' == op = Just (mkStr val, val)
422 match' _ = Nothing
432 match' _ = Nothing
@@ -483,7 +493,6 @@ prettyPrintCpp' = A.runKleisli $ runPattern matchValue
483 OperatorTable [ [ Wrap accessor $ \prop val -> val <> "::" <> prop ]
493 OperatorTable [ [ Wrap accessor $ \prop val -> val <> "::" <> prop ]
484 , [ Wrap indexer $ \index val -> val <> "[" <> index <> "]" ]
494 , [ Wrap indexer $ \index val -> val <> "[" <> index <> "]" ]
485 , [ Wrap app $ \args val -> val <> parensT args ]
495 , [ Wrap app $ \args val -> val <> parensT args ]
486− , [ unary New "new " ]
487 , [ Wrap lam $ \(caps, args, rty) ret -> '[' `T.cons` caps <> "]"
496 , [ Wrap lam $ \(caps, args, rty) ret -> '[' `T.cons` caps <> "]"
488 <> let args' = argstr <$> args in
497 <> let args' = argstr <$> args in
489 parensT (T.intercalate ", " args')
498 parensT (T.intercalate ", " args')
@@ -496,8 +505,7 @@ prettyPrintCpp' = A.runKleisli $ runPattern matchValue
496 , negateOperator ]
505 , negateOperator ]
497 , [ binary Multiply " * "
506 , [ binary Multiply " * "
498 , binary Divide " / "
507 , binary Divide " / "
499− , binary Modulus " % "
508+ , binary Modulus " % " ]
501 , [ binary Add " + "
509 , [ binary Add " + "
502 , binary Subtract " - " ]
510 , binary Subtract " - " ]
503 , [ binary ShiftLeft " << "
511 , [ binary ShiftLeft " << "