aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-10-02 11:04:17 +0100
committergingerBill <bill@gingerbill.org>2020-10-02 11:04:17 +0100
commit8f28312705781ef6a4ecc3a818c39bbf663e3733 (patch)
tree609ed058ad9416977b69a8b21367ae4c0181eefe
parent3a4f0d85a615111f3ceabd6e17b820337bf4198f (diff)
Fix `pop` behaviour, and improve assert messages by using `#caller_location`
-rw-r--r--core/runtime/core.odin31
1 files 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;
}