diff options
author | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2015-06-21 21:23:08 +0100 |
---|---|---|
committer | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2015-06-21 21:23:08 +0100 |
commit | 072dcfe54546f87cac6485460ba453de4a228c0f (patch) | |
tree | 53d1ac235b6c5534d7ad41cf3e23c19366a942db /Src/parse.c | |
parent | b7b67d456e40183d952fa0c7793367ebbc6e320c (diff) | |
download | zsh-072dcfe54546f87cac6485460ba453de4a228c0f.tar.gz zsh-072dcfe54546f87cac6485460ba453de4a228c0f.tar.xz zsh-072dcfe54546f87cac6485460ba453de4a228c0f.zip |
Consistent use of reserved word interface for typeset.
Don't try to use array type if we have an existing hash we can use.
Diffstat (limited to 'Src/parse.c')
-rw-r--r-- | Src/parse.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/Src/parse.c b/Src/parse.c index a95ec6028..5357851b8 100644 --- a/Src/parse.c +++ b/Src/parse.c @@ -131,13 +131,11 @@ struct heredocs *hdocs; * - followed by strings * * WC_TYPESET - * Variant of WC_SIMPLE used when trailing assignments are - * needed. N.B.: if they are not, we use WC_SIMPLE even - * if this is a TYPESET keyword. + * Variant of WC_SIMPLE used when TYPESET reserved word found. * - data contains the number of string arguments (plus command) * - followed by strings * - followed by number of assignments - * - followed by assignments + * - followed by assignments if non-zero number. * * WC_SUBSH * - data unused @@ -1728,7 +1726,7 @@ static int par_simple(int *cmplx, int nr) { int oecused = ecused, isnull = 1, r, argc = 0, p, isfunc = 0, sr = 0; - int c = *cmplx, nrediradd, assignments = 0, ppost = 0; + int c = *cmplx, nrediradd, assignments = 0, ppost = 0, is_typeset = 0; wordcode postassigns = 0; r = ecused; @@ -1814,7 +1812,7 @@ par_simple(int *cmplx, int nr) incmdpos = 0; if (tok == TYPESET) - intypeset = 1; + intypeset = is_typeset = 1; if (!isset(IGNOREBRACES) && *tokstr == Inbrace) { @@ -2024,9 +2022,12 @@ par_simple(int *cmplx, int nr) intypeset = 0; if (!isfunc) { - if (postassigns) { + if (is_typeset) { ecbuf[p] = WCB_TYPESET(argc); - ecbuf[ppost] = postassigns; + if (postassigns) + ecbuf[ppost] = postassigns; + else + ecadd(0); } else ecbuf[p] = WCB_SIMPLE(argc); } |