aboutsummaryrefslogtreecommitdiff
path: root/examples/learn/34-defer.zc
blob: 10e46e19645c644e8eef9bd9b8f440d679d16618 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace;
include rt;
fn say(n) { rt.put_n(n); rt.put_c(32); return 0; }
int work(int n) {
	int* p = rt.new(int);
	defer rt.free(p);
	defer say(100);
	*p = n * 2;
	say(*p);
	if (n > 2) return *p + 1;
	say(1);
	return 0;
}
fn main() {
	for (let i = 0; i < 4; i++) {
		defer { say(i); rt.put_c(10); }
		if (i == 1) continue;
		say(work(i));
	}
}