1 #include <stdio.h>
2 #include <string.h>
3 #include <assert.h>
8 "(* Main module *)"
9 "MODULE Test;"
10 "IMPORT Out;"
11 "TYPE"
12 " R1 = POINTER TO R1Desc;"
13 " R1Desc = RECORD a : INTEGER; END;"
14 " R2 = POINTER TO R2Desc;"
15 " R2Desc = RECORD (R1Desc) b : INTEGER; END;"
16 " Y1 = POINTER TO Y1Desc;"
17 " Y1Desc = RECORD END;"
18 ""
19 "VAR"
20 " r1 : R1;"
21 " r2 : R2;"
22 " y1 : Y1;"
23 ""
24 "BEGIN"
25 " NEW(r1);"
26 " NEW(r2);"
27 " NEW(y1);"
28 " r1 := r2;"
29 " Out.Open;"
30 " WITH r1 : R2 DO"
31 " r1.b := 666;"
32 " Out.String('R2 branch');"
33 " | y1 : Y1 DO"
34 " Out.String('Y1 branch');"
35 " ELSE"
36 " Out.String('Something else');"
37 " END;"
38 " Out.Ln;"
39 "END Test."
40 ;
43 "MODULE Out;"
44 " PROCEDURE Open*;"
45 " END Open;"
46 ""
47 " PROCEDURE Char* (ch : CHAR);"
48 " END Char;"
49 ""
50 " PROCEDURE String* (str : ARRAY OF CHAR);"
51 " END String;"
52 ""
53 " PROCEDURE Int*(i, n : LONGINT);"
54 " END Int;"
55 ""
56 " PROCEDURE Real*(x : REAL; n : INTEGER);"
57 " END Real;"
58 ""
59 " PROCEDURE LongReal*(x : LONGREAL; n : INTEGER);"
60 " END LongReal;"
61 ""
62 " PROCEDURE Ln*;"
63 " END Ln;"
64 ""
65 "END Out."
66 ;
73 {
75 {
77 }
79 {
81 }
82 else
83 {
85 }
86 }
91 {
92 }
97 {
102 {
104 }
106 }
111 {
116 {
118 }
120 }
125 {
127 }
130 {
139 }
142 {
145 }
147 int
149 {
155 // init_system_modules();
157 // oberon_generator_dump(ctx, "dump.txt");
159 // start_module();
163 }