summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>2009-10-29 15:48:38 (GMT)
committerOswald Buddenhagen <oswald.buddenhagen@nokia.com>2009-10-29 15:49:08 (GMT)
commit89ccbd14fe8c0e6b0fefcca2151da28d98088bf5 (patch)
tree400ad864fd7c8cdbe8b34d60d439e73f9f7f5477
parent94be7bf47fe93ca4fa6ae90f5906f6ef711f558e (diff)
downloadQt-89ccbd14fe8c0e6b0fefcca2151da28d98088bf5.zip
Qt-89ccbd14fe8c0e6b0fefcca2151da28d98088bf5.tar.gz
Qt-89ccbd14fe8c0e6b0fefcca2151da28d98088bf5.tar.bz2
do not crash
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp19
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result8
-rw-r--r--tools/linguist/lupdate/cpp.cpp12
3 files changed, 34 insertions, 5 deletions
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
index 8201add..e243e66 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
@@ -228,3 +228,22 @@ QT_TRID_NOOP("this_a_id")
//~ some thing
//% "This needs to be here. Really."
QString test = qtTrId("this_another_id", n);
+
+
+
+class YetAnotherTest : QObject {
+ Q_OBJECT
+
+ int function(void)
+ {
+ //
+ //:
+ //=
+ //~
+ //#
+ //=============
+ //~~~~~~~~~~~~~
+ //:::::::::::::
+ tr("nothing");
+ }
+};
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
index d63c7c3..26e5a65 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
@@ -278,6 +278,14 @@ backslashed \ stuff.</source>
</message>
</context>
<context>
+ <name>YetAnotherTest</name>
+ <message>
+ <location filename="main.cpp" line="247"/>
+ <source>nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>scope</name>
<message numerus="yes">
<location filename="main.cpp" line="187"/>
diff --git a/tools/linguist/lupdate/cpp.cpp b/tools/linguist/lupdate/cpp.cpp
index 6374912..4d89156 100644
--- a/tools/linguist/lupdate/cpp.cpp
+++ b/tools/linguist/lupdate/cpp.cpp
@@ -1896,25 +1896,26 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
prospectiveContext.clear();
}
break;
- case Tok_Comment:
+ case Tok_Comment: {
if (!tor)
goto case_default;
- if (yyWord.at(0) == QLatin1Char(':') && yyWord.at(1).isSpace()) {
+ const QChar *ptr = yyWord.unicode();
+ if (*ptr == QLatin1Char(':') && ptr[1].isSpace()) {
yyWord.remove(0, 2);
extracomment += yyWord;
extracomment.detach();
- } else if (yyWord.at(0) == QLatin1Char('=') && yyWord.at(1).isSpace()) {
+ } else if (*ptr == QLatin1Char('=') && ptr[1].isSpace()) {
yyWord.remove(0, 2);
msgid = yyWord.simplified();
msgid.detach();
- } else if (yyWord.at(0) == QLatin1Char('~') && yyWord.at(1).isSpace()) {
+ } else if (*ptr == QLatin1Char('~') && ptr[1].isSpace()) {
yyWord.remove(0, 2);
text = yyWord.trimmed();
int k = text.indexOf(QLatin1Char(' '));
if (k > -1)
extra.insert(text.left(k), text.mid(k + 1).trimmed());
text.clear();
- } else if (yyWord.at(0) == QLatin1Char('%') && yyWord.at(1).isSpace()) {
+ } else if (*ptr == QLatin1Char('%') && ptr[1].isSpace()) {
sourcetext.reserve(sourcetext.length() + yyWord.length() - 2);
ushort *ptr = (ushort *)sourcetext.data() + sourcetext.length();
int p = 2, c;
@@ -1977,6 +1978,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
}
yyTok = getToken();
break;
+ }
case Tok_Arrow:
yyTok = getToken();
if (yyTok == Tok_tr || yyTok == Tok_trUtf8)