aboutsummaryrefslogtreecommitdiffstats
path: root/gawkapi.c
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2015-01-08 09:41:19 -0500
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2015-01-08 09:41:19 -0500
commitf8fecb69346cbcd774a73a49322aeb8ddea73e44 (patch)
treed364c944782ef4092e3599f49b20e5738660b324 /gawkapi.c
parent41483acb1969b24e336b11aaf3bfdc1dbdfe33a8 (diff)
downloadegawk-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.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/gawkapi.c b/gawkapi.c
index f8d04986..0213936a 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -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 */