1TYPE float64 IS FLOAT;
2TYPE bool IS BOOLEAN {false, true};
3TYPE int32 IS SIGNED (32);
4
5PUBLIC FUNCTION fadd (a : float64; b : float64) RETURN float64
6DECLARE
7BEGIN
8  RETURN a +# b;
9END;
10
11PUBLIC FUNCTION fsub (a : float64; b : float64) RETURN float64
12DECLARE
13BEGIN
14  RETURN a -# b;
15END;
16
17PUBLIC FUNCTION fmul (a : float64; b : float64) RETURN float64
18DECLARE
19BEGIN
20  RETURN a *# b;
21END;
22
23PUBLIC FUNCTION fdiv (a : float64; b : float64) RETURN float64
24DECLARE
25BEGIN
26  RETURN a /# b;
27END;
28
29PUBLIC FUNCTION fneg (a : float64) RETURN float64
30DECLARE
31BEGIN
32  RETURN -a;
33END;
34
35PUBLIC FUNCTION fabs (a : float64) RETURN float64
36DECLARE
37BEGIN
38  RETURN ABS a;
39END;
40
41PUBLIC FUNCTION fcall1 (a : float64; b : float64) RETURN float64
42DECLARE
43BEGIN
44  RETURN fadd (fmul (a, b), fneg (b));
45END;
46
47PUBLIC FUNCTION fgt (a : float64; b : float64) RETURN bool
48DECLARE
49BEGIN
50  RETURN bool'(a >= b);
51END;
52
53PUBLIC FUNCTION mainint () RETURN int32
54DECLARE
55  LOCAL VAR l : int32;
56  LOCAL VAR r : int32;
57BEGIN
58  l:= 1;
59  r := 2;
60  IF bool'(l < r) THEN
61    RETURN int32'(0);
62  ELSE
63    RETURN int32'(1);
64  END IF;
65END;
66
67PRIVATE CONSTANT fone : float64;
68CONSTANT fone := 1.0;
69
70--  Return 0 in case of error.
71PUBLIC FUNCTION main () RETURN int32
72DECLARE
73  LOCAL VAR lf : float64;
74  LOCAL VAR rf : float64;
75BEGIN
76  lf := 1.0;
77  rf := 2.0;
78  IF bool'(lf >= rf) THEN
79    RETURN int32'(0);
80  END IF;
81  lf := fadd (lf, fone);
82  IF bool'(lf /= rf) THEN
83    RETURN int32'(0);
84  END IF;
85
86  lf := fone;
87  lf := -lf;
88  IF bool'(lf > 0.0) THEN
89    RETURN int32'(0);
90  END IF;
91
92  lf := ABS lf;
93  IF bool'(lf /= fone) THEN
94    RETURN int32'(0);
95  END IF;
96
97  lf := 2.0;
98  IF bool'(fdiv (lf, fone) /= lf) THEN
99    RETURN int32'(0);
100  END IF;
101
102  RETURN int32'(1);
103END;
104
105