aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--awkgram.c6
-rw-r--r--awkgram.y6
-rw-r--r--profile.c1
4 files changed, 9 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index b00a5c22..5f27a324 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-06-22 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awkgram.y (snode): Make isarray not scalarize untyped parameters
+ also.
+ * profile.c (pprint): Add Op_push_arg_untyped.
+
2015-06-21 Arnold D. Robbins <arnold@skeeve.com>
Fixes for typeof - Don't let typeof change an untyped variable
diff --git a/awkgram.c b/awkgram.c
index ade5ed6a..6dc4b334 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -6697,11 +6697,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
if (arg->nexti == arg->lasti && arg->nexti->opcode == Op_push)
arg->nexti->opcode = Op_push_arg; /* argument may be array */
}
- } else if (r->builtin == do_isarray) {
- arg = subn->nexti;
- if (arg->nexti == arg->lasti && arg->nexti->opcode == Op_push)
- arg->nexti->opcode = Op_push_arg; /* argument may be array */
- } else if (r->builtin == do_typeof) {
+ } else if (r->builtin == do_isarray || r->builtin == do_typeof) {
arg = subn->nexti;
if (arg->nexti == arg->lasti && arg->nexti->opcode == Op_push)
arg->nexti->opcode = Op_push_arg_untyped; /* argument may be untyped */
diff --git a/awkgram.y b/awkgram.y
index d2503697..e9b66ba6 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -4277,11 +4277,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
if (arg->nexti == arg->lasti && arg->nexti->opcode == Op_push)
arg->nexti->opcode = Op_push_arg; /* argument may be array */
}
- } else if (r->builtin == do_isarray) {
- arg = subn->nexti;
- if (arg->nexti == arg->lasti && arg->nexti->opcode == Op_push)
- arg->nexti->opcode = Op_push_arg; /* argument may be array */
- } else if (r->builtin == do_typeof) {
+ } else if (r->builtin == do_isarray || r->builtin == do_typeof) {
arg = subn->nexti;
if (arg->nexti == arg->lasti && arg->nexti->opcode == Op_push)
arg->nexti->opcode = Op_push_arg_untyped; /* argument may be untyped */
diff --git a/profile.c b/profile.c
index 0f686768..90f01c07 100644
--- a/profile.c
+++ b/profile.c
@@ -317,6 +317,7 @@ pprint(INSTRUCTION *startp, INSTRUCTION *endp, bool in_for_header)
case Op_push_array:
case Op_push:
case Op_push_arg:
+ case Op_push_arg_untyped:
m = pc->memory;
switch (m->type) {
case Node_param_list: