1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-09-28 06:49:49 +02:00

42101 (tweaked): assigning shell status to array was broken

This commit is contained in:
dana 2017-12-10 12:17:30 -06:00 committed by Peter Stephenson
parent fa441fa20e
commit 805192311f
3 changed files with 48 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2018-05-11 Peter Stephenson <p.stephenson@samsung.com>
* 42101 (tweaked): dana: Src/exec.c, Test/A06assign.ztst:
assigning shell status to array was broken.
* Src/exec.c (execcmd_exec):
2018-05-08 Peter Stephenson <p.stephenson@samsung.com>
* 42752: Completion/Unx/Command/_git: better completion

View File

@ -2750,7 +2750,7 @@ execcmd_exec(Estate state, Execcmd_params eparams,
char *text;
int save[10];
int fil, dfil, is_cursh, do_exec = 0, redir_err = 0, i;
int nullexec = 0, magic_assign = 0, forked = 0;
int nullexec = 0, magic_assign = 0, forked = 0, old_lastval;
int is_shfunc = 0, is_builtin = 0, is_exec = 0, use_defpath = 0;
/* Various flags to the command. */
int cflags = 0, orig_cflags = 0, checked = 0, oautocont = -1;
@ -2775,6 +2775,7 @@ execcmd_exec(Estate state, Execcmd_params eparams,
* If assignment but no command get the status from variable
* assignment.
*/
old_lastval = lastval;
if (!args && varspc)
lastval = errflag ? errflag : cmdoutval;
/*
@ -3209,8 +3210,11 @@ execcmd_exec(Estate state, Execcmd_params eparams,
return;
}
cmdoutval = use_cmdoutval ? lastval : 0;
if (varspc)
if (varspc) {
/* Make sure $? is still correct for assignment */
lastval = old_lastval;
addvars(state, varspc, 0);
}
if (errflag)
lastval = 1;
else

View File

@ -199,6 +199,41 @@
>a 1 2 3
>a 1 2 3
# tests of array assignment using lastval ($?)
true
array=( $? )
print $array
0:Assign $? to array (true)
>0
false
array=( $? )
print $array
0:Assign $? to array (false)
>1
true
typeset array=( $? )
print $array
0:Assign $? to array with typeset (true)
>0
false
typeset array=( $? )
print $array
0:Assign $? to array with typeset (false)
>1
array=( )
true
array+=( $? )
false
array+=( $? )
print $array
0:Append $? to array (true+false)
>0 1
# tests of var+=scalar
s+=foo