From dd3cdaec612dd8cf598ffd73d2c437d4f2f58744 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Tue, 19 Mar 2019 22:54:05 -0400 Subject: Fix statement-expression handling. --- monkeypatch.hs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/monkeypatch.hs b/monkeypatch.hs index 897323d..d5889f9 100644 --- a/monkeypatch.hs +++ b/monkeypatch.hs @@ -291,8 +291,22 @@ grokExpression (CStatExpr (CCompound idents xs _) _) = do [CBlockStmt (CExpr mexp ni)] -> Just $ CBlockStmt (CReturn mexp ni) _ -> Just (head y) -- Nothing FIXME gs <- mapM grokStatement (reverse $ y' : ys) - let s = foldr applyComputation (Computation Map.empty Map.empty hsopUnit) gs - return $ (,) [] $ fmap (\xp -> Paren () xp) s + let s0 = foldr applyComputation (Computation Map.empty Map.empty (App () (hsvar "return") hsopUnit)) gs + s1 = fmap (\xp -> Paren () xp) s0 + hv = uniqIdentifier "ret" (compFree s1) + k = uniqIdentifier "go" (compFree s1) + s = Computation + { compFree = compFree s1 + , compIntro = Map.singleton hv () + , comp = Lambda () [hspvar k] + $ infixOp (comp s1) ">>=" + $ Lambda () [hspvar hv] (hsvar k) + } + return $ (,) [s] Computation + { compFree = Map.singleton hv () + , compIntro = Map.empty + , comp = hsvar hv + } grokExpression _ = Nothing -- cgit v1.2.3