about summary refs log tree commit diff
path: root/Src/subst.c
diff options
context:
space:
mode:
authorBarton E. Schaefer <schaefer@zsh.org>2017-02-25 15:55:14 -0800
committerBarton E. Schaefer <schaefer@zsh.org>2017-02-25 15:56:50 -0800
commit4b8db48c6bd3c0230a5d81f49e478857adf9cda8 (patch)
treeae8f9c4f60e57ebdbda0abeeebee6f0024f7f5f5 /Src/subst.c
parent5a32ced1be6baf4bafce1057b02376adcc58914f (diff)
downloadzsh-4b8db48c6bd3c0230a5d81f49e478857adf9cda8.tar.gz
zsh-4b8db48c6bd3c0230a5d81f49e478857adf9cda8.tar.xz
zsh-4b8db48c6bd3c0230a5d81f49e478857adf9cda8.zip
40640: the (A) parameter flag forces array result even if assignment syntax is not used
Diffstat (limited to 'Src/subst.c')
-rw-r--r--Src/subst.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/Src/subst.c b/Src/subst.c
index 4df53bdb7..02dbe2864 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -2902,6 +2902,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
 		    } else
 			setaparam(idbeg, a);
 		    isarr = 1;
+		    arrasg = 0;
 		} else {
 		    untokenize(val);
 		    setsparam(idbeg, ztrdup(val));
@@ -3784,6 +3785,16 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
 	insertlinknode(l, n, dupstring(fstr)); /* appended, no incnode */
 	*fstr = '\0';
     }
+    if (arrasg && !isarr) {
+	/*
+	 * Caller requested this be forced to an array even if scalar.
+	 * Any point in distinguishing arrasg == 2 (assoc array) here?
+	 */
+	l->list.flags |= LF_ARRAY;
+	aval = hmkarray(val);
+	isarr = 1;
+	DPUTS(!val, "value is NULL in paramsubst, empty array");
+    }
     if (isarr) {
 	char *x;
 	char *y;