diff options
author | Stephen Dolan <mu@netsoc.tcd.ie> | 2012-09-03 16:16:14 +0100 |
---|---|---|
committer | Stephen Dolan <mu@netsoc.tcd.ie> | 2012-09-03 16:16:14 +0100 |
commit | a8c3648ca5ebcb9c824f3df86a4c2fbe57c09d6d (patch) | |
tree | 33f575305b74b29a9fe655b5140b10b906485c37 /c/jv.c | |
parent | d895d39ba973f7296429aac77c1ad6bc8d7341b4 (diff) |
JV_KIND_INVALID values to represent failed lookups, etc + various tests.
Diffstat (limited to 'c/jv.c')
-rw-r--r-- | c/jv.c | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -37,10 +37,15 @@ jv_kind jv_get_kind(jv x) { return x.kind; } +static const jv JV_INVALID = {JV_KIND_INVALID, {0}}; static const jv JV_NULL = {JV_KIND_NULL, {0}}; static const jv JV_FALSE = {JV_KIND_FALSE, {0}}; static const jv JV_TRUE = {JV_KIND_TRUE, {0}}; +jv jv_invalid() { + return JV_INVALID; +} + jv jv_true() { return JV_TRUE; } @@ -671,7 +676,13 @@ jv jv_object() { jv jv_object_get(jv object, jv key) { assert(jv_get_kind(object) == JV_KIND_OBJECT); assert(jv_get_kind(key) == JV_KIND_STRING); - jv val = jv_copy(*jvp_object_read(&object.val.complex, jvp_string_ptr(&key.val.complex))); + jv* slot = jvp_object_read(&object.val.complex, jvp_string_ptr(&key.val.complex)); + jv val; + if (slot) { + val = jv_copy(*slot); + } else { + val = jv_invalid(); + } jv_free(object); jv_free(key); return val; |