mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-15 04:32:24 +00:00
Symptom: $ ksh -c 'command enum -i P_t=(a b); P_t -A v=([f]=b); typeset -p v' ksh: syntax error at line 1: `(' unexpected Expected: no syntax error, and output of 'P_t -A v=([f]=b)'. src/cmd/ksh93/sh/parse.c: check_typedef(): - For enum, skip over any possible 'command' prefixes before pre-parsing options with optget (or, technically, skip anything else that might come before 'enum', though I don't think anything else is possible). - The sh_addbuiltin() call at the end to pre-add the builtin obtained the node pointer to the built-in and the node flags from the parser tree. This did not work if a 'command' prefix was present. However, we don't actually need this. For parsing purposes, the BLT_DCL flag for a declaration built-in is sufficient; this is what gets the parser to accept assignment-arguments including parentheses. So just apply that. In addition, let's point it to an actual dummy built-in, 'true' (SYSTRUE), so that if a user does run something like 'if false; then enum Foo_t=(...); fi', the leaked Foo_t dummy at least won't do anything (not even crash). |
||
---|---|---|
.. | ||
cmd | ||
lib | ||
Mamfile |