diff options
Diffstat (limited to 'src/qml/parser')
-rw-r--r-- | src/qml/parser/parser.pri | 3 | ||||
-rw-r--r-- | src/qml/parser/qqmljs.g | 8 | ||||
-rw-r--r-- | src/qml/parser/qqmljsast.cpp | 4 | ||||
-rw-r--r-- | src/qml/parser/qqmljsast_p.h | 4 | ||||
-rw-r--r-- | src/qml/parser/qqmljsastfwd_p.h | 26 | ||||
-rw-r--r-- | src/qml/parser/qqmljsastvisitor.cpp | 4 | ||||
-rw-r--r-- | src/qml/parser/qqmljsastvisitor_p.h | 4 | ||||
-rw-r--r-- | src/qml/parser/qqmljsengine_p.cpp | 4 | ||||
-rw-r--r-- | src/qml/parser/qqmljsengine_p.h | 8 | ||||
-rw-r--r-- | src/qml/parser/qqmljsglobal_p.h | 4 | ||||
-rw-r--r-- | src/qml/parser/qqmljskeywords_p.h | 4 | ||||
-rw-r--r-- | src/qml/parser/qqmljslexer_p.h | 4 | ||||
-rw-r--r-- | src/qml/parser/qqmljsmemorypool_p.h | 81 | ||||
-rw-r--r-- | src/qml/parser/qqmljssourcelocation_p.h | 87 |
14 files changed, 193 insertions, 52 deletions
diff --git a/src/qml/parser/parser.pri b/src/qml/parser/parser.pri index adab4ef9a2..2c0175c94b 100644 --- a/src/qml/parser/parser.pri +++ b/src/qml/parser/parser.pri @@ -8,7 +8,8 @@ HEADERS += \ $$PWD/qqmljsglobal_p.h \ $$PWD/qqmljskeywords_p.h \ $$PWD/qqmljsengine_p.h \ - $$PWD/qqmljsglobal_p.h + $$PWD/qqmljsglobal_p.h \ + $$PWD/qqmljssourcelocation_p.h SOURCES += \ $$PWD/qqmljsast.cpp \ diff --git a/src/qml/parser/qqmljs.g b/src/qml/parser/qqmljs.g index 8ae51a795f..0c947b541b 100644 --- a/src/qml/parser/qqmljs.g +++ b/src/qml/parser/qqmljs.g @@ -249,7 +249,7 @@ #include <QtCore/qlist.h> #include <QtCore/qstring.h> -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE namespace QQmlJS { @@ -486,7 +486,7 @@ protected: using namespace QQmlJS; -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE void Parser::reallocateStack() { @@ -4476,12 +4476,12 @@ ExportSpecifier: IdentifierName T_AS IdentifierName; return false; } -QT_QML_END_NAMESPACE +QT_END_NAMESPACE ./ /: -QT_QML_END_NAMESPACE +QT_END_NAMESPACE diff --git a/src/qml/parser/qqmljsast.cpp b/src/qml/parser/qqmljsast.cpp index 54a1200493..e5817ab763 100644 --- a/src/qml/parser/qqmljsast.cpp +++ b/src/qml/parser/qqmljsast.cpp @@ -41,7 +41,7 @@ #include "qqmljsastvisitor_p.h" -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE namespace QQmlJS { namespace AST { @@ -1474,6 +1474,6 @@ LeftHandSideExpression *LeftHandSideExpression::leftHandSideExpressionCast() } } // namespace QQmlJS::AST -QT_QML_END_NAMESPACE +QT_END_NAMESPACE diff --git a/src/qml/parser/qqmljsast_p.h b/src/qml/parser/qqmljsast_p.h index e84c62af2f..b81553776d 100644 --- a/src/qml/parser/qqmljsast_p.h +++ b/src/qml/parser/qqmljsast_p.h @@ -57,7 +57,7 @@ #include <QtCore/qstring.h> -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE #define QQMLJS_DECLARE_AST_NODE(name) \ enum { K = Kind_##name }; @@ -3395,6 +3395,6 @@ public: -QT_QML_END_NAMESPACE +QT_END_NAMESPACE #endif diff --git a/src/qml/parser/qqmljsastfwd_p.h b/src/qml/parser/qqmljsastfwd_p.h index 996264db59..e9caa918d5 100644 --- a/src/qml/parser/qqmljsastfwd_p.h +++ b/src/qml/parser/qqmljsastfwd_p.h @@ -41,6 +41,7 @@ #define QQMLJSAST_FWD_P_H #include "qqmljsglobal_p.h" +#include "qqmljssourcelocation_p.h" #include <QtCore/qglobal.h> @@ -55,31 +56,10 @@ // We mean it. // -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE namespace QQmlJS { namespace AST { -class SourceLocation -{ -public: - explicit SourceLocation(quint32 offset = 0, quint32 length = 0, quint32 line = 0, quint32 column = 0) - : offset(offset), length(length), - startLine(line), startColumn(column) - { } - - bool isValid() const { return length != 0; } - - quint32 begin() const { return offset; } - quint32 end() const { return offset + length; } - -// attributes - // ### encode - quint32 offset; - quint32 length; - quint32 startLine; - quint32 startColumn; -}; - class Visitor; class Node; class ExpressionNode; @@ -201,6 +181,6 @@ class UiEnumMemberList; } } // namespace AST -QT_QML_END_NAMESPACE +QT_END_NAMESPACE #endif diff --git a/src/qml/parser/qqmljsastvisitor.cpp b/src/qml/parser/qqmljsastvisitor.cpp index 666623eecc..5ecac36423 100644 --- a/src/qml/parser/qqmljsastvisitor.cpp +++ b/src/qml/parser/qqmljsastvisitor.cpp @@ -39,7 +39,7 @@ #include "qqmljsastvisitor_p.h" -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE namespace QQmlJS { namespace AST { @@ -53,4 +53,4 @@ Visitor::~Visitor() } } // namespace QQmlJS::AST -QT_QML_END_NAMESPACE +QT_END_NAMESPACE diff --git a/src/qml/parser/qqmljsastvisitor_p.h b/src/qml/parser/qqmljsastvisitor_p.h index 9c69f88e0c..9115449a46 100644 --- a/src/qml/parser/qqmljsastvisitor_p.h +++ b/src/qml/parser/qqmljsastvisitor_p.h @@ -54,7 +54,7 @@ #include "qqmljsastfwd_p.h" #include "qqmljsglobal_p.h" -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE namespace QQmlJS { namespace AST { @@ -412,6 +412,6 @@ protected: } } // namespace AST -QT_QML_END_NAMESPACE +QT_END_NAMESPACE #endif // QQMLJSASTVISITOR_P_H diff --git a/src/qml/parser/qqmljsengine_p.cpp b/src/qml/parser/qqmljsengine_p.cpp index 97ce6ebea3..bb27f3992e 100644 --- a/src/qml/parser/qqmljsengine_p.cpp +++ b/src/qml/parser/qqmljsengine_p.cpp @@ -44,7 +44,7 @@ #include <QtCore/qhash.h> #include <QtCore/qdebug.h> -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE namespace QQmlJS { @@ -155,4 +155,4 @@ QStringRef Engine::newStringRef(const QChar *chars, int size) } // end of namespace QQmlJS -QT_QML_END_NAMESPACE +QT_END_NAMESPACE diff --git a/src/qml/parser/qqmljsengine_p.h b/src/qml/parser/qqmljsengine_p.h index 1de907d296..b7f7da9478 100644 --- a/src/qml/parser/qqmljsengine_p.h +++ b/src/qml/parser/qqmljsengine_p.h @@ -52,13 +52,13 @@ // #include "qqmljsglobal_p.h" -#include "qqmljsastfwd_p.h" #include "qqmljsmemorypool_p.h" +#include "qqmljssourcelocation_p.h" #include <QtCore/qstring.h> #include <QtCore/qset.h> -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE namespace QQmlJS { @@ -95,7 +95,7 @@ public: class QML_PARSER_EXPORT DiagnosticMessage { public: - enum Kind { Warning, Error }; + enum Kind { Hint, Warning, Error }; DiagnosticMessage() {} @@ -150,6 +150,6 @@ double integerFromString(const char *buf, int size, int radix); } // end of namespace QQmlJS -QT_QML_END_NAMESPACE +QT_END_NAMESPACE #endif // QQMLJSENGINE_P_H diff --git a/src/qml/parser/qqmljsglobal_p.h b/src/qml/parser/qqmljsglobal_p.h index 0e195994b4..bf8155c6ec 100644 --- a/src/qml/parser/qqmljsglobal_p.h +++ b/src/qml/parser/qqmljsglobal_p.h @@ -53,8 +53,6 @@ #include <QtCore/qglobal.h> #ifdef QT_CREATOR -# define QT_QML_BEGIN_NAMESPACE -# define QT_QML_END_NAMESPACE # ifdef QDECLARATIVEJS_BUILD_DIR # define QML_PARSER_EXPORT Q_DECL_EXPORT @@ -65,8 +63,6 @@ # endif // QQMLJS_BUILD_DIR #else // !QT_CREATOR -# define QT_QML_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE -# define QT_QML_END_NAMESPACE QT_END_NAMESPACE # ifndef QT_STATIC # if defined(QT_BUILD_QMLDEVTOOLS_LIB) || defined(QT_QMLDEVTOOLS_LIB) // QmlDevTools is a static library diff --git a/src/qml/parser/qqmljskeywords_p.h b/src/qml/parser/qqmljskeywords_p.h index b0a4951ece..96b3709162 100644 --- a/src/qml/parser/qqmljskeywords_p.h +++ b/src/qml/parser/qqmljskeywords_p.h @@ -53,7 +53,7 @@ #include "qqmljslexer_p.h" -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE namespace QQmlJS { @@ -918,6 +918,6 @@ int Lexer::classify(const QChar *s, int n, int parseModeFlags) { } // namespace QQmlJS -QT_QML_END_NAMESPACE +QT_END_NAMESPACE #endif // QQMLJSKEYWORDS_P_H diff --git a/src/qml/parser/qqmljslexer_p.h b/src/qml/parser/qqmljslexer_p.h index 03f33f6e06..51152bfd6e 100644 --- a/src/qml/parser/qqmljslexer_p.h +++ b/src/qml/parser/qqmljslexer_p.h @@ -57,7 +57,7 @@ #include <QtCore/qstring.h> #include <QtCore/qstack.h> -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE namespace QQmlJS { @@ -257,6 +257,6 @@ private: } // end of namespace QQmlJS -QT_QML_END_NAMESPACE +QT_END_NAMESPACE #endif // LEXER_H diff --git a/src/qml/parser/qqmljsmemorypool_p.h b/src/qml/parser/qqmljsmemorypool_p.h index afd0f809da..e7b1f46414 100644 --- a/src/qml/parser/qqmljsmemorypool_p.h +++ b/src/qml/parser/qqmljsmemorypool_p.h @@ -59,7 +59,7 @@ #include <cstring> -QT_QML_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE namespace QQmlJS { @@ -104,6 +104,8 @@ public: } template <typename Tp> Tp *New() { return new (this->allocate(sizeof(Tp))) Tp(); } + template <typename Tp, typename... Ta> Tp *New(Ta... args) + { return new (this->allocate(sizeof(Tp))) Tp(args...); } QStringRef newString(const QString &string) { strings.append(new QString(string)); @@ -172,8 +174,83 @@ public: void operator delete(void *, MemoryPool *) {} }; +template <typename T> +class FixedPoolArray +{ + T *data; + int count = 0; + +public: + FixedPoolArray() + : data(nullptr) + {} + + FixedPoolArray(MemoryPool *pool, int size) + { allocate(pool, size); } + + void allocate(MemoryPool *pool, int size) + { + count = size; + data = reinterpret_cast<T*>(pool->allocate(count * sizeof(T))); + } + + void allocate(MemoryPool *pool, const QVector<T> &vector) + { + count = vector.count(); + data = reinterpret_cast<T*>(pool->allocate(count * sizeof(T))); + + if (QTypeInfo<T>::isComplex) { + for (int i = 0; i < count; ++i) + new (data + i) T(vector.at(i)); + } else { + memcpy(data, static_cast<const void*>(vector.constData()), count * sizeof(T)); + } + } + + template <typename Container> + void allocate(MemoryPool *pool, const Container &container) + { + count = container.count(); + data = reinterpret_cast<T*>(pool->allocate(count * sizeof(T))); + typename Container::ConstIterator it = container.constBegin(); + for (int i = 0; i < count; ++i) + new (data + i) T(*it++); + } + + int size() const + { return count; } + + const T &at(int index) const { + Q_ASSERT(index >= 0 && index < count); + return data[index]; + } + + T &at(int index) { + Q_ASSERT(index >= 0 && index < count); + return data[index]; + } + + T &operator[](int index) { + return at(index); + } + + + int indexOf(const T &value) const { + for (int i = 0; i < count; ++i) + if (data[i] == value) + return i; + return -1; + } + + const T *begin() const { return data; } + const T *end() const { return data + count; } + + T *begin() { return data; } + T *end() { return data + count; } +}; + } // namespace QQmlJS -QT_QML_END_NAMESPACE +QT_END_NAMESPACE #endif diff --git a/src/qml/parser/qqmljssourcelocation_p.h b/src/qml/parser/qqmljssourcelocation_p.h new file mode 100644 index 0000000000..d76e701d49 --- /dev/null +++ b/src/qml/parser/qqmljssourcelocation_p.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQml module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQMLJSSOURCELOCATION_P_H +#define QQMLJSSOURCELOCATION_P_H + +#include "qqmljsglobal_p.h" + +#include <QtCore/qglobal.h> + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +QT_BEGIN_NAMESPACE + +namespace QQmlJS { namespace AST { + +class SourceLocation +{ +public: + explicit SourceLocation(quint32 offset = 0, quint32 length = 0, quint32 line = 0, quint32 column = 0) + : offset(offset), length(length), + startLine(line), startColumn(column) + { } + + bool isValid() const { return length != 0; } + + quint32 begin() const { return offset; } + quint32 end() const { return offset + length; } + +// attributes + // ### encode + quint32 offset; + quint32 length; + quint32 startLine; + quint32 startColumn; +}; + +} } // namespace AST + +QT_END_NAMESPACE + +#endif |