diff options
author | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2015-01-08 09:41:19 -0500 |
---|---|---|
committer | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2015-01-08 09:41:19 -0500 |
commit | f8fecb69346cbcd774a73a49322aeb8ddea73e44 (patch) | |
tree | d364c944782ef4092e3599f49b20e5738660b324 /gawkapi.c | |
parent | 41483acb1969b24e336b11aaf3bfdc1dbdfe33a8 (diff) | |
download | egawk-f8fecb69346cbcd774a73a49322aeb8ddea73e44.tar.gz egawk-f8fecb69346cbcd774a73a49322aeb8ddea73e44.tar.bz2 egawk-f8fecb69346cbcd774a73a49322aeb8ddea73e44.zip |
When an extension calls sym_lookup on a deferred variable, it should always succeed.
Diffstat (limited to 'gawkapi.c')
-rw-r--r-- | gawkapi.c | 14 |
1 files changed, 12 insertions, 2 deletions
@@ -486,6 +486,16 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted) return ret; } +static NODE * +lookup_deferred(const char *name) +{ + NODE *node; + + if ((node = lookup(name)) != NULL) + return node; + return deferred_create(name); +} + /* * Symbol table access: * - No access to special variables (NF, etc.) @@ -516,7 +526,7 @@ api_sym_lookup(awk_ext_id_t id, if ( name == NULL || *name == '\0' || result == NULL - || (node = lookup(name)) == NULL) + || (node = lookup_deferred(name)) == NULL) return awk_false; if (is_off_limits_var(name)) /* a built-in variable */ @@ -574,7 +584,7 @@ api_sym_update(awk_ext_id_t id, return awk_false; } - node = lookup(name); + node = lookup_deferred(name); if (node == NULL) { /* new value to be installed */ |