finally proper stack unwind in the evaluator

This commit is contained in:
kr.angelov
2014-10-16 10:00:32 +00:00
parent b70dba87ba
commit 26ad164cec
8 changed files with 176 additions and 211 deletions

View File

@@ -168,9 +168,10 @@ instance Binary Instr where
put (EVAL (ARG_VAR n) (UpdateCall b c)) = putWord8 49 >> put n >> put (b,c)
put (EVAL (FREE_VAR n) (UpdateCall b c)) = putWord8 50 >> put n >> put (b,c)
put (EVAL (GLOBAL id) (UpdateCall b c)) = putWord8 51 >> put id >> put (b,c)
put (DROP n l ) = putWord8 52 >> put (n,l)
put (FAIL ) = putWord8 56
put (ADD ) = putWord8 60
put (DROP n ) = putWord8 52 >> put n
put (JUMP l ) = putWord8 56 >> put l
put (FAIL ) = putWord8 60
put (ADD ) = putWord8 64
instance Binary Type where
put (DTyp hypos cat exps) = put (hypos,cat,exps)

View File

@@ -26,7 +26,8 @@ data Instr
| SET_PAD
| PUSH IVal
| EVAL IVal TailInfo
| DROP {-# UNPACK #-} !Int {-# UNPACK #-} !CodeLabel
| DROP {-# UNPACK #-} !Int
| JUMP {-# UNPACK #-} !CodeLabel
| FAIL
| ADD
@@ -60,7 +61,8 @@ ppInstr (SET v) = text "SET " <+> ppIVal v
ppInstr (SET_PAD ) = text "SET_PAD"
ppInstr (PUSH v) = text "PUSH " <+> ppIVal v
ppInstr (EVAL v ti) = text "EVAL " <+> ppIVal v <+> ppTailInfo ti
ppInstr (DROP n l ) = text "DROP " <+> int n <+> ppLabel l
ppInstr (DROP n ) = text "DROP " <+> int n
ppInstr (JUMP l ) = text "JUMP " <+> ppLabel l
ppInstr (FAIL ) = text "FAIL"
ppInstr (ADD ) = text "ADD"