Start implementing Tagged Unions

This commit is contained in:
Ginger Bill
2016-09-03 18:18:45 +01:00
parent 11205f968a
commit 7f884ed251
7 changed files with 302 additions and 139 deletions
+10 -52
View File
@@ -3,62 +3,20 @@
#load "game.odin"
main :: proc() {
print_ints :: proc(args: ..int) {
for i := 0; i < len(args); i++ {
print_int(args[i])
nl()
Entity :: type union {
FROG: struct {
jump_height: f32
}
HELICOPTER: struct {
weight: f32
blade_code: int
}
}
// print_ints()
// print_ints(1)
print_ints(1, 2, 3, 4, 5)
// print_int(min(1, 2)); nl()
// print_int(max(1, 2)); nl()
// print_int(abs(-1337)); nl()
e: Entity
f: Entity = Entity.FROG{1};
h: Entity = Entity.HELICOPTER{123, 4};
// a, b, c := 1, 2, -1337
// print_int(min(a, b)); nl()
// print_int(max(a, b)); nl()
// print_int(abs(c) as int); nl()
// nl()
/*
Vec3 :: type struct { x, y, z: f32 }
Entity :: type struct {
using pos: Vec3
name: string
}
Amp :: type struct {
using entity: Entity
jump_height: f32
}
Frog :: type struct {
using amp: Amp
volume: f64
}
f := Frog{};
f.name = "ribbit"
f.jump_height = 1337
e := ^f.entity
parent := e down_cast ^Frog
print_name :: proc(using e: Entity, v: Vec3) {
print_string(name); nl()
print_int(v.x as int); nl()
}
print_f32(f.jump_height); nl()
print_f32(parent.jump_height); nl()
print_name(f, Vec3{1, 2, 3})
print_name(parent, Vec3{3, 2, 1})
*/
}
nl :: proc() { print_nl() }