diff options
author | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2015-01-08 09:20:09 -0500 |
---|---|---|
committer | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2015-01-08 09:20:09 -0500 |
commit | 41483acb1969b24e336b11aaf3bfdc1dbdfe33a8 (patch) | |
tree | 4d79588f62502c52ff47a510a0cf0f409eb77b00 /gawkapi.c | |
parent | 55aefdc29dde7eb585b7a553876313ecceec1d68 (diff) | |
download | egawk-41483acb1969b24e336b11aaf3bfdc1dbdfe33a8.tar.gz egawk-41483acb1969b24e336b11aaf3bfdc1dbdfe33a8.tar.bz2 egawk-41483acb1969b24e336b11aaf3bfdc1dbdfe33a8.zip |
Revert changes to API deferred variable creation, since this should be done at lookup time.
Diffstat (limited to 'gawkapi.c')
-rw-r--r-- | gawkapi.c | 45 |
1 files changed, 4 insertions, 41 deletions
@@ -579,48 +579,11 @@ api_sym_update(awk_ext_id_t id, if (node == NULL) { /* new value to be installed */ if (value->val_type == AWK_ARRAY) { - bool is_deferred; - array_node = awk_value_to_node(value); - /* - * use variable_create instead of install_symbol in - * case this is a deferred variable such as PROCINFO - * or ENVIRON - */ - node = variable_create(estrdup((char *) name, strlen(name)), Node_var_array, & is_deferred); - if (is_deferred) { - /* - * merge the user-supplied elements into the - * already-existing array. Since ENVIRON - * has special array_funcs, we need to retain - * the auto-created array! - */ - unsigned long nel; - NODE **list; - NODE akind; - unsigned long i; - - nel = assoc_length(array_node); - akind.flags = (AINDEX|AVALUE); - list = array_node->alist(array_node, & akind); - for (i = 0; i < nel; i++) { - NODE **aptr; - NODE *elem; - aptr = assoc_lookup(node, list[2*i]); - unref(*aptr); - elem = *aptr = dupnode(list[2*i+1]); - if (elem->type == Node_var_array) - elem->parent_array = node; - if (node->astore != NULL) - (*node->astore)(node, list[2*i]); - unref(list[2*i]); /* alist duped it */ - } - efree(list); - assoc_clear(array_node); - } else { - array_node->vname = node->vname; - *node = *array_node; - } + node = install_symbol(estrdup((char *) name, strlen(name)), + Node_var_array); + array_node->vname = node->vname; + *node = *array_node; freenode(array_node); value->array_cookie = node; /* pass new cookie back to extension */ } else { |