diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-02-17 11:39:16 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-02-17 11:39:16 +0100 |
commit | dbafabb019eac6ab21b43279b3a348e4afbd065e (patch) | |
tree | 24245148e3f0b948df06823d879f9158d1b81d2f /src/tools | |
parent | 00b96399e6d3bcd7a1081721cafeb15da3ab9781 (diff) | |
parent | 9de2853a942529f88815ed29375ff4efc44d168c (diff) |
Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
src/corelib/global/qglobal.h
Change-Id: I03d8b6e07135056baaa1d97c3c63fbe8b25583d9
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/moc/moc.cpp | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 2c3f795346..ea4838c8f2 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -224,14 +224,11 @@ Type Moc::parseType() ; } if (test(LANGLE)) { - QByteArray templ = lexemUntil(RANGLE); - for (int i = 0; i < templ.size(); ++i) { - type.name += templ.at(i); - if ((templ.at(i) == '<' && i+1 < templ.size() && templ.at(i+1) == ':') - || (templ.at(i) == '>' && i+1 < templ.size() && templ.at(i+1) == '>')) { - type.name += ' '; - } + if (type.name.isEmpty()) { + // '<' cannot start a type + return type; } + type.name += lexemUntil(RANGLE); } if (test(SCOPE)) { type.name += lexem(); @@ -1402,10 +1399,14 @@ QByteArray Moc::lexemUntil(Token target) QByteArray s; while (from <= index) { QByteArray n = symbols.at(from++-1).lexem(); - if (s.size() && n.size() - && is_ident_char(s.at(s.size()-1)) - && is_ident_char(n.at(0))) - s += ' '; + if (s.size() && n.size()) { + char prev = s.at(s.size()-1); + char next = n.at(0); + if ((is_ident_char(prev) && is_ident_char(next)) + || (prev == '<' && next == ':') + || (prev == '>' && next == '>')) + s += ' '; + } s += n; } return s; @@ -1440,9 +1441,20 @@ bool Moc::until(Token target) { case RBRACK: --brackCount; break; case LPAREN: ++parenCount; break; case RPAREN: --parenCount; break; - case LANGLE: ++angleCount; break; - case RANGLE: --angleCount; break; - case GTGT: angleCount -= 2; t = RANGLE; break; + case LANGLE: + if (parenCount == 0 && braceCount == 0 && parenCount == 0) + ++angleCount; + break; + case RANGLE: + if (parenCount == 0 && braceCount == 0) + --angleCount; + break; + case GTGT: + if (parenCount == 0 && braceCount == 0) { + angleCount -= 2; + t = RANGLE; + } + break; default: break; } if (t == target |