diff options
Diffstat (limited to 'src/tools/moc')
-rw-r--r-- | src/tools/moc/generator.cpp | 4 | ||||
-rw-r--r-- | src/tools/moc/moc.cpp | 5 | ||||
-rw-r--r-- | src/tools/moc/parser.cpp | 4 |
3 files changed, 9 insertions, 4 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index e6ffbe157a..44eb4f65e8 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -172,12 +172,12 @@ bool Generator::registerableMetaType(const QByteArray &propertyType) #undef STREAM_1ARG_TEMPLATE ; foreach (const QByteArray &oneArgTemplateType, oneArgTemplates) - if (propertyType.startsWith(oneArgTemplateType + "<") && !propertyType.endsWith("&")) { + if (propertyType.startsWith(oneArgTemplateType + "<") && propertyType.endsWith(">")) { const int argumentSize = propertyType.size() - oneArgTemplateType.size() - 1 // The closing '>' - 1 // templates inside templates have an extra whitespace char to strip. - - (propertyType.at(propertyType.size() - 2) == '>' ? 1 : 0 ); + - (propertyType.at(propertyType.size() - 2) == ' ' ? 1 : 0 ); const QByteArray templateArg = propertyType.mid(oneArgTemplateType.size() + 1, argumentSize); return isBuiltinType(templateArg) || registerableMetaType(templateArg); } diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 1ebb82ffad..f3bfcc3144 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -1449,6 +1449,11 @@ bool Moc::until(Token target) { --index; break; } + + if (braceCount <= 0 && t == SEMIC) { + // Abort on semicolon. Allow recovering bad template parsing (QTBUG-31218) + break; + } } if(target == COMMA && angleCount != 0 && possible != -1) { diff --git a/src/tools/moc/parser.cpp b/src/tools/moc/parser.cpp index c0591b69c0..4c754786f7 100644 --- a/src/tools/moc/parser.cpp +++ b/src/tools/moc/parser.cpp @@ -64,10 +64,10 @@ void Parser::error(int rollback) { } void Parser::error(const char *msg) { if (msg || error_msg) - qWarning(ErrorFormatString "Error: %s", + fprintf(stderr, ErrorFormatString "Error: %s\n", currentFilenames.top().constData(), symbol().lineNum, msg?msg:error_msg); else - qWarning(ErrorFormatString "Parse error at \"%s\"", + fprintf(stderr, ErrorFormatString "Parse error at \"%s\"\n", currentFilenames.top().constData(), symbol().lineNum, symbol().lexem().data()); exit(EXIT_FAILURE); } |