summaryrefslogtreecommitdiff
path: root/Src
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
parent5a32ced1be6baf4bafce1057b02376adcc58914f (diff)
downloadzsh-4b8db48c6bd3c0230a5d81f49e478857adf9cda8.tar.gz
zsh-4b8db48c6bd3c0230a5d81f49e478857adf9cda8.zip
40640: the (A) parameter flag forces array result even if assignment syntax is not used
Diffstat (limited to 'Src')
-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;