aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--eval.c9
-rw-r--r--test/ChangeLog5
-rw-r--r--test/Makefile.am5
-rw-r--r--test/Makefile.in19
-rw-r--r--test/Maketests10
-rw-r--r--test/nastyparm.awk41
-rw-r--r--test/nastyparm.ok11
8 files changed, 103 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index ac4c5fcd..d9a27faa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/eval.c b/eval.c
index 850953f6..dbd1c9fb 100644
--- a/eval.c
+++ b/eval.c
@@ -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