aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2012-12-25 20:44:32 +0200
committerArnold D. Robbins <arnold@skeeve.com>2012-12-25 20:44:32 +0200
commitfe915601a150502c2561628148ec318cf738f1fa (patch)
treeacc021e0a3c447c086922c22a856f166e42ed94c
parentb0648b574c42f1d56253938a46f5299c95eef702 (diff)
downloadegawk-fe915601a150502c2561628148ec318cf738f1fa.tar.gz
egawk-fe915601a150502c2561628148ec318cf738f1fa.tar.bz2
egawk-fe915601a150502c2561628148ec318cf738f1fa.zip
Additional bug fix from John Haque.
-rw-r--r--eval.c6
-rw-r--r--ext.c9
-rw-r--r--test/paramuninitglobal.awk17
-rw-r--r--test/paramuninitglobal.ok4
4 files changed, 30 insertions, 6 deletions
diff --git a/eval.c b/eval.c
index 9081a774..018c09c6 100644
--- a/eval.c
+++ b/eval.c
@@ -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;
diff --git a/ext.c b/ext.c
index f3e783da..bb090d0f 100644
--- a/ext.c
+++ b/ext.c
@@ -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