on master help sign in
Added %lazy annotations
commitf03a6553b0928036db253e8df89409dc915d7879 authorEdwin Brady <eb@cs.st-andrews.ac.uk> dateWed 5 Sep 2012, 14:24 (14 years ago) parentc9c3cf9
2 files changed+10−1
src/IRTS/LParser.hs+4−1 src/IRTS/Lang.hs+6
src/IRTS/LParser.hs+4−1
@@ -52,7 +52,7 @@ fovm f = do defs <- parseFOVM f
5252 let defuns = defunctionalise nexttag ctxtIn
5353-- print defuns
5454 let checked = checkDefs defuns (toAlist defuns)
55−-- print checked
55+-- print checked
5656 case checked of
5757 OK c -> codegenC c "a.out" True ["math.h"] "" TRACE
5858 Error e -> fail $ show e
@@ -193,6 +193,9 @@ pPrim = do reserved "StrEq"; lchar '(';
193193 <|> do reserved "WriteInt"; lchar '(';
194194 e <- pLExp; lchar ')';
195195 return (LOp LPrintNum [e])
196+ <|> do reserved "lazy"; lchar '(';
197+ e <- pLExp; lchar ')';
198+ return (LLazyExp e)
196199
197200pAlt :: LParser LAlt
198201pAlt = try (do x <- iName []
src/IRTS/Lang.hs+6
@@ -9,6 +9,7 @@ data LVar = Loc Int | Glob Name
99data LExp = LV LVar
1010 | LApp Bool Name [LExp] -- True = tail call
1111 | LLazyApp Name [LExp] -- True = tail call
12+ | LLazyExp LExp
1213 | LLet Name LExp LExp -- name just for pretty printing
1314 | LLam [Name] LExp -- lambda, lifted out before compiling
1415 | LCon Int Name [LExp]
@@ -81,6 +82,11 @@ lift env (LApp tc n args) = do args' <- mapM (lift env) args
8182 return (LApp tc n args')
8283lift env (LLazyApp n args) = do args' <- mapM (lift env) args
8384 return (LLazyApp n args')
85+lift env (LLazyExp (LConst c)) = return (LConst c)
86+lift env (LLazyExp e) = do e' <- lift env e
87+ fn <- getNextName
88+ addFn fn (LFun fn env e')
89+ return (LLazyApp fn (map (LV . Glob) env))
8490lift env (LLet n v e) = do v' <- lift env v
8591 e' <- lift (env ++ [n]) e
8692 return (LLet n v' e')