aboutsummaryrefslogtreecommitdiffstats
path: root/awkgram.c
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2015-01-06 20:17:35 -0500
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2015-01-06 20:17:35 -0500
commitf38a8f801496ea91cef7a8507e2919f6586d0694 (patch)
tree65afc30f5423e623189f381a1cf2ff8a8a023620 /awkgram.c
parent9121c3059288f36e004108e02ed4d826b84604e7 (diff)
downloadegawk-f38a8f801496ea91cef7a8507e2919f6586d0694.tar.gz
egawk-f38a8f801496ea91cef7a8507e2919f6586d0694.tar.bz2
egawk-f38a8f801496ea91cef7a8507e2919f6586d0694.zip
Fix bug in API deferred variable creation and add a test case.
Diffstat (limited to 'awkgram.c')
-rw-r--r--awkgram.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/awkgram.c b/awkgram.c
index 2257ee35..249fdcdf 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -7054,16 +7054,18 @@ is_deferred_variable(const char *name)
/* variable_create --- create a new variable */
NODE *
-variable_create(char *name, NODETYPE type)
+variable_create(char *name, NODETYPE type, bool *is_deferred)
{
struct deferred_variable *dv;
for (dv = deferred_variables; dv != NULL; dv = dv->next) {
if (strcmp(name, dv->name) == 0) {
efree(name);
+ *is_deferred = true;
return (*dv->load_func)();
}
}
+ *is_deferred = false;
return install_symbol(name, type);
}
@@ -7073,6 +7075,7 @@ NODE *
variable(int location, char *name, NODETYPE type)
{
NODE *r;
+ bool is_deferred;
if ((r = lookup(name)) != NULL) {
if (r->type == Node_func || r->type == Node_ext_func )
@@ -7084,7 +7087,7 @@ variable(int location, char *name, NODETYPE type)
return r;
}
/* not found */
- return variable_create(name, type);
+ return variable_create(name, type, & is_deferred);
}
/* process_deferred --- if the program uses SYMTAB, load deferred variables */