summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2017-01-27 12:05:36 +0200
committerArnold D. Robbins <arnold@skeeve.com>2017-01-27 12:05:36 +0200
commitc0c69f02e4d300aebf91516a1a521828f6885b26 (patch)
tree821a5e8819911b222071b9710bca5b07c17e7795
parentd6fe1f907f495863c3ff6875f9d308e5d08ee0ff (diff)
downloadgawk-c0c69f02e4d300aebf91516a1a521828f6885b26.tar.gz
Fix assignment from gensub to $0.
-rw-r--r--ChangeLog5
-rw-r--r--interpret.h5
-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/gensub3.awk8
-rw-r--r--test/gensub3.in2
-rw-r--r--test/gensub3.ok1
9 files changed, 40 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 49c2b517..16146de3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-01-27 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * interpret.h [UNFIELD]: Fix condition for assignment from
+ value with valref == 1. Fixes problems introduced at gawk 4.1.2.
+
2017-01-27 Arnold D. Robbins <arnold@skeeve.com>
* interpret.h: Updaet copyright year.
diff --git a/interpret.h b/interpret.h
index 15d77522..bb7cba96 100644
--- a/interpret.h
+++ b/interpret.h
@@ -26,10 +26,7 @@
#define UNFIELD(l, r) \
{ \
/* if was a field, turn it into a var */ \
- if ((r->flags & FIELD) == 0) { \
- l = r; \
- } else if (r->valref == 1) { \
- r->flags &= ~FIELD; \
+ if ((r->flags & FIELD) == 0 || r->valref == 1) { \
l = r; \
} else { \
l = dupnode(r); \
diff --git a/test/ChangeLog b/test/ChangeLog
index d07a062a..8b16532c 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2017-01-27 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (gensub3): New test.
+ * gensub3.awk, gensub3.in, gensub3.ok: New files.
+
2017-01-15 Andrew J. Schorr <aschorr@telemetry-investments.com>
* Makefile.am (concat5): New test.
diff --git a/test/Makefile.am b/test/Makefile.am
index f63c02ac..d89e6108 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -365,6 +365,9 @@ EXTRA_DIST = \
gensub.ok \
gensub2.awk \
gensub2.ok \
+ gensub3.awk \
+ gensub3.in \
+ gensub3.ok \
getline.awk \
getline.in \
getline.ok \
@@ -1119,7 +1122,7 @@ GAWK_EXT_TESTS = \
crlf dbugeval delsub devfd devfd1 devfd2 dumpvars exit \
fieldwdth fpat1 fpat2 fpat3 fpat4 fpat5 fpatnull fsfwfs funlen \
functab1 functab2 functab3 fwtest fwtest2 fwtest3 \
- genpot gensub gensub2 getlndir gnuops2 gnuops3 gnureops \
+ genpot gensub gensub2 gensub3 getlndir gnuops2 gnuops3 gnureops \
icasefs icasers id igncdym igncfs ignrcas2 ignrcase \
incdupe incdupe2 incdupe3 incdupe4 incdupe5 incdupe6 incdupe7 \
include include2 indirectbuiltin indirectcall indirectcall2 \
diff --git a/test/Makefile.in b/test/Makefile.in
index 2fad102f..5269d0cd 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -622,6 +622,9 @@ EXTRA_DIST = \
gensub.ok \
gensub2.awk \
gensub2.ok \
+ gensub3.awk \
+ gensub3.in \
+ gensub3.ok \
getline.awk \
getline.in \
getline.ok \
@@ -1375,7 +1378,7 @@ GAWK_EXT_TESTS = \
crlf dbugeval delsub devfd devfd1 devfd2 dumpvars exit \
fieldwdth fpat1 fpat2 fpat3 fpat4 fpat5 fpatnull fsfwfs funlen \
functab1 functab2 functab3 fwtest fwtest2 fwtest3 \
- genpot gensub gensub2 getlndir gnuops2 gnuops3 gnureops \
+ genpot gensub gensub2 gensub3 getlndir gnuops2 gnuops3 gnureops \
icasefs icasers id igncdym igncfs ignrcas2 ignrcase \
incdupe incdupe2 incdupe3 incdupe4 incdupe5 incdupe6 incdupe7 \
include include2 indirectbuiltin indirectcall indirectcall2 \
@@ -3779,6 +3782,11 @@ gensub2:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+gensub3:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
getlndir:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index 84909f37..e7099ea2 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -1147,6 +1147,11 @@ gensub2:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+gensub3:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
getlndir:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/gensub3.awk b/test/gensub3.awk
new file mode 100644
index 00000000..be0f7538
--- /dev/null
+++ b/test/gensub3.awk
@@ -0,0 +1,8 @@
+/apple/ {
+ $0 = $0
+ x = $0
+}
+
+END {
+ print x
+}
diff --git a/test/gensub3.in b/test/gensub3.in
new file mode 100644
index 00000000..f38fe2fa
--- /dev/null
+++ b/test/gensub3.in
@@ -0,0 +1,2 @@
+apple
+pear
diff --git a/test/gensub3.ok b/test/gensub3.ok
new file mode 100644
index 00000000..4c479def
--- /dev/null
+++ b/test/gensub3.ok
@@ -0,0 +1 @@
+apple