@@ -106,9 +106,9 @@ literals = mkPattern' match'
106106 , Just op <- renderOp fn
107107 , Just t <- unboxType dict
108108 = mconcat <$> sequence
109− [ return $ emit $ unbox t x
109+ [ return $ emit $ unbox' t x
110110 , return $ emit op
111− , return $ emit $ unbox t y
111+ , return $ emit $ unbox' t y
112112 ]
113113 match (App _ (App _ (Indexer _ (Var _ fn) (Var _ fnMod)) [Indexer _ (Var _ dict) (Var _ dictMod)]) [n])
114114 | fnMod == dictMod
@@ -117,7 +117,7 @@ literals = mkPattern' match'
117117 , Just t <- unboxType dict
118118 = mconcat <$> sequence
119119 [ return $ emit "-"
120− , return $ emit $ unbox t n
120+ , return $ emit $ unbox' t n
121121 ]
122122 match (App _ val args) = mconcat <$> sequence
123123 [ prettyPrintCpp' val
@@ -179,18 +179,6 @@ literals = mkPattern' match'
179179 , prettyPrintCpp' prop
180180 , return $ emit "()"
181181 ]
182− match (Indexer _ (ArrayLiteral _ [name]) val) = mconcat <$> sequence
183− [ prettyPrintCpp' val
184− , return $ emit "."
185− , prettyPrintCpp' name
186− , return $ emit "()"
187− ]
188− match (Indexer _ (NumericLiteral _ (Left index)) val) = mconcat <$> sequence
189− [ prettyPrintCpp' val
190− , return $ emit "["
191− , return . emit . T.pack $ show index
192− , return $ emit "]"
193− ]
194182 match (Indexer _ prop val) = mconcat <$> sequence
195183 [ prettyPrintCpp' val
196184 , return $ emit "["
@@ -198,7 +186,7 @@ literals = mkPattern' match'
198186 , return $ emit "]"
199187 ]
200188 match (InstanceOf _ val ty) = mconcat <$> sequence
201− [ return . emit $ unbox dictType val
189+ [ return . emit $ unbox' dictType val
202190 , return $ emit ".contains("
203191 , prettyPrintCpp' ty
204192 , return $ emit ")"
@@ -225,21 +213,21 @@ literals = mkPattern' match'
225213 ]
226214 match (IfElse _ (Binary _ EqualTo cond (BooleanLiteral Nothing True)) thens elses) = mconcat <$> sequence
227215 [ return $ emit "if ("
228− , return $ emit $ unbox "bool" cond
216+ , return $ emit $ unbox' "bool" cond
229217 , return $ emit ") "
230218 , prettyPrintCpp' thens
231219 , maybe (return mempty) (fmap (emit " else " <>) . prettyPrintCpp') elses
232220 ]
233221 match (IfElse _ (Binary _ EqualTo cond (BooleanLiteral Nothing False)) thens elses) = mconcat <$> sequence
234222 [ return $ emit "if (!("
235− , return $ emit $ unbox "bool" cond
223+ , return $ emit $ unbox' "bool" cond
236224 , return $ emit ")) "
237225 , prettyPrintCpp' thens
238226 , maybe (return mempty) (fmap (emit " else " <>) . prettyPrintCpp') elses
239227 ]
240228 match (IfElse _ (Binary _ EqualTo x y@(NumericLiteral _ n)) thens elses) = mconcat <$> sequence
241229 [ return $ emit "if ("
242− , return $ emit $ unbox t x
230+ , return $ emit $ unbox' t x
243231 , return $ emit $ " == "
244232 , prettyPrintCpp' y
245233 , return $ emit ") "
@@ -251,7 +239,7 @@ literals = mkPattern' match'
251239 | Right _ <- n = float
252240 match (IfElse _ (Binary _ EqualTo a b@StringLiteral{}) thens elses) = mconcat <$> sequence
253241 [ return $ emit "if ("
254− , return $ emit $ unbox string a
242+ , return $ emit $ unbox' string a
255243 , return $ emit $ " == "
256244 , prettyPrintCpp' b
257245 , return $ emit ") "
@@ -412,11 +400,11 @@ stringLiteral pss | Just s <- decodeString pss =
412400 encodeChar c = T.singleton $ c
413401stringLiteral _ = "\"\\uFFFD\""
414402
415−unbox :: Text -> AST -> Text
416−unbox _ v@(NumericLiteral{}) = prettyPrintCpp1 v
417−unbox _ v@(BooleanLiteral{}) = prettyPrintCpp1 v
418−unbox _ v@(StringLiteral{}) = prettyPrintCpp1 v
419−unbox t v = "unbox<" <> t <> ">(" <> prettyPrintCpp1 v <> ")"
403+unbox' :: Text -> AST -> Text
404+unbox' _ v@(NumericLiteral{}) = prettyPrintCpp1 v
405+unbox' _ v@(BooleanLiteral{}) = prettyPrintCpp1 v
406+unbox' _ v@(StringLiteral{}) = prettyPrintCpp1 v
407+unbox' t v = unbox t <> "(" <> prettyPrintCpp1 v <> ")"
420408
421409unboxType :: Text -> Maybe Text
422410unboxType t
@@ -490,24 +478,6 @@ implFooterSource mn foreigns =
490478 \}\n\n\
491479 \"
492480
493−dictType :: Text
494−dictType = "dict_t"
495−
496−arrayType :: Text
497−arrayType = "array_t"
498−
499−int :: Text
500−int = "int"
501−
502−float :: Text
503−float = "double"
504−
505−bool :: Text
506−bool = "bool"
507−
508−string :: Text
509−string = "string"
510−
511481varDecl :: Text
512482varDecl = "const boxed&"
513483