summaryrefslogtreecommitdiffstats
path: root/tests/auto/tools/qmake/testdata/rawString/object2.h
diff options
context:
space:
mode:
authorEdward Welbourne <edward.welbourne@qt.io>2016-09-06 19:21:50 +0200
committerEdward Welbourne <edward.welbourne@qt.io>2017-08-24 14:27:50 +0000
commit515b9051505d61af6be0eba87616c7281ee4ce62 (patch)
tree69bea4769022c2003f6ddf1cd1c8e1699e4b7f9e /tests/auto/tools/qmake/testdata/rawString/object2.h
parent797530c3f81b6c5fb8e25e431105fdcd22d8775a (diff)
Adapt qmake's raw-string parser to avoid confusion by macros
A macro name ending in R might expand to a string; if this precedes a string constant, we're juxtaposing the strings. My first parser for raw strings would mistake it for a raw string instead, ignoring the part of the identifier before R. Re-worked the exploration of what came before the string to catch these cases, too. The backwards parsing would also allow any messy jumble of [RLUu8]* as prefix for the string; but in fact R must (if present) be last in the prefix and *it* can have at most one prefix, [LUu] or u8. Anything else is an identifier that happens to precede the string. Reworked the parsing to allow only one prefix and not treat R specially unless it's immediately (modulo BSNL) before the string's open-quotes. Add link to the cppreference page about string literals, on which the grammar now parsed is based. Added a test for the issue this addresses. Verified that this fails on 5.6, dev and 5.9 without the fix. Expanded the existing test to cover R-with-prefix cases. Task-number: QTBUG-55633 Change-Id: I541486c2ec909cfb42050907c84bee83ead4a2f4 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Diffstat (limited to 'tests/auto/tools/qmake/testdata/rawString/object2.h')
-rw-r--r--tests/auto/tools/qmake/testdata/rawString/object2.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/auto/tools/qmake/testdata/rawString/object2.h b/tests/auto/tools/qmake/testdata/rawString/object2.h
new file mode 100644
index 0000000000..2ab77cd3bd
--- /dev/null
+++ b/tests/auto/tools/qmake/testdata/rawString/object2.h
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef TEST_QMAKE_RAWSTRING_OBJECT2_H
+#define TEST_QMAKE_RAWSTRING_OBJECT2_H
+
+#define Lu8UR "land"
+inline char opener(int i) {
+ const char text[] = Lu8UR"blah( not a raw string; just juxtaposed";
+ return text[i];
+}
+
+#include <QObject>
+
+class Object2 : public QObject
+{
+ Q_OBJECT
+};
+
+inline char closer(int i) {
+ const char text[] = "pretend to close it, all the same )blah";
+ return text[i];
+}
+
+#endif // TEST_QMAKE_RAWSTRING_OBJECT2_H