From 3a068f37f49b56efcb3bb2d99973bf3c4b4c9905 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 20 Jun 2023 22:13:40 +0200 Subject: Add tests for function application --- snug-clean/src/Snug/Compile/Simulate.icl | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'snug-clean/src/Snug/Compile') diff --git a/snug-clean/src/Snug/Compile/Simulate.icl b/snug-clean/src/Snug/Compile/Simulate.icl index af72277..b443913 100644 --- a/snug-clean/src/Snug/Compile/Simulate.icl +++ b/snug-clean/src/Snug/Compile/Simulate.icl @@ -130,14 +130,21 @@ indirectAndEval = , StoreWord TempImm 0 FrontEvalPtr ] >>| storeStackValue sv 4 FrontEvalPtr >>| + getState >>= \{hp_offset} -> add // Evaluate [ AddImmediate Signed FrontEvalPtr HeapPtr (Immediate offset) , Jump NoLink (Direct (Address 0 "eval")) - ] >>| + , AddImmediate Signed HeapPtr HeapPtr (Immediate hp_offset) + ] + SVIndirect 4 FrontEvalPtr -> + // We only need to overwrite the descriptor with an indirection getState >>= \{hp_offset} -> add - [ AddImmediate Signed HeapPtr HeapPtr (Immediate hp_offset) + [ LoadAddress TempImm (Address 0 (functionLabel "" NodeEntry "indir")) + , StoreWord TempImm 0 FrontEvalPtr + , Jump NoLink (Direct (Address 0 "eval")) + , AddImmediate Signed HeapPtr HeapPtr (Immediate hp_offset) ] _ -> fail "unexpected top of stack in indirect\n" -- cgit v1.2.3