diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2015-01-07 22:23:19 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2015-01-07 22:23:19 +0200 |
commit | b1f63ac08d7da89ac7e8af4df5ca835527fc5b24 (patch) | |
tree | b92dc911def1558a1681e036621098442fbcbe4f /awkgram.y | |
parent | f70399532bd105c5f42ca040846aa537a8fa27bc (diff) | |
download | egawk-b1f63ac08d7da89ac7e8af4df5ca835527fc5b24.tar.gz egawk-b1f63ac08d7da89ac7e8af4df5ca835527fc5b24.tar.bz2 egawk-b1f63ac08d7da89ac7e8af4df5ca835527fc5b24.zip |
Load PROCINFO and ENVIRON if using extensions.
Diffstat (limited to 'awkgram.y')
-rw-r--r-- | awkgram.y | 16 |
1 files changed, 10 insertions, 6 deletions
@@ -120,6 +120,7 @@ static int lasttok = 0; static bool eof_warned = false; /* GLOBAL: want warning for each file */ static int break_allowed; /* kludge for break */ static int continue_allowed; /* kludge for continue */ +static bool extensions_used = false; /* program uses extensions */ #define END_FILE -1000 #define END_SRC -2000 @@ -272,6 +273,7 @@ source library : FILENAME { + extensions_used = true; if (load_library($1) < 0) YYABORT; efree($1->lextok); @@ -2344,6 +2346,8 @@ do_add_srcfile(enum srctype stype, char *src, char *path, SRCFILE *thisfile) s->prev = thisfile->prev; thisfile->prev->next = s; thisfile->prev = s; + if (stype == SRC_EXTLIB) + extensions_used = true; return s; } @@ -4472,6 +4476,7 @@ static bool is_deferred_variable(const char *name) { struct deferred_variable *dv; + for (dv = deferred_variables; dv != NULL; dv = dv->next) if (strcmp(name, dv->name) == 0) return true; @@ -4513,18 +4518,17 @@ variable(int location, char *name, NODETYPE type) return r; } -/* process_deferred --- if the program uses SYMTAB, load deferred variables */ +/* process_deferred --- if the program uses SYMTAB or extensions, load deferred variables */ static void process_deferred() { struct deferred_variable *dv; - if (! symtab_used) - return; - - for (dv = deferred_variables; dv != NULL; dv = dv->next) { - (void) dv->load_func(); + if (symtab_used || extensions_used) { + for (dv = deferred_variables; dv != NULL; dv = dv->next) { + (void) dv->load_func(); + } } } |