summaryrefslogtreecommitdiffhomepage
path: root/tests/custom/04_bugs/01_try_catch_stack_mismatch
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2022-01-23 22:21:24 +0100
committerJo-Philipp Wich <jo@mein.io>2022-01-26 10:47:56 +0100
commit04fa2baba6d615c49cf3f77986595da2a7783899 (patch)
treea346cc4d4fd630797dcc91aeb35f2d7bdf44233b /tests/custom/04_bugs/01_try_catch_stack_mismatch
parentabe38e7e390cc17e6eae0ebe94d2006c548e095c (diff)
tests: reorganize testcase files
- Rename 03_bugs to 04_bugs - Rename 26_invalid_sparse_array_set to 27_invalid_sparse_array_set Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'tests/custom/04_bugs/01_try_catch_stack_mismatch')
-rw-r--r--tests/custom/04_bugs/01_try_catch_stack_mismatch52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/custom/04_bugs/01_try_catch_stack_mismatch b/tests/custom/04_bugs/01_try_catch_stack_mismatch
new file mode 100644
index 0000000..f6e5a0a
--- /dev/null
+++ b/tests/custom/04_bugs/01_try_catch_stack_mismatch
@@ -0,0 +1,52 @@
+When compiling a try/catch statement with an exception variable, the catch
+skip jump incorrectly pointed to the POP instruction popping the exception
+variable off the stack, leading to a stack position mismatch between
+compiler and vm, causing local variables to yield wrong values at runtime.
+
+-- Expect stdout --
+1
+-- End --
+
+-- Testcase --
+{%
+ function f() {
+ let x;
+
+ try {
+ x = 1;
+ }
+ catch(e) {
+
+ }
+
+ // Before the fix, `x` incorrectly yielded the print function value
+ print(x, "\n");
+ }
+
+ f()
+%}
+-- End --
+
+
+When compiling a try/catch statement with local variable declearations
+within the try block, the catch skip jump incorrectly happened before the
+local try block variables were popped off the stack, leading to a stack
+position mismatch between compiler and vm, causing local variables to
+yield wrong values at runtime.
+
+-- Expect stdout --
+1
+-- End --
+
+-- Testcase --
+{%
+ try {
+ let a;
+ }
+ catch {}
+
+ let b = 1;
+
+ print(b, "\n");
+%}
+-- End --