about summary refs log tree commit diff
path: root/Src/params.c
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-08-30 00:13:14 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-08-30 00:13:14 +0000
commit1a6b62b43d645851d96e21f8c2c3f4c7a2e4b475 (patch)
tree3f8df3ddb61e6e813d9eecd36f329db92e23c0c3 /Src/params.c
parent7dffe765c708af25e0bb4ecf826188299f9b689f (diff)
downloadzsh-1a6b62b43d645851d96e21f8c2c3f4c7a2e4b475.tar.gz
zsh-1a6b62b43d645851d96e21f8c2c3f4c7a2e4b475.tar.xz
zsh-1a6b62b43d645851d96e21f8c2c3f4c7a2e4b475.zip
manual/7527
Diffstat (limited to 'Src/params.c')
-rw-r--r--Src/params.c23
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;
 }