@@ -158,12 +158,16 @@ literals = mkPattern' match'
158 , prettyPrintCpp' ret
158 , prettyPrintCpp' ret
160 match (Function _ name args ret) = mconcat <$> sequence
160 match (Function _ name args ret) = mconcat <$> sequence
161− [ return $ emit $ if name == (Just tcoLoop) then "[&]" else "[=]"
161+ [ return $ emit captures
162 , return $ emit "("
162 , return $ emit "("
163− , return $ emit $ intercalate ", " (renderArg <$> args)
163+ , return $ emit $ intercalate ", " (render <$> args)
164 , return $ emit ") -> boxed "
164 , return $ emit ") -> boxed "
165 , prettyPrintCpp' ret
165 , prettyPrintCpp' ret
169+ | name == Just tcoLoop = ("[&]", renderArgByVal)
170+ | otherwise = ("[=]", renderArg)
167 match (Indexer _ prop@(Var _ name) val) = mconcat <$> sequence
171 match (Indexer _ prop@(Var _ name) val) = mconcat <$> sequence
168 [ prettyPrintCpp' val
172 [ prettyPrintCpp' val
169 , return $ emit "::"
173 , return $ emit "::"
@@ -482,12 +486,21 @@ implFooterSource mn foreigns =
484varDecl :: Text
488varDecl :: Text
485−varDecl = "const boxed&"
489+varDecl = "const boxed"
492+varRefDecl = varDecl <> "&"
494+renderArg' :: Text -> Text -> Text
496+ | arg == unusedName = decl
497+ | otherwise = decl <> " " <> arg
487renderArg :: Text -> Text
499renderArg :: Text -> Text
488−renderArg arg
500+renderArg = renderArg' varRefDecl
489− | arg == unusedName = varDecl
501+
490− | otherwise = varDecl <> " " <> arg
502+renderArgByVal :: Text -> Text
503+renderArgByVal = renderArg' varDecl
492foreignDict :: Text
505foreignDict :: Text
493foreignDict = "foreign"
506foreignDict = "foreign"