summaryrefslogtreecommitdiff
path: root/app/Compiler.hs
diff options
context:
space:
mode:
Diffstat (limited to 'app/Compiler.hs')
-rw-r--r--app/Compiler.hs7
1 files changed, 5 insertions, 2 deletions
diff --git a/app/Compiler.hs b/app/Compiler.hs
index 1adefc3..ecbd003 100644
--- a/app/Compiler.hs
+++ b/app/Compiler.hs
@@ -36,11 +36,13 @@ variablizePrlg void vs (LiteralI i)
| Just idx <- elemIndex i vs = VarI idx i
| otherwise = LiteralI i
-compileGoals :: Id -> PrlgInt -> [Code]
-compileGoals andop = go
+compileGoals :: Id -> Int -> PrlgInt -> [Code]
+compileGoals andop cut = go
where
go p@(CallI x args)
| x == andop = concatMap go args
+ go p@(LiteralI x)
+ | x == cut = [[Cut]]
go x = [compileGoal x]
compileGoal :: PrlgInt -> Code
@@ -58,4 +60,5 @@ seqGoals [] = [NoGoal]
seqGoals [[Cut]] = [Cut, NoGoal]
seqGoals [x] = [Goal] ++ x ++ [LastCall]
seqGoals [x, [Cut]] = [Goal] ++ x ++ [LastCall, Cut]
+seqGoals ([Cut]:xs) = [Cut] ++ seqGoals xs
seqGoals (x:xs) = [Goal] ++ x ++ [Call] ++ seqGoals xs