aboutsummaryrefslogtreecommitdiff
path: root/tests/i/class-unwind/program.cps
blob: 298cd3a35f0f2b3a0faf4c51207f14056fa8e8f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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()