From 0cfae753aa131f949253f3fba1e3a36c2bde6ac0 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Wed, 24 Sep 2025 21:20:44 -0400 Subject: Revert "Deprecate `defer`" This reverts commit 7e3e245f6809946ea06ef1998bcabb7e0902fbd7. --- test/defer.tm | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ test/lambdas.tm | 2 +- 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 test/defer.tm (limited to 'test') 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("") + skip + else if word == "third" + say("") + stop + + for i in 3 + defer + say("Inner loop deferred $i") + + if i == 2 + say("") + skip + else if i == 3 + say("") + 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" -- cgit v1.2.3