]> gitweb.ps.run Git - toc/blob - test/test.toc
add antlr source code and ReadMe
[toc] / test / test.toc
1 // simply declare external functions\r
2 func puts(str : char*) : void;\r
3 \r
4 // global context can contain functions,\r
5 // structs, global variables and namespaces\r
6 var global1 : int;\r
7 var global2 : double = 123.45;\r
8 \r
9 func globalFunc() : void {\r
10   puts("Hello\n");\r
11 }\r
12 \r
13 // structs and functions can be declared generic\r
14 // by providing a list of placeholder typenames\r
15 struct S1<T1, T2> {\r
16   t1: T1 *;\r
17   t2: T1;\r
18 \r
19   m1() : T2 {\r
20     return this->t1 + this->t2;\r
21   }\r
22 }\r
23 \r
24 func generic1<A>(a1 : A, a2 : A) : A {\r
25   return a1 + a2;\r
26 }\r
27 \r
28 // namespaces can contain everything that\r
29 // the global context can\r
30 \r
31 namespace N1 {\r
32   var v1 : int;\r
33   func f1() : void {\r
34     puts("Hello\n");\r
35   }\r
36   struct S1 {\r
37     test : char *;\r
38   }\r
39   // nested namespaces\r
40   namespace N2 {\r
41     var v1 : int;\r
42     struct S1 {\r
43       i1 : int;\r
44       i2 : int;\r
45       i3 : int;\r
46 \r
47       m1(i: int) : int {\r
48         // implicit 'this' parameter, pointer to containing struct\r
49         this->i3 = this->i1 * this->i2;\r
50 \r
51         // lookup is done hierarchically\r
52         f1(v1); // this is basically N1::N2::f1(N1::N2::v1);\r
53         N1::f1(N1::v1); // the rest becomes exactly what they say\r
54         N2::f1(N2::v1);\r
55         N1::N2::f1();\r
56 \r
57         return this->i1 + this->i2;\r
58       }\r
59     }\r
60 \r
61     struct S2 {\r
62       s: char *;\r
63       abc(): S1 {\r
64         var result : S1;\r
65         return result;\r
66       }\r
67     }\r
68 \r
69     func f1() : void {\r
70       // these have the same type\r
71       var s1 : N1::N2::S1;\r
72       var s2 : S1;\r
73 \r
74       s1.m1(123);\r
75     }\r
76   }\r
77 }\r
78 \r
79 struct List<T> {\r
80   array: T *;\r
81   get(index: int): T {\r
82     return this->array[index];\r
83   }\r
84 }\r
85 \r
86 func main(argc : int, argv : char**) : int {\r
87   var s1 : N1::N2::S1;\r
88   var s2 : N1::N2::S1;\r
89   var s3 : N1::S1;\r
90   s1.i1 = 123;\r
91   s1.i2 = 456;\r
92   s1.m1(s2.m1(s3.m1(89)));\r
93 \r
94   N1::N2::f1();\r
95 \r
96   // one 'copy' is compiled for every unique instantiation\r
97   var s4 : S1<int, long>;\r
98   s4.t1 = 123;  \r
99   s4.t2 = 456;  \r
100   s4.m1();\r
101 \r
102   generic1<int>(1, 2);\r
103   generic1<double>(3.4, 5.6);\r
104 \r
105   var s: N1::N2::S2;\r
106   s.abc();\r
107 \r
108   var l1: List<int>;\r
109   l1.get(1);\r
110   \r
111   var i1: int = generic1<int>(1, 2);\r
112 \r
113   return 0;\r
114 }