aboutsummaryrefslogtreecommitdiff
path: root/tests/i/class-copy/program.cps
diff options
context:
space:
mode:
Diffstat (limited to 'tests/i/class-copy/program.cps')
-rw-r--r--tests/i/class-copy/program.cps65
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/i/class-copy/program.cps b/tests/i/class-copy/program.cps
new file mode 100644
index 0000000..373e4c5
--- /dev/null
+++ b/tests/i/class-copy/program.cps
@@ -0,0 +1,65 @@
+GLOBAL
+ DECLARE Live : INTEGER
+ DECLARE Copies : INTEGER
+ENDGLOBAL
+CLASS Traced
+ Value : INTEGER
+ OVERLOAD PROCEDURE NEW()
+ Live <- Live + 1
+ ENDPROCEDURE
+ OVERLOAD PROCEDURE NEW(BYREF Other : Traced)
+ Value <- Other.Value
+ Live <- Live + 1
+ Copies <- Copies + 1
+ ENDPROCEDURE
+ PROCEDURE DELETE()
+ OUTPUT "destroy:", Value
+ Live <- Live - 1
+ ENDPROCEDURE
+ FUNCTION Read() RETURNS INTEGER
+ RETURN Value
+ ENDFUNCTION
+ FUNCTION Explode() RETURNS INTEGER
+ THROW
+ ENDFUNCTION
+ENDCLASS
+FUNCTION Make(N : INTEGER) RETURNS Traced
+ DECLARE Local : Traced
+ Local.Value <- N
+ RETURN Local
+ENDFUNCTION
+FUNCTION Forward(N : INTEGER) RETURNS Traced
+ RETURN Make(N)
+ENDFUNCTION
+PROCEDURE Pass(Item : Traced)
+ OUTPUT "pass:", Item.Value
+ Item.Value <- Item.Value + 10
+ENDPROCEDURE
+FUNCTION Fail() RETURNS INTEGER
+ THROW
+ENDFUNCTION
+PROCEDURE Accept(Item : Traced, Ignored : INTEGER)
+ENDPROCEDURE
+PROCEDURE Work()
+ DECLARE A : Traced
+ A.Value <- 1
+ CALL Pass(A)
+ CALL Pass(Forward(2))
+ CALL Make(3)
+ DECLARE B : Traced(A)
+ DECLARE C : Traced(Make(8))
+ OUTPUT Make(4).Read()
+ TRY
+ OUTPUT Make(6).Explode()
+ CATCH
+ OUTPUT "caught:", Live
+ ENDTRY
+ TRY
+ CALL Accept(Make(9), Fail())
+ CATCH
+ OUTPUT "argument caught:", Live
+ ENDTRY
+ OUTPUT "counts:", Copies, ":", Live
+ENDPROCEDURE
+CALL Work()
+OUTPUT "remaining:", Live