diff options
author | Tanaka Akira <akr@users.sourceforge.net> | 1999-08-30 00:13:14 +0000 |
---|---|---|
committer | Tanaka Akira <akr@users.sourceforge.net> | 1999-08-30 00:13:14 +0000 |
commit | 1a6b62b43d645851d96e21f8c2c3f4c7a2e4b475 (patch) | |
tree | 3f8df3ddb61e6e813d9eecd36f329db92e23c0c3 /Src/params.c | |
parent | 7dffe765c708af25e0bb4ecf826188299f9b689f (diff) | |
download | zsh-1a6b62b43d645851d96e21f8c2c3f4c7a2e4b475.tar.gz zsh-1a6b62b43d645851d96e21f8c2c3f4c7a2e4b475.tar.xz zsh-1a6b62b43d645851d96e21f8c2c3f4c7a2e4b475.zip |
manual/7527
Diffstat (limited to 'Src/params.c')
-rw-r--r-- | Src/params.c | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/Src/params.c b/Src/params.c index 48d6bcf8a..2d04a36b4 100644 --- a/Src/params.c +++ b/Src/params.c @@ -1217,7 +1217,8 @@ fetchvalue(char **pptr, int bracks, int flags) *pptr = s; return v; } - } else if (v->isarr && iident(*t) && isset(KSHARRAYS)) + } else if (!(flags & SCANPM_ASSIGNING) && v->isarr && + iident(*t) && isset(KSHARRAYS)) v->b = 0, v->isarr = 0; } if (!bracks && *s) @@ -1649,7 +1650,7 @@ setaparam(char *s, char **val) } v = NULL; } else { - if (!(v = getvalue(&s, 1))) + if (!(v = fetchvalue(&s, 1, SCANPM_ASSIGNING))) createparam(t, PM_ARRAY); else if (!(PM_TYPE(v->pm->flags) & (PM_ARRAY|PM_HASHED)) && !(v->pm->flags & (PM_SPECIAL|PM_TIED))) { @@ -1660,11 +1661,8 @@ setaparam(char *s, char **val) } } if (!v) - if (!(v = getvalue(&t, 1))) + if (!(v = fetchvalue(&t, 1, SCANPM_ASSIGNING))) return NULL; - if (isset(KSHARRAYS) && !ss) - /* the whole array should be set instead of only the first element */ - v->b = -1; setarrvalue(v, val); return v->pm; } @@ -1688,7 +1686,7 @@ sethparam(char *s, char **val) errflag = 1; return NULL; } else { - if (!(v = getvalue(&s, 1))) + if (!(v = fetchvalue(&s, 1, SCANPM_ASSIGNING))) createparam(t, PM_HASHED); else if (!(PM_TYPE(v->pm->flags) & PM_HASHED) && !(v->pm->flags & PM_SPECIAL)) { @@ -1697,14 +1695,9 @@ sethparam(char *s, char **val) v = NULL; } } - if (!v) { - int k = opts[KSHARRAYS]; /* Remember the value of KSHARRAYS */ - opts[KSHARRAYS] = 0; /* and clear it to avoid special- */ - v = getvalue(&t, 1); /* case of $array --> ${array[0]}. */ - opts[KSHARRAYS] = k; /* OK because we can't assign to a */ - if (!v) /* slice of an association anyway, */ - return NULL; /* so ANY subscript will be wrong. */ - } + if (!v) + if (!(v = fetchvalue(&t, 1, SCANPM_ASSIGNING))) + return NULL; setarrvalue(v, val); return v->pm; } |