From 42f56c9c4ffdc30fbc60e3c6b3a3534a4da57cc7 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Tue, 19 Mar 2019 18:19:57 -0400 Subject: Support for expression-statements. --- monkeypatch.hs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/monkeypatch.hs b/monkeypatch.hs index 3b78c9f..58c8799 100644 --- a/monkeypatch.hs +++ b/monkeypatch.hs @@ -365,8 +365,14 @@ grokStatement (CBlockStmt (CIf exp (CCompound [] stmts _) Nothing _)) = do , comp = Lambda () [hspvar k] $ If () (comp x) (comp s) (hsvar k) } -- TODO CStatExpr --- TODO (CBlockStmt (CExpr Nothing _) -- semicolon --- TODO (CBlockStmt (CExpr (Just (CComma exs _) _) _)) +grokStatement (CBlockStmt (CExpr mexpr _)) = do + let (ss,pre) = fromMaybe ([],Computation Map.empty Map.empty id) $ do + expr <- mexpr + (ss,x) <- grokExpression expr + return (ss, fmap (\e -> infixFn e "seq") x) + k = uniqIdentifier "go" (compFree s) + s = foldr applyComputation (fmap ($ hsvar k) pre) ss + return $ fmap (Lambda () [hspvar k]) s grokStatement (CBlockDecl (CDecl (t:ts) (v:vs) _)) = do -- case mapMaybe (\(cdeclr,_,_) -> cdeclr >>= \(CDeclr i _ initial _ _) -> initial) (v:vs) of -- case mapMaybe (\(cdeclr,_,_) -> cdeclr >>= \(CInitList xs _) -> Just xs) (v:vs) of -- cgit v1.2.3