mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-12-29 16:25:35 +01:00
48379: Make the parameter expansion subscript flags parse error message, "error in flags", identify the location of the parse error.
This commit is contained in:
parent
295fbc0998
commit
4ba9008ec7
3 changed files with 34 additions and 3 deletions
|
@ -1,5 +1,9 @@
|
|||
2021-04-08 Daniel Shahaf <d.s@daniel.shahaf.name>
|
||||
|
||||
* 48379: Src/subst.c, Test/D04parameter.ztst: Make the parameter
|
||||
expansion subscript flags parse error message, "error in flags",
|
||||
identify the location of the parse error.
|
||||
|
||||
* 48321 (tweaked per thread): Completion/Unix/Type/_perl_modules:
|
||||
Don't assume ${words[1]} to be either "perl" or "perldoc"
|
||||
|
||||
|
|
28
Src/subst.c
28
Src/subst.c
|
@ -2259,9 +2259,31 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
|
|||
break;
|
||||
|
||||
default:
|
||||
flagerr:
|
||||
zerr("error in flags");
|
||||
return NULL;
|
||||
flagerr:
|
||||
{
|
||||
/*
|
||||
* We're trying to output the string that failed to
|
||||
* parse and the offset of the parse error within that.
|
||||
*
|
||||
* The string is *str. It hasn't been changed since
|
||||
* entry to this function, I think, except that the
|
||||
* first non-variable-declaration line in this function
|
||||
* (currently the 238th line in this function)
|
||||
* writes a NUL to the first place in *str, so we'll
|
||||
* compensate by outputting the dollar sign manually.
|
||||
*/
|
||||
char *str_copy_for_output = dupstring(*str + 1);
|
||||
|
||||
/*
|
||||
* Convert to a 1-based offset, because the shell
|
||||
* language is 1-based by default.
|
||||
*/
|
||||
zlong offset = s - *str + 1;
|
||||
|
||||
untokenize(str_copy_for_output);
|
||||
zerr("error in flags near position %z in '$%s'", offset, str_copy_for_output);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
s++;
|
||||
|
|
|
@ -2691,3 +2691,8 @@ F:behavior, see http://austingroupbugs.net/view.php?id=888
|
|||
eval 'echo $(\*)'
|
||||
0:Backslash character other than newline is normal after $(
|
||||
>What a star
|
||||
|
||||
: ${(zZ+x+):-}
|
||||
1:parameter expansion flags parsing error gives a clue
|
||||
?(eval):1: error in flags near position 7 in '${(zZ+x+):-}'
|
||||
|
||||
|
|
Loading…
Reference in a new issue