diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2012-06-18 21:13:34 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2012-06-18 21:13:34 +0300 |
commit | 6311c35dd8984a8516802b3cc111c1f411e098fd (patch) | |
tree | ade0dfc8014f8e0fd564de0f91641b60e6cabc82 /gawkapi.c | |
parent | 7eaf540145fa9ed1ffb19196f18124b076bae495 (diff) | |
download | egawk-6311c35dd8984a8516802b3cc111c1f411e098fd.tar.gz egawk-6311c35dd8984a8516802b3cc111c1f411e098fd.tar.bz2 egawk-6311c35dd8984a8516802b3cc111c1f411e098fd.zip |
More API implementation progress.
Diffstat (limited to 'gawkapi.c')
-rw-r--r-- | gawkapi.c | 22 |
1 files changed, 20 insertions, 2 deletions
@@ -405,8 +405,25 @@ api_sym_update(awk_ext_id_t id, const char *name, awk_value_t *value) unref(node->var_value); node->var_value = awk_value_to_node(value); } + return true; + } + + /* if we get here, then it exists already */ + switch (value->val_type) { + case AWK_STRING: + case AWK_NUMBER: + if (node->type == Node_var || node->type == Node_var_new) { + unref(node->var_value); + node->var_value = awk_value_to_node(value); + } else { + return false; + } + break; + + case AWK_ARRAY: + case AWK_UNDEFINED: + return false; /* not allowed */ } - /* FIXME: Handle case where it exists already */ return true; } @@ -420,6 +437,7 @@ static awk_bool_t api_get_array_element(awk_ext_id_t id, awk_array_t a_cookie, const awk_value_t *const index, + awk_valtype_t wanted, awk_value_t *result) { NODE *array = (NODE *) a_cookie; @@ -441,7 +459,7 @@ api_get_array_element(awk_ext_id_t id, if (aptr == NULL) return false; - return node_to_awk_value(*aptr, result, AWK_UNDEFINED); + return node_to_awk_value(*aptr, result, wanted); } /* |