From b511cbf06b5ad30a555c5bf99598b7257d628eea Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Fri, 22 Mar 2019 16:53:07 -0400 Subject: Fixed ordering of comma-operator side effects. --- monkeypatch.hs | 18 +++++++++--------- 1 file 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 _) ] } grokExpression fe (CComma exps _) = do gs <- mapM (grokExpression fe) exps - let ss = concatMap fst gs -- TODO: resolve variable name conflicts - cll = foldr1 (\x y -> infixFn x "seq" y) $ map (comp . snd) gs - frees = foldr1 Map.union (map (compFree . snd) gs) - k = uniqIdentifier "go" frees - return $ (,) ss Computation - { compFree = frees - , compIntro = Map.empty - , comp = cll - } + let gs2 = map (\(ss,x) -> foldr applyComputation (App () (hsvar "return") <$> x) ss) gs + parn e = Paren () e + ps = map (\x -> let k = uniqIdentifier "go" (compFree x) in fmap (\xx -> Lambda () [hspvar k] (infixOp (parn xx) ">>" (hsvar k))) x) (init gs2) + s = foldr applyComputation (last gs2) ps + hv = "u" + k = uniqIdentifier "go" (compFree s) + s' = fmap (\x -> Lambda () [hspvar k] (infixOp (parn x) ">>=" (Lambda () [hspvar hv] (hsvar k)))) s + -- TODO: It would be cleaner if I could return only a statement and not an expression. + return ([s'],Computation (Map.singleton hv ()) Map.empty (hsvar hv)) grokExpression fe (C.CCall (CVar fn _) exps _) = do gs <- mapM (grokExpression fe) exps let ss = concatMap fst gs -- TODO: resolve variable name conflicts -- cgit v1.2.3