Commit 3fecf9dd authored by Rob Shearman's avatar Rob Shearman Committed by Alexandre Julliard

wpp: Fix expansion of macro bodies following the parsing of a numerical digit.

The current regular expression causes all letters and spaces (among other characters) following the appearance of a digit to be classed as a literal, including C identifiers which may need to be expanded. The expression was intended to catch the remaining characters that were not covered by the first two rules ([^a-zA-Z0-9'"#/\\\n]+ and {cident}), but the [^'"#/\\\n] expression caught {cident} as well. While one solution would have been just to catch the expression that match [a-zA-Z0-9]* that don't match {cident}, i.e. [0-9][a-zA-Z0-9]*, in the interests of avoiding unnecessary multiple LITERALs being generated and then combined during parsing the expression also includes the first expression, making it [0-9][a-zA-Z0-9]*[^a-zA-Z0-9'"#/\\\n]*.
parent 22699818
......@@ -527,7 +527,7 @@ void pp_writestring(const char *format, ...)
<pp_mbody>{cident} ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;
<pp_mbody>\#\# return tCONCAT;
<pp_mbody>\# return tSTRINGIZE;
<pp_mbody>[0-9][^'"#/\\\n]* ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
<pp_mbody>[0-9][a-zA-Z0-9]*[^a-zA-Z0-9'"#/\\\n]* ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
<pp_mbody>(\\\r?)|(\/[^/*'"#\\\n]*) ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;
<pp_mbody>\\\r?\n{ws}+ newline(0); ppy_lval.cptr = pp_xstrdup(" "); return tLITERAL;
<pp_mbody>\\\r?\n newline(0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment