diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2015-04-28 16:39:13 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2015-04-28 16:39:13 +0300 |
commit | f088a3efc8aefc47f0bfe7824732aae4283b4c15 (patch) | |
tree | f659c23e2ec050036804246ebf40d56403bc1987 | |
parent | 7bda05c66848de97a7b43aa3e37ff4336f1b3220 (diff) | |
download | egawk-f088a3efc8aefc47f0bfe7824732aae4283b4c15.tar.gz egawk-f088a3efc8aefc47f0bfe7824732aae4283b4c15.tar.bz2 egawk-f088a3efc8aefc47f0bfe7824732aae4283b4c15.zip |
Make call-by-value work again for $0.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | eval.c | 8 | ||||
-rw-r--r-- | test/ChangeLog | 5 | ||||
-rw-r--r-- | test/Makefile.am | 5 | ||||
-rw-r--r-- | test/Makefile.in | 10 | ||||
-rw-r--r-- | test/Maketests | 5 | ||||
-rw-r--r-- | test/inpref.awk | 9 | ||||
-rw-r--r-- | test/inpref.in | 2 | ||||
-rw-r--r-- | test/inpref.ok | 2 |
9 files changed, 50 insertions, 3 deletions
@@ -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 @@ -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 |