From 819bc6302329b6fbaac38c8bb67dd5c8a96498c4 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Fri, 22 Mar 2019 01:51:32 -0400 Subject: void function calls and string literals. --- monkeypatch.hs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/monkeypatch.hs b/monkeypatch.hs index 8646b5b..5d9bd1b 100644 --- a/monkeypatch.hs +++ b/monkeypatch.hs @@ -210,6 +210,11 @@ grokExpression (CConst (CIntConst n _)) = Just $ (,) [] $ Computation , compIntro = Map.empty , comp = Lit () (Int () (getCInteger n) (show n)) } +grokExpression (CConst (CStrConst s _)) = Just $ (,) [] $ Computation + { compFree = Map.empty + , compIntro = Map.empty + , comp = Lit () (HS.String () (getCString s) (getCString s)) + } grokExpression (CBinary CNeqOp a b _) = do (as,ca) <- grokExpression a (bs,cb) <- grokExpression b @@ -400,6 +405,20 @@ grokStatement (CBlockStmt (CExpr (Just fieldinit) ">>" (hsvar k1) } return $ fmap (\y -> Lambda () [hspvar k1] y) $ foldr applyComputation x' xs +grokStatement (CBlockStmt (CExpr (Just + (C.CCall cvarfun exps _)) _)) = do + fn <- cvarName cvarfun + gs <- mapM grokExpression exps + let k = uniqIdentifier "go" frees + cll = foldl (App ()) (hsvar fn) $ map (comp . snd) gs + frees = foldr Map.union (Map.singleton fn ()) (map (compFree . snd) gs) + x = foldr applyComputation s $ concatMap fst gs + s = Computation + { compFree = frees + , compIntro = Map.empty + , comp = infixOp cll ">>" (hsvar k) + } + return $ fmap (Lambda () [hspvar k]) x grokStatement (CBlockStmt (CExpr (Just (CAssign CAssignOp cvarnew (C.CCall cvarfun [] _) _)) _)) = do -- cgit v1.2.3