Fix invalid stack order

This commit is contained in:
2021-11-02 22:59:36 +01:00
parent e7b6b0ab75
commit 908229360d
2 changed files with 5 additions and 5 deletions

View File

@@ -60,10 +60,10 @@ instructions = [ Simple { op = Nop, noParams = 0, noPops = 0, sAction = (\_ _
, Simple { op = Pop, noParams = 0, noPops = 1, sAction = (\_ _ -> S.empty) }
, Simple { op = Dup, noParams = 0, noPops = 1, sAction = (\_ [x] -> S.fromList [x, x]) }
, Simple { op = Swap, noParams = 0, noPops = 2, sAction = (\_ [x, y] -> S.fromList [y, x]) }
, Simple { op = Add, noParams = 0, noPops = 2, sAction = (\_ [x, y] -> S.fromList [x + y]) }
, Simple { op = Sub, noParams = 0, noPops = 2, sAction = (\_ [x, y] -> S.fromList [x - y]) }
, Simple { op = Mul, noParams = 0, noPops = 2, sAction = (\_ [x, y] -> S.fromList [x * y]) }
, Simple { op = Div, noParams = 0, noPops = 2, sAction = (\_ [x, y] -> S.fromList [x `div` y]) }
, Simple { op = Add, noParams = 0, noPops = 2, sAction = (\_ [x, y] -> S.fromList [y + x]) }
, Simple { op = Sub, noParams = 0, noPops = 2, sAction = (\_ [x, y] -> S.fromList [y - x]) }
, Simple { op = Mul, noParams = 0, noPops = 2, sAction = (\_ [x, y] -> S.fromList [y * x]) }
, Simple { op = Div, noParams = 0, noPops = 2, sAction = (\_ [x, y] -> S.fromList [y `div` x]) }
, Simple { op = Neg, noParams = 0, noPops = 1, sAction = (\_ [x] -> S.fromList [-x]) }
, Simple { op = Not, noParams = 0, noPops = 1, sAction = (\_ [x] -> S.fromList [if x /= 0 then 0 else 1]) }
]

View File

@@ -31,7 +31,7 @@ interpretSimple vm (I.Command (I.Simple op _ noPops operation) args) = vm'
pops = toList . S.take noPops . VM.stack $ vm
stack' = Right $ operation args pops
vm' = stack' >>= (\s -> Right $ vm { VM.pc = VM.pc vm + 1
, VM.stack = (S.drop noPops . VM.stack) vm <> s
, VM.stack = s <> (S.drop noPops . VM.stack) vm
})
interpretSimple _ _ = Left $ "Unknown operation"