44 lines
875 B
Plaintext
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;
|
|
}
|