diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | interpret.h | 6 | ||||
-rw-r--r-- | test/ChangeLog | 6 | ||||
-rw-r--r-- | test/Makefile.am | 4 | ||||
-rw-r--r-- | test/Makefile.in | 9 | ||||
-rw-r--r-- | test/Maketests | 5 | ||||
-rw-r--r-- | test/concat5.awk | 7 | ||||
-rw-r--r-- | test/concat5.ok | 1 |
8 files changed, 41 insertions, 4 deletions
@@ -1,3 +1,10 @@ +2017-01-15 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * interpret.h (r_interpret): Fix bug in Op_assign_concat reported + on Cygwin mailing list. The string concatenation optimization was + not updating the node correctly by setting STRING and STRCUR flags + and setting stfmt. + 2016-11-04 Eli Zaretskii <eliz@gnu.org> * builtin.c (efwrite) [__MINGW32__]: Call w32_maybe_set_errno if diff --git a/interpret.h b/interpret.h index e9abdffb..90573af4 100644 --- a/interpret.h +++ b/interpret.h @@ -706,14 +706,16 @@ mod: *lhs = dupnode(t1); } - if (t1 != t2 && t1->valref == 1 && (t1->flags & MPFN) == 0) { + if (t1 != t2 && t1->valref == 1 && (t1->flags & (MPFN|MPZN)) == 0) { size_t nlen = t1->stlen + t2->stlen; erealloc(t1->stptr, char *, nlen + 2, "r_interpret"); memcpy(t1->stptr + t1->stlen, t2->stptr, t2->stlen); t1->stlen = nlen; t1->stptr[nlen] = '\0'; - t1->flags &= ~(NUMCUR|NUMBER|NUMINT); + t1->flags &= ~(NUMCUR|NUMBER|MAYBE_NUM|NUMINT|INTIND); + t1->flags |= (STRING|STRCUR); + t1->stfmt = -1; if ((t1->flags & WSTRCUR) != 0 && (t2->flags & WSTRCUR) != 0) { size_t wlen = t1->wstlen + t2->wstlen; diff --git a/test/ChangeLog b/test/ChangeLog index 3a5a6610..d07a062a 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2017-01-15 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * Makefile.am (concat5): New test. + * concat5.awk, concat5.ok: New files. + Check for bug forwarded by Corinna Vinschen from Cygwin mailing list. + 2016-11-21 Arnold D. Robbins <arnold@skeeve.com> * Makefile.am (EXTRA_DIST): Add valgrind.awk to the list. diff --git a/test/Makefile.am b/test/Makefile.am index 22099496..f63c02ac 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -182,6 +182,8 @@ EXTRA_DIST = \ concat4.awk \ concat4.in \ concat4.ok \ + concat5.awk \ + concat5.ok \ convfmt.awk \ convfmt.ok \ crlf.awk \ @@ -1072,7 +1074,7 @@ BASIC_TESTS = \ aryprm8 aryprm9 arysubnm asgext awkpath \ back89 backgsub badassign1 badbuild \ callparam childin clobber closebad clsflnam compare compare2 concat1 concat2 \ - concat3 concat4 convfmt \ + concat3 concat4 concat5 convfmt \ datanonl defref delargv delarpm2 delarprm delfunc dfamb1 dfastress dynlj \ eofsplit exit2 exitval1 exitval2 exitval3 \ fcall_exit fcall_exit2 fldchg fldchgnf fnamedat fnarray fnarray2 \ diff --git a/test/Makefile.in b/test/Makefile.in index 30ddfbc1..2fad102f 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -439,6 +439,8 @@ EXTRA_DIST = \ concat4.awk \ concat4.in \ concat4.ok \ + concat5.awk \ + concat5.ok \ convfmt.awk \ convfmt.ok \ crlf.awk \ @@ -1328,7 +1330,7 @@ BASIC_TESTS = \ aryprm8 aryprm9 arysubnm asgext awkpath \ back89 backgsub badassign1 badbuild \ callparam childin clobber closebad clsflnam compare compare2 concat1 concat2 \ - concat3 concat4 convfmt \ + concat3 concat4 concat5 convfmt \ datanonl defref delargv delarpm2 delarprm delfunc dfamb1 dfastress dynlj \ eofsplit exit2 exitval1 exitval2 exitval3 \ fcall_exit fcall_exit2 fldchg fldchgnf fnamedat fnarray fnarray2 \ @@ -2810,6 +2812,11 @@ concat3: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +concat5: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + convfmt: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index c48b76df..84909f37 100644 --- a/test/Maketests +++ b/test/Maketests @@ -180,6 +180,11 @@ concat3: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +concat5: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + convfmt: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/concat5.awk b/test/concat5.awk new file mode 100644 index 00000000..6bfbb856 --- /dev/null +++ b/test/concat5.awk @@ -0,0 +1,7 @@ +BEGIN { + OFMT = "%.8g" + x = 1 + x += .1 + x = (x "a") + print x +} diff --git a/test/concat5.ok b/test/concat5.ok new file mode 100644 index 00000000..eea55936 --- /dev/null +++ b/test/concat5.ok @@ -0,0 +1 @@ +1.1a |