aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--eval.c8
-rw-r--r--test/ChangeLog5
-rw-r--r--test/Makefile.am5
-rw-r--r--test/Makefile.in10
-rw-r--r--test/Maketests5
-rw-r--r--test/inpref.awk9
-rw-r--r--test/inpref.in2
-rw-r--r--test/inpref.ok2
9 files changed, 50 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 3e9764a2..448bdcaa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,13 @@
* awkgram.y (yylex): Rework the bracket handling from zero.
Thanks to Michal Jaegermann for yet another test case.
+ Unrelated:
+
+ * eval.c (setup_frame): Restore call-by-value for $0. This was
+ necessitated by the changes on 2014-11-11 for conserving
+ memory use. Thanks to Andrew Schorr for the report and isolating
+ the cause of the problem.
+
2015-04-27 Arnold D. Robbins <arnold@skeeve.com>
* awkgram.y (yylex): Make change of Jan 7 for parsing regexps
diff --git a/eval.c b/eval.c
index 12776846..dfb99a4c 100644
--- a/eval.c
+++ b/eval.c
@@ -1325,7 +1325,13 @@ setup_frame(INSTRUCTION *pc)
if (m->type == Node_param_list)
m = GET_PARAM(m->param_cnt);
-
+
+ /* $0 needs to be passed by value to a function */
+ if (m == fields_arr[0]) {
+ DEREF(m);
+ m = dupnode(m);
+ }
+
switch (m->type) {
case Node_var_new:
case Node_var_array:
diff --git a/test/ChangeLog b/test/ChangeLog
index cde85f80..437760ee 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2015-04-27 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (inpref): New test.
+ * inpref.awk, inpref.in, inpref.ok: New files.
+
2015-04-27 Arnold D. Robbins <arnold@skeeve.com>
* Makefile.am (regexpbrack2): New test.
diff --git a/test/Makefile.am b/test/Makefile.am
index bf1d073c..edad8bb6 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -406,6 +406,9 @@ EXTRA_DIST = \
icasers.awk \
icasers.in \
icasers.ok \
+ inpref.awk \
+ inpref.in \
+ inpref.ok \
id.awk \
id.ok \
igncdym.awk \
@@ -1018,7 +1021,7 @@ BASIC_TESTS = \
gsubasgn gsubtest gsubtst2 gsubtst3 gsubtst4 gsubtst5 gsubtst6 \
gsubtst7 gsubtst8 \
hex hsprint \
- inputred intest intprec iobug1 \
+ inpref inputred intest intprec iobug1 \
leaddig leadnl litoct longsub longwrds \
manglprm math membug1 messages minusstr mmap8k mtchi18n \
nasty nasty2 negexp negrange nested nfldstr nfloop nfneg nfset nlfldsep \
diff --git a/test/Makefile.in b/test/Makefile.in
index 0cd10604..b5492261 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -663,6 +663,9 @@ EXTRA_DIST = \
icasers.awk \
icasers.in \
icasers.ok \
+ inpref.awk \
+ inpref.in \
+ inpref.ok \
id.awk \
id.ok \
igncdym.awk \
@@ -1274,7 +1277,7 @@ BASIC_TESTS = \
gsubasgn gsubtest gsubtst2 gsubtst3 gsubtst4 gsubtst5 gsubtst6 \
gsubtst7 gsubtst8 \
hex hsprint \
- inputred intest intprec iobug1 \
+ inpref inputred intest intprec iobug1 \
leaddig leadnl litoct longsub longwrds \
manglprm math membug1 messages minusstr mmap8k mtchi18n \
nasty nasty2 negexp negrange nested nfldstr nfloop nfneg nfset nlfldsep \
@@ -2908,6 +2911,11 @@ hsprint:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+inpref:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
inputred:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index e9c89852..95d9e80a 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -405,6 +405,11 @@ hsprint:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+inpref:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
inputred:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/inpref.awk b/test/inpref.awk
new file mode 100644
index 00000000..d64ffe7f
--- /dev/null
+++ b/test/inpref.awk
@@ -0,0 +1,9 @@
+function test(x) {
+ print x
+ getline
+ print x
+}
+
+{
+ test($0)
+}
diff --git a/test/inpref.in b/test/inpref.in
new file mode 100644
index 00000000..a32119c8
--- /dev/null
+++ b/test/inpref.in
@@ -0,0 +1,2 @@
+hello
+goodbye
diff --git a/test/inpref.ok b/test/inpref.ok
new file mode 100644
index 00000000..317e9677
--- /dev/null
+++ b/test/inpref.ok
@@ -0,0 +1,2 @@
+hello
+hello