aboutsummaryrefslogtreecommitdiff
path: root/tests/i/template-unused/lib.cps
blob: 3de8ac311eb35619e80cd15eaff6b707712cecdc (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

TEMPLATE <T>
FUNCTION Identity(Value : T) RETURNS T
    IF Value < Value THEN
        RETURN (T)Value
    ENDIF
    RETURN Value
ENDFUNCTION

TEMPLATE <T, Rest...>
OVERLOAD PROCEDURE Visit(First : T, Others : Rest...)
    OUTPUT Identity<T>(First)
    CALL Visit<Rest...>(Others...)
    Visit<Box<Pair<INTEGER,REAL>>>(Others...)
ENDPROCEDURE

TEMPLATE <T>
CLASS Box
    PRIVATE Value : T
    PUBLIC PROCEDURE NEW(V : T)
        Value <- V
    ENDPROCEDURE
    PUBLIC FUNCTION Get() RETURNS T
        RETURN Value
    ENDFUNCTION
    PUBLIC FUNCTION AsBox(V : Box<T>) RETURNS Box<T>
        RETURN (Box<T>)V
    ENDFUNCTION
ENDCLASS

TEMPLATE <A, B>
CLASS Pair
    Left : A
    Right : B
ENDCLASS

TEMPLATE <T, Rest...>
CLASS Bundle
    PUBLIC PROCEDURE Send(Values : Rest...)
        CALL Visit(Values...)
    ENDPROCEDURE
ENDCLASS

TEMPLATE <T>
PROCEDURE NestedTypes(Value : Box<Box<T>>)
    DECLARE Other : Box<Pair<T,REAL>>
    Other <- NEW Box<Pair<T,REAL>>()
    Value <- (Box<Box<T>>)Value
ENDPROCEDURE