aboutsummaryrefslogtreecommitdiff
path: root/examples/learn/16-tagged-enums.zc
blob: ba430f43d05451e32ca839dddb9bc3089bb69fec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
enum shape { circle { int r; }, rect { int w; int h; }, dot };
int area(shape* s) {
	switch (s) {
	case circle(r): return r * r * 3;
	case rect(w, h): return w * h;
	case dot: return 0;
	}
	return -1;
}
fn main() {
	shape* s = shape.circle(3);
	put_n(area(s)); put_c(10);
	free(d*s);
	shape* t = shape.rect(2, 5);
	put_n(area(t)); put_c(10);
	free(d*t);
	return 0;
}