aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-09-24 21:20:44 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-09-24 21:20:44 -0400
commit0cfae753aa131f949253f3fba1e3a36c2bde6ac0 (patch)
treed1403a97d7e86f547f8e6ca9994095f31c37d2a2 /test
parent76f80f80ff1788af96ae87fa909c130336d5399b (diff)
Revert "Deprecate `defer`"
This reverts commit 7e3e245f6809946ea06ef1998bcabb7e0902fbd7.
Diffstat (limited to 'test')
-rw-r--r--test/defer.tm79
-rw-r--r--test/lambdas.tm2
2 files changed, 80 insertions, 1 deletions
diff --git a/test/defer.tm b/test/defer.tm
new file mode 100644
index 00000000..8f0cb3be
--- /dev/null
+++ b/test/defer.tm
@@ -0,0 +1,79 @@
+func main()
+ x := 123
+ nums : @[Int]
+ do
+ defer
+ nums.insert(x)
+ x = 999
+
+ assert nums[] == [123]
+ assert x == 999
+
+ defer
+ say("All done!")
+
+ for word in ["first", "second", "third"]
+ defer
+ say("Got $word deferred")
+
+ if word == "second"
+ say("<skipped>")
+ skip
+ else if word == "third"
+ say("<stopped>")
+ stop
+
+ for i in 3
+ defer
+ say("Inner loop deferred $i")
+
+ if i == 2
+ say("<skipped inner>")
+ skip
+ else if i == 3
+ say("<stopped inner>")
+ stop
+
+ say("Made it through inner loop")
+
+ say("Made it through the loop")
+
+ >> thunk := func(return_early=no)
+ say("Entering thunk")
+ defer
+ say("Deferred thunk cleanup")
+
+ if return_early
+ say("Returning early...")
+ return
+
+ say("Finished thunk")
+
+ >> thunk(no)
+ >> thunk(yes)
+
+ >> defer_func(yes)
+ >> defer_func(no)
+
+ >> counter := make_counter()
+ assert counter() == 1
+ assert counter() == 2
+ assert counter() == 3
+
+func defer_func(return_early=no)
+ say("Entering defer_func")
+ defer
+ say("Deferred defer_func cleanup")
+
+ if return_early
+ say("Returning early...")
+ return
+
+ say("Finished defer_func")
+
+func make_counter(->func(->Int))
+ i := 1
+ return func()
+ defer i += 1
+ return i
+
diff --git a/test/lambdas.tm b/test/lambdas.tm
index 5508dba2..1d1b2775 100644
--- a/test/lambdas.tm
+++ b/test/lambdas.tm
@@ -31,6 +31,6 @@ func main()
fn := func()
return func()
return func()
- say("$outer")
+ defer say("$outer")
return outer
assert fn()()() == "Hello"