From 9f4cfc458fbe6140ac2793a29068794bcd23883e Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Wed, 20 Mar 2019 14:41:29 -0400 Subject: Grok assignment to field. --- monkeypatch.hs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/monkeypatch.hs b/monkeypatch.hs index e4ccbc1..461d3c1 100644 --- a/monkeypatch.hs +++ b/monkeypatch.hs @@ -382,6 +382,22 @@ grokStatement (CBlockStmt (CExpr (Just (C.CCall (CVar (C.Ident "__assert_fail" _ let k = uniqIdentifier "go" (compFree x `Map.union` compIntro x) x' = fmap (\y -> App () (hsvar "error") y) x return $ fmap (\y -> Lambda () [hspvar k] y) x' +grokStatement (CBlockStmt (CExpr (Just + (CAssign CAssignOp + (CMember cvar fld isptr _) expr _)) _)) = do + (xs,x) <- grokExpression expr + v <- cvarName cvar + let fieldlbl = identToString fld + k1 = uniqIdentifier "go" (compFree x) + fieldinit = comp x + x' = x + { comp = infixOp + (App () (App () (App () (hsvar "set") + (TypeApp () (TyPromoted () (PromotedString () fieldlbl fieldlbl)))) + (hsvar v)) + fieldinit) ">>" (hsvar k1) + } + return $ fmap (\y -> Lambda () [hspvar k1] y) $ foldr applyComputation x' xs grokStatement (CBlockStmt (CExpr (Just (CAssign CAssignOp cvarnew (C.CCall cvarfun [] _) _)) _)) = do -- cgit v1.2.3