aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2014-11-16 19:43:18 +0200
committerArnold D. Robbins <arnold@skeeve.com>2014-11-16 19:43:18 +0200
commitee77f64d563188b6a5d761fd9342df00431e99d8 (patch)
tree24a5c830c75c62375ea126a3d8b9c5b38276a239
parent8b863f8852067b0638e09dc7c82355b96381dc12 (diff)
downloadegawk-ee77f64d563188b6a5d761fd9342df00431e99d8.tar.gz
egawk-ee77f64d563188b6a5d761fd9342df00431e99d8.tar.bz2
egawk-ee77f64d563188b6a5d761fd9342df00431e99d8.zip
Revert field reference changes of 2014-11-11.
-rw-r--r--ChangeLog5
-rw-r--r--interpret.h24
2 files changed, 9 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog
index 864ea364..0facf7a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2014-11-16 Arnold D. Robbins <arnold@skeeve.com>
+
+ * interpret.h: Revert change of 2014-11-11 since it breaks
+ certain uses.
+
2014-11-15 Arnold D. Robbins <arnold@skeeve.com>
* array.c, awk.h, awkgram.y, builtin.c, dfa.c, eval.c, field.c,
diff --git a/interpret.h b/interpret.h
index 83ccbfc5..74f56c73 100644
--- a/interpret.h
+++ b/interpret.h
@@ -340,12 +340,7 @@ uninitialized_scalar:
lhs = r_get_field(t1, (Func_ptr *) 0, true);
decr_sp();
DEREF(t1);
- /* only for $0, up ref count */
- if (*lhs == fields_arr[0]) {
- r = *lhs;
- UPREF(r);
- } else
- r = dupnode(*lhs);
+ r = dupnode(*lhs); /* can't use UPREF here */
PUSH(r);
break;
@@ -654,22 +649,11 @@ mod:
lhs = get_lhs(pc->memory, false);
unref(*lhs);
r = pc->initval; /* constant initializer */
- if (r != NULL) {
+ if (r == NULL)
+ *lhs = POP_SCALAR();
+ else {
UPREF(r);
*lhs = r;
- } else {
- r = POP_SCALAR();
-
- /* if was a field, turn it into a var */
- if ((r->flags & FIELD) == 0) {
- *lhs = r;
- } else if (r->valref == 1) {
- r->flags &= ~FIELD;
- *lhs = r;
- } else {
- *lhs = dupnode(r);
- DEREF(r);
- }
}
break;