48379: Make the parameter expansion subscript flags parse error message, "error in flags", identify the location of the parse error.

declarednull
Daniel Shahaf 3 years ago
parent 295fbc0998
commit 4ba9008ec7

@ -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"

@ -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…
Cancel
Save