moc: Fix parsing of digit separator
[ChangeLog][moc] Fixed parsing errors in presence of C++14 digit separators. Task-number: QTBUG-59351 Change-Id: Iea38ea7388853d84b819c2beb78a59371f57bf7d Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
parent
b53d7664c9
commit
11d60dcad6
@ -236,7 +236,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
||||
data -= 2;
|
||||
break;
|
||||
case DIGIT:
|
||||
while (is_digit_char(*data))
|
||||
while (is_digit_char(*data) || *data == '\'')
|
||||
++data;
|
||||
if (!*data || *data != '.') {
|
||||
token = INTEGER_LITERAL;
|
||||
@ -244,7 +244,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
||||
(*data == 'x' || *data == 'X')
|
||||
&& *lexem == '0') {
|
||||
++data;
|
||||
while (is_hex_char(*data))
|
||||
while (is_hex_char(*data) || *data == '\'')
|
||||
++data;
|
||||
}
|
||||
break;
|
||||
@ -253,13 +253,13 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
||||
++data;
|
||||
Q_FALLTHROUGH();
|
||||
case FLOATING_LITERAL:
|
||||
while (is_digit_char(*data))
|
||||
while (is_digit_char(*data) || *data == '\'')
|
||||
++data;
|
||||
if (*data == '+' || *data == '-')
|
||||
++data;
|
||||
if (*data == 'e' || *data == 'E') {
|
||||
++data;
|
||||
while (is_digit_char(*data))
|
||||
while (is_digit_char(*data) || *data == '\'')
|
||||
++data;
|
||||
}
|
||||
if (*data == 'f' || *data == 'F'
|
||||
@ -413,7 +413,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
||||
token = PP_CHARACTER_LITERAL;
|
||||
break;
|
||||
case PP_DIGIT:
|
||||
while (is_digit_char(*data))
|
||||
while (is_digit_char(*data) || *data == '\'')
|
||||
++data;
|
||||
if (!*data || *data != '.') {
|
||||
token = PP_INTEGER_LITERAL;
|
||||
@ -421,7 +421,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
||||
(*data == 'x' || *data == 'X')
|
||||
&& *lexem == '0') {
|
||||
++data;
|
||||
while (is_hex_char(*data))
|
||||
while (is_hex_char(*data) || *data == '\'')
|
||||
++data;
|
||||
}
|
||||
break;
|
||||
@ -430,13 +430,13 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
|
||||
++data;
|
||||
Q_FALLTHROUGH();
|
||||
case PP_FLOATING_LITERAL:
|
||||
while (is_digit_char(*data))
|
||||
while (is_digit_char(*data) || *data == '\'')
|
||||
++data;
|
||||
if (*data == '+' || *data == '-')
|
||||
++data;
|
||||
if (*data == 'e' || *data == 'E') {
|
||||
++data;
|
||||
while (is_digit_char(*data))
|
||||
while (is_digit_char(*data) || *data == '\'')
|
||||
++data;
|
||||
}
|
||||
if (*data == 'f' || *data == 'F'
|
||||
|
@ -521,6 +521,10 @@ public slots:
|
||||
private:
|
||||
myNS::Points m_points;
|
||||
|
||||
#ifdef Q_MOC_RUN
|
||||
int xx = 11'11; // digit separator must not confuse moc (QTBUG-59351)
|
||||
#endif
|
||||
|
||||
private slots:
|
||||
inline virtual void blub1() {}
|
||||
virtual inline void blub2() {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user