diff --git a/Changelog b/Changelog index d23ed88..385859f 100644 --- a/Changelog +++ b/Changelog @@ -1,5 +1,12 @@ Changelog for libmawk ~~~~~~~~~~~~~~~~~~~~~ + +libmawk 1.0.2 (released: 2019-06-22, r1318) + [core] -Fix: C function calls with uninitialized variables: not sure if array or not, delay resolving it until all the script is parsed so we see if the symbol is an array + [build] -Fix: missing make uninstall + [doc] -Add: example (7libmawk) + [doc] -Fix: manual header sections match manual file name sections (submitted by Bdale) + libmawk 1.0.1 (released: 2019-02-26, r1307) [build] -Fix: don't daisy-chain so symlinks (debian patch applied) [build] -Add: install (3) and (7) manual pages diff --git a/Release_notes b/Release_notes index fa6d4df..f602e88 100644 --- a/Release_notes +++ b/Release_notes @@ -1,6 +1,6 @@ -Release notes for libmawk 1.0.1 +Release notes for libmawk 1.0.2 -Minor bugfix release; main focus is on fixing all packaging -related bugs learned in 1.0.0 and NaN related bugs on less common -architectures. +Minor bugfix release; fixes C function call with uninitialized +variables and make uninstall. + diff --git a/doc/TODO b/doc/TODO index 96264eb..e1a3f18 100644 --- a/doc/TODO +++ b/doc/TODO @@ -1,3 +1,6 @@ +packging: + - manual page headers use the wrong section + 000. full doc rewrite Features: diff --git a/scconfig/hooks.c b/scconfig/hooks.c index 77cf5ca..cfab11f 100644 --- a/scconfig/hooks.c +++ b/scconfig/hooks.c @@ -7,7 +7,7 @@ #define VER1 "1" #define VER2 "0" -#define VER3 "1" +#define VER3 "2" static void help(void) { diff --git a/scconfig/src/default/arg.c b/scconfig/src/default/arg.c index a50f48a..b8f1558 100644 --- a/scconfig/src/default/arg.c +++ b/scconfig/src/default/arg.c @@ -38,16 +38,16 @@ {"pkg-config-zap","/arg/sys/pkg-config-zap",NULL, "ignore pkg-config results by this regex pattern"}, /* wildcard rules for icl() control */ - {"^ldflags/", NULL, import_icl, NULL}, - {"^cflags/", NULL, import_icl, NULL}, - {"^includes/", NULL, import_icl, NULL}, - {"^prefix/", NULL, import_icl, NULL}, + {"^ldflags/", NULL, import_icl, "force LDFLAGS for a node"}, + {"^cflags/", NULL, import_icl, "force CFLAGS for a node"}, + {"^includes/", NULL, import_icl, "force #includes for a node"}, + {"^prefix/", NULL, import_icl, "force using prefix path for detecting the node"}, /* the followings are autoconf compatibility translations */ - {"CC", "/arg/cc/cc", NULL, "Force using a C compiler (command line)"}, - {"CFLAGS", "/arg/cc/cflags", NULL, "Force using a CFLAGS for C compilation"}, - {"LDFLAGS", "/arg/cc/ldflags", NULL, "Force using a LDFLAGS for linking"}, - {"LDL", "/arg/libs/ldl", NULL, "Force using -ldl string"}, + {"CC", "/arg/cc/cc", NULL, "Force using a C compiler (command line)"}, + {"CFLAGS", "/arg/cc/cflags", NULL, "Force using a CFLAGS for C compilation"}, + {"LDFLAGS", "/arg/cc/ldflags", NULL, "Force using a LDFLAGS for linking"}, + {"LDL", "/arg/libs/ldl", NULL, "Force using -ldl string"}, {"gpmi-prefix", "/arg/gpmi/prefix", NULL, NULL}, {NULL, NULL, NULL, NULL} @@ -69,23 +69,45 @@ while(*key == '-') key++; value = str_chr(key, '='); found = 0; + if (value != NULL) { *value = '\0'; value++; - /* Look in the argument translate table */ - for(a = main_argument_table; a->arg != NULL; a++) { - if (((a->arg[0] == '^') && (strncmp(a->arg+1, key, strlen(a->arg+1)) == 0)) || (strcmp(a->arg, key) == 0)) { - found = 1; - if (a->callback != NULL) { - if (a->callback(key, value) != 0) { - error("Processing argument '%s' failed in the callback\n", argv[n]); - abort(); + + if (strcmp(key, "without") == 0) { + char *tmp, *end; + if (*value != '/') { + const char **r, *roots[] = {"target", "host", "runtime", NULL}; + for(r = roots; *r != NULL; r++) { + tmp = str_concat("/", "/arg/without", *r, value, NULL); + put(tmp, strue); + free(tmp); + } + } + else { + tmp = str_concat("/", "/arg/without", value+1, NULL); + put(tmp, strue); + free(tmp); + } + found = 1; + } + else { + /* Look in the argument translate table */ + for(a = main_argument_table; a->arg != NULL; a++) { + if (((a->arg[0] == '^') && (strncmp(a->arg+1, key, strlen(a->arg+1)) == 0)) || (strcmp(a->arg, key) == 0)) { + found = 1; + if (a->callback != NULL) { + if (a->callback(key, value) != 0) { + error("Processing argument '%s' failed in the callback\n", argv[n]); + abort(); + } } + if (a->path != NULL) + put(a->path, value); } - if (a->path != NULL) - put(a->path, value); } } + /* Look in known deps table or /arg */ if (found == 0) { if ((is_dep_known(key)) || (strncmp(key, "/arg/", 5) == 0)) { @@ -94,6 +116,7 @@ } } } + if (found == 0) { if (custom_arg(key, value) == 0) { error("Unknown argument '%s'\n", key); @@ -104,3 +127,27 @@ if (tainted) exit(1); } + +void help_default_args(FILE *f, const char *prefix) +{ + argtbl_t *a; + + if (prefix == NULL) + prefix = ""; + + fprintf(f, "%sscconfig generic command line arguments:\n", prefix); + for(a = main_argument_table; a->arg != NULL; a++) { + char *tmp; + if (a->help == NULL) + continue; + if (*a->arg == '^') { + tmp = str_concat("", a->arg+1, "...=...", NULL); + fprintf(f, "%s --%-22s %s\n", prefix, tmp, a->help); + } + else { + tmp = str_concat("", a->arg, "=...", NULL); + fprintf(f, "%s --%-22s %s\n", prefix, tmp, a->help); + } + free(tmp); + } +} diff --git a/scconfig/src/default/arg.h b/scconfig/src/default/arg.h index f94eb31..a249c09 100644 --- a/scconfig/src/default/arg.h +++ b/scconfig/src/default/arg.h @@ -1,5 +1,7 @@ #ifndef SCC_ARG_H #define SCC_ARG_H + +#include typedef struct { char *arg; @@ -13,6 +15,7 @@ void process_args(int argc, char *argv[]); +void help_default_args(FILE *f, const char *prefix); /* main.c: */ diff --git a/scconfig/src/default/dep.c b/scconfig/src/default/dep.c index f1028a8..1cc8aa9 100644 --- a/scconfig/src/default/dep.c +++ b/scconfig/src/default/dep.c @@ -34,6 +34,7 @@ static ht_t *deps = NULL; +static const char *USER_WITHOUT = ""; /* find name_ and decide if it was a wildcard request; NOTE: there are requests and servers, both can be wildcard independently. @@ -48,8 +49,8 @@ fn_wrap_t *get_wrap(const char *name_, int *wild, int *missing) { fn_wrap_t *w; - char *name, *sep; - int len; + char *name, *sep, *tmp; + int len, n; len = strlen(name_); *wild = name_[len-1] == '*'; @@ -73,6 +74,23 @@ } *missing = 1; + /* check for global --without disable */ + tmp = str_concat("", "/arg/without", db_cwd, "/", name_, NULL); + sep = tmp + strlen(tmp) - 1; + for(n = 0; n < 4; n++) { + const char *d = get(tmp); + if (sep < tmp+14) + break; + if (istrue(d)) { + free(tmp); + return USER_WITHOUT; + } + while(*sep != '/') + sep--; + *sep = '\0'; + } + free(tmp); + /* try full match first */ w = ht_get(deps, name_); if (w != NULL) @@ -118,6 +136,16 @@ if (get(name) == NULL) { w = get_wrap(name, &wild, &missing); + if (w == USER_WITHOUT) { + if (fatal) { + error("Node %s is required by the software but disabled by the user using --without\n", name); + abort(); + } + else { + logprintf(logdepth, "(disabled using --without)"); + return 1; + } + } if (!missing) return 0; if ((w == NULL) || (w->fn == NULL)) { diff --git a/src/example_apps/10_run/app.c b/src/example_apps/10_run/app.c index a62edc7..227b82a 100644 --- a/src/example_apps/10_run/app.c +++ b/src/example_apps/10_run/app.c @@ -2,8 +2,9 @@ #include /* - Purpose: load and run a script using the command line syntax of mawk but - using a virtual stdin buffer instead of the real stdin. + Purpose: load and run a script using the command + line syntax of mawk but using a virtual + stdin buffer instead of the real stdin. Run: ./app -f test.awk */ @@ -21,8 +22,8 @@ /* feed in some data on the virtual stdin */ libmawk_append_input(m, "This is a\nmultiline test input\nfor the artificial input buffer.\n"); - /* run the MAIN part of the script as long as there's data in the buffer of - the virtual stdin */ + /* run the MAIN part of the script as long as + there's data in the buffer of the virtual stdin */ libmawk_run_main(m); /* run END and free the context */ diff --git a/src/libmawk/Makefile b/src/libmawk/Makefile index ff4f4e2..e0692b1 100644 --- a/src/libmawk/Makefile +++ b/src/libmawk/Makefile @@ -126,7 +126,7 @@ $(MKDIR) $(MAN7DIR) $(MKDIR) $(INCDIR) $(MKDIR) $(LIBARCHDIR) - $(CP) $(PWD)/lmawk $(BINDIR) + $(CP) $(PWD)/lmawk $(BINDIR)/lmawk $(CHMODX) $(BINDIR)/lmawk $(CP) $(PWD)/man/lmawk.1 $(MAWKMAN) $(CP) $(PWD)/man/libmawk_append_input.3libmawk $(MAN3DIR)/libmawk_append_input.3libmawk @@ -149,6 +149,11 @@ for h in $(IHEADERS); do $(CP) $(PWD)/$$h $(INCDIR)/$$h; done $(CP) $(PWD)/../libmawk.h $(INCDIR)/../libmawk.h +uninstall: + $(RM) $(BINDIR)/lmawk $(MAWKMAN) $(MAN3DIR)/libmawk_append_input.3libmawk $(MAN3DIR)/libmawk_call_function.3libmawk $(MAN3DIR)/libmawk_cell_destroy.3libmawk $(MAN3DIR)/libmawk_get_var.3libmawk $(MAN3DIR)/libmawk_initialize.3libmawk $(MAN3DIR)/libmawk_initialize_stage.3libmawk $(MAN3DIR)/libmawk_register_function.3libmawk $(MAN3DIR)/libmawk_run_main.3libmawk $(MAN3DIR)/libmawk_set_cell.3libmawk $(MAN3DIR)/libmawk_uninitialize.3libmawk $(MAN7DIR)/example.7libmawk $(LIBARCHDIR)/libmawk.so.$(SOVER1).$(SOVER2).$(SOVER3) $(LIBARCHDIR)/libmawk.so.$(SOVER1).$(SOVER2) $(LIBARCHDIR)/libmawk.so.$(SOVER1) $(LIBARCHDIR)/libmawk.so + for h in $(IHEADERS); do $(RM) $(INCDIR)/$$h; done + $(RM) $(INCDIR)/../libmawk.h + install: make install_ CP="cp" @@ -156,6 +161,7 @@ make install_ CP="ln -s" + rexp/rexp.o: rexp/rexp.c $(CC) -c $(CFLAGS) -o rexp/rexp.o rexp/rexp.c @@ -172,8 +178,6 @@ $(CC) -c $(CFLAGS) -o rexp/rexp3.o rexp/rexp3.c $(NUM_OBJ): $(NUM_SRC) num.h - -linstall: install init_nocomp.o: init_nocomp.c $(CC) -c $(CFLAGS) -o init_nocomp.o init_nocomp.c diff --git a/src/libmawk/fcall.c b/src/libmawk/fcall.c index 53c0417..6cc15de 100644 --- a/src/libmawk/fcall.c +++ b/src/libmawk/fcall.c @@ -142,8 +142,71 @@ return 1; } +static INST *update_start(mawk_state_t *MAWK, register FCALL_REC *p) +{ + switch (p->call_scope) { + case SCOPE_MAIN: + p->call_start = MAWK->main_start; + break; + + case SCOPE_BEGIN: + p->call_start = MAWK->begin_start; + break; + + case SCOPE_END: + p->call_start = MAWK->end_start; + break; + + case SCOPE_FUNCT: + p->call_start = p->call->code; + break; + } + + return p->call_start; +} + /* function calls whose arg types need checking are stored on this list */ + +/* Corner case: a c function call with an argument referring to a global + variable that has not yet been seen. In this case we should create that + var, but because we can't look into the C code, we don't know if it's an + array or not. So instead we delay resolving the symbol until the whole + script is parsed and expect one of 3 cases: + - the script references the var elsewhere as non-array -> it's not an array + - the script references the var elsewhere as array -> it's an array + - no reference elsewhere -> safe to pass NIL without even creating it + (but throw an error because this is very likely a bug in the script) +*/ +static void ccall_finalize_call(mawk_state_t *MAWK, register FCALL_REC *p) +{ + CA_REC *n; + INST *start = update_start(MAWK, p); + + for(n = p->arg_list; n != NULL; n = n->link) { + if ((n->type != ST_NONE) || (n->sym_p == NULL)) /* care only about unbound globals */ + continue; + + switch(n->sym_p->type) { + case ST_NONE: + mawk_errmsg(MAWK, 0, "uninitialized variable in C call %s()", p->callee->name); + break; + + case ST_VAR: + start[n->call_offset + 1].ptr = (PTR)n->sym_p->stval.cp; + break; + + case ST_ARRAY: + start[n->call_offset].op = A_PUSHA; + start[n->call_offset + 1].ptr = (PTR)n->sym_p->stval.array; + break; + + default: + mawk_errmsg(MAWK, 0, "internal error: unknown argument symbol type %d in C call %s()", n->sym_p->type, p->callee->name); + break; + } + } +} /* on first pass thru the resolve list @@ -161,12 +224,13 @@ q->link = p; while (p) { if (!p->callee->code) { - /* callee never defined */ + /* callee never defined - could be a C call*/ + ccall_finalize_call(MAWK, p); if (!MAWK->suppress_undefined_function_warning) mawk_compile_error(MAWK, "function %s never defined", p->callee->name); /* delete p from list */ q->link = p->link; - /* don't worry about freeing memory, we'll exit soon */ + MAWK_ZFREE(MAWK, p); } /* note p->arg_list starts with last argument */ else if (!p->arg_list /* nothing to do */ || @@ -178,23 +242,7 @@ else { /* keep p and set call_start */ q = p; - switch (p->call_scope) { - case SCOPE_MAIN: - p->call_start = MAWK->main_start; - break; - - case SCOPE_BEGIN: - p->call_start = MAWK->begin_start; - break; - - case SCOPE_END: - p->call_start = MAWK->end_start; - break; - - case SCOPE_FUNCT: - p->call_start = p->call->code; - break; - } + update_start(MAWK, p); } p = q->link; } @@ -287,6 +335,24 @@ } } +void mawk_check_ccall(mawk_state_t *MAWK, FBLOCK *callee, int call_scope, int move_level, FBLOCK *call, CA_REC *arg_list, unsigned line_no) +{ + FCALL_REC *p; + + p = MAWK_ZMALLOC(MAWK, FCALL_REC); + p->callee = callee; + p->call_scope = call_scope; + p->move_level = move_level; + p->call = call; + p->arg_list = arg_list; + p->arg_cnt_checked = 1; + p->line_no = line_no; + /* add to resolve list */ + p->link = MAWK->resolve_list; + MAWK->resolve_list = p; + +} + /* code_pop() has just moved some code. If this code contains a function call, it might need to be relocated on the diff --git a/src/libmawk/man/example.7libmawk b/src/libmawk/man/example.7libmawk index 0f59471..2313f7f 100644 --- a/src/libmawk/man/example.7libmawk +++ b/src/libmawk/man/example.7libmawk @@ -46,4 +46,38 @@ The following example application creates a single context to demonstrate all the above mentioned functionality. .nf +#include +#include + +/* + Purpose: load and run a script using the command + line syntax of mawk but using a virtual + stdin buffer instead of the real stdin. + Run: ./app -f test.awk +*/ + +int main(int argc, char **argv) +{ + mawk_state_t *m; + + /* init a context, execute BEGIN */ + m = libmawk_initialize(argc, argv); + if (m == NULL) { + fprintf(stderr, "libmawk_initialize failed, exiting\\n"); + return 1; + } + + /* feed in some data on the virtual stdin */ + libmawk_append_input(m, "This is a\\nmultiline test input\\nfor the artificial input buffer.\\n"); + + /* run the MAIN part of the script as long as + there's data in the buffer of the virtual stdin */ + libmawk_run_main(m); + + /* run END and free the context */ + libmawk_uninitialize(m); + + return 0; +} + .fi diff --git a/src/libmawk/man/gendoc.sh b/src/libmawk/man/gendoc.sh index 3b8974f..68e82b5 100755 --- a/src/libmawk/man/gendoc.sh +++ b/src/libmawk/man/gendoc.sh @@ -13,7 +13,11 @@ libmawk_uninitialize.3libmawk lmawk.1" -cat input/example1 ../../testapp/main.c input/example2 > example.7libmawk +( + cat input/example1 + sed "s/\\\\/\\\\\\\\/g;s/\t/ /g" < ../../example_apps/10_run/app.c + cat input/example2 +) > example.7libmawk for n in $PAGES do diff --git a/src/libmawk/man/libmawk_append_input.3libmawk b/src/libmawk/man/libmawk_append_input.3libmawk index 5cf3762..e2a21d3 100644 --- a/src/libmawk/man/libmawk_append_input.3libmawk +++ b/src/libmawk/man/libmawk_append_input.3libmawk @@ -12,7 +12,7 @@ .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" -.TH LIBMAWK_APPEND_INPUT 3 2009-08-10 "libmawk" "libmawk manual" +.TH LIBMAWK_APPEND_INPUT 3libmawk 2009-08-10 "libmawk" "libmawk manual" .SH NAME libmawk_append_input \- append a string to an input buffer .SH SYNOPSIS diff --git a/src/libmawk/man/libmawk_call_function.3libmawk b/src/libmawk/man/libmawk_call_function.3libmawk index e4faf65..f30aa75 100644 --- a/src/libmawk/man/libmawk_call_function.3libmawk +++ b/src/libmawk/man/libmawk_call_function.3libmawk @@ -12,7 +12,7 @@ .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" -.TH LIBMAWK_CALL_FUNCTION 3 2009-08-10 "libmawk" "libmawk manual" +.TH LIBMAWK_CALL_FUNCTION 3libmawk 2009-08-10 "libmawk" "libmawk manual" .SH NAME libmawk_call_function \- call an user defined (script) function .SH SYNOPSIS diff --git a/src/libmawk/man/libmawk_cell_destroy.3libmawk b/src/libmawk/man/libmawk_cell_destroy.3libmawk index 4135a0a..322d6d7 100644 --- a/src/libmawk/man/libmawk_cell_destroy.3libmawk +++ b/src/libmawk/man/libmawk_cell_destroy.3libmawk @@ -12,7 +12,7 @@ .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" -.TH LIBMAWK_CELL_DESTROY 3 2009-08-12 "libmawk" "libmawk manual" +.TH LIBMAWK_CELL_DESTROY 3libmawk 2009-08-12 "libmawk" "libmawk manual" .SH NAME libmawk_cell_destroy \- free all memory associated with a cell .SH SYNOPSIS diff --git a/src/libmawk/man/libmawk_get_var.3libmawk b/src/libmawk/man/libmawk_get_var.3libmawk index f8ed301..1d61dd7 100644 --- a/src/libmawk/man/libmawk_get_var.3libmawk +++ b/src/libmawk/man/libmawk_get_var.3libmawk @@ -12,7 +12,7 @@ .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" -.TH LIBMAWK_GET_VAR 3 2009-08-12 "libmawk" "libmawk manual" +.TH LIBMAWK_GET_VAR 3libmawk 2009-08-12 "libmawk" "libmawk manual" .SH NAME libmawk_get_var \- returns a pointer to a mawk variable .SH SYNOPSIS diff --git a/src/libmawk/man/libmawk_initialize.3libmawk b/src/libmawk/man/libmawk_initialize.3libmawk index 7394acc..604683e 100644 --- a/src/libmawk/man/libmawk_initialize.3libmawk +++ b/src/libmawk/man/libmawk_initialize.3libmawk @@ -12,7 +12,7 @@ .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" -.TH LIBMAWK_INITIALIZE 3 2009-08-10 "libmawk" "libmawk manual" +.TH LIBMAWK_INITIALIZE 3libmawk 2009-08-10 "libmawk" "libmawk manual" .SH NAME libmawk_initialize \- create a new libmawk context .SH SYNOPSIS diff --git a/src/libmawk/man/libmawk_initialize_stage.3libmawk b/src/libmawk/man/libmawk_initialize_stage.3libmawk index 70f1497..4cdf214 100644 --- a/src/libmawk/man/libmawk_initialize_stage.3libmawk +++ b/src/libmawk/man/libmawk_initialize_stage.3libmawk @@ -12,7 +12,7 @@ .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" -.TH LIBMAWK_INITIALIZE_STAGE 3 2009-08-10 "libmawk" "libmawk manual" +.TH LIBMAWK_INITIALIZE_STAGE 3libmawk 2009-08-10 "libmawk" "libmawk manual" .SH NAME libmawk_initialize_stage* \- create a new libmawk context in 3 stages .SH SYNOPSIS diff --git a/src/libmawk/man/libmawk_register_function.3libmawk b/src/libmawk/man/libmawk_register_function.3libmawk index 296f0c2..9e2621d 100644 --- a/src/libmawk/man/libmawk_register_function.3libmawk +++ b/src/libmawk/man/libmawk_register_function.3libmawk @@ -12,7 +12,7 @@ .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" -.TH LIBMAWK_REGISTER_FUNCTION 3 2009-08-12 "libmawk" "libmawk manual" +.TH LIBMAWK_REGISTER_FUNCTION 3libmawk 2009-08-12 "libmawk" "libmawk manual" .SH NAME libmawk_register_function \- registers a C function with a callback .SH SYNOPSIS diff --git a/src/libmawk/man/libmawk_run_main.3libmawk b/src/libmawk/man/libmawk_run_main.3libmawk index 674316d..7071cd2 100644 --- a/src/libmawk/man/libmawk_run_main.3libmawk +++ b/src/libmawk/man/libmawk_run_main.3libmawk @@ -12,7 +12,7 @@ .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" -.TH LIBMAWK_RUN_MAIN 3 2009-08-10 "libmawk" "libmawk manual" +.TH LIBMAWK_RUN_MAIN 3libmawk 2009-08-10 "libmawk" "libmawk manual" .SH NAME libmawk_run_main \- run main parts of a script .SH SYNOPSIS diff --git a/src/libmawk/man/libmawk_set_cell.3libmawk b/src/libmawk/man/libmawk_set_cell.3libmawk index 775f293..45605fc 100644 --- a/src/libmawk/man/libmawk_set_cell.3libmawk +++ b/src/libmawk/man/libmawk_set_cell.3libmawk @@ -12,7 +12,7 @@ .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" -.TH LIBMAWK_SET_CELL 3 2009-08-10 "libmawk" "libmawk manual" +.TH LIBMAWK_SET_CELL 3libmawk 2009-08-10 "libmawk" "libmawk manual" .SH NAME libmawk_set_cell \- set the value of a mawk cell. .SH SYNOPSIS diff --git a/src/libmawk/man/libmawk_uninitialize.3libmawk b/src/libmawk/man/libmawk_uninitialize.3libmawk index 520cc8a..a3b18b4 100644 --- a/src/libmawk/man/libmawk_uninitialize.3libmawk +++ b/src/libmawk/man/libmawk_uninitialize.3libmawk @@ -12,7 +12,7 @@ .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" -.TH LIBMAWK_UNINITIALIZE 3 2009-08-10 "libmawk" "libmawk manual" +.TH LIBMAWK_UNINITIALIZE 3libmawk 2009-08-10 "libmawk" "libmawk manual" .SH NAME libmawk_uninitialize \- destroy a libmawk context .SH SYNOPSIS diff --git a/src/libmawk/parse.c b/src/libmawk/parse.c index d0280af..a1e78f0 100644 --- a/src/libmawk/parse.c +++ b/src/libmawk/parse.c @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.2. */ +/* A Bison parser, made by GNU Bison 3.3.2. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.2" +#define YYBISON_VERSION "3.3.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -67,8 +71,8 @@ #define yynerrs Mawk_nerrs -/* Copy the first part of user declarations. */ -#line 86 "parse.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 86 "parse.y" /* yacc.c:337 */ #include #include "mawk.h" @@ -118,13 +122,16 @@ #define CODE_FE_PUSHA() mawk_code_ptr->ptr = (PTR) 0 ; code1(FE_PUSHA) -#line 122 "y.tab.c" /* yacc.c:339 */ - +#line 126 "y.tab.c" /* yacc.c:337 */ # ifndef YY_NULLPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif # else -# define YY_NULLPTR 0 +# define YY_NULLPTR ((void*)0) # endif # endif @@ -311,10 +318,10 @@ /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE YYSTYPE; + union YYSTYPE { -#line 136 "parse.y" /* yacc.c:355 */ +#line 136 "parse.y" /* yacc.c:352 */ mawk_cell_t *cp ; SYMTAB *stp ; @@ -327,8 +334,10 @@ int ival ; PTR ptr ; -#line 331 "y.tab.c" /* yacc.c:355 */ +#line 338 "y.tab.c" /* yacc.c:352 */ }; + +typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif @@ -339,9 +348,7 @@ #endif /* !YY_MAWK_Y_TAB_H_INCLUDED */ -/* Copy the second part of user declarations. */ - -#line 345 "y.tab.c" /* yacc.c:358 */ + #ifdef short # undef short @@ -362,13 +369,13 @@ #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else -typedef unsigned short int yytype_uint16; +typedef unsigned short yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else -typedef short int yytype_int16; +typedef short yytype_int16; #endif #ifndef YYSIZE_T @@ -380,7 +387,7 @@ # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif @@ -416,15 +423,6 @@ # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) #endif -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) -# else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) -# endif -#endif - /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) @@ -432,7 +430,7 @@ # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ @@ -594,16 +592,16 @@ /* YYNSTATES -- Number of states. */ #define YYNSTATES 360 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 333 +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ + as returned by yylex. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -663,8 +661,8 @@ 861, 862, 868, 872, 879, 881, 905, 912, 935, 938, 941, 944, 949, 956, 962, 967, 972, 979, 983, 983, 983, 985, 989, 997, 1016, 1017, 1021, 1026, 1034, 1042, - 1061, 1084, 1091, 1092, 1095, 1101, 1114, 1126, 1138, 1147, - 1149, 1164, 1166, 1173, 1182, 1188, 1196 + 1061, 1084, 1091, 1092, 1095, 1101, 1114, 1126, 1137, 1148, + 1150, 1165, 1167, 1174, 1183, 1189, 1197 }; #endif @@ -1174,22 +1172,22 @@ #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (MAWK, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (MAWK, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -1229,38 +1227,38 @@ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, mawk_state_t *MAWK) +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, mawk_state_t *MAWK) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); YYUSE (MAWK); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif YYUSE (yytype); } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, mawk_state_t *MAWK) +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, mawk_state_t *MAWK) { - YYFPRINTF (yyoutput, "%s %s (", + YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep, MAWK); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yytype, yyvaluep, MAWK); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -1294,7 +1292,7 @@ static void yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, mawk_state_t *MAWK) { - unsigned long int yylno = yyrline[yyrule]; + unsigned long yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", @@ -1305,7 +1303,7 @@ YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + &yyvsp[(yyi + 1) - (yynrhs)] , MAWK); YYFPRINTF (stderr, "\n"); } @@ -1409,7 +1407,10 @@ case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -1427,7 +1428,7 @@ if (! yyres) return yystrlen (yystr); - return yystpcpy (yyres, yystr) - yyres; + return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); } # endif @@ -1505,10 +1506,10 @@ yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -1520,6 +1521,7 @@ case N: \ yyformat = S; \ break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -1531,9 +1533,10 @@ { YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -1664,23 +1667,31 @@ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yynewstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + *yyssp = (yytype_int16) yystate; if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow + YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); + +# if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into @@ -1696,14 +1707,10 @@ &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); - yyss = yyss1; yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -1719,22 +1726,22 @@ goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + (unsigned long) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ YYDPRINTF ((stderr, "Entering state %d\n", yystate)); @@ -1742,12 +1749,12 @@ YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -1820,7 +1827,7 @@ /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -1841,51 +1848,51 @@ switch (yyn) { case 7: -#line 223 "parse.y" /* yacc.c:1646 */ +#line 223 "parse.y" /* yacc.c:1652 */ { /* this do nothing action removes a vacuous warning from Bison */ } -#line 1849 "y.tab.c" /* yacc.c:1646 */ +#line 1856 "y.tab.c" /* yacc.c:1652 */ break; case 10: -#line 232 "parse.y" /* yacc.c:1646 */ +#line 232 "parse.y" /* yacc.c:1652 */ { mawk_be_setup(MAWK, MAWK->scope = SCOPE_BEGIN) ; } -#line 1855 "y.tab.c" /* yacc.c:1646 */ +#line 1862 "y.tab.c" /* yacc.c:1652 */ break; case 11: -#line 235 "parse.y" /* yacc.c:1646 */ +#line 235 "parse.y" /* yacc.c:1652 */ { switch_code_to_main(MAWK) ; } -#line 1861 "y.tab.c" /* yacc.c:1646 */ +#line 1868 "y.tab.c" /* yacc.c:1652 */ break; case 12: -#line 238 "parse.y" /* yacc.c:1646 */ +#line 238 "parse.y" /* yacc.c:1652 */ { mawk_be_setup(MAWK, MAWK->scope = SCOPE_END) ; } -#line 1867 "y.tab.c" /* yacc.c:1646 */ +#line 1874 "y.tab.c" /* yacc.c:1652 */ break; case 13: -#line 241 "parse.y" /* yacc.c:1646 */ +#line 241 "parse.y" /* yacc.c:1652 */ { switch_code_to_main(MAWK) ; } -#line 1873 "y.tab.c" /* yacc.c:1646 */ +#line 1880 "y.tab.c" /* yacc.c:1652 */ break; case 14: -#line 244 "parse.y" /* yacc.c:1646 */ +#line 244 "parse.y" /* yacc.c:1652 */ { mawk_code_jmp(MAWK, _JZ, (INST*)0) ; } -#line 1879 "y.tab.c" /* yacc.c:1646 */ +#line 1886 "y.tab.c" /* yacc.c:1652 */ break; case 15: -#line 247 "parse.y" /* yacc.c:1646 */ +#line 247 "parse.y" /* yacc.c:1652 */ { mawk_patch_jmp(MAWK, mawk_code_ptr ) ; } -#line 1885 "y.tab.c" /* yacc.c:1646 */ +#line 1892 "y.tab.c" /* yacc.c:1652 */ break; case 16: -#line 251 "parse.y" /* yacc.c:1646 */ +#line 251 "parse.y" /* yacc.c:1652 */ { INST *p1 = CDP((yyvsp[-1].start)) ; int len ; @@ -1901,225 +1908,225 @@ p1 = CDP((yyvsp[-1].start)) ; p1[2].op = mawk_code_ptr - (p1+1) ; } -#line 1905 "y.tab.c" /* yacc.c:1646 */ +#line 1912 "y.tab.c" /* yacc.c:1652 */ break; case 17: -#line 267 "parse.y" /* yacc.c:1646 */ +#line 267 "parse.y" /* yacc.c:1652 */ { code1(_RANGE_STOP) ; } -#line 1911 "y.tab.c" /* yacc.c:1646 */ +#line 1918 "y.tab.c" /* yacc.c:1652 */ break; case 18: -#line 270 "parse.y" /* yacc.c:1646 */ +#line 270 "parse.y" /* yacc.c:1652 */ { INST *p1 = CDP((yyvsp[-5].start)) ; p1[3].op = CDP((yyvsp[0].start)) - (p1+1) ; p1[4].op = mawk_code_ptr - (p1+1) ; } -#line 1922 "y.tab.c" /* yacc.c:1646 */ +#line 1929 "y.tab.c" /* yacc.c:1652 */ break; case 19: -#line 281 "parse.y" /* yacc.c:1646 */ +#line 281 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-1].start) ; } -#line 1928 "y.tab.c" /* yacc.c:1646 */ +#line 1935 "y.tab.c" /* yacc.c:1652 */ break; case 20: -#line 283 "parse.y" /* yacc.c:1646 */ +#line 283 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; /* does nothing won't be mawk_executed */ MAWK->print_flag = MAWK->getline_flag = MAWK->paren_cnt = 0 ; yyerrok ; } -#line 1936 "y.tab.c" /* yacc.c:1646 */ +#line 1943 "y.tab.c" /* yacc.c:1652 */ break; case 22: -#line 290 "parse.y" /* yacc.c:1646 */ +#line 290 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; code1(_PUSHINT) ; code1(0) ; code2(MAWK, _PRINT, mawk_f2d(mawk_bi_print)) ; } -#line 1945 "y.tab.c" /* yacc.c:1646 */ +#line 1952 "y.tab.c" /* yacc.c:1652 */ break; case 26: -#line 302 "parse.y" /* yacc.c:1646 */ +#line 302 "parse.y" /* yacc.c:1652 */ { code1(_POP) ; } -#line 1951 "y.tab.c" /* yacc.c:1646 */ +#line 1958 "y.tab.c" /* yacc.c:1652 */ break; case 27: -#line 304 "parse.y" /* yacc.c:1646 */ +#line 304 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; } -#line 1957 "y.tab.c" /* yacc.c:1646 */ +#line 1964 "y.tab.c" /* yacc.c:1652 */ break; case 28: -#line 306 "parse.y" /* yacc.c:1646 */ +#line 306 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; MAWK->print_flag = MAWK->getline_flag = 0 ; MAWK->paren_cnt = 0 ; yyerrok ; } -#line 1967 "y.tab.c" /* yacc.c:1646 */ +#line 1974 "y.tab.c" /* yacc.c:1652 */ break; case 29: -#line 312 "parse.y" /* yacc.c:1646 */ +#line 312 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; mawk_BC_insert(MAWK, 'B', mawk_code_ptr+1) ; code2(MAWK, _JMP, 0) /* don't use mawk_code_jmp ! */ ; } -#line 1974 "y.tab.c" /* yacc.c:1646 */ +#line 1981 "y.tab.c" /* yacc.c:1652 */ break; case 30: -#line 315 "parse.y" /* yacc.c:1646 */ +#line 315 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; mawk_BC_insert(MAWK, 'C', mawk_code_ptr+1) ; code2(MAWK, _JMP, 0) ; } -#line 1981 "y.tab.c" /* yacc.c:1646 */ +#line 1988 "y.tab.c" /* yacc.c:1652 */ break; case 31: -#line 318 "parse.y" /* yacc.c:1646 */ +#line 318 "parse.y" /* yacc.c:1652 */ { if ( MAWK->scope != SCOPE_FUNCT ) mawk_compile_error(MAWK, "return outside function body") ; } -#line 1989 "y.tab.c" /* yacc.c:1646 */ +#line 1996 "y.tab.c" /* yacc.c:1652 */ break; case 32: -#line 322 "parse.y" /* yacc.c:1646 */ +#line 322 "parse.y" /* yacc.c:1652 */ { if ( MAWK->scope != SCOPE_MAIN ) mawk_compile_error(MAWK, "improper use of next" ) ; (yyval.start) = mawk_code_offset ; code1(_NEXT) ; } -#line 1999 "y.tab.c" /* yacc.c:1646 */ +#line 2006 "y.tab.c" /* yacc.c:1652 */ break; case 36: -#line 333 "parse.y" /* yacc.c:1646 */ +#line 333 "parse.y" /* yacc.c:1652 */ { code1(_ASSIGN) ; } -#line 2005 "y.tab.c" /* yacc.c:1646 */ +#line 2012 "y.tab.c" /* yacc.c:1652 */ break; case 37: -#line 334 "parse.y" /* yacc.c:1646 */ +#line 334 "parse.y" /* yacc.c:1652 */ { code1(_ADD_ASG) ; } -#line 2011 "y.tab.c" /* yacc.c:1646 */ +#line 2018 "y.tab.c" /* yacc.c:1652 */ break; case 38: -#line 335 "parse.y" /* yacc.c:1646 */ +#line 335 "parse.y" /* yacc.c:1652 */ { code1(_SUB_ASG) ; } -#line 2017 "y.tab.c" /* yacc.c:1646 */ +#line 2024 "y.tab.c" /* yacc.c:1652 */ break; case 39: -#line 336 "parse.y" /* yacc.c:1646 */ +#line 336 "parse.y" /* yacc.c:1652 */ { code1(_MUL_ASG) ; } -#line 2023 "y.tab.c" /* yacc.c:1646 */ +#line 2030 "y.tab.c" /* yacc.c:1652 */ break; case 40: -#line 337 "parse.y" /* yacc.c:1646 */ +#line 337 "parse.y" /* yacc.c:1652 */ { code1(_DIV_ASG) ; } -#line 2029 "y.tab.c" /* yacc.c:1646 */ +#line 2036 "y.tab.c" /* yacc.c:1652 */ break; case 41: -#line 338 "parse.y" /* yacc.c:1646 */ +#line 338 "parse.y" /* yacc.c:1652 */ { code1(_MOD_ASG) ; } -#line 2035 "y.tab.c" /* yacc.c:1646 */ +#line 2042 "y.tab.c" /* yacc.c:1652 */ break; case 42: -#line 339 "parse.y" /* yacc.c:1646 */ +#line 339 "parse.y" /* yacc.c:1652 */ { code1(_POW_ASG) ; } -#line 2041 "y.tab.c" /* yacc.c:1646 */ +#line 2048 "y.tab.c" /* yacc.c:1652 */ break; case 43: -#line 340 "parse.y" /* yacc.c:1646 */ +#line 340 "parse.y" /* yacc.c:1652 */ { code1(_ASSIGN_ARR) ; } -#line 2047 "y.tab.c" /* yacc.c:1646 */ +#line 2054 "y.tab.c" /* yacc.c:1652 */ break; case 44: -#line 341 "parse.y" /* yacc.c:1646 */ +#line 341 "parse.y" /* yacc.c:1652 */ { code1(_ADD_ASG_ARR) ; } -#line 2053 "y.tab.c" /* yacc.c:1646 */ +#line 2060 "y.tab.c" /* yacc.c:1652 */ break; case 45: -#line 342 "parse.y" /* yacc.c:1646 */ +#line 342 "parse.y" /* yacc.c:1652 */ { code1(_SUB_ASG_ARR) ; } -#line 2059 "y.tab.c" /* yacc.c:1646 */ +#line 2066 "y.tab.c" /* yacc.c:1652 */ break; case 46: -#line 343 "parse.y" /* yacc.c:1646 */ +#line 343 "parse.y" /* yacc.c:1652 */ { code1(_MUL_ASG_ARR) ; } -#line 2065 "y.tab.c" /* yacc.c:1646 */ +#line 2072 "y.tab.c" /* yacc.c:1652 */ break; case 47: -#line 344 "parse.y" /* yacc.c:1646 */ +#line 344 "parse.y" /* yacc.c:1652 */ { code1(_DIV_ASG_ARR) ; } -#line 2071 "y.tab.c" /* yacc.c:1646 */ +#line 2078 "y.tab.c" /* yacc.c:1652 */ break; case 48: -#line 345 "parse.y" /* yacc.c:1646 */ +#line 345 "parse.y" /* yacc.c:1652 */ { code1(_MOD_ASG_ARR) ; } -#line 2077 "y.tab.c" /* yacc.c:1646 */ +#line 2084 "y.tab.c" /* yacc.c:1652 */ break; case 49: -#line 346 "parse.y" /* yacc.c:1646 */ +#line 346 "parse.y" /* yacc.c:1652 */ { code1(_POW_ASG_ARR) ; } -#line 2083 "y.tab.c" /* yacc.c:1646 */ +#line 2090 "y.tab.c" /* yacc.c:1652 */ break; case 50: -#line 347 "parse.y" /* yacc.c:1646 */ +#line 347 "parse.y" /* yacc.c:1652 */ { code1(_EQ) ; } -#line 2089 "y.tab.c" /* yacc.c:1646 */ +#line 2096 "y.tab.c" /* yacc.c:1652 */ break; case 51: -#line 348 "parse.y" /* yacc.c:1646 */ +#line 348 "parse.y" /* yacc.c:1652 */ { code1(_NEQ) ; } -#line 2095 "y.tab.c" /* yacc.c:1646 */ +#line 2102 "y.tab.c" /* yacc.c:1652 */ break; case 52: -#line 349 "parse.y" /* yacc.c:1646 */ +#line 349 "parse.y" /* yacc.c:1652 */ { code1(_LT) ; } -#line 2101 "y.tab.c" /* yacc.c:1646 */ +#line 2108 "y.tab.c" /* yacc.c:1652 */ break; case 53: -#line 350 "parse.y" /* yacc.c:1646 */ +#line 350 "parse.y" /* yacc.c:1652 */ { code1(_LTE) ; } -#line 2107 "y.tab.c" /* yacc.c:1646 */ +#line 2114 "y.tab.c" /* yacc.c:1652 */ break; case 54: -#line 351 "parse.y" /* yacc.c:1646 */ +#line 351 "parse.y" /* yacc.c:1652 */ { code1(_GT) ; } -#line 2113 "y.tab.c" /* yacc.c:1646 */ +#line 2120 "y.tab.c" /* yacc.c:1652 */ break; case 55: -#line 352 "parse.y" /* yacc.c:1646 */ +#line 352 "parse.y" /* yacc.c:1652 */ { code1(_GTE) ; } -#line 2119 "y.tab.c" /* yacc.c:1646 */ +#line 2126 "y.tab.c" /* yacc.c:1652 */ break; case 56: -#line 355 "parse.y" /* yacc.c:1646 */ +#line 355 "parse.y" /* yacc.c:1652 */ { INST *p3 = CDP((yyvsp[0].start)) ; @@ -2145,152 +2152,152 @@ if ( !(yyvsp[-1].ival) ) code1(_NOT) ; } -#line 2149 "y.tab.c" /* yacc.c:1646 */ +#line 2156 "y.tab.c" /* yacc.c:1652 */ break; case 57: -#line 383 "parse.y" /* yacc.c:1646 */ +#line 383 "parse.y" /* yacc.c:1652 */ { code1(_TEST) ; mawk_code_jmp(MAWK, _LJNZ, (INST*)0) ; } -#line 2157 "y.tab.c" /* yacc.c:1646 */ +#line 2164 "y.tab.c" /* yacc.c:1652 */ break; case 58: -#line 387 "parse.y" /* yacc.c:1646 */ +#line 387 "parse.y" /* yacc.c:1652 */ { code1(_TEST) ; mawk_patch_jmp(MAWK, mawk_code_ptr) ; } -#line 2163 "y.tab.c" /* yacc.c:1646 */ +#line 2170 "y.tab.c" /* yacc.c:1652 */ break; case 59: -#line 390 "parse.y" /* yacc.c:1646 */ +#line 390 "parse.y" /* yacc.c:1652 */ { code1(_TEST) ; mawk_code_jmp(MAWK, _LJZ, (INST*)0) ; } -#line 2171 "y.tab.c" /* yacc.c:1646 */ +#line 2178 "y.tab.c" /* yacc.c:1652 */ break; case 60: -#line 394 "parse.y" /* yacc.c:1646 */ +#line 394 "parse.y" /* yacc.c:1652 */ { code1(_TEST) ; mawk_patch_jmp(MAWK, mawk_code_ptr) ; } -#line 2177 "y.tab.c" /* yacc.c:1646 */ +#line 2184 "y.tab.c" /* yacc.c:1652 */ break; case 61: -#line 396 "parse.y" /* yacc.c:1646 */ +#line 396 "parse.y" /* yacc.c:1652 */ { mawk_code_jmp(MAWK, _JZ, (INST*)0) ; } -#line 2183 "y.tab.c" /* yacc.c:1646 */ +#line 2190 "y.tab.c" /* yacc.c:1652 */ break; case 62: -#line 397 "parse.y" /* yacc.c:1646 */ +#line 397 "parse.y" /* yacc.c:1652 */ { mawk_code_jmp(MAWK, _JMP, (INST*)0) ; } -#line 2189 "y.tab.c" /* yacc.c:1646 */ +#line 2196 "y.tab.c" /* yacc.c:1652 */ break; case 63: -#line 399 "parse.y" /* yacc.c:1646 */ +#line 399 "parse.y" /* yacc.c:1652 */ { mawk_patch_jmp(MAWK, mawk_code_ptr) ; mawk_patch_jmp(MAWK, CDP((yyvsp[0].start))) ; } -#line 2195 "y.tab.c" /* yacc.c:1646 */ +#line 2202 "y.tab.c" /* yacc.c:1652 */ break; case 65: -#line 404 "parse.y" /* yacc.c:1646 */ +#line 404 "parse.y" /* yacc.c:1652 */ { code1(_CAT) ; } -#line 2201 "y.tab.c" /* yacc.c:1646 */ +#line 2208 "y.tab.c" /* yacc.c:1652 */ break; case 66: -#line 408 "parse.y" /* yacc.c:1646 */ +#line 408 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; code2(MAWK, _PUSHD, (yyvsp[0].ptr)) ; } -#line 2207 "y.tab.c" /* yacc.c:1646 */ +#line 2214 "y.tab.c" /* yacc.c:1652 */ break; case 67: -#line 410 "parse.y" /* yacc.c:1646 */ +#line 410 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; code2(MAWK, _PUSHS, (yyvsp[0].ptr)) ; } -#line 2213 "y.tab.c" /* yacc.c:1646 */ +#line 2220 "y.tab.c" /* yacc.c:1652 */ break; case 68: -#line 412 "parse.y" /* yacc.c:1646 */ +#line 412 "parse.y" /* yacc.c:1652 */ { check_var(MAWK, (yyvsp[0].stp)) ; (yyval.start) = mawk_code_offset ; if ( is_local((yyvsp[0].stp)) ) { mawk_code2op(MAWK, L_PUSHI, (yyvsp[0].stp)->offset) ; } else code2(MAWK, _PUSHI, (yyvsp[0].stp)->stval.cp) ; } -#line 2224 "y.tab.c" /* yacc.c:1646 */ +#line 2231 "y.tab.c" /* yacc.c:1652 */ break; case 69: -#line 420 "parse.y" /* yacc.c:1646 */ +#line 420 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-1].start) ; } -#line 2230 "y.tab.c" /* yacc.c:1646 */ +#line 2237 "y.tab.c" /* yacc.c:1652 */ break; case 70: -#line 424 "parse.y" /* yacc.c:1646 */ +#line 424 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; code2(MAWK, _MATCH0, (yyvsp[0].ptr)) ; } -#line 2236 "y.tab.c" /* yacc.c:1646 */ +#line 2243 "y.tab.c" /* yacc.c:1652 */ break; case 71: -#line 427 "parse.y" /* yacc.c:1646 */ +#line 427 "parse.y" /* yacc.c:1652 */ { code1(_ADD) ; } -#line 2242 "y.tab.c" /* yacc.c:1646 */ +#line 2249 "y.tab.c" /* yacc.c:1652 */ break; case 72: -#line 428 "parse.y" /* yacc.c:1646 */ +#line 428 "parse.y" /* yacc.c:1652 */ { code1(_SUB) ; } -#line 2248 "y.tab.c" /* yacc.c:1646 */ +#line 2255 "y.tab.c" /* yacc.c:1652 */ break; case 73: -#line 429 "parse.y" /* yacc.c:1646 */ +#line 429 "parse.y" /* yacc.c:1652 */ { code1(_MUL) ; } -#line 2254 "y.tab.c" /* yacc.c:1646 */ +#line 2261 "y.tab.c" /* yacc.c:1652 */ break; case 74: -#line 430 "parse.y" /* yacc.c:1646 */ +#line 430 "parse.y" /* yacc.c:1652 */ { code1(_DIV) ; } -#line 2260 "y.tab.c" /* yacc.c:1646 */ +#line 2267 "y.tab.c" /* yacc.c:1652 */ break; case 75: -#line 431 "parse.y" /* yacc.c:1646 */ +#line 431 "parse.y" /* yacc.c:1652 */ { code1(_MOD) ; } -#line 2266 "y.tab.c" /* yacc.c:1646 */ +#line 2273 "y.tab.c" /* yacc.c:1652 */ break; case 76: -#line 432 "parse.y" /* yacc.c:1646 */ +#line 432 "parse.y" /* yacc.c:1652 */ { code1(_POW) ; } -#line 2272 "y.tab.c" /* yacc.c:1646 */ +#line 2279 "y.tab.c" /* yacc.c:1652 */ break; case 77: -#line 434 "parse.y" /* yacc.c:1646 */ +#line 434 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[0].start) ; code1(_NOT) ; } -#line 2278 "y.tab.c" /* yacc.c:1646 */ +#line 2285 "y.tab.c" /* yacc.c:1652 */ break; case 78: -#line 436 "parse.y" /* yacc.c:1646 */ +#line 436 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[0].start) ; code1(_UPLUS) ; } -#line 2284 "y.tab.c" /* yacc.c:1646 */ +#line 2291 "y.tab.c" /* yacc.c:1652 */ break; case 79: -#line 438 "parse.y" /* yacc.c:1646 */ +#line 438 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[0].start) ; code1(_UMINUS) ; } -#line 2290 "y.tab.c" /* yacc.c:1646 */ +#line 2297 "y.tab.c" /* yacc.c:1652 */ break; case 81: -#line 443 "parse.y" /* yacc.c:1646 */ +#line 443 "parse.y" /* yacc.c:1652 */ { check_var(MAWK, (yyvsp[-1].stp)) ; (yyval.start) = mawk_code_offset ; mawk_code_address((yyvsp[-1].stp)) ; @@ -2298,73 +2305,73 @@ if ( (yyvsp[0].ival) == '+' ) code1(_POST_INC) ; else code1(_POST_DEC) ; } -#line 2302 "y.tab.c" /* yacc.c:1646 */ +#line 2309 "y.tab.c" /* yacc.c:1652 */ break; case 82: -#line 451 "parse.y" /* yacc.c:1646 */ +#line 451 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[0].start) ; if ( (yyvsp[-1].ival) == '+' ) code1(_PRE_INC) ; else code1(_PRE_DEC) ; } -#line 2311 "y.tab.c" /* yacc.c:1646 */ +#line 2318 "y.tab.c" /* yacc.c:1652 */ break; case 83: -#line 456 "parse.y" /* yacc.c:1646 */ +#line 456 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[0].start) ; if ( (yyvsp[-1].ival) == '+' ) code1(_PRE_INC_ARR) ; else code1(_PRE_DEC_ARR) ; } -#line 2320 "y.tab.c" /* yacc.c:1646 */ +#line 2327 "y.tab.c" /* yacc.c:1652 */ break; case 84: -#line 463 "parse.y" /* yacc.c:1646 */ +#line 463 "parse.y" /* yacc.c:1652 */ { if ((yyvsp[0].ival) == '+' ) code1(F_POST_INC ) ; else code1(F_POST_DEC) ; } -#line 2328 "y.tab.c" /* yacc.c:1646 */ +#line 2335 "y.tab.c" /* yacc.c:1652 */ break; case 85: -#line 467 "parse.y" /* yacc.c:1646 */ +#line 467 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[0].start) ; if ( (yyvsp[-1].ival) == '+' ) code1(F_PRE_INC) ; else code1( F_PRE_DEC) ; } -#line 2337 "y.tab.c" /* yacc.c:1646 */ +#line 2344 "y.tab.c" /* yacc.c:1652 */ break; case 86: -#line 474 "parse.y" /* yacc.c:1646 */ +#line 474 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; check_var(MAWK, (yyvsp[0].stp)) ; mawk_code_address((yyvsp[0].stp)) ; } -#line 2346 "y.tab.c" /* yacc.c:1646 */ +#line 2353 "y.tab.c" /* yacc.c:1652 */ break; case 87: -#line 482 "parse.y" /* yacc.c:1646 */ +#line 482 "parse.y" /* yacc.c:1652 */ { (yyval.ival) = 0 ; } -#line 2352 "y.tab.c" /* yacc.c:1646 */ +#line 2359 "y.tab.c" /* yacc.c:1652 */ break; case 89: -#line 487 "parse.y" /* yacc.c:1646 */ +#line 487 "parse.y" /* yacc.c:1652 */ { (yyval.ival) = 1 ; } -#line 2358 "y.tab.c" /* yacc.c:1646 */ +#line 2365 "y.tab.c" /* yacc.c:1652 */ break; case 90: -#line 489 "parse.y" /* yacc.c:1646 */ +#line 489 "parse.y" /* yacc.c:1652 */ { (yyval.ival) = (yyvsp[-2].ival) + 1 ; } -#line 2364 "y.tab.c" /* yacc.c:1646 */ +#line 2371 "y.tab.c" /* yacc.c:1652 */ break; case 91: -#line 494 "parse.y" /* yacc.c:1646 */ +#line 494 "parse.y" /* yacc.c:1652 */ { const BI_REC *p = (yyvsp[-4].bip) ; (yyval.start) = (yyvsp[-3].start) ; if ( (int)p->min_args > (yyvsp[-1].ival) || (int)p->max_args < (yyvsp[-1].ival) ) @@ -2375,131 +2382,131 @@ { code1(_PUSHINT) ; code1((yyvsp[-1].ival)) ; } code2(MAWK, _BUILTIN , mawk_f2d(p->fp)) ; } -#line 2379 "y.tab.c" /* yacc.c:1646 */ +#line 2386 "y.tab.c" /* yacc.c:1652 */ break; case 92: -#line 505 "parse.y" /* yacc.c:1646 */ +#line 505 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; code1(_PUSHINT) ; code1(0) ; code2(MAWK, _BUILTIN, mawk_f2d((yyvsp[0].bip)->fp)) ; } -#line 2389 "y.tab.c" /* yacc.c:1646 */ +#line 2396 "y.tab.c" /* yacc.c:1652 */ break; case 93: -#line 514 "parse.y" /* yacc.c:1646 */ +#line 514 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; } -#line 2395 "y.tab.c" /* yacc.c:1646 */ +#line 2402 "y.tab.c" /* yacc.c:1652 */ break; case 94: -#line 518 "parse.y" /* yacc.c:1646 */ +#line 518 "parse.y" /* yacc.c:1652 */ { code2(MAWK, _PRINT, mawk_f2d((yyvsp[-4].fp))) ; if ( (yyvsp[-4].fp) == mawk_bi_printf && (yyvsp[-2].ival) == 0 ) mawk_compile_error(MAWK, "no arguments in call to printf") ; MAWK->print_flag = 0 ; (yyval.start) = (yyvsp[-3].start) ; } -#line 2406 "y.tab.c" /* yacc.c:1646 */ +#line 2413 "y.tab.c" /* yacc.c:1652 */ break; case 95: -#line 526 "parse.y" /* yacc.c:1646 */ +#line 526 "parse.y" /* yacc.c:1652 */ { (yyval.fp) = mawk_bi_print ; MAWK->print_flag = 1 ;} -#line 2412 "y.tab.c" /* yacc.c:1646 */ +#line 2419 "y.tab.c" /* yacc.c:1652 */ break; case 96: -#line 527 "parse.y" /* yacc.c:1646 */ +#line 527 "parse.y" /* yacc.c:1652 */ { (yyval.fp) = mawk_bi_printf ; MAWK->print_flag = 1 ; } -#line 2418 "y.tab.c" /* yacc.c:1646 */ +#line 2425 "y.tab.c" /* yacc.c:1652 */ break; case 97: -#line 530 "parse.y" /* yacc.c:1646 */ +#line 530 "parse.y" /* yacc.c:1652 */ { mawk_code2op(MAWK, _PUSHINT, (yyvsp[0].ival)) ; } -#line 2424 "y.tab.c" /* yacc.c:1646 */ +#line 2431 "y.tab.c" /* yacc.c:1652 */ break; case 98: -#line 532 "parse.y" /* yacc.c:1646 */ +#line 532 "parse.y" /* yacc.c:1652 */ { (yyval.ival) = (yyvsp[-1].arg2p)->cnt ; mawk_zfree(MAWK, (yyvsp[-1].arg2p),sizeof(ARG2_REC)) ; mawk_code2op(MAWK, _PUSHINT, (yyval.ival)) ; } -#line 2432 "y.tab.c" /* yacc.c:1646 */ +#line 2439 "y.tab.c" /* yacc.c:1652 */ break; case 99: -#line 536 "parse.y" /* yacc.c:1646 */ +#line 536 "parse.y" /* yacc.c:1652 */ { (yyval.ival)=0 ; mawk_code2op(MAWK, _PUSHINT, 0) ; } -#line 2438 "y.tab.c" /* yacc.c:1646 */ +#line 2445 "y.tab.c" /* yacc.c:1652 */ break; case 100: -#line 540 "parse.y" /* yacc.c:1646 */ +#line 540 "parse.y" /* yacc.c:1652 */ { (yyval.arg2p) = (ARG2_REC*) mawk_zmalloc(MAWK, sizeof(ARG2_REC)) ; (yyval.arg2p)->start = (yyvsp[-2].start) ; (yyval.arg2p)->cnt = 2 ; } -#line 2447 "y.tab.c" /* yacc.c:1646 */ +#line 2454 "y.tab.c" /* yacc.c:1652 */ break; case 101: -#line 545 "parse.y" /* yacc.c:1646 */ +#line 545 "parse.y" /* yacc.c:1652 */ { (yyval.arg2p) = (yyvsp[-2].arg2p) ; (yyval.arg2p)->cnt++ ; } -#line 2453 "y.tab.c" /* yacc.c:1646 */ +#line 2460 "y.tab.c" /* yacc.c:1652 */ break; case 103: -#line 550 "parse.y" /* yacc.c:1646 */ +#line 550 "parse.y" /* yacc.c:1652 */ { mawk_code2op(MAWK, _PUSHINT, (yyvsp[-1].ival)) ; } -#line 2459 "y.tab.c" /* yacc.c:1646 */ +#line 2466 "y.tab.c" /* yacc.c:1652 */ break; case 104: -#line 557 "parse.y" /* yacc.c:1646 */ +#line 557 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-1].start) ; mawk_eat_nl(MAWK, &yylval) ; mawk_code_jmp(MAWK, _JZ, (INST*)0) ; } -#line 2465 "y.tab.c" /* yacc.c:1646 */ +#line 2472 "y.tab.c" /* yacc.c:1652 */ break; case 105: -#line 562 "parse.y" /* yacc.c:1646 */ +#line 562 "parse.y" /* yacc.c:1652 */ { mawk_patch_jmp(MAWK, mawk_code_ptr ) ; } -#line 2471 "y.tab.c" /* yacc.c:1646 */ +#line 2478 "y.tab.c" /* yacc.c:1652 */ break; case 106: -#line 565 "parse.y" /* yacc.c:1646 */ +#line 565 "parse.y" /* yacc.c:1652 */ { mawk_eat_nl(MAWK, &yylval) ; mawk_code_jmp(MAWK, _JMP, (INST*)0) ; } -#line 2477 "y.tab.c" /* yacc.c:1646 */ +#line 2484 "y.tab.c" /* yacc.c:1652 */ break; case 107: -#line 570 "parse.y" /* yacc.c:1646 */ +#line 570 "parse.y" /* yacc.c:1652 */ { mawk_patch_jmp(MAWK, mawk_code_ptr) ; mawk_patch_jmp(MAWK, CDP((yyvsp[0].start))) ; } -#line 2485 "y.tab.c" /* yacc.c:1646 */ +#line 2492 "y.tab.c" /* yacc.c:1652 */ break; case 108: -#line 578 "parse.y" /* yacc.c:1646 */ +#line 578 "parse.y" /* yacc.c:1652 */ { mawk_eat_nl(MAWK, &yylval) ; mawk_BC_new(MAWK) ; } -#line 2491 "y.tab.c" /* yacc.c:1646 */ +#line 2498 "y.tab.c" /* yacc.c:1652 */ break; case 109: -#line 583 "parse.y" /* yacc.c:1646 */ +#line 583 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-5].start) ; mawk_code_jmp(MAWK, _JNZ, CDP((yyvsp[-5].start))) ; mawk_BC_clear(MAWK, mawk_code_ptr, CDP((yyvsp[-2].start))) ; } -#line 2499 "y.tab.c" /* yacc.c:1646 */ +#line 2506 "y.tab.c" /* yacc.c:1652 */ break; case 110: -#line 589 "parse.y" /* yacc.c:1646 */ +#line 589 "parse.y" /* yacc.c:1652 */ { mawk_eat_nl(MAWK, &yylval) ; mawk_BC_new(MAWK) ; (yyval.start) = (yyvsp[-1].start) ; @@ -2516,11 +2523,11 @@ code2(MAWK, _JMP, (INST*)0) ; /* code2() not mawk_code_jmp() */ } } -#line 2520 "y.tab.c" /* yacc.c:1646 */ +#line 2527 "y.tab.c" /* yacc.c:1652 */ break; case 111: -#line 609 "parse.y" /* yacc.c:1646 */ +#line 609 "parse.y" /* yacc.c:1652 */ { int saved_offset ; int len ; @@ -2542,11 +2549,11 @@ mawk_BC_clear(MAWK, mawk_code_ptr, CDP((yyvsp[0].start))) ; } } -#line 2546 "y.tab.c" /* yacc.c:1646 */ +#line 2553 "y.tab.c" /* yacc.c:1652 */ break; case 112: -#line 635 "parse.y" /* yacc.c:1646 */ +#line 635 "parse.y" /* yacc.c:1652 */ { int cont_offset = mawk_code_offset ; unsigned len = mawk_code_pop(MAWK, mawk_code_ptr) ; @@ -2568,29 +2575,29 @@ mawk_BC_clear(MAWK, mawk_code_ptr, CDP(cont_offset)) ; } -#line 2572 "y.tab.c" /* yacc.c:1646 */ +#line 2579 "y.tab.c" /* yacc.c:1652 */ break; case 113: -#line 658 "parse.y" /* yacc.c:1646 */ +#line 658 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; } -#line 2578 "y.tab.c" /* yacc.c:1646 */ +#line 2585 "y.tab.c" /* yacc.c:1652 */ break; case 114: -#line 660 "parse.y" /* yacc.c:1646 */ +#line 660 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-1].start) ; code1(_POP) ; } -#line 2584 "y.tab.c" /* yacc.c:1646 */ +#line 2591 "y.tab.c" /* yacc.c:1652 */ break; case 115: -#line 663 "parse.y" /* yacc.c:1646 */ +#line 663 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; } -#line 2590 "y.tab.c" /* yacc.c:1646 */ +#line 2597 "y.tab.c" /* yacc.c:1652 */ break; case 116: -#line 665 "parse.y" /* yacc.c:1646 */ +#line 665 "parse.y" /* yacc.c:1652 */ { if ( mawk_code_ptr - 2 == CDP((yyvsp[-1].start)) && mawk_code_ptr[-2].op == _PUSHD && @@ -2605,19 +2612,19 @@ code2(MAWK, _JMP, (INST*)0) ; } } -#line 2609 "y.tab.c" /* yacc.c:1646 */ +#line 2616 "y.tab.c" /* yacc.c:1652 */ break; case 117: -#line 682 "parse.y" /* yacc.c:1646 */ +#line 682 "parse.y" /* yacc.c:1652 */ { mawk_eat_nl(MAWK, &yylval) ; mawk_BC_new(MAWK) ; mawk_code_push(MAWK, (INST*)0,0, MAWK->scope, MAWK->active_funct) ; } -#line 2617 "y.tab.c" /* yacc.c:1646 */ +#line 2624 "y.tab.c" /* yacc.c:1652 */ break; case 118: -#line 686 "parse.y" /* yacc.c:1646 */ +#line 686 "parse.y" /* yacc.c:1652 */ { INST *p1 = CDP((yyvsp[-1].start)) ; mawk_eat_nl(MAWK, &yylval) ; mawk_BC_new(MAWK) ; @@ -2625,20 +2632,20 @@ mawk_code_push(MAWK, p1, mawk_code_ptr - p1, MAWK->scope, MAWK->active_funct) ; mawk_code_ptr -= mawk_code_ptr - p1 ; } -#line 2629 "y.tab.c" /* yacc.c:1646 */ +#line 2636 "y.tab.c" /* yacc.c:1652 */ break; case 119: -#line 699 "parse.y" /* yacc.c:1646 */ +#line 699 "parse.y" /* yacc.c:1652 */ { check_array(MAWK, (yyvsp[0].stp)) ; mawk_code_array(MAWK, (yyvsp[0].stp)) ; code1(A_TEST) ; } -#line 2638 "y.tab.c" /* yacc.c:1646 */ +#line 2645 "y.tab.c" /* yacc.c:1652 */ break; case 120: -#line 704 "parse.y" /* yacc.c:1646 */ +#line 704 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-3].arg2p)->start ; mawk_code2op(MAWK, A_CAT, (yyvsp[-3].arg2p)->cnt) ; mawk_zfree(MAWK, (yyvsp[-3].arg2p), sizeof(ARG2_REC)) ; @@ -2647,11 +2654,11 @@ mawk_code_array(MAWK, (yyvsp[0].stp)) ; code1(A_TEST) ; } -#line 2651 "y.tab.c" /* yacc.c:1646 */ +#line 2658 "y.tab.c" /* yacc.c:1652 */ break; case 121: -#line 717 "parse.y" /* yacc.c:1646 */ +#line 717 "parse.y" /* yacc.c:1652 */ { if ( (yyvsp[-1].ival) > 1 ) { mawk_code2op(MAWK, A_CAT, (yyvsp[-1].ival)) ; } @@ -2662,11 +2669,11 @@ else code2(MAWK, AE_PUSHA, (yyvsp[-4].stp)->stval.array) ; (yyval.start) = (yyvsp[-3].start) ; } -#line 2666 "y.tab.c" /* yacc.c:1646 */ +#line 2673 "y.tab.c" /* yacc.c:1652 */ break; case 122: -#line 730 "parse.y" /* yacc.c:1646 */ +#line 730 "parse.y" /* yacc.c:1652 */ { if ( (yyvsp[-1].ival) > 1 ) { mawk_code2op(MAWK, A_CAT, (yyvsp[-1].ival)) ; } @@ -2677,11 +2684,11 @@ else code2(MAWK, AE_PUSHA_WRARR, (yyvsp[-4].stp)->stval.array) ; (yyval.start) = (yyvsp[-3].start) ; } -#line 2681 "y.tab.c" /* yacc.c:1646 */ +#line 2688 "y.tab.c" /* yacc.c:1652 */ break; case 123: -#line 743 "parse.y" /* yacc.c:1646 */ +#line 743 "parse.y" /* yacc.c:1652 */ { if ( (yyvsp[-1].ival) > 1 ) { mawk_code2op(MAWK, A_CAT, (yyvsp[-1].ival)) ; } @@ -2692,11 +2699,11 @@ else code2(MAWK, AE_PUSHI, (yyvsp[-4].stp)->stval.array) ; (yyval.start) = (yyvsp[-3].start) ; } -#line 2696 "y.tab.c" /* yacc.c:1646 */ +#line 2703 "y.tab.c" /* yacc.c:1652 */ break; case 124: -#line 755 "parse.y" /* yacc.c:1646 */ +#line 755 "parse.y" /* yacc.c:1652 */ { if ( (yyvsp[-2].ival) > 1 ) { mawk_code2op(MAWK, A_CAT,(yyvsp[-2].ival)) ; } @@ -2710,11 +2717,11 @@ (yyval.start) = (yyvsp[-4].start) ; } -#line 2714 "y.tab.c" /* yacc.c:1646 */ +#line 2721 "y.tab.c" /* yacc.c:1652 */ break; case 125: -#line 772 "parse.y" /* yacc.c:1646 */ +#line 772 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-4].start) ; if ( (yyvsp[-2].ival) > 1 ) { mawk_code2op(MAWK, A_CAT, (yyvsp[-2].ival)) ; } @@ -2722,22 +2729,22 @@ mawk_code_array(MAWK, (yyvsp[-5].stp)) ; code1(A_DEL) ; } -#line 2726 "y.tab.c" /* yacc.c:1646 */ +#line 2733 "y.tab.c" /* yacc.c:1652 */ break; case 126: -#line 780 "parse.y" /* yacc.c:1646 */ +#line 780 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; check_array(MAWK, (yyvsp[-1].stp)) ; mawk_code_array(MAWK, (yyvsp[-1].stp)) ; code1(DEL_A) ; } -#line 2737 "y.tab.c" /* yacc.c:1646 */ +#line 2744 "y.tab.c" /* yacc.c:1652 */ break; case 127: -#line 791 "parse.y" /* yacc.c:1646 */ +#line 791 "parse.y" /* yacc.c:1652 */ { mawk_eat_nl(MAWK, &yylval) ; mawk_BC_new(MAWK) ; (yyval.start) = mawk_code_offset ; @@ -2748,11 +2755,11 @@ code2(MAWK, SET_ALOOP, (INST*)0) ; } -#line 2752 "y.tab.c" /* yacc.c:1646 */ +#line 2759 "y.tab.c" /* yacc.c:1652 */ break; case 128: -#line 805 "parse.y" /* yacc.c:1646 */ +#line 805 "parse.y" /* yacc.c:1652 */ { INST *p2 = CDP((yyvsp[0].start)) ; @@ -2761,17 +2768,17 @@ mawk_code_jmp(MAWK, ALOOP, p2) ; code1(POP_AL) ; } -#line 2765 "y.tab.c" /* yacc.c:1646 */ +#line 2772 "y.tab.c" /* yacc.c:1652 */ break; case 129: -#line 822 "parse.y" /* yacc.c:1646 */ +#line 822 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; code2(MAWK, F_PUSHA, (yyvsp[0].cp)) ; } -#line 2771 "y.tab.c" /* yacc.c:1646 */ +#line 2778 "y.tab.c" /* yacc.c:1652 */ break; case 130: -#line 824 "parse.y" /* yacc.c:1646 */ +#line 824 "parse.y" /* yacc.c:1652 */ { check_var(MAWK, (yyvsp[0].stp)) ; (yyval.start) = mawk_code_offset ; if ( is_local((yyvsp[0].stp)) ) @@ -2780,11 +2787,11 @@ CODE_FE_PUSHA() ; } -#line 2784 "y.tab.c" /* yacc.c:1646 */ +#line 2791 "y.tab.c" /* yacc.c:1652 */ break; case 131: -#line 833 "parse.y" /* yacc.c:1646 */ +#line 833 "parse.y" /* yacc.c:1652 */ { if ( (yyvsp[-1].ival) > 1 ) { mawk_code2op(MAWK, A_CAT, (yyvsp[-1].ival)) ; } @@ -2798,92 +2805,92 @@ (yyval.start) = (yyvsp[-3].start) ; } -#line 2802 "y.tab.c" /* yacc.c:1646 */ +#line 2809 "y.tab.c" /* yacc.c:1652 */ break; case 132: -#line 847 "parse.y" /* yacc.c:1646 */ +#line 847 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[0].start) ; CODE_FE_PUSHA() ; } -#line 2808 "y.tab.c" /* yacc.c:1646 */ +#line 2815 "y.tab.c" /* yacc.c:1652 */ break; case 133: -#line 849 "parse.y" /* yacc.c:1646 */ +#line 849 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-1].start) ; } -#line 2814 "y.tab.c" /* yacc.c:1646 */ +#line 2821 "y.tab.c" /* yacc.c:1652 */ break; case 134: -#line 853 "parse.y" /* yacc.c:1646 */ +#line 853 "parse.y" /* yacc.c:1652 */ { field_A2I(MAWK) ; } -#line 2820 "y.tab.c" /* yacc.c:1646 */ +#line 2827 "y.tab.c" /* yacc.c:1652 */ break; case 135: -#line 856 "parse.y" /* yacc.c:1646 */ +#line 856 "parse.y" /* yacc.c:1652 */ { code1(F_ASSIGN) ; } -#line 2826 "y.tab.c" /* yacc.c:1646 */ +#line 2833 "y.tab.c" /* yacc.c:1652 */ break; case 136: -#line 857 "parse.y" /* yacc.c:1646 */ +#line 857 "parse.y" /* yacc.c:1652 */ { code1(F_ADD_ASG) ; } -#line 2832 "y.tab.c" /* yacc.c:1646 */ +#line 2839 "y.tab.c" /* yacc.c:1652 */ break; case 137: -#line 858 "parse.y" /* yacc.c:1646 */ +#line 858 "parse.y" /* yacc.c:1652 */ { code1(F_SUB_ASG) ; } -#line 2838 "y.tab.c" /* yacc.c:1646 */ +#line 2845 "y.tab.c" /* yacc.c:1652 */ break; case 138: -#line 859 "parse.y" /* yacc.c:1646 */ +#line 859 "parse.y" /* yacc.c:1652 */ { code1(F_MUL_ASG) ; } -#line 2844 "y.tab.c" /* yacc.c:1646 */ +#line 2851 "y.tab.c" /* yacc.c:1652 */ break; case 139: -#line 860 "parse.y" /* yacc.c:1646 */ +#line 860 "parse.y" /* yacc.c:1652 */ { code1(F_DIV_ASG) ; } -#line 2850 "y.tab.c" /* yacc.c:1646 */ +#line 2857 "y.tab.c" /* yacc.c:1652 */ break; case 140: -#line 861 "parse.y" /* yacc.c:1646 */ +#line 861 "parse.y" /* yacc.c:1652 */ { code1(F_MOD_ASG) ; } -#line 2856 "y.tab.c" /* yacc.c:1646 */ +#line 2863 "y.tab.c" /* yacc.c:1652 */ break; case 141: -#line 862 "parse.y" /* yacc.c:1646 */ +#line 862 "parse.y" /* yacc.c:1652 */ { code1(F_POW_ASG) ; } -#line 2862 "y.tab.c" /* yacc.c:1646 */ +#line 2869 "y.tab.c" /* yacc.c:1652 */ break; case 142: -#line 869 "parse.y" /* yacc.c:1646 */ +#line 869 "parse.y" /* yacc.c:1652 */ { code2(MAWK, _BUILTIN, mawk_f2d(mawk_bi_split)) ; } -#line 2868 "y.tab.c" /* yacc.c:1646 */ +#line 2875 "y.tab.c" /* yacc.c:1652 */ break; case 143: -#line 873 "parse.y" /* yacc.c:1646 */ +#line 873 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-2].start) ; check_array(MAWK, (yyvsp[0].stp)) ; mawk_code_array(MAWK, (yyvsp[0].stp)) ; } -#line 2877 "y.tab.c" /* yacc.c:1646 */ +#line 2884 "y.tab.c" /* yacc.c:1652 */ break; case 144: -#line 880 "parse.y" /* yacc.c:1646 */ +#line 880 "parse.y" /* yacc.c:1652 */ { code2(MAWK, _PUSHI, &MAWK->fs_shadow) ; } -#line 2883 "y.tab.c" /* yacc.c:1646 */ +#line 2890 "y.tab.c" /* yacc.c:1652 */ break; case 145: -#line 882 "parse.y" /* yacc.c:1646 */ +#line 882 "parse.y" /* yacc.c:1652 */ { if ( CDP((yyvsp[-1].start)) == mawk_code_ptr - 2 ) { @@ -2901,19 +2908,19 @@ } } } -#line 2905 "y.tab.c" /* yacc.c:1646 */ +#line 2912 "y.tab.c" /* yacc.c:1652 */ break; case 146: -#line 906 "parse.y" /* yacc.c:1646 */ +#line 906 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-3].start) ; code2(MAWK, _BUILTIN, mawk_f2d(mawk_bi_match)) ; } -#line 2913 "y.tab.c" /* yacc.c:1646 */ +#line 2920 "y.tab.c" /* yacc.c:1652 */ break; case 147: -#line 913 "parse.y" /* yacc.c:1646 */ +#line 913 "parse.y" /* yacc.c:1652 */ { INST *p1 = CDP((yyvsp[0].start)) ; @@ -2932,105 +2939,105 @@ } } } -#line 2936 "y.tab.c" /* yacc.c:1646 */ +#line 2943 "y.tab.c" /* yacc.c:1652 */ break; case 148: -#line 936 "parse.y" /* yacc.c:1646 */ +#line 936 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; code1(_EXIT0) ; } -#line 2943 "y.tab.c" /* yacc.c:1646 */ +#line 2950 "y.tab.c" /* yacc.c:1652 */ break; case 149: -#line 939 "parse.y" /* yacc.c:1646 */ +#line 939 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-1].start) ; code1(_EXIT) ; } -#line 2949 "y.tab.c" /* yacc.c:1646 */ +#line 2956 "y.tab.c" /* yacc.c:1652 */ break; case 150: -#line 942 "parse.y" /* yacc.c:1646 */ +#line 942 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; code1(_RET0) ; } -#line 2956 "y.tab.c" /* yacc.c:1646 */ +#line 2963 "y.tab.c" /* yacc.c:1652 */ break; case 151: -#line 945 "parse.y" /* yacc.c:1646 */ +#line 945 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-1].start) ; code1(_RET) ; } -#line 2962 "y.tab.c" /* yacc.c:1646 */ +#line 2969 "y.tab.c" /* yacc.c:1652 */ break; case 152: -#line 950 "parse.y" /* yacc.c:1646 */ +#line 950 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; code2(MAWK, F_PUSHA, &MAWK->field[0]) ; code1(_PUSHINT) ; code1(0) ; code2(MAWK, _BUILTIN, mawk_f2d(mawk_bi_getline)) ; MAWK->getline_flag = 0 ; } -#line 2973 "y.tab.c" /* yacc.c:1646 */ +#line 2980 "y.tab.c" /* yacc.c:1652 */ break; case 153: -#line 957 "parse.y" /* yacc.c:1646 */ +#line 957 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[0].start) ; code1(_PUSHINT) ; code1(0) ; code2(MAWK, _BUILTIN, mawk_f2d(mawk_bi_getline)) ; MAWK->getline_flag = 0 ; } -#line 2983 "y.tab.c" /* yacc.c:1646 */ +#line 2990 "y.tab.c" /* yacc.c:1652 */ break; case 154: -#line 963 "parse.y" /* yacc.c:1646 */ +#line 963 "parse.y" /* yacc.c:1652 */ { code1(_PUSHINT) ; code1(F_IN) ; code2(MAWK, _BUILTIN, mawk_f2d(mawk_bi_getline)) ; /* getline_flag already off in yylex() */ } -#line 2992 "y.tab.c" /* yacc.c:1646 */ +#line 2999 "y.tab.c" /* yacc.c:1652 */ break; case 155: -#line 968 "parse.y" /* yacc.c:1646 */ +#line 968 "parse.y" /* yacc.c:1652 */ { code2(MAWK, F_PUSHA, &MAWK->field[0]) ; code1(_PUSHINT) ; code1(PIPE_IN) ; code2(MAWK, _BUILTIN, mawk_f2d(mawk_bi_getline)) ; } -#line 3001 "y.tab.c" /* yacc.c:1646 */ +#line 3008 "y.tab.c" /* yacc.c:1652 */ break; case 156: -#line 973 "parse.y" /* yacc.c:1646 */ +#line 973 "parse.y" /* yacc.c:1652 */ { code1(_PUSHINT) ; code1(PIPE_IN) ; code2(MAWK, _BUILTIN, mawk_f2d(mawk_bi_getline)) ; } -#line 3010 "y.tab.c" /* yacc.c:1646 */ +#line 3017 "y.tab.c" /* yacc.c:1652 */ break; case 157: -#line 979 "parse.y" /* yacc.c:1646 */ +#line 979 "parse.y" /* yacc.c:1652 */ { MAWK->getline_flag = 1 ; } -#line 3016 "y.tab.c" /* yacc.c:1646 */ +#line 3023 "y.tab.c" /* yacc.c:1652 */ break; case 161: -#line 986 "parse.y" /* yacc.c:1646 */ +#line 986 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; code2(MAWK, F_PUSHA, MAWK->field+0) ; } -#line 3024 "y.tab.c" /* yacc.c:1646 */ +#line 3031 "y.tab.c" /* yacc.c:1652 */ break; case 162: -#line 990 "parse.y" /* yacc.c:1646 */ +#line 990 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-1].start) ; } -#line 3030 "y.tab.c" /* yacc.c:1646 */ +#line 3037 "y.tab.c" /* yacc.c:1652 */ break; case 163: -#line 998 "parse.y" /* yacc.c:1646 */ +#line 998 "parse.y" /* yacc.c:1652 */ { INST *p5 = CDP((yyvsp[-1].start)) ; INST *p6 = CDP((yyvsp[0].start)) ; @@ -3047,47 +3054,47 @@ code2(MAWK, _BUILTIN, mawk_f2d((yyvsp[-5].fp))) ; (yyval.start) = (yyvsp[-3].start) ; } -#line 3051 "y.tab.c" /* yacc.c:1646 */ +#line 3058 "y.tab.c" /* yacc.c:1652 */ break; case 164: -#line 1016 "parse.y" /* yacc.c:1646 */ +#line 1016 "parse.y" /* yacc.c:1652 */ { (yyval.fp) = mawk_bi_sub ; } -#line 3057 "y.tab.c" /* yacc.c:1646 */ +#line 3064 "y.tab.c" /* yacc.c:1652 */ break; case 165: -#line 1017 "parse.y" /* yacc.c:1646 */ +#line 1017 "parse.y" /* yacc.c:1652 */ { (yyval.fp) = mawk_bi_gsub ; } -#line 3063 "y.tab.c" /* yacc.c:1646 */ +#line 3070 "y.tab.c" /* yacc.c:1652 */ break; case 166: -#line 1022 "parse.y" /* yacc.c:1646 */ +#line 1022 "parse.y" /* yacc.c:1652 */ { (yyval.start) = mawk_code_offset ; code2(MAWK, F_PUSHA, &MAWK->field[0]) ; } -#line 3071 "y.tab.c" /* yacc.c:1646 */ +#line 3078 "y.tab.c" /* yacc.c:1652 */ break; case 167: -#line 1027 "parse.y" /* yacc.c:1646 */ +#line 1027 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-1].start) ; } -#line 3077 "y.tab.c" /* yacc.c:1646 */ +#line 3084 "y.tab.c" /* yacc.c:1652 */ break; case 168: -#line 1035 "parse.y" /* yacc.c:1646 */ +#line 1035 "parse.y" /* yacc.c:1652 */ { resize_fblock(MAWK, (yyvsp[-1].fbp)) ; mawk_restore_ids(MAWK) ; switch_code_to_main(MAWK) ; } -#line 3087 "y.tab.c" /* yacc.c:1646 */ +#line 3094 "y.tab.c" /* yacc.c:1652 */ break; case 169: -#line 1043 "parse.y" /* yacc.c:1646 */ +#line 1043 "parse.y" /* yacc.c:1652 */ { mawk_eat_nl(MAWK, &yylval) ; MAWK->scope = SCOPE_FUNCT ; MAWK->active_funct = (yyvsp[-3].fbp) ; @@ -3104,11 +3111,11 @@ mawk_code_limit = mawk_code_base + PAGESZ ; mawk_code_warn = mawk_code_limit - CODEWARN ; } -#line 3108 "y.tab.c" /* yacc.c:1646 */ +#line 3115 "y.tab.c" /* yacc.c:1652 */ break; case 170: -#line 1062 "parse.y" /* yacc.c:1646 */ +#line 1062 "parse.y" /* yacc.c:1652 */ { FBLOCK *fbp ; if ( (yyvsp[0].stp)->type == ST_NONE ) @@ -3130,36 +3137,36 @@ } (yyval.fbp) = fbp ; } -#line 3134 "y.tab.c" /* yacc.c:1646 */ +#line 3141 "y.tab.c" /* yacc.c:1652 */ break; case 171: -#line 1085 "parse.y" /* yacc.c:1646 */ +#line 1085 "parse.y" /* yacc.c:1652 */ { (yyval.fbp) = (yyvsp[0].fbp) ; if ( (yyvsp[0].fbp)->code ) mawk_compile_error(MAWK, "redefinition of %s" , (yyvsp[0].fbp)->name) ; } -#line 3143 "y.tab.c" /* yacc.c:1646 */ +#line 3150 "y.tab.c" /* yacc.c:1652 */ break; case 172: -#line 1091 "parse.y" /* yacc.c:1646 */ +#line 1091 "parse.y" /* yacc.c:1652 */ { (yyval.ival) = 0 ; } -#line 3149 "y.tab.c" /* yacc.c:1646 */ +#line 3156 "y.tab.c" /* yacc.c:1652 */ break; case 174: -#line 1096 "parse.y" /* yacc.c:1646 */ +#line 1096 "parse.y" /* yacc.c:1652 */ { (yyvsp[0].stp) = mawk_save_id(MAWK, (yyvsp[0].stp)->name) ; (yyvsp[0].stp)->type = ST_LOCAL_NONE ; (yyvsp[0].stp)->offset = 0 ; (yyval.ival) = 1 ; } -#line 3159 "y.tab.c" /* yacc.c:1646 */ +#line 3166 "y.tab.c" /* yacc.c:1652 */ break; case 175: -#line 1102 "parse.y" /* yacc.c:1646 */ +#line 1102 "parse.y" /* yacc.c:1652 */ { if ( is_local((yyvsp[0].stp)) ) mawk_compile_error(MAWK, "%s is duplicated in argument list", (yyvsp[0].stp)->name) ; @@ -3170,11 +3177,11 @@ (yyval.ival) = (yyvsp[-2].ival) + 1 ; } } -#line 3174 "y.tab.c" /* yacc.c:1646 */ +#line 3181 "y.tab.c" /* yacc.c:1652 */ break; case 176: -#line 1115 "parse.y" /* yacc.c:1646 */ +#line 1115 "parse.y" /* yacc.c:1652 */ { /* we may have to recover from a bungled function definition */ /* can have local ids, before code scope @@ -3183,102 +3190,103 @@ switch_code_to_main(MAWK) ; } -#line 3187 "y.tab.c" /* yacc.c:1646 */ +#line 3194 "y.tab.c" /* yacc.c:1652 */ break; case 177: -#line 1127 "parse.y" /* yacc.c:1646 */ +#line 1127 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-1].start) ; code2(MAWK, _CALL, (yyvsp[-2].fbp)) ; if ( (yyvsp[0].ca_p) ) code1((yyvsp[0].ca_p)->arg_num+1) ; else code1(0) ; - - mawk_check_fcall(MAWK, (yyvsp[-2].fbp), MAWK->scope, MAWK->ps.code_move_level, MAWK->active_funct, - (yyvsp[0].ca_p), MAWK->token_lineno) ; + + mawk_check_fcall(MAWK, (yyvsp[-2].fbp), MAWK->scope, MAWK->ps.code_move_level, MAWK->active_funct, (yyvsp[0].ca_p), MAWK->token_lineno); } -#line 3201 "y.tab.c" /* yacc.c:1646 */ +#line 3207 "y.tab.c" /* yacc.c:1652 */ break; case 178: -#line 1139 "parse.y" /* yacc.c:1646 */ +#line 1138 "parse.y" /* yacc.c:1652 */ { (yyval.start) = (yyvsp[-1].start) ; code2(MAWK, _CALL, (yyvsp[-2].ptr)) ; if ( (yyvsp[0].ca_p) ) code1((yyvsp[0].ca_p)->arg_num+1) ; else code1(0) ; + + mawk_check_ccall(MAWK, (yyvsp[-2].ptr), MAWK->scope, MAWK->ps.code_move_level, MAWK->active_funct, (yyvsp[0].ca_p), MAWK->token_lineno); } -#line 3212 "y.tab.c" /* yacc.c:1646 */ +#line 3220 "y.tab.c" /* yacc.c:1652 */ break; case 179: -#line 1148 "parse.y" /* yacc.c:1646 */ +#line 1149 "parse.y" /* yacc.c:1652 */ { (yyval.ca_p) = (CA_REC *) 0 ; } -#line 3218 "y.tab.c" /* yacc.c:1646 */ +#line 3226 "y.tab.c" /* yacc.c:1652 */ break; case 180: -#line 1150 "parse.y" /* yacc.c:1646 */ +#line 1151 "parse.y" /* yacc.c:1652 */ { (yyval.ca_p) = (yyvsp[0].ca_p) ; (yyval.ca_p)->link = (yyvsp[-1].ca_p) ; (yyval.ca_p)->arg_num = (yyvsp[-1].ca_p) ? (yyvsp[-1].ca_p)->arg_num+1 : 0 ; } -#line 3227 "y.tab.c" /* yacc.c:1646 */ +#line 3235 "y.tab.c" /* yacc.c:1652 */ break; case 181: -#line 1165 "parse.y" /* yacc.c:1646 */ +#line 1166 "parse.y" /* yacc.c:1652 */ { (yyval.ca_p) = (CA_REC *) 0 ; } -#line 3233 "y.tab.c" /* yacc.c:1646 */ +#line 3241 "y.tab.c" /* yacc.c:1652 */ break; case 182: -#line 1167 "parse.y" /* yacc.c:1646 */ +#line 1168 "parse.y" /* yacc.c:1652 */ { (yyval.ca_p) = MAWK_ZMALLOC(MAWK, CA_REC) ; (yyval.ca_p)->link = (yyvsp[-2].ca_p) ; (yyval.ca_p)->type = CA_EXPR ; (yyval.ca_p)->arg_num = (yyvsp[-2].ca_p) ? (yyvsp[-2].ca_p)->arg_num+1 : 0 ; (yyval.ca_p)->call_offset = mawk_code_offset ; } -#line 3244 "y.tab.c" /* yacc.c:1646 */ +#line 3252 "y.tab.c" /* yacc.c:1652 */ break; case 183: -#line 1174 "parse.y" /* yacc.c:1646 */ +#line 1175 "parse.y" /* yacc.c:1652 */ { (yyval.ca_p) = MAWK_ZMALLOC(MAWK, CA_REC) ; (yyval.ca_p)->link = (yyvsp[-2].ca_p) ; (yyval.ca_p)->arg_num = (yyvsp[-2].ca_p) ? (yyvsp[-2].ca_p)->arg_num+1 : 0 ; mawk_code_call_id(MAWK, (yyval.ca_p), (yyvsp[-1].stp)) ; } -#line 3255 "y.tab.c" /* yacc.c:1646 */ +#line 3263 "y.tab.c" /* yacc.c:1652 */ break; case 184: -#line 1183 "parse.y" /* yacc.c:1646 */ +#line 1184 "parse.y" /* yacc.c:1652 */ { (yyval.ca_p) = MAWK_ZMALLOC(MAWK, CA_REC) ; (yyval.ca_p)->type = CA_EXPR ; (yyval.ca_p)->call_offset = mawk_code_offset ; } -#line 3264 "y.tab.c" /* yacc.c:1646 */ +#line 3272 "y.tab.c" /* yacc.c:1652 */ break; case 185: -#line 1189 "parse.y" /* yacc.c:1646 */ +#line 1190 "parse.y" /* yacc.c:1652 */ { (yyval.ca_p) = MAWK_ZMALLOC(MAWK, CA_REC) ; mawk_code_call_id(MAWK, (yyval.ca_p), (yyvsp[-1].stp)) ; } -#line 3272 "y.tab.c" /* yacc.c:1646 */ +#line 3280 "y.tab.c" /* yacc.c:1652 */ break; case 186: -#line 1196 "parse.y" /* yacc.c:1646 */ +#line 1197 "parse.y" /* yacc.c:1652 */ { mawk_parser_include(MAWK, (yyvsp[0].ptr)); } -#line 3278 "y.tab.c" /* yacc.c:1646 */ - break; - - -#line 3282 "y.tab.c" /* yacc.c:1646 */ +#line 3286 "y.tab.c" /* yacc.c:1652 */ + break; + + +#line 3290 "y.tab.c" /* yacc.c:1652 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -3303,14 +3311,13 @@ /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -3393,12 +3400,10 @@ | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -3460,12 +3465,14 @@ yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. @@ -3477,6 +3484,10 @@ /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -3506,7 +3517,7 @@ #endif return yyresult; } -#line 1204 "parse.y" /* yacc.c:1906 */ +#line 1205 "parse.y" /* yacc.c:1918 */ /* resize the code for a user function */ diff --git a/src/libmawk/parse.h b/src/libmawk/parse.h index 2e99737..805d444 100644 --- a/src/libmawk/parse.h +++ b/src/libmawk/parse.h @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.2. */ +/* A Bison parser, made by GNU Bison 3.3.2. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,6 +30,9 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ + +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ #ifndef YY_MAWK_Y_TAB_H_INCLUDED # define YY_MAWK_Y_TAB_H_INCLUDED @@ -203,10 +207,10 @@ /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE YYSTYPE; + union YYSTYPE { -#line 136 "parse.y" /* yacc.c:1909 */ +#line 136 "parse.y" /* yacc.c:1921 */ mawk_cell_t *cp ; SYMTAB *stp ; @@ -219,8 +223,10 @@ int ival ; PTR ptr ; -#line 223 "y.tab.h" /* yacc.c:1909 */ +#line 227 "y.tab.h" /* yacc.c:1921 */ }; + +typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif diff --git a/src/libmawk/parse.y b/src/libmawk/parse.y index 39bb0f9..199798a 100644 --- a/src/libmawk/parse.y +++ b/src/libmawk/parse.y @@ -1129,9 +1129,8 @@ if ( $3 ) code1($3->arg_num+1) ; else code1(0) ; - - mawk_check_fcall(MAWK, $1, MAWK->scope, MAWK->ps.code_move_level, MAWK->active_funct, - $3, MAWK->token_lineno) ; + + mawk_check_fcall(MAWK, $1, MAWK->scope, MAWK->ps.code_move_level, MAWK->active_funct, $3, MAWK->token_lineno); } ; @@ -1141,6 +1140,8 @@ if ( $3 ) code1($3->arg_num+1) ; else code1(0) ; + + mawk_check_ccall(MAWK, $1, MAWK->scope, MAWK->ps.code_move_level, MAWK->active_funct, $3, MAWK->token_lineno); } ; diff --git a/src/libmawk/symtype.h b/src/libmawk/symtype.h index 079cea5..633bdc4 100644 --- a/src/libmawk/symtype.h +++ b/src/libmawk/symtype.h @@ -93,6 +93,7 @@ void mawk_resolve_fcalls(mawk_state_t * MAWK); void mawk_check_fcall(mawk_state_t *, FBLOCK *, int, int, FBLOCK *, CA_REC *, unsigned); +void mawk_check_ccall(mawk_state_t *, FBLOCK *, int, int, FBLOCK *, CA_REC *, unsigned); void mawk_relocate_resolve_list(mawk_state_t *MAWK, int, int, FBLOCK *, int, unsigned, int); /* mawk_hash.c */