summaryrefslogtreecommitdiffstats
path: root/src/tools/moc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/moc')
-rw-r--r--src/tools/moc/generator.cpp4
-rw-r--r--src/tools/moc/moc.cpp5
-rw-r--r--src/tools/moc/parser.cpp4
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);
}