diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2019-01-11 15:14:33 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2019-01-11 15:14:33 +0200 |
commit | 663aff4ae012468c54d2e994e839d0e75210ef80 (patch) | |
tree | b65cc16d7e36cab817c5ad64611fdb54c8a3ad1a /main.c | |
parent | feebb01f31e29740b050da1531416c90a12352ca (diff) | |
download | egawk-663aff4ae012468c54d2e994e839d0e75210ef80.tar.gz egawk-663aff4ae012468c54d2e994e839d0e75210ef80.tar.bz2 egawk-663aff4ae012468c54d2e994e839d0e75210ef80.zip |
Squashed merge of feature/namespaces. Add code and doc.
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 20 |
1 files changed, 16 insertions, 4 deletions
@@ -398,9 +398,10 @@ main(int argc, char **argv) init_fields(); /* Now process the pre-assignments */ + int dash_v_errs = 0; // bad stuff for -v for (i = 0; i <= numassigns; i++) { if (preassigns[i].type == PRE_ASSIGN) - (void) arg_assign(preassigns[i].val, true); + dash_v_errs += (arg_assign(preassigns[i].val, true) == false); else /* PRE_ASSIGN_FS */ cmdline_fs(preassigns[i].val); efree(preassigns[i].val); @@ -464,12 +465,17 @@ main(int argc, char **argv) setlocale(LC_NUMERIC, "C"); #endif /* Read in the program */ - if (parse_program(& code_block) != 0) + if (parse_program(& code_block) != 0 || dash_v_errs > 0) exit(EXIT_FAILURE); if (do_intl) exit(EXIT_SUCCESS); + if (current_namespace != awk_namespace) { + efree((char *) current_namespace); + current_namespace = awk_namespace; + } + install_builtins(); if (do_lint) @@ -514,6 +520,7 @@ main(int argc, char **argv) interpret(code_block); if (do_pretty_print) { + current_namespace = awk_namespace; dump_prog(code_block); dump_funcs(); } @@ -1145,7 +1152,7 @@ arg_assign(char *arg, bool initing) badvar = true; else for (cp2 = arg+1; *cp2; cp2++) - if (! is_identchar((unsigned char) *cp2)) { + if (! is_identchar((unsigned char) *cp2) && *cp2 != ':') { badvar = true; break; } @@ -1163,11 +1170,16 @@ arg_assign(char *arg, bool initing) // Assigning a string or typed regex + if (! validate_qualified_name(arg)) { + badvar = true; + goto done; + } + if (check_special(arg) >= 0) fatal(_("cannot use gawk builtin `%s' as variable name"), arg); if (! initing) { - var = lookup(arg); + var = lookup(arg, false); if (var != NULL && var->type == Node_func) fatal(_("cannot use function `%s' as variable name"), arg); } |