aboutsummaryrefslogtreecommitdiff
path: root/tests/i/class-destructor-throws/program.cps
blob: 5ff62acfa616b91003c2dd787089ca102e77a94e (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
57
58
59
60
61

CLASS Trace
    Id : INTEGER
    PROCEDURE DELETE()
        OUTPUT "destroy:", Id
    ENDPROCEDURE
ENDCLASS
CLASS Bomb
    PROCEDURE DELETE()
        OUTPUT "bomb"
        THROW
    ENDPROCEDURE
ENDCLASS
PROCEDURE Normal()
    DECLARE First : Trace
    First.Id <- 1
    DECLARE Last : Bomb
ENDPROCEDURE
PROCEDURE DuringUnwind()
    DECLARE Last : Bomb
    THROW
ENDPROCEDURE
PROCEDURE InCatch()
    DECLARE First : Trace
    First.Id <- 2
    TRY
        THROW
    CATCH
        DECLARE Last : Bomb
        RETURN
    ENDTRY
ENDPROCEDURE
PROCEDURE InTry()
    DECLARE Last : Bomb
    TRY
        RETURN
    CATCH
        OUTPUT "return caught locally"
    ENDTRY
ENDPROCEDURE
FUNCTION Result() RETURNS INTEGER
    DECLARE Local : Trace
    Local.Id <- 3
    RETURN Local.Id
ENDFUNCTION
TRY
    CALL Normal()
CATCH
    OUTPUT "normal caught"
ENDTRY
TRY
    CALL InCatch()
CATCH
    OUTPUT "catch exit caught"
ENDTRY
CALL InTry()
OUTPUT Result()
TRY
    CALL DuringUnwind()
CATCH
    OUTPUT "unwind throw caught"
ENDTRY