Rebuild fields when NF is assigned to itself

This commit is contained in:
Cody Peter Mello 2018-09-23 17:59:52 -07:00
parent 2dc7e5ff1a
commit 6315525dbe
5 changed files with 12 additions and 2 deletions

View File

@ -23,3 +23,5 @@ and also if CONVFMT changed.
7. unary-plus: Unary plus on a string constant returned the string. 7. unary-plus: Unary plus on a string constant returned the string.
Instead, it should convert the value to numeric and give that value. Instead, it should convert the value to numeric and give that value.
X. nf-self-assign: "NF = NF" wouldn't force the record to be rebuilt.

View File

@ -0,0 +1,6 @@
BEGIN {
$0="a b c";
OFS=",";
NF = NF;
print;
}

View File

@ -0,0 +1 @@
a b c

View File

@ -0,0 +1 @@
a,b,c

4
run.c
View File

@ -1117,8 +1117,8 @@ Cell *assign(Node **a, int n) /* a[0] = a[1], a[0] += a[1], etc. */
y = execute(a[1]); y = execute(a[1]);
x = execute(a[0]); x = execute(a[0]);
if (n == ASSIGN) { /* ordinary assignment */ if (n == ASSIGN) { /* ordinary assignment */
if (x == y && !(x->tval & (FLD|REC))) /* self-assignment: */ if (x == y && !(x->tval & (FLD|REC)) && x != nfloc)
; /* leave alone unless it's a field */ ; /* self-assignment: leave alone unless it's a field or NF */
else if ((y->tval & (STR|NUM)) == (STR|NUM)) { else if ((y->tval & (STR|NUM)) == (STR|NUM)) {
setsval(x, getsval(y)); setsval(x, getsval(y));
x->fval = getfval(y); x->fval = getfval(y);