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:
|
case PP_DEFINE:
|
||||||
{
|
{
|
||||||
next(IDENTIFIER);
|
next();
|
||||||
QByteArray name = lexem();
|
QByteArray name = lexem();
|
||||||
|
if (name.isEmpty() || !is_ident_start(name[0]))
|
||||||
|
error();
|
||||||
Macro macro;
|
Macro macro;
|
||||||
macro.isVariadic = false;
|
macro.isVariadic = false;
|
||||||
Token t = next();
|
if (test(LPAREN)) {
|
||||||
if (t == LPAREN) {
|
|
||||||
// we have a function macro
|
// we have a function macro
|
||||||
macro.isFunction = true;
|
macro.isFunction = true;
|
||||||
parseDefineArguments(¯o);
|
parseDefineArguments(¯o);
|
||||||
} else if (t == PP_WHITESPACE){
|
|
||||||
macro.isFunction = false;
|
|
||||||
} else {
|
} else {
|
||||||
error("Moc: internal error");
|
macro.isFunction = false;
|
||||||
}
|
}
|
||||||
int start = index;
|
int start = index;
|
||||||
until(PP_NEWLINE);
|
until(PP_NEWLINE);
|
||||||
@ -1160,7 +1159,7 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
case PP_UNDEF: {
|
case PP_UNDEF: {
|
||||||
next(IDENTIFIER);
|
next();
|
||||||
QByteArray name = lexem();
|
QByteArray name = lexem();
|
||||||
until(PP_NEWLINE);
|
until(PP_NEWLINE);
|
||||||
macros.remove(name);
|
macros.remove(name);
|
||||||
|
@ -146,6 +146,15 @@ signals:
|
|||||||
|
|
||||||
#undef QString
|
#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
|
PD_END_NAMESPACE
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user