diff options
Diffstat (limited to 'snug-clean/src/Snug/Compile/Simulate.icl')
-rw-r--r-- | snug-clean/src/Snug/Compile/Simulate.icl | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/snug-clean/src/Snug/Compile/Simulate.icl b/snug-clean/src/Snug/Compile/Simulate.icl index 620ec3e..b383936 100644 --- a/snug-clean/src/Snug/Compile/Simulate.icl +++ b/snug-clean/src/Snug/Compile/Simulate.icl @@ -87,6 +87,16 @@ buildCons cons nargs = mapM_ (\_ -> pop >>= write_heap) [1..nargs] >>| push addr +buildThunk :: !Label !Int -> Simulator () +buildThunk cons 0 = + write_heap (SVImmediate (Address 0 cons)) >>= \addr -> + modify (\s -> {s & hp_offset=s.hp_offset+4}) >>| // reserve space to overwrite with indir + push addr +buildThunk cons nargs = + write_heap (SVImmediate (Address 0 cons)) >>= \addr -> + mapM_ (\_ -> pop >>= write_heap) [1..nargs] >>| + push addr + pushBasicValue :: !BasicValue -> Simulator () pushBasicValue val = push (SVImmediate (Immediate imm)) where |