From a317c17f5ddfc3f749d349de01eeea5cad3eb162 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Tue, 8 Feb 2022 23:36:30 +0100 Subject: compiler: fix incorrect loop break targets When patching jump targets for break statments while compiling for-loop statments, we need jump beyond the instructions popping intermediate loop variables off the stack but before the pop instructions removing local loop body variables to prevent a stack position mismatch between compiler and vm. Before that change, local loop body variables remained on the stack, breaking the expected stack layout. Fixes: b3d758b compiler: ("fix for/break miscompilation") Signed-off-by: Jo-Philipp Wich --- tests/custom/04_bugs/10_break_stack_mismatch | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/custom/04_bugs/10_break_stack_mismatch b/tests/custom/04_bugs/10_break_stack_mismatch index ae16dac..c9c82c5 100644 --- a/tests/custom/04_bugs/10_break_stack_mismatch +++ b/tests/custom/04_bugs/10_break_stack_mismatch @@ -13,12 +13,14 @@ values or segmentation faults at runtime. for (let y in [2]) break; - print(x, "\n"); + let z = 3; + + print([ x, z ], "\n"); %} -- End -- -- Expect stdout -- -1 +[ 1, 3 ] -- End -- @@ -29,10 +31,12 @@ values or segmentation faults at runtime. for (let y = 0; y < 1; y++) break; - print(x, "\n"); + let z = 3; + + print([ x, z ], "\n"); %} -- End -- -- Expect stdout -- -1 +[ 1, 3 ] -- End -- -- cgit v1.2.3