From 8f28312705781ef6a4ecc3a818c39bbf663e3733 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2020 11:04:17 +0100 Subject: [PATCH] Fix `pop` behaviour, and improve assert messages by using `#caller_location` --- core/runtime/core.odin | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/core/runtime/core.odin b/core/runtime/core.odin index 6bbebae9b..15bd66930 100644 --- a/core/runtime/core.odin +++ b/core/runtime/core.odin @@ -599,31 +599,28 @@ remove_range :: proc(array: ^$D/[dynamic]$T, lo, hi: int, loc := #caller_locatio @builtin -pop :: proc(array: ^$T/[dynamic]$E) -> E { - if len(array) == 0 { - return E{}; - } - assert(len(array) > 0); - res := #no_bounds_check array[len(array)-1]; +pop :: proc(array: ^$T/[dynamic]$E, loc := #caller_location) -> (res: E) #no_bounds_check { + assert(len(array) > 0, "", loc); + res = array[len(array)-1]; (^Raw_Dynamic_Array)(array).len -= 1; return res; } @builtin -pop_safe :: proc(array: ^$T/[dynamic]$E) -> (E, bool) { +pop_safe :: proc(array: ^$T/[dynamic]$E) -> (res: E, ok: bool) #no_bounds_check { if len(array) == 0 { - return E{}, false; + return; } - res := #no_bounds_check array[len(array)-1]; + res, ok = array[len(array)-1], true; (^Raw_Dynamic_Array)(array).len -= 1; - return res, true; + return; } @builtin -pop_front :: proc(array: ^$T/[dynamic]$E) -> E #no_bounds_check { - assert(len(array) > 0); - res := array[0]; +pop_front :: proc(array: ^$T/[dynamic]$E, loc := #caller_location) -> (res: E) #no_bounds_check { + assert(len(array) > 0, "", loc); + res = array[0]; if len(array) > 1 { copy(array[0:], array[1:]); } @@ -632,16 +629,16 @@ pop_front :: proc(array: ^$T/[dynamic]$E) -> E #no_bounds_check { } @builtin -pop_front_safe :: proc(array: ^$T/[dynamic]$E) -> (E, bool) #no_bounds_check { +pop_front_safe :: proc(array: ^$T/[dynamic]$E) -> (res: E, ok: bool) #no_bounds_check { if len(array) == 0 { - return E{}, false; + return; } - res := array[0]; + res, ok = array[0], true; if len(array) > 1 { copy(array[0:], array[1:]); } (^Raw_Dynamic_Array)(array).len -= 1; - return res, true; + return; }