1
0
mirror of https://github.com/janet-lang/janet synced 2024-11-28 11:09:54 +00:00

Handle missing get case.

This commit is contained in:
Andrew Chambers 2019-12-04 13:58:21 +13:00
parent 9ccdab0bc7
commit 9911c90b1d
2 changed files with 8 additions and 1 deletions

View File

@ -229,7 +229,8 @@ Janet janet_get(Janet ds, Janet key) {
return (type->get)(abst, key); return (type->get)(abst, key);
} }
case JANET_ARRAY: case JANET_ARRAY:
case JANET_TUPLE: { case JANET_TUPLE:
case JANET_BUFFER: {
if (!janet_checkint(key)) return janet_wrap_nil(); if (!janet_checkint(key)) return janet_wrap_nil();
int32_t index = janet_unwrap_integer(key); int32_t index = janet_unwrap_integer(key);
if (index < 0) return janet_wrap_nil(); if (index < 0) return janet_wrap_nil();
@ -237,6 +238,10 @@ Janet janet_get(Janet ds, Janet key) {
JanetArray *a = janet_unwrap_array(ds); JanetArray *a = janet_unwrap_array(ds);
if (index >= a->count) return janet_wrap_nil(); if (index >= a->count) return janet_wrap_nil();
return a->data[index]; return a->data[index];
} else if (t == JANET_BUFFER) {
JanetBuffer *b = janet_unwrap_buffer(ds);
if (index >= b->count) return janet_wrap_nil();
return janet_wrap_integer(b->data[index]);
} else { } else {
const Janet *t = janet_unwrap_tuple(ds); const Janet *t = janet_unwrap_tuple(ds);
if (index >= janet_tuple_length(t)) return janet_wrap_nil(); if (index >= janet_tuple_length(t)) return janet_wrap_nil();

View File

@ -55,6 +55,8 @@
(assert (= (get @{} 1) nil) "get nil from empty table") (assert (= (get @{} 1) nil) "get nil from empty table")
(assert (= (get {:boop :bap} :boop) :bap) "get non nil from struct") (assert (= (get {:boop :bap} :boop) :bap) "get non nil from struct")
(assert (= (get @{:boop :bap} :boop) :bap) "get non nil from table") (assert (= (get @{:boop :bap} :boop) :bap) "get non nil from table")
(assert (= (get @"\0" 0) 0) "get non nil from buffer")
(assert (= (get @"\0" 1) nil) "get nil from buffer oob")
(assert (put @{} :boop :bap) "can add to empty table") (assert (put @{} :boop :bap) "can add to empty table")
(assert (put @{1 3} :boop :bap) "can add to non-empty table") (assert (put @{1 3} :boop :bap) "can add to non-empty table")