diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2012-12-25 20:44:32 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2012-12-25 20:44:32 +0200 |
commit | fe915601a150502c2561628148ec318cf738f1fa (patch) | |
tree | acc021e0a3c447c086922c22a856f166e42ed94c | |
parent | b0648b574c42f1d56253938a46f5299c95eef702 (diff) | |
download | egawk-fe915601a150502c2561628148ec318cf738f1fa.tar.gz egawk-fe915601a150502c2561628148ec318cf738f1fa.tar.bz2 egawk-fe915601a150502c2561628148ec318cf738f1fa.zip |
Additional bug fix from John Haque.
-rw-r--r-- | eval.c | 6 | ||||
-rw-r--r-- | ext.c | 9 | ||||
-rw-r--r-- | test/paramuninitglobal.awk | 17 | ||||
-rw-r--r-- | test/paramuninitglobal.ok | 4 |
4 files changed, 30 insertions, 6 deletions
@@ -1138,8 +1138,10 @@ r_get_lhs(NODE *n, int reference) if (n->orig_array->type == Node_var_array) fatal(_("attempt to use array `%s' in a scalar context"), array_vname(n)); - n->orig_array->type = Node_var; - n->orig_array->var_value = Nnull_string; + if (n->orig_array->type != Node_var) { + n->orig_array->type = Node_var; + n->orig_array->var_value = Nnull_string; + } /* fall through */ case Node_var_new: n->type = Node_var; @@ -229,8 +229,15 @@ get_argument(int i) t = GET_PARAM(i); - if (t->type == Node_array_ref) + if (t->type == Node_array_ref) { + if (t->orig_array->type == Node_var) { + /* already a scalar, can no longer use it as array */ + t->type = Node_var; + t->var_value = Nnull_string; + return t; + } return t->orig_array; /* Node_var_new or Node_var_array */ + } if (t->type == Node_var_new || t->type == Node_var_array) return t; return t->var_value; diff --git a/test/paramuninitglobal.awk b/test/paramuninitglobal.awk index b59bb248..0d7989d9 100644 --- a/test/paramuninitglobal.awk +++ b/test/paramuninitglobal.awk @@ -1,2 +1,15 @@ -function f(x) { a=10; print x; print a} -BEGIN { f(a) } +function f(x) +{ + a = 10 + x = 90 + print x + print a + a++ + x++ + print x +} + +BEGIN { + f(a) + print a +} diff --git a/test/paramuninitglobal.ok b/test/paramuninitglobal.ok index 069c2ae6..ce1879d7 100644 --- a/test/paramuninitglobal.ok +++ b/test/paramuninitglobal.ok @@ -1,2 +1,4 @@ - +90 10 +91 +11 |