From 3595d3c75503158e4eedaedbac8e81cbbe5ae54b Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Fri, 13 Dec 2019 13:39:35 +0100 Subject: Follow caller-save convention using stack, not full state restore --- tests/stack-test.lisp | 18 ++++++++++++++++++ tests/stack-test.out | 1 + 2 files changed, 19 insertions(+) create mode 100644 tests/stack-test.lisp create mode 100644 tests/stack-test.out (limited to 'tests') diff --git a/tests/stack-test.lisp b/tests/stack-test.lisp new file mode 100644 index 0000000..cabbaa3 --- /dev/null +++ b/tests/stack-test.lisp @@ -0,0 +1,18 @@ +(define g (x) (+ x 1)) + +(define f (x) + (if (<= x 0) + 0 + (let ((y (g x))) + (+ y (f (/ x 2)))))) + +; f 10 +; = 11 + f 5 +; = 11 + 6 + f 2 +; = 11 + 6 + 3 + f 1 +; = 11 + 6 + 3 + 2 +; = 22 +(print (f 10)) + +; Without Stackify, the deepest y value, i.e. 2, overwrites all y values above, +; resulting in 2 + 2 + 2 + 2 = 8. diff --git a/tests/stack-test.out b/tests/stack-test.out new file mode 100644 index 0000000..2bd5a0a --- /dev/null +++ b/tests/stack-test.out @@ -0,0 +1 @@ +22 -- cgit v1.2.3-54-g00ecf