aboutsummaryrefslogtreecommitdiff
path: root/tests/i/class-methods/program.cps
blob: 655fb8b20ed7d851cd60a80d026f16ee4cd1a6a8 (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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89

CLASS Counter
    PRIVATE Value : INTEGER
    PROCEDURE Set(Number : INTEGER)
        Value <- Number
    ENDPROCEDURE
    FUNCTION Get() RETURNS INTEGER
        RETURN Value
    ENDFUNCTION
    PROCEDURE Add(Number : INTEGER)
        this.Set(this.Get() + Number)
    ENDPROCEDURE
    PROCEDURE Copy(Other : Counter)
        this <- Other
    ENDPROCEDURE
    FUNCTION Clone() RETURNS Counter
        RETURN this
    ENDFUNCTION
    FUNCTION ReadOther(Other : Counter) RETURNS INTEGER
        RETURN Other.Hidden()
    ENDFUNCTION
    PRIVATE FUNCTION Hidden() RETURNS INTEGER
        RETURN Value
    ENDFUNCTION
    FUNCTION Sum(Number : INTEGER) RETURNS INTEGER
        IF Number = 0 THEN
            RETURN 0
        ENDIF
        RETURN Number + this.Sum(Number - 1)
    ENDFUNCTION
    PROCEDURE Take(BYREF Number : INTEGER, BYREF Values : ARRAY OF INTEGER)
        Number <- Number + Value
        Values[1] <- Number
    ENDPROCEDURE
    PROCEDURE Fail()
        THROW
    ENDPROCEDURE
    PROCEDURE PassSelf()
        CALL Change(this)
    ENDPROCEDURE
ENDCLASS
CLASS Marker
    FUNCTION Get() RETURNS INTEGER
        RETURN 99
    ENDFUNCTION
ENDCLASS
TYPE Container
    DECLARE Item : Counter
ENDTYPE
TYPE CounterPointer = ^Counter
PROCEDURE Change(BYREF Target : Counter)
    Target.Set(42)
ENDPROCEDURE
FUNCTION Get() RETURNS INTEGER
    RETURN 100
ENDFUNCTION
DECLARE A : Counter
DECLARE B : Counter
CALL a.sET(3)
B.Set(8)
A.Add(2)
OUTPUT A.Get(), ",", B.Get()
CALL A.Copy(B)
A.Set(9)
OUTPUT A.Get(), ",", B.Get()
B <- A.Clone()
OUTPUT B.Get(), ",", A.ReadOther(B)
OUTPUT A.Sum(4), ",", Get()
DECLARE Items : ARRAY[1:2] OF Counter
Items[1].Set(6)
DECLARE Wrapped : Container
Wrapped.Item.Set(7)
DECLARE P : CounterPointer
P <- ^Items[1]
P^.Add(4)
OUTPUT Items[1].Get(), ",", Wrapped.Item.Get()
DECLARE Number : INTEGER
DECLARE Values : ARRAY[1:2] OF INTEGER
Number <- 1
CALL A.Take(Number, Values)
OUTPUT Number, ",", Values[1]
TRY
    A.Fail()
CATCH
    OUTPUT "caught"
ENDTRY
A.PassSelf()
OUTPUT A.Get()
DECLARE M : Marker
OUTPUT M.Get()