diff options
Diffstat (limited to 'app/Compiler.hs')
| -rw-r--r-- | app/Compiler.hs | 7 |
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 |
