]> gitweb.ps.run Git - toc/blob - test/test.toc
changed example
[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 struct S2 {\r
25   s: char *;\r
26   abc(): S2 { }\r
27   xyz(): S2 { }\r
28 }\r
29 \r
30 func generic1<A>(a1 : A, a2 : A) : A {\r
31   return a1 + a2;\r
32 }\r
33 \r
34 // namespaces can contain everything that\r
35 // the global context can\r
36 \r
37 namespace N1 {\r
38   var v1 : int;\r
39   func f1() : void {\r
40     puts("Hello\n");\r
41   }\r
42   struct S1 {\r
43     test : char *;\r
44   }\r
45   // nested namespaces\r
46   namespace N2 {\r
47     var v1 : int;\r
48     struct S1 {\r
49       i1 : int;\r
50       i2 : int;\r
51       i3 : int;\r
52 \r
53       m1(i: int) : int {\r
54         // implicit 'this' parameter, pointer to containing struct\r
55         this->i3 = this->i1 * this->i2;\r
56 \r
57         // lookup is done hierarchically\r
58         f1(v1); // this is basically N1::N2::f1(N1::N2::v1);\r
59         N1::f1(N1::v1); // the rest becomes exactly what they say\r
60         N2::f1(N2::v1);\r
61         N1::N2::f1();\r
62 \r
63         return this->i1 + this->i2;\r
64       }\r
65     }\r
66 \r
67     func f1() : void {\r
68       // these have the same type\r
69       var s1 : N1::N2::S1;\r
70       var s2 : S1;\r
71 \r
72       s1.m1(123);\r
73     }\r
74   }\r
75 }\r
76 \r
77 func main(argc : int, argv : char**) : int {\r
78   var s1 : N1::N2::S1;\r
79   var s2 : N1::N2::S1;\r
80   var s3 : N1::S1;\r
81   s1.i1 = 123;\r
82   s1.i2 = 456;\r
83   s1.m1(s2.m1(s3.m1(89)));\r
84 \r
85   N1::N2::f1();\r
86 \r
87   // one 'copy' is compiled for every unique instantiation\r
88   var s4 : S1<int, long>;\r
89   s4.t1 = 123;  \r
90   s4.t2 = 456;  \r
91   s4.m1();\r
92 \r
93   generic1<int>(1, 2);\r
94   generic1<double>(3.4, 5.6);\r
95 \r
96   var s: S2;\r
97   s.abc().xyz();\r
98 \r
99   return 0;\r
100 }