aboutsummaryrefslogtreecommitdiff
path: root/examples/learn/16-tagged-enums.zc
blob: 27d23c36f8523860c1e42ce3ba995000a8deb945 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace;
include rt;
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);
	rt.put_n(area(s)); rt.put_c(10);
	rt.free(s);
	shape* t = shape.rect(2, 5);
	rt.put_n(area(t)); rt.put_c(10);
	rt.free(t);
}