Match statements; Type System change (Type_Record for all sum and product types)

This commit is contained in:
Ginger Bill
2016-09-01 20:38:44 +01:00
parent ff6e21cb87
commit fa09d805e2
16 changed files with 1172 additions and 622 deletions
+26 -8
View File
@@ -3,6 +3,26 @@
#load "game.odin"
main :: proc() {
match x := "1"; x {
case "1":
print_string("1!\n")
case "2":
print_string("2!\n")
if true {
break
}
case "3", "4":
print_string("3 or 4!\n")
fallthrough
default:
print_string("default!\n")
}
nl()
/*
Vec3 :: type struct { x, y, z: f32 }
Entity :: type struct {
using pos: Vec3
@@ -19,11 +39,11 @@ main :: proc() {
}
f := Frog{};
f.name = "ribbit";
f.jump_height = 1337;
f.name = "ribbit"
f.jump_height = 1337
e := ^f.entity;
parent := e down_cast ^Frog;
e := ^f.entity
parent := e down_cast ^Frog
print_name :: proc(using e: Entity, v: Vec3) {
print_string(name); nl()
@@ -35,10 +55,8 @@ main :: proc() {
print_name(f, Vec3{1, 2, 3})
print_name(parent, Vec3{3, 2, 1})
*/
}
nl :: proc() #inline { print_nl() }
nl :: proc() { print_nl() }
+5 -4
View File
@@ -365,13 +365,14 @@ __default_allocator_proc :: proc(allocator_data: rawptr, mode: AllocationMode,
size, alignment: int,
old_memory: rawptr, old_size: int, flags: u64) -> rawptr {
using AllocationMode
if mode == ALLOC {
match mode {
case ALLOC:
return heap_alloc(size)
} else if mode == RESIZE {
case RESIZE:
return default_resize_align(old_memory, old_size, size, alignment)
} else if mode == DEALLOC {
case DEALLOC:
heap_free(old_memory)
} else if mode == DEALLOC_ALL {
case DEALLOC_ALL:
// NOTE(bill): Does nothing
}