moc: handle "L" integer suffix

This commit adds some initial support for handling the 'L' suffix after
numbers. This one is especially important given that the __cplusplus
define is using it.
Other suffixes will be handled in some later commit, which should also
unify the already divergent parse behavior between DIGIT and PP_DIGIT
parsing (e.g. when it comes to byte prefixes).

Task-number: QTBUG-83160
Task-number: QTBUG-115558
Pick-to: 6.6 6.5 6.2
Change-Id: Ie61eae49c468abfaee80e7e4f7097917a254dc0e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Fabian Kosmale 2023-07-25 10:33:25 +02:00
parent a2ec43b8eb
commit f0039bd517
2 changed files with 14 additions and 3 deletions

View File

@ -225,7 +225,8 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
++data;
while (isHexDigit(*data) || *data == '\'')
++data;
}
} else if (*data == 'L') // TODO: handle other suffixes
++data;
break;
}
token = FLOATING_LITERAL;
@ -402,7 +403,8 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
++data;
while (isHexDigit(*data) || *data == '\'')
++data;
}
} else if (*data == 'L') // TODO: handle other suffixes
++data;
break;
}
token = PP_FLOATING_LITERAL;
@ -932,7 +934,11 @@ int PP_Expression::primary_expression()
test(PP_RPAREN);
} else {
next();
value = lexem().toInt(nullptr, 0);
const QByteArray &lex = lexem();
auto lexView = QByteArrayView(lex);
if (lex.endsWith('L'))
lexView.chop(1);
value = lexView.toInt(nullptr, 0);
}
return value;
}

View File

@ -638,6 +638,10 @@ private slots:
QT_WARNING_POP
// quick test to verify that moc handles the L suffix
// correctly in the preprocessor
#if 2000L < 1
#else
class PropertyTestClass : public QObject
{
Q_OBJECT
@ -647,6 +651,7 @@ public:
Q_ENUM(TestEnum)
};
#endif
class PropertyUseClass : public QObject
{