summaryrefslogtreecommitdiffhomepage
path: root/tests/03_bugs/12_altblock_stack_mismatch
blob: 68058882b9a52107d5a611d4c18dd61550e3b7c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
When compiling alternative syntax blocks, such as `for ...: endfor`,
`if ...: endif` etc., the compiler didn't assign the contained statements
to a dedicated lexical scope, which caused a stack mismatch between
compiler and vm when such blocks declaring local variables weren't
actually executed.

-- Expect stdout --
2
-- End --

-- Testcase --
{%
	if (false):
		let a = 1;
	endif;

	/* Due to lack of own lexical scope above, the compiler assumed
	 * that `a` is still on stack but the code to initialize it was
	 * never executed, so stack offsets were shifted by one from here
	 * on throughout the rest of the program. */

	let b = 2;

	print(b, "\n");
%}
-- End --