summaryrefslogtreecommitdiff
path: root/test.toc
blob: 03ffe28a809c60e799feb0ea5c0f39b0b820e3ff (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

printf ::= #foreign("printf","libc.so.6") fn(#C &"const char", #C ..) #C int;


// NOTE: this doesn't work (e.g. "%%%")
tprintf_valid ::= fn(fmt :: []char, nargs: int) bool {
	if fmt[fmt.len-1] != '\0' {
		return false;
	}
	count := 0;
	for x, i := fmt {
		if x == '%' {
			if i == fmt.len-1 {
				count += 1;
			} elif fmt[i+1] != '%' {
				count += 1;
			} else {
				count -= 1;
			}
		}
	}
	count == nargs
}
	

tprintf ::= fn(fmt :: []char, args: ..) {
	#if !tprintf_valid(fmt, args.len) {
		#error "Invalid printf format";
	}
	f := fmt;
	printf(&f[0], args);
}

main ::= fn() {
	 tprintf("%d %d%%\n\0", 3, 4);
}

main();