summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--monkeypatch.hs18
1 files changed, 9 insertions, 9 deletions
diff --git a/monkeypatch.hs b/monkeypatch.hs
index 10f868f..b72e346 100644
--- a/monkeypatch.hs
+++ b/monkeypatch.hs
@@ -266,15 +266,15 @@ grokExpression fe (CCast (CDecl [ CTypeSpec (CVoidType _) ]
266 } 266 }
267grokExpression fe (CComma exps _) = do 267grokExpression fe (CComma exps _) = do
268 gs <- mapM (grokExpression fe) exps 268 gs <- mapM (grokExpression fe) exps
269 let ss = concatMap fst gs -- TODO: resolve variable name conflicts 269 let gs2 = map (\(ss,x) -> foldr applyComputation (App () (hsvar "return") <$> x) ss) gs
270 cll = foldr1 (\x y -> infixFn x "seq" y) $ map (comp . snd) gs 270 parn e = Paren () e
271 frees = foldr1 Map.union (map (compFree . snd) gs) 271 ps = map (\x -> let k = uniqIdentifier "go" (compFree x) in fmap (\xx -> Lambda () [hspvar k] (infixOp (parn xx) ">>" (hsvar k))) x) (init gs2)
272 k = uniqIdentifier "go" frees 272 s = foldr applyComputation (last gs2) ps
273 return $ (,) ss Computation 273 hv = "u"
274 { compFree = frees 274 k = uniqIdentifier "go" (compFree s)
275 , compIntro = Map.empty 275 s' = fmap (\x -> Lambda () [hspvar k] (infixOp (parn x) ">>=" (Lambda () [hspvar hv] (hsvar k)))) s
276 , comp = cll 276 -- TODO: It would be cleaner if I could return only a statement and not an expression.
277 } 277 return ([s'],Computation (Map.singleton hv ()) Map.empty (hsvar hv))
278grokExpression fe (C.CCall (CVar fn _) exps _) = do 278grokExpression fe (C.CCall (CVar fn _) exps _) = do
279 gs <- mapM (grokExpression fe) exps 279 gs <- mapM (grokExpression fe) exps
280 let ss = concatMap fst gs -- TODO: resolve variable name conflicts 280 let ss = concatMap fst gs -- TODO: resolve variable name conflicts