From 6a3b31af5dbb22749e6d5a1cad9dfaab6863b615 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sat, 17 Oct 2026 08:36:19 +0000 Subject: feat(classes): destroy stack objects during exception unwinding Co-Authored-By: Claude Opus 5.5 --- tests/i/class-unwind/program.cps | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/i/class-unwind/program.cps (limited to 'tests/i/class-unwind/program.cps') diff --git a/tests/i/class-unwind/program.cps b/tests/i/class-unwind/program.cps new file mode 100644 index 0000000..298cd3a --- /dev/null +++ b/tests/i/class-unwind/program.cps @@ -0,0 +1,56 @@ +CLASS Trace + Id : INTEGER + PROCEDURE DELETE() + OUTPUT "destroy:", Id + ENDPROCEDURE +ENDCLASS +PROCEDURE Inner() + DECLARE A : Trace + A.Id <- 1 + DECLARE B : Trace + B.Id <- 2 + THROW +ENDPROCEDURE +PROCEDURE Outer() + DECLARE A : Trace + A.Id <- 3 + CALL Inner() +ENDPROCEDURE +PROCEDURE Check(I : INTEGER) + IF I = 2 THEN + THROW + ENDIF +ENDPROCEDURE +PROCEDURE Loop() + DECLARE I : INTEGER + FOR I <- 1 TO 2 + CALL Check(I) + DECLARE Late : Trace + Late.Id <- 60 + NEXT I +ENDPROCEDURE +PROCEDURE LocalCatch() + DECLARE Kept : Trace + Kept.Id <- 70 + TRY + THROW + CATCH + OUTPUT "local caught" + ENDTRY + OUTPUT "still alive" +ENDPROCEDURE +DECLARE MainObject : Trace +MainObject.Id <- 100 +TRY + CALL Outer() +CATCH + OUTPUT "caught" +ENDTRY +TRY + CALL Loop() +CATCH + OUTPUT "loop caught" +ENDTRY +CALL LocalCatch() +OUTPUT "uncaught next" +CALL Outer() -- cgit v1.3.1-4-g156e