+// simply declare external functions\r
func puts(str : char*) : void;\r
\r
+// global context can contain functions,\r
+// structs, global variables and namespaces\r
+var global1 : int;\r
+var global2 : double = 123.45;\r
+\r
+func globalFunc() : void {\r
+ //puts("Hello\n");\r
+}\r
+\r
+// structs and functions can be declared generic\r
+// by providing a list of placeholder typenames\r
+struct S1<T1, T2> {\r
+ t1: T1;\r
+ t2: T1;\r
+\r
+ m1() : T2 {\r
+ return this->t1 + this->t2;\r
+ }\r
+}\r
+\r
+struct S2 {\r
+ s: char *;\r
+ abc(): S2 { }\r
+ xyz(): S2 { }\r
+}\r
+\r
+func generic1<A>(a1 : A, a2 : A) : A {\r
+ return a1 + a2;\r
+}\r
+\r
+// namespaces can contain everything that\r
+// the global context can\r
+\r
namespace N1 {\r
var v1 : int;\r
func f1() : void {\r
struct S1 {\r
test : char *;\r
}\r
- // hallo\r
+ // nested namespaces\r
namespace N2 {\r
- var v1 : int; //buige\r
+ var v1 : int;\r
struct S1 {\r
i1 : int;\r
i2 : int;\r
i3 : int;\r
\r
m1(i: int) : int {\r
+ // implicit 'this' parameter, pointer to containing struct\r
this->i3 = this->i1 * this->i2;\r
\r
- f1(v1);\r
- N1::f1(N1::v1);\r
+ // lookup is done hierarchically\r
+ f1(v1); // this is basically N1::N2::f1(N1::N2::v1);\r
+ N1::f1(N1::v1); // the rest becomes exactly what they say\r
N2::f1(N2::v1);\r
N1::N2::f1();\r
\r
}\r
\r
func f1() : void {\r
+ // these have the same type\r
var s1 : N1::N2::S1;\r
var s2 : S1;\r
\r
}\r
}\r
\r
-struct S1<T> {\r
- t1: T;\r
- t2: T;\r
-\r
- m1() : T {\r
- return this->t1 + this->t2;\r
- }\r
-}\r
-\r
-struct S2 {\r
- s: char *;\r
- abc(): S2 { }\r
- xyz(): S2 { }\r
-}\r
-\r
-func generic1<A>(a1 : A, a2 : A) : A {\r
- return a1 + a2;\r
-}\r
-\r
func main(argc : int, argv : char**) : int {\r
var s1 : N1::N2::S1;\r
var s2 : N1::N2::S1;\r
\r
N1::N2::f1();\r
\r
- var s4 : S1<int>;\r
+ // one 'copy' is compiled for every unique instantiation\r
+ var s4 : S1<int, long>;\r
s4.t1 = 123; \r
s4.t2 = 456; \r
s4.m1();\r
+++ /dev/null
-var abc: int;\r
-var def: int;\r
-var ghi: int;\r
-\r
-func f1<A, B> (a : int, b : int, cs: int[]) : int {\r
- var i1 : int;\r
- var s1 : S1;\r
- if a != i1 {\r
- var i2 : int = 987;\r
- return i2;\r
- }\r
- print(s1.i1);\r
- print(s1.a1[0]);\r
- return 133;\r
-}\r
-\r
-struct S1<T> {\r
- i1 : int;\r
- i2 : int;\r
- a1 : int[10];\r
- a2 : int[10]*;\r
- a2 : int[];\r
-\r
- m1<I>() : void {\r
- while i1 < i2 {\r
- i1 = m2(i1);\r
-\r
- i2 = i1 + i2 * (i2 - 45) + 4;\r
-\r
- print(12345);\r
- }\r
- }\r
-\r
- m2<A>(i: int) : int {\r
- var j : int = 0;\r
- while j < 10 {\r
- print(a1[j]);\r
- }\r
- }\r
-}
\ No newline at end of file