aboutsummaryrefslogtreecommitdiffstats
path: root/awkgram.y
diff options
context:
space:
mode:
Diffstat (limited to 'awkgram.y')
-rw-r--r--awkgram.y16
1 files changed, 10 insertions, 6 deletions
diff --git a/awkgram.y b/awkgram.y
index 267cf077..b43e305d 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -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();
+ }
}
}