diff options
author | Olivier Goffart <olivier.goffart@nokia.com> | 2010-07-19 15:04:06 (GMT) |
---|---|---|
committer | Olivier Goffart <olivier.goffart@nokia.com> | 2010-07-19 16:02:05 (GMT) |
commit | 4da1a3b63445c04d4ca4acae448e9b6b046938c3 (patch) | |
tree | 001d5e9b0900a0662b0953da1f699fb332351403 /src/tools | |
parent | f19a95429a5e9b760f49152ebdf9b39474750116 (diff) | |
download | Qt-4da1a3b63445c04d4ca4acae448e9b6b046938c3.zip Qt-4da1a3b63445c04d4ca4acae448e9b6b046938c3.tar.gz Qt-4da1a3b63445c04d4ca4acae448e9b6b046938c3.tar.bz2 |
moc: Slot with complex template default value does not compile
The way we detect the end of a default argument does not take in account
template parametter.
It is unfortunatelly not trivial to do it properly without semantic information
So we will use heuristics and if the number of < matches the number of >
we consider it is a template. Or if we have a '=' we consider it is not a
template.
Task-number: QTBUG-12260
Reviewed-by: Roberto Raggi
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/moc/moc.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 10a80f3..84d1567 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -1208,6 +1208,12 @@ bool Moc::until(Token target) { default: break; } } + + //when searching commas within the default argument, we should take care of template depth (anglecount) + // unfortunatelly, we do not have enough semantic information to know if '<' is the operator< or + // the begining of a template type. so we just use heuristics. + int possible = -1; + while (index < symbols.size()) { Token t = symbols.at(index++).token; switch (t) { @@ -1226,8 +1232,16 @@ bool Moc::until(Token target) { && braceCount <= 0 && brackCount <= 0 && parenCount <= 0 - && (target != RANGLE || angleCount <= 0)) + && (target != RANGLE || angleCount <= 0)) { + if (target != COMMA || angleCount <= 0) + return true; + possible = index; + } + + if (target == COMMA && t == EQ && possible != -1) { + index = possible; return true; + } if (braceCount < 0 || brackCount < 0 || parenCount < 0 || (target == RANGLE && angleCount < 0)) { @@ -1235,6 +1249,12 @@ bool Moc::until(Token target) { break; } } + + if(target == COMMA && angleCount != 0 && possible != -1) { + index = possible; + return true; + } + return false; } |