aboutsummaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2011-05-08 20:52:33 +0300
committerArnold D. Robbins <arnold@skeeve.com>2011-05-08 20:52:33 +0300
commit783ae783275b5fab9104b711ac3d531dcc454d96 (patch)
tree6ca6498b6b62e8a744990b65fa09fba71f63daad /eval.c
parent7c20cc42ca1b77a2f3caddab543839efe897eeb0 (diff)
downloadegawk-783ae783275b5fab9104b711ac3d531dcc454d96.tar.gz
egawk-783ae783275b5fab9104b711ac3d531dcc454d96.tar.bz2
egawk-783ae783275b5fab9104b711ac3d531dcc454d96.zip
More array sorting fixes.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c27
1 files changed, 10 insertions, 17 deletions
diff --git a/eval.c b/eval.c
index 02ca13e3..4132474a 100644
--- a/eval.c
+++ b/eval.c
@@ -1763,18 +1763,15 @@ top:
t1 = POP_ARRAY();
r = in_array(t1, t2);
if (r == NULL) {
- const char *arr_name = make_aname(t1, t2);
getnode(r);
r->type = Node_var_array;
r->var_array = NULL;
- r->vname = estrdup(arr_name, strlen(arr_name));
+ r->vname = estrdup(t2->stptr, t2->stlen); /* the subscript in parent array */
r->parent_array = t1;
*assoc_lookup(t1, t2, FALSE) = r;
- } else if (r->type != Node_var_array) {
- const char *arr_name = make_aname(t1, t2);
- DEREF(t2);
- fatal(_("attempt to use scalar `%s' as an array"), arr_name);
- }
+ } else if (r->type != Node_var_array)
+ fatal(_("attempt to use scalar `%s[\"%.*s\"]' as an array"),
+ array_vname(t1), (int) t2->stlen, t2->stptr);
DEREF(t2);
PUSH(r);
break;
@@ -1783,11 +1780,9 @@ top:
t2 = mk_sub(pc->sub_count);
t1 = POP_ARRAY();
lhs = assoc_lookup(t1, t2, pc->do_reference);
- if ((*lhs)->type == Node_var_array) {
- const char *arr_name = make_aname(t1, t2);
- DEREF(t2);
- fatal(_("attempt to use array `%s' in a scalar context"), arr_name);
- }
+ if ((*lhs)->type == Node_var_array)
+ fatal(_("attempt to use array `%s[\"%.*s\"]' in a scalar context"),
+ array_vname(t1), (int) t2->stlen, t2->stptr);
DEREF(t2);
PUSH_ADDRESS(lhs);
break;
@@ -2031,11 +2026,9 @@ post:
t1 = get_array(pc->memory, TRUE); /* array */
t2 = mk_sub(pc->expr_count); /* subscript */
lhs = assoc_lookup(t1, t2, FALSE);
- if ((*lhs)->type == Node_var_array) {
- const char *arr_name = make_aname(t1, t2);
- DEREF(t2);
- fatal(_("attempt to use array `%s' in a scalar context"), arr_name);
- }
+ if ((*lhs)->type == Node_var_array)
+ fatal(_("attempt to use array `%s[\"%.*s\"]' in a scalar context"),
+ array_vname(t1), (int) t2->stlen, t2->stptr);
DEREF(t2);
unref(*lhs);
*lhs = POP_SCALAR();