diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | eval.c | 9 | ||||
-rw-r--r-- | test/ChangeLog | 5 | ||||
-rw-r--r-- | test/Makefile.am | 5 | ||||
-rw-r--r-- | test/Makefile.in | 19 | ||||
-rw-r--r-- | test/Maketests | 10 | ||||
-rw-r--r-- | test/nastyparm.awk | 41 | ||||
-rw-r--r-- | test/nastyparm.ok | 11 |
8 files changed, 103 insertions, 3 deletions
@@ -1,3 +1,9 @@ +Wed May 4 23:06:17 2011 John Haque <j.eh@mchsi.com> + + * eval.c (setup_frame): Handle a Node_var in stack. Fixes + a problem when a Node_var_new as param becomes Node_var during + expresssion evaluation for a subsequent param. + Wed May 4 23:04:06 2011 John Haque <j.eh@mchsi.com> Fix the problem (crash) with disappearing array argument when @@ -1302,6 +1302,15 @@ setup_frame(INSTRUCTION *pc) r->prev_array = m; break; + case Node_var: + /* Untyped (Node_var_new) variable as param became a + * scalar during evaluation of expression for a + * subsequent param. + */ + r->type = Node_var; + r->var_value = Nnull_string; + break; + case Node_val: r->type = Node_var; r->var_value = m; diff --git a/test/ChangeLog b/test/ChangeLog index ffaf4629..b3e99c2c 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +Wed May 4 23:07:39 2011 Arnold D. Robbins <arnold@skeeve.com> + + * nastyparm.awk, nastyparm.ok: New files from John Haque. + * Makefile.am (nastyparm): New test. + Wed May 4 23:03:06 2011 Arnold D. Robbins <arnold@skeeve.com> * delsub.awk, delsub.ok: New files. diff --git a/test/Makefile.am b/test/Makefile.am index c4cfcebc..8564abe8 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -413,6 +413,8 @@ EXTRA_DIST = \ nasty.ok \ nasty2.awk \ nasty2.ok \ + nastyparm.awk \ + nastyparm.ok \ negexp.awk \ negexp.ok \ negrange.awk \ @@ -782,7 +784,8 @@ GAWK_EXT_TESTS = \ gnuops2 gnuops3 gnureops \ icasefs icasers igncdym igncfs ignrcas2 ignrcase indirectcall lint \ lintwarn \ - lintold manyfiles match1 match2 match3 mbstr1 nondec nondec2 patsplit \ + lintold manyfiles match1 match2 match3 mbstr1 nondec \ + nastyparm nondec2 patsplit \ posix profile1 profile2 profile3 printfbad1 printfbad2 \ procinfs rebuf regx8bit reint reint2 rsstart1 rsstart2 rsstart3 \ rstest6 shadow sortfor sortu splitarg4 strftime strtonum switch2 diff --git a/test/Makefile.in b/test/Makefile.in index 85b7e80e..4fd76480 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -340,6 +340,8 @@ EXTRA_DIST = \ delarpm2.ok \ delfunc.awk \ delfunc.ok \ + delsub.awk \ + delsub.ok \ devfd.in1 \ devfd.in2 \ devfd.in4 \ @@ -596,6 +598,8 @@ EXTRA_DIST = \ nasty.ok \ nasty2.awk \ nasty2.ok \ + nastyparm.awk \ + nastyparm.ok \ negexp.awk \ negexp.ok \ negrange.awk \ @@ -959,12 +963,13 @@ GAWK_EXT_TESTS = \ aadelete1 aadelete2 aarray1 aasort aasorti \ arraysort \ argtest backw badargs beginfile1 binmode1 clos1way \ - devfd devfd1 devfd2 dumpvars \ + delsub devfd devfd1 devfd2 dumpvars \ fieldwdth fpat1 funlen fsfwfs fwtest fwtest2 gensub gensub2 getlndir \ gnuops2 gnuops3 gnureops \ icasefs icasers igncdym igncfs ignrcas2 ignrcase indirectcall lint \ lintwarn \ - lintold manyfiles match1 match2 match3 mbstr1 nondec nondec2 patsplit \ + lintold manyfiles match1 match2 match3 mbstr1 nondec \ + nastyparm nondec2 patsplit \ posix profile1 profile2 profile3 printfbad1 printfbad2 \ procinfs rebuf regx8bit reint reint2 rsstart1 rsstart2 rsstart3 \ rstest6 shadow sortfor sortu splitarg4 strftime strtonum switch2 @@ -2592,6 +2597,11 @@ clos1way: @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +delsub: + @echo delsub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + fieldwdth: @echo fieldwdth @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @@ -2717,6 +2727,11 @@ nondec: @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +nastyparm: + @echo nastyparm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + patsplit: @echo patsplit @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index 772ee657..638f64f9 100644 --- a/test/Maketests +++ b/test/Maketests @@ -885,6 +885,11 @@ clos1way: @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +delsub: + @echo delsub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + fieldwdth: @echo fieldwdth @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @@ -1010,6 +1015,11 @@ nondec: @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +nastyparm: + @echo nastyparm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + patsplit: @echo patsplit @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/nastyparm.awk b/test/nastyparm.awk new file mode 100644 index 00000000..a1f1c829 --- /dev/null +++ b/test/nastyparm.awk @@ -0,0 +1,41 @@ +function biz(baz, bar) +{ + print baz, bar +} + +function buz(baz, bar) +{ + print length(baz), bar +} + +function buz2(baz, baz1, bar, baz2) +{ + print length(baz), length(baz1), bar, length(baz2) + baz2[0] = "baz2" +# baz[0] = "baz" # fatal +} + +function buz3(baz) +{ + buz2(baz, baz, split("abc", baz, ""), baz) +} + + +BEGIN { + biz(foo, foo != "") + + biz(fy, fy = "fy") + + biz(fi = 10, fi = 20) + print fi + + buz(a, split("abc", a, "")) + + buz2(c, c, split("abc", c, ""), c) + print c[0], length(c) + + buz3(d) + print d[0], length(d) + + biz(b, split("abc", b, "")) +} diff --git a/test/nastyparm.ok b/test/nastyparm.ok new file mode 100644 index 00000000..c68a1c55 --- /dev/null +++ b/test/nastyparm.ok @@ -0,0 +1,11 @@ + 0 + fy +10 20 +20 +3 3 +3 3 3 3 +baz2 4 +3 3 3 3 +baz2 4 +gawk: nastyparm.awk:3: fatal: attempt to use array `baz (from b)' in a scalar context +EXIT CODE: 2 |