moc: Don't error out when defining a keyword
Normaly, in C++ It's not valid to define a keyword, but it turns out that some system header do, so we just silently accept it. [ChangeLog][moc] moc no longer errors out if a C++ keyword is #define'ed Task-number: QTBUG-61204 Change-Id: Ia4d3ff9c77b6ff261b6140c220cfb81bd13f1d6d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
parent
74111ce590
commit
94a2aec05b
@ -1109,19 +1109,18 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
|
||||
}
|
||||
case PP_DEFINE:
|
||||
{
|
||||
next(IDENTIFIER);
|
||||
next();
|
||||
QByteArray name = lexem();
|
||||
if (name.isEmpty() || !is_ident_start(name[0]))
|
||||
error();
|
||||
Macro macro;
|
||||
macro.isVariadic = false;
|
||||
Token t = next();
|
||||
if (t == LPAREN) {
|
||||
if (test(LPAREN)) {
|
||||
// we have a function macro
|
||||
macro.isFunction = true;
|
||||
parseDefineArguments(¯o);
|
||||
} else if (t == PP_WHITESPACE){
|
||||
macro.isFunction = false;
|
||||
} else {
|
||||
error("Moc: internal error");
|
||||
macro.isFunction = false;
|
||||
}
|
||||
int start = index;
|
||||
until(PP_NEWLINE);
|
||||
@ -1160,7 +1159,7 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
|
||||
continue;
|
||||
}
|
||||
case PP_UNDEF: {
|
||||
next(IDENTIFIER);
|
||||
next();
|
||||
QByteArray name = lexem();
|
||||
until(PP_NEWLINE);
|
||||
macros.remove(name);
|
||||
|
@ -146,6 +146,15 @@ signals:
|
||||
|
||||
#undef QString
|
||||
|
||||
#ifdef Q_MOC_RUN
|
||||
// Normaly, redefining keywords is forbidden, but we should not abort parsing
|
||||
#define and &&
|
||||
#define and_eq &=
|
||||
#define bitand &
|
||||
#define true 1
|
||||
#undef true
|
||||
#endif
|
||||
|
||||
PD_END_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user