summaryrefslogtreecommitdiff
path: root/Src/exec.c
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2024-03-04 21:07:01 -0800
committerBart Schaefer <schaefer@zsh.org>2024-03-04 21:07:01 -0800
commit610b18875ad9f4498a57e9af6903bcac3b14ff46 (patch)
tree44123f9fbd7650323f320cb81b4ed05448dd36d1 /Src/exec.c
parent05c7b21e2b30873d002b50b37e2fbd3803d4b608 (diff)
downloadzsh-610b18875ad9f4498a57e9af6903bcac3b14ff46.tar.gz
zsh-610b18875ad9f4498a57e9af6903bcac3b14ff46.zip
52650 plus minor fixes: add -u for named references pointing to "upper" scope
Diffstat (limited to 'Src/exec.c')
-rw-r--r--Src/exec.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/Src/exec.c b/Src/exec.c
index d85adbea5..0231bc361 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -2604,6 +2604,17 @@ addvars(Estate state, Wordcode pc, int addflags)
opts[ALLEXPORT] = allexp;
} else
pm = assignsparam(name, val, myflags);
+ if (!pm) {
+ lastval = 1;
+ /*
+ * This is cheating but some exec functions propagate
+ * assignment status only from command substitution
+ *
+ * zerr("%s: assignment failed", name);
+ */
+ if (!cmdoutval)
+ cmdoutval = 1;
+ }
if (errflag) {
state->pc = opc;
return;
@@ -2628,7 +2639,16 @@ addvars(Estate state, Wordcode pc, int addflags)
}
fprintf(xtrerr, ") ");
}
- assignaparam(name, arr, myflags);
+ if (!assignaparam(name, arr, myflags)) {
+ lastval = 1;
+ /*
+ * See above RE "cheating"
+ *
+ * zerr("%s: array assignment failed", name);
+ */
+ if (!cmdoutval)
+ cmdoutval = 1;
+ }
if (errflag) {
state->pc = opc;
return;