diff options
author | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2015-01-06 20:17:35 -0500 |
---|---|---|
committer | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2015-01-06 20:17:35 -0500 |
commit | f38a8f801496ea91cef7a8507e2919f6586d0694 (patch) | |
tree | 65afc30f5423e623189f381a1cf2ff8a8a023620 /awkgram.c | |
parent | 9121c3059288f36e004108e02ed4d826b84604e7 (diff) | |
download | egawk-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.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -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 */ |