From 98e28ff3ed5268c3bff8a81b18dc02331ff741c5 Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Tue, 6 Apr 2004 13:00:50 +0000 Subject: 19712, 19740: allow assigning to associations with i and r subscript flags --- Src/params.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'Src') diff --git a/Src/params.c b/Src/params.c index 134355173..26ff2c566 100644 --- a/Src/params.c +++ b/Src/params.c @@ -381,6 +381,7 @@ scancountparams(HashNode hn, int flags) static Patprog scanprog; static char *scanstr; static char **paramvals; +static Param foundparam; /**/ void @@ -404,6 +405,7 @@ scanparamvals(HashNode hn, int flags) } else if ((flags & SCANPM_MATCHKEY) && !pattry(scanprog, v.pm->nam)) { return; } + foundparam = v.pm; if (flags & SCANPM_WANTKEYS) { paramvals[numparamvals++] = v.pm->nam; if (!(flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL))) @@ -1598,7 +1600,7 @@ setstrvalue(Value v, char *val) zsfree(val); return; } - if (v->pm->flags & PM_HASHED) { + if ((v->pm->flags & PM_HASHED) && (v->isarr & SCANPM_MATCHMANY)) { zerr("%s: attempt to set slice of associative array", v->pm->nam, 0); zsfree(val); return; @@ -1663,6 +1665,11 @@ setstrvalue(Value v, char *val) setarrvalue(v, ss); } break; + case PM_HASHED: + { + (foundparam->sets.cfn) (foundparam, val); + } + break; } if ((!v->pm->env && !(v->pm->flags & PM_EXPORTED) && !(isset(ALLEXPORT) && !(v->pm->flags & PM_HASHELEM))) || -- cgit 1.4.1