aboutsummaryrefslogtreecommitdiffstats
path: root/interpret.h
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2014-11-17 17:05:14 +0200
committerArnold D. Robbins <arnold@skeeve.com>2014-11-17 17:05:14 +0200
commit624caa19ebb5b5a19046f0b0deb96b2e6c093685 (patch)
tree81c57102dd0e7c42aa4b5f4e9b53ef9c9621c9bd /interpret.h
parent41da6a35e2cca4ec3c6b7c61e204e51484ecd7eb (diff)
downloadegawk-624caa19ebb5b5a19046f0b0deb96b2e6c093685.tar.gz
egawk-624caa19ebb5b5a19046f0b0deb96b2e6c093685.tar.bz2
egawk-624caa19ebb5b5a19046f0b0deb96b2e6c093685.zip
Add runtime check to run old code. Easier to debug/test.
Diffstat (limited to 'interpret.h')
-rw-r--r--interpret.h47
1 files changed, 30 insertions, 17 deletions
diff --git a/interpret.h b/interpret.h
index 83ccbfc5..9910ea72 100644
--- a/interpret.h
+++ b/interpret.h
@@ -340,12 +340,16 @@ 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
+ if (do_old_mem) {
r = dupnode(*lhs);
+ } else {
+ /* only for $0, up ref count */
+ if (*lhs == fields_arr[0]) {
+ r = *lhs;
+ UPREF(r);
+ } else
+ r = dupnode(*lhs);
+ }
PUSH(r);
break;
@@ -654,21 +658,30 @@ mod:
lhs = get_lhs(pc->memory, false);
unref(*lhs);
r = pc->initval; /* constant initializer */
- if (r != NULL) {
- UPREF(r);
- *lhs = r;
- } else {
- r = POP_SCALAR();
-
- /* if was a field, turn it into a var */
- if ((r->flags & FIELD) == 0) {
+ if (do_old_mem) {
+ if (r == NULL)
+ *lhs = POP_SCALAR();
+ else {
+ UPREF(r);
*lhs = r;
- } else if (r->valref == 1) {
- r->flags &= ~FIELD;
+ }
+ } else {
+ if (r != NULL) {
+ UPREF(r);
*lhs = r;
} else {
- *lhs = dupnode(r);
- DEREF(r);
+ 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;