Files
spl/stage1/test08.spl

44 lines
875 B
Plaintext

#[extern("vm")] fn vm_printf(fmt: *u8, ...) void;
type Point = struct {
x: i32,
y: i32,
type Test = enum {
TestEnum0,
TestEnum1,
}
fn init(x: i32, y: i32) Point {
ret Point { .x = x, .y = y };
}
fn dump(self: *Point) {
vm_printf("Point: %d %d\n", self.x, self.y);
}
}
type Expr = enum {
Int: i32,
Add: struct { left: *Expr, right: *Expr },
fn eval(self: *Expr) i32 {
match self {
.Int(val) => return val,
.Add(left, right) => return eval(left) + eval(right),
}
return 0;
}
}
fn main() void {
var p: Point = Point.init(3, 4);
p.dump();
var expr_l := Expr { .Int = 3 };
var expr_r := Expr { .Int = 4 };
var expr := Expr { .Add = { .left = expr_l, .right = expr_r } };
vm_printf("Expr: %d\n", expr.eval());
ret;
}