Fix moc preprocessor-only mode with input that contains seemingly invalid identifiers
authorSimon Hausmann <simon.hausmann@digia.com>
Fri, 12 Oct 2012 12:06:19 +0000 (14:06 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Sat, 13 Oct 2012 03:51:19 +0000 (05:51 +0200)
commit9ab8c0ae98f2e488f362484c2c2d1dc6a5ae1d1e
tree34c670430061488191c44721dd357976ae1d6229
parenteda0e120e9e2e7b7be747f4ed035d686c9547769
Fix moc preprocessor-only mode with input that contains seemingly invalid identifiers

In WebKit we use moc -E to pre-process various files before throwing at
further build creation tools. The pre-processing is used to filter out
code depending in #ifdef'fed features.

The latest addition to the family of pre-processed files is the CSS grammar,
which is written in Bison. It contains rule lines like

   $$ = parser->createFoo()

and when pre-processing this moc stumbles over the dollar sign. Instead
of ignoring un-tokenizable input we should add it to the current token
if we're in preprocessor-only mode, otherwise the $$ gets eaten and we
produce data-loss by printing out less characters than.

Change-Id: Ib32e7c04b38dd2ba3726201e76f27405f7ea6c0d
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
src/tools/moc/preprocessor.cpp
tests/auto/tools/moc/pp-dollar-signs.h [new file with mode: 0644]
tests/auto/tools/moc/tst_moc.cpp