diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2023-02-24 10:29:33 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2023-02-24 10:29:33 +0200 |
commit | da883f8177a12293a395d77c31d7aeaa95c254aa (patch) | |
tree | 5a8d775e66f92781494c60438de4d1e19792e768 | |
parent | 90da4e0a6fea0499b891bb3801fde88b99346367 (diff) | |
download | gawk-da883f8177a12293a395d77c31d7aeaa95c254aa.tar.gz |
Bug fix in typeof, add new test files.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | builtin.c | 23 | ||||
-rw-r--r-- | pc/ChangeLog | 4 | ||||
-rw-r--r-- | pc/Makefile.tst | 12 | ||||
-rw-r--r-- | test/ChangeLog | 2 | ||||
-rw-r--r-- | test/Makefile.am | 4 | ||||
-rw-r--r-- | test/Makefile.in | 9 | ||||
-rw-r--r-- | test/Maketests | 5 | ||||
-rw-r--r-- | test/elemnew2.awk | 15 | ||||
-rw-r--r-- | test/elemnew2.ok | 3 | ||||
-rw-r--r-- | test/elemnew3.awk | 9 | ||||
-rw-r--r-- | test/elemnew3.ok | 1 |
12 files changed, 79 insertions, 11 deletions
@@ -3,6 +3,9 @@ * awk.h (boolval): Handle Node_var. Thanks to Daniel Pouzzner <douzzer@mega.nu> for the report, relayed by Andrew Schorr. + * builtin.c (do_typeof): Handle Node_var, could come from a + converted Node_elem_new. Thanks to Andrew Schorr for the + report. 2023-02-23 Arnold D. Robbins <arnold@skeeve.com> @@ -4324,6 +4324,21 @@ do_typeof(int nargs) } } break; + case Node_var: + /* + * This can happen when a Node_elem_new gets turned into a Node_var. + * BEGIN { + * f(a["b"]) + * print typeof(a["b"]) + * } + * + * function f(x) + * { + * return x + * } + */ + arg = arg->var_value; + // fall through case Node_val: switch (fixtype(arg)->flags & (STRING|NUMBER|USER_INPUT|REGEX|BOOLVAL)) { case NUMBER|BOOLVAL: @@ -4386,14 +4401,6 @@ do_typeof(int nargs) } deref = false; break; - case Node_var: - /* - * Note: this doesn't happen because the function calling code - * in interpret.h pushes Node_var->var_value. - */ - fatal(_("typeof: invalid argument type `%s'"), - nodetype2str(arg->type)); - break; default: fatal(_("typeof: unknown argument type `%s'"), nodetype2str(arg->type)); diff --git a/pc/ChangeLog b/pc/ChangeLog index d45600d5..fea82a7d 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2023-02-24 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.tst: Regenerated. + 2023-01-31 Arnold D. Robbins <arnold@skeeve.com> * Makefile.tst: Regenerated. diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 1cb6f869..f9e9681b 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -193,7 +193,7 @@ GAWK_EXT_TESTS = \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ devfd devfd1 devfd2 dfacheck1 dumpvars \ - elemnew1 errno exit fieldwdth forcenum fpat1 fpat2 \ + elemnew1 elemnew2 elemnew3 errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \ @@ -2760,6 +2760,16 @@ elemnew1: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +elemnew2: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +elemnew3: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/ChangeLog b/test/ChangeLog index 8fbe6b2f..ebf83d45 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -2,6 +2,8 @@ * Makefile.am (EXTRA_DIST): New test: elemnew2. * elemnew2.awk, elemnew2.ok: New files. + * Makefile.am (EXTRA_DIST): New test: elemnew3. + * elemnew3.awk, elemnew3.ok: New files. 2023-02-09 Arnold D. Robbins <arnold@skeeve.com> diff --git a/test/Makefile.am b/test/Makefile.am index 15708a1f..b30d3d7a 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -291,6 +291,8 @@ EXTRA_DIST = \ elemnew1.ok \ elemnew2.awk \ elemnew2.ok \ + elemnew3.awk \ + elemnew3.ok \ escapebrace.awk \ escapebrace.in \ escapebrace.ok \ @@ -1504,7 +1506,7 @@ GAWK_EXT_TESTS = \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ devfd devfd1 devfd2 dfacheck1 dumpvars \ - elemnew1 elemnew2 errno exit fieldwdth forcenum fpat1 fpat2 \ + elemnew1 elemnew2 elemnew3 errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \ diff --git a/test/Makefile.in b/test/Makefile.in index 9e9701fd..ed835ab6 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -559,6 +559,8 @@ EXTRA_DIST = \ elemnew1.ok \ elemnew2.awk \ elemnew2.ok \ + elemnew3.awk \ + elemnew3.ok \ escapebrace.awk \ escapebrace.in \ escapebrace.ok \ @@ -1772,7 +1774,7 @@ GAWK_EXT_TESTS = \ clos1way5 clos1way6 colonwarn commas crlf dbugeval dbugeval2 \ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \ devfd devfd1 devfd2 dfacheck1 dumpvars \ - elemnew1 elemnew2 errno exit fieldwdth forcenum fpat1 fpat2 \ + elemnew1 elemnew2 elemnew3 errno exit fieldwdth forcenum fpat1 fpat2 \ fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \ functab2 functab3 functab6 funlen fwtest fwtest2 fwtest3 fwtest4 \ fwtest5 fwtest6 fwtest7 fwtest8 genpot gensub gensub2 gensub3 \ @@ -4526,6 +4528,11 @@ elemnew2: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +elemnew3: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index 331c501e..a4b215c6 100644 --- a/test/Maketests +++ b/test/Maketests @@ -1457,6 +1457,11 @@ elemnew2: @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +elemnew3: + @echo $@ + @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + exit: @echo $@ @-$(LOCALES) AWK="$(AWKPROG)" "$(srcdir)"/$@.sh > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/elemnew2.awk b/test/elemnew2.awk new file mode 100644 index 00000000..4f765032 --- /dev/null +++ b/test/elemnew2.awk @@ -0,0 +1,15 @@ +#!/usr/bin/gawk -f + +function f(x) { + return x; +} + +BEGIN { + print "a[b] is " (a["b"] ? "true" : "false"); + + f(a["b"]); + + print "a[b] is " (a["b"] ? "true" : "false"); + + print a["b"]; +} diff --git a/test/elemnew2.ok b/test/elemnew2.ok new file mode 100644 index 00000000..0de7b2d6 --- /dev/null +++ b/test/elemnew2.ok @@ -0,0 +1,3 @@ +a[b] is false +a[b] is false + diff --git a/test/elemnew3.awk b/test/elemnew3.awk new file mode 100644 index 00000000..4bb0d5d4 --- /dev/null +++ b/test/elemnew3.awk @@ -0,0 +1,9 @@ +BEGIN { + f(a["b"]) + print typeof(a["b"]) +} + +function f(x) +{ + return x +} diff --git a/test/elemnew3.ok b/test/elemnew3.ok new file mode 100644 index 00000000..3d17e76e --- /dev/null +++ b/test/elemnew3.ok @@ -0,0 +1 @@ +unassigned |