summaryrefslogtreecommitdiff
path: root/test.toc
blob: 4b21d20fc45e7a13f5f2593d0afa55ac91ef4f69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import ::= fn(x :: []char) &Package {
	p ::= pkg x;
	p_ptr ::= new(Package);
	*p_ptr = p;
	p_ptr
};

cputs :: fn(&char) i32 = #foreign "puts", "libc.so.6";

tocputs ::= fn(s: []char) i32 {
	 cstr := new(char, s.len + 1);
	 each i := 0..s.len-1 {
	 	 cstr[i] = s[i];
	 }
	 cstr[s.len] = '\0';
	 ret := cputs(&cstr[0]);
	 del(cstr);
	 ret
};

foo ::= fn() i32 {
	tocputs("Hi");
	tocputs("Hello");
	tocputs("Hey")
};

malloc :: fn(u64) &u8 = #foreign "malloc", "libc.so.6";

sqrt :: fn(f64) f64 = #foreign "sqrt", "libm.so.6";
cos :: fn(f64) f64 = #foreign "cos", "libm.so.6";
sin :: fn(f64) f64 = #foreign "sin", "libm.so.6";

stderr :: &u8 = #foreign "stderr";
fprintf :: fn(&u8, &char) = #foreign "fprintf";


main ::= fn() {
	 x ::= foo();
	 // y ::= malloc(10);
	 sq2 ::= sqrt(2);
	 cospi ::= cos(3.14159);
	 sinpi ::= sin(3.14159);
	 foo();
	 s := "Hello!\n\0";
	 fprintf(stderr, &s[0]);
};