diff options
88 files changed, 5242 insertions, 4302 deletions
diff --git a/doc/qtcreator/src/editors/creator-code-syntax.qdoc b/doc/qtcreator/src/editors/creator-code-syntax.qdoc index 3f542df9d1..4d05f3f288 100644 --- a/doc/qtcreator/src/editors/creator-code-syntax.qdoc +++ b/doc/qtcreator/src/editors/creator-code-syntax.qdoc @@ -670,9 +670,17 @@ {The array literal notation [] is preferable}. \row + \li M324 + \li Error + \li Hit maximum recursion limit visiting AST, the code model will be unreliable + and most likely invalid + \li + + \row \li M400 \li Warning \li Duplicate import + \li \endtable diff --git a/src/libs/qmljs/CMakeLists.txt b/src/libs/qmljs/CMakeLists.txt index 5ccb629cb2..3357b0da66 100644 --- a/src/libs/qmljs/CMakeLists.txt +++ b/src/libs/qmljs/CMakeLists.txt @@ -4,7 +4,6 @@ add_qtc_library(QmlJS SOURCES jsoncheck.cpp jsoncheck.h parser/qmldirparser.cpp parser/qmldirparser_p.h - parser/qmlerror.cpp parser/qmlerror.h parser/qmljsast.cpp parser/qmljsast_p.h parser/qmljsastfwd_p.h parser/qmljsastvisitor.cpp parser/qmljsastvisitor_p.h @@ -15,6 +14,7 @@ add_qtc_library(QmlJS parser/qmljslexer.cpp parser/qmljslexer_p.h parser/qmljsmemorypool_p.h parser/qmljsparser.cpp parser/qmljsparser_p.h + parser/qmljssourcelocation.cpp parser/qmljssourcelocation_p.h persistenttrie.cpp persistenttrie.h qmljs_global.h qmljsbind.cpp qmljsbind.h diff --git a/src/libs/qmljs/jsoncheck.cpp b/src/libs/qmljs/jsoncheck.cpp index 15d0edb1a7..d2beb507cc 100644 --- a/src/libs/qmljs/jsoncheck.cpp +++ b/src/libs/qmljs/jsoncheck.cpp @@ -310,6 +310,14 @@ bool JsonCheck::visit(StringLiteral *ast) return false; } +void JsonCheck::throwRecursionDepthError() +{ + analysis()->m_messages.append(Message(ErrHitMaximumRecursion, + SourceLocation(), + QString(), QString(), false)); + +} + static QString formatExpectedTypes(QStringList all) { all.removeDuplicates(); diff --git a/src/libs/qmljs/jsoncheck.h b/src/libs/qmljs/jsoncheck.h index e8efc8db19..9885ad2353 100644 --- a/src/libs/qmljs/jsoncheck.h +++ b/src/libs/qmljs/jsoncheck.h @@ -59,6 +59,8 @@ private: bool visit(AST::NumericLiteral *ast) override; bool visit(AST::StringLiteral *ast) override; + void throwRecursionDepthError() override; + struct AnalysisData { AnalysisData() : m_ranking(0), m_hasMatch(false) {} @@ -71,12 +73,12 @@ private: }; void processSchema(AST::Node *ast); - bool proceedCheck(Utils::JsonValue::Kind kind, const AST::SourceLocation &location); + bool proceedCheck(Utils::JsonValue::Kind kind, const SourceLocation &location); AnalysisData *analysis(); Document::Ptr m_doc; - AST::SourceLocation m_firstLoc; + SourceLocation m_firstLoc; Utils::JsonSchema *m_schema; QStack<AnalysisData> m_analysis; }; diff --git a/src/libs/qmljs/parser/cmd.sed b/src/libs/qmljs/parser/cmd.sed index a9b8ac0a6e..0e6fc69828 100644 --- a/src/libs/qmljs/parser/cmd.sed +++ b/src/libs/qmljs/parser/cmd.sed @@ -1,16 +1,25 @@ -s/private\/qdeclarative/qml/g +s/include *<private\/\([a-zA-Z_.]*\)>/include "qmljs\/parser\/\1"/g +s/qtqmlcompilerglobal_p.h/qmljsglobal_p.h/g +s/<QtCore\/qglobal.h>/"qmljsglobal_p.h"/g +s/Q_QMLCOMPILER_PRIVATE_EXPORT/QML_PARSER_EXPORT/g s/qqml/qml/g s/QDECLARATIVE/QML/g s/QQml/Qml/g s/QQMLJS/QMLJS/g s/Q_QML_EXPORT //g -s/Q_QML_PRIVATE_EXPORT/QML_PARSER_EXPORT/ +s/Q_QML_PRIVATE_EXPORT/QML_PARSER_EXPORT/g +s/QT_BEGIN_NAMESPACE/QT_QML_BEGIN_NAMESPACE/g +s/QT_END_NAMESPACE/QT_QML_END_NAMESPACE/g # adjust pri file s/ \$\$PWD\/qmljsglobal_p.h/ $$PWD\/qmljsglobal_p.h \\\ + $$PWD\/qmljssourcelocation_p.h \\\ + $$PWD\/qmljsmemorypool_p.h \\\ $$PWD\/qmldirparser_p.h \\\ - $$PWD\/qmlerror.h/ -s/ \$\$PWD\/qmljsparser.cpp/ $$PWD\/qmljsparser.cpp \\\ + $$PWD\/qmljsgrammar_p.h \\\ + $$PWD\/qmljsparser_p.h/ + +s/ \$\$PWD\/qmljslexer.cpp/ $$PWD\/qmljslexer.cpp \\\ $$PWD\/qmldirparser.cpp \\\ - $$PWD\/qmlerror.cpp/ -s/OTHER_FILES/DISTFILES/ + $$PWD\/qmljsgrammar.cpp \\\ + $$PWD\/qmljsparser.cpp/ diff --git a/src/libs/qmljs/parser/gen-parser.sh b/src/libs/qmljs/parser/gen-parser.sh index acd30d0906..c78c307adc 100755 --- a/src/libs/qmljs/parser/gen-parser.sh +++ b/src/libs/qmljs/parser/gen-parser.sh @@ -10,11 +10,12 @@ # cd src/libs/qmljs/parser # QTDIR=~/path/to/qtdeclarative-checkout ./gen-parser.sh -if [ -z "$QTDIR" ]; then - echo "Usage: QTDIR=~/path/to/qtdeclarative-checkout $0" 1>&2 +if [ -z "$QTDIR" -o -z "$QLALR" ]; then + echo "Usage: QTDIR=~/path/to/qtdeclarative-checkout QLALR=~/path/to/qlalr $0" 1>&2 exit 1 fi + me=$(dirname $0) for i in $QTDIR/src/qml/parser/*.{g,h,cpp,pri}; do @@ -23,22 +24,23 @@ for i in $QTDIR/src/qml/parser/*.{g,h,cpp,pri}; do fi done -for i in $QTDIR/src/qml/qml/qqml{error.{h,cpp},dirparser{_p.h,.cpp}}; do - sed -f $me/cmd.sed $i > $me/$(echo $(basename $i) | sed s/qqml/qml/) +for i in $QTDIR/src/qml/qmldirparser/*.{h,cpp}; do + if ! echo $i | grep -q qmljsglobal; then + sed -f $me/cmd.sed $i > $me/$(echo $(basename $i) | sed s/qqml/qml/) + fi +done + +for i in $QTDIR/src/qml/common/qqmljs{sourcelocation,memorypool}_p.h; do + sed -f $me/cmd.sed $i > $me/$(echo $(basename $i) | sed s/qqmljs/qmljs/) done -# export QmlDirParser -perl -p -0777 -i -e 's/QT_BEGIN_NAMESPACE\n\nclass QmlError;\nclass QmlEngine;\nclass Q_AUTOTEST_EXPORT QmlDirParser/#include "qmljsglobal_p.h"\n\nQT_BEGIN_NAMESPACE\n\nclass QmlError;\nclass QmlEngine;\nclass QML_PARSER_EXPORT QmlDirParser/' qmldirparser_p.h -# export QmlJSGrammar -perl -p -0777 -i -e 's/#include <QtCore\/qglobal.h>\n\nQT_BEGIN_NAMESPACE\n\nclass QmlJSGrammar\n/#include "qmljsglobal_p.h"\n#include <QtCore\/qglobal.h>\n\nQT_BEGIN_NAMESPACE\n\nclass QML_PARSER_EXPORT QmlJSGrammar\n/' qmljsgrammar_p.h +# remove qmlapiversion_p.h include +#include "qmlapiversion_p.h" +perl -p -0777 -i -e 's/#include \"qmlapiversion_p.h\"//' qmljsdiagnosticmessage_p.h # remove qmlglobal_p.h include perl -p -0777 -i -e 's/#include \"qmlglobal_p.h\"//' qmldirparser.cpp # remove qmlglobal_p.h include -perl -p -0777 -i -e 's/#include \"qmlglobal_p.h\"//' qmlerror.cpp -# remove qmlglobal_p.h include perl -p -0777 -i -e 's/#include \<QtQml\/qmlfile.h\>//' qmldirparser.cpp -# remove QtQml/qtqmlglobal.h include -perl -p -0777 -i -e 's/#include \<QtQml\/qtqmlglobal.h\>//' qmlerror.h # replace private/qhashedstring_p.h include and QHashedStringRef perl -p -0777 -i -e 's/#include \<private\/qhashedstring_p.h\>//' qmldirparser_p.h perl -p -0777 -i -e 's/QHashedStringRef/QString/g' qmldirparser_p.h qmldirparser.cpp @@ -51,11 +53,15 @@ sed -i -e 's/chars.length()/chars.size()/' $me/qmljslexer.cpp sed -i -e 's/DiagnosticMessage::Error/Severity::Error/g' $me/qmljsparser.cpp sed -i -e 's/DiagnosticMessage::Warning/Severity::Warning/g' $me/qmljsparser.cpp sed -i -e 's/DiagnosticMessage::Warning/Severity::Warning/g' $me/qmljsparser_p.h -sed -i -e 's|#include <private/qv4errorobject_p.h>||g' $me/qmlerror.cpp sed -i -e 's|#include <QtCore/qstring.h>|#include <QString>|g' $me/qmljsengine_p.h sed -i -e 's|#include <QtCore/qset.h>|#include <QSet>|g' $me/qmljsengine_p.h sed -i -e 's/qt_qnan/qQNaN/' $me/qmljsengine_p.cpp sed -i -e 's|#include <QtCore/private/qnumeric_p.h>|#include <QtCore/qnumeric.h>|' $me/qmljsengine_p.cpp perl -p -0777 -i -e 's/QT_QML_BEGIN_NAMESPACE/#include <qmljs\/qmljsconstants.h>\nQT_QML_BEGIN_NAMESPACE/' qmljsengine_p.h +patch -p1 < grammar.patch +$QLALR qmljs.g + ./changeLicense.py $me/../qmljs_global.h qml*.{cpp,h} + +patch -p1 < parser.patch diff --git a/src/libs/qmljs/parser/grammar.patch b/src/libs/qmljs/parser/grammar.patch new file mode 100644 index 0000000000..6189b89a90 --- /dev/null +++ b/src/libs/qmljs/parser/grammar.patch @@ -0,0 +1,21 @@ +diff -u parser-genOut/qmljs.g parser/qmljs.g +--- parser-genOut/qmljs.g 2020-03-02 13:53:50.000000000 +0100 ++++ parser/qmljs.g 2020-03-02 13:55:50.000000000 +0100 +@@ -379,7 +379,7 @@ + inline DiagnosticMessage diagnosticMessage() const + { + for (const DiagnosticMessage &d : diagnostic_messages) { +- if (d.type != QtWarningMsg) ++ if (d.kind != Severity::Warning) + return d; + } + +@@ -423,7 +423,7 @@ + DiagnosticMessage error; + error.loc = location; + error.message = message; +- error.type = kind; ++ error.kind = DiagnosticMessage::qtMsgTypeToKind(kind); + return error; + } + diff --git a/src/libs/qmljs/parser/parser.patch b/src/libs/qmljs/parser/parser.patch index c1bef1860c..d8e530133e 100644 --- a/src/libs/qmljs/parser/parser.patch +++ b/src/libs/qmljs/parser/parser.patch @@ -1,157 +1,83 @@ -diff --git a/src/libs/qmljs/parser/qmlerror.cpp b/src/libs/qmljs/parser/qmlerror.cpp -index d090a19..5ec311d 100644 ---- a/src/libs/qmljs/parser/qmlerror.cpp -+++ b/src/libs/qmljs/parser/qmlerror.cpp -@@ -65,6 +65,12 @@ QT_BEGIN_NAMESPACE - - \sa QQuickView::errors(), QmlComponent::errors() - */ -+ -+static quint16 qmlSourceCoordinate(int n) -+{ -+ return (n > 0 && n <= static_cast<int>(USHRT_MAX)) ? static_cast<quint16>(n) : 0; -+} -+ - class QmlErrorPrivate +diff -u parser-genOut/qmljsgrammar.cpp parser/qmljsgrammar.cpp +--- parser-genOut/qmljsgrammar.cpp 2020-03-02 13:53:50.000000000 +0100 ++++ parser/qmljsgrammar.cpp 2020-03-02 14:16:26.000000000 +0100 +@@ -21,7 +21,8 @@ + ** information to ensure the GNU General Public License requirements will + ** be met: https://www.gnu.org/licenses/gpl-3.0.html. + ** +-***************************************************************************// This file was generated by qlalr - DO NOT EDIT! ++***************************************************************************/ ++// This file was generated by qlalr - DO NOT EDIT! + #include "qmljsgrammar_p.h" + + const char *const QmlJSGrammar::spell [] = { +diff -u parser-genOut/qmljsgrammar_p.h parser/qmljsgrammar_p.h +--- parser/qmljsgrammar_p.h 2020-03-03 13:51:43.000000000 +0100 ++++ parser-fixed2/qmljsgrammar_p.h 2020-03-02 17:20:56.000000000 +0100 +@@ -21,11 +21,13 @@ + ** information to ensure the GNU General Public License requirements will + ** be met: https://www.gnu.org/licenses/gpl-3.0.html. + ** +-***************************************************************************// This file was generated by qlalr - DO NOT EDIT! ++***************************************************************************/ ++// This file was generated by qlalr - DO NOT EDIT! + #ifndef QMLJSGRAMMAR_P_H + #define QMLJSGRAMMAR_P_H ++#include "qmljsglobal_p.h" + +-class QmlJSGrammar ++class QML_PARSER_EXPORT QmlJSGrammar { public: -diff --git a/src/libs/qmljs/parser/qmljsengine_p.cpp b/src/libs/qmljs/parser/qmljsengine_p.cpp -index 1e22fa5..10fc3d1 100644 ---- a/src/libs/qmljs/parser/qmljsengine_p.cpp -+++ b/src/libs/qmljs/parser/qmljsengine_p.cpp -@@ -110,7 +110,7 @@ double integerFromString(const QString &str, int radix) - - - Engine::Engine() -- : _lexer(0) -+ : _lexer(0), _directives(0) - { } - - Engine::~Engine() -@@ -131,6 +131,12 @@ Lexer *Engine::lexer() const - void Engine::setLexer(Lexer *lexer) - { _lexer = lexer; } - -+void Engine::setDirectives(Directives *directives) -+{ _directives = directives; } -+ -+Directives *Engine::directives() const -+{ return _directives; } -+ - MemoryPool *Engine::pool() - { return &_pool; } - -diff --git a/src/libs/qmljs/parser/qmljsengine_p.h b/src/libs/qmljs/parser/qmljsengine_p.h -index b1f7e1a..29b69d1 100644 ---- a/src/libs/qmljs/parser/qmljsengine_p.h -+++ b/src/libs/qmljs/parser/qmljsengine_p.h -@@ -44,36 +44,35 @@ - #include "qmljsglobal_p.h" - #include "qmljsastfwd_p.h" - #include "qmljsmemorypool_p.h" -+#include <qmljs/qmljsconstants.h> - - #include <QString> - #include <QSet> - --#include <qmljs/qmljsconstants.h> - QT_QML_BEGIN_NAMESPACE - + enum VariousConstants { +diff -u parser-genOut/qmljslexer_p.h parser/qmljslexer_p.h +--- parser-genOut/qmljslexer_p.h 2020-03-02 13:53:50.000000000 +0100 ++++ parser/qmljslexer_p.h 2020-03-02 13:55:13.000000000 +0100 +@@ -47,7 +47,7 @@ namespace QmlJS { - class Lexer; -+class Directives; - class MemoryPool; - - class QML_PARSER_EXPORT DiagnosticMessage - { - public: -- enum Kind { Warning, Error }; -- - DiagnosticMessage() -- : kind(Error) {} -+ : kind(Severity::Error) {} - -- DiagnosticMessage(Kind kind, const AST::SourceLocation &loc, const QString &message) -+ DiagnosticMessage(Severity::Enum kind, const AST::SourceLocation &loc, const QString &message) - : kind(kind), loc(loc), message(message) {} - - bool isWarning() const -- { return kind == Warning; } -+ { return kind == Severity::Warning; } - - bool isError() const -- { return kind == Error; } -+ { return kind == Severity::Error; } - -- Kind kind; -+ Severity::Enum kind; - AST::SourceLocation loc; - QString message; - }; -@@ -81,6 +80,7 @@ public: - class QML_PARSER_EXPORT Engine - { - Lexer *_lexer; -+ Directives *_directives; - MemoryPool _pool; - QList<AST::SourceLocation> _comments; - QString _extraCode; -@@ -99,6 +99,9 @@ public: - Lexer *lexer() const; - void setLexer(Lexer *lexer); - -+ void setDirectives(Directives *directives); -+ Directives *directives() const; -+ - MemoryPool *pool(); - - inline QStringRef midRef(int position, int size) { return _code.midRef(position, size); } -diff --git a/src/libs/qmljs/parser/qmljslexer.cpp b/src/libs/qmljs/parser/qmljslexer.cpp -index 9698e9d..036be75 100644 ---- a/src/libs/qmljs/parser/qmljslexer.cpp -+++ b/src/libs/qmljs/parser/qmljslexer.cpp -@@ -345,7 +345,7 @@ static inline bool isIdentifierStart(QChar ch) - // fast path for ascii - if ((ch.unicode() >= 'a' && ch.unicode() <= 'z') || - (ch.unicode() >= 'A' && ch.unicode() <= 'Z') || -- ch == '$' || ch == '_') -+ ch == QLatin1Char('$') || ch == QLatin1Char('_')) - return true; - - switch (ch.category()) { -@@ -368,7 +368,7 @@ static bool isIdentifierPart(QChar ch) - if ((ch.unicode() >= 'a' && ch.unicode() <= 'z') || - (ch.unicode() >= 'A' && ch.unicode() <= 'Z') || - (ch.unicode() >= '0' && ch.unicode() <= '9') || -- ch == '$' || ch == '_' || -+ ch == QLatin1Char('$') || ch == QLatin1Char('_') || - ch.unicode() == 0x200c /* ZWNJ */ || ch.unicode() == 0x200d /* ZWJ */) - return true; - -diff --git a/src/libs/qmljs/parser/qmljsparser.cpp b/src/libs/qmljs/parser/qmljsparser.cpp -index 6e61637..e016b91 100644 ---- a/src/libs/qmljs/parser/qmljsparser.cpp -+++ b/src/libs/qmljs/parser/qmljsparser.cpp -@@ -157,7 +157,20 @@ bool Parser::parse(int startToken) - - token_buffer[0].token = startToken; - first_token = &token_buffer[0]; -- last_token = &token_buffer[1]; -+ if (startToken == T_FEED_JS_PROGRAM) { -+ Directives ignoreDirectives; -+ Directives *directives = driver->directives(); -+ if (!directives) -+ directives = &ignoreDirectives; -+ lexer->scanDirectives(directives); -+ token_buffer[1].token = lexer->tokenKind(); -+ token_buffer[1].dval = lexer->tokenValue(); -+ token_buffer[1].loc = location(lexer); -+ token_buffer[1].spell = lexer->tokenSpell(); -+ last_token = &token_buffer[2]; -+ } else { -+ last_token = &token_buffer[1]; -+ } - - tos = -1; - program = 0; + class Engine; +-struct DiagnosticMessage; ++class DiagnosticMessage; + class Directives; + + class QML_PARSER_EXPORT Lexer: public QmlJSGrammar +diff -u parser-genOut/qmljsparser.cpp parser/qmljsparser.cpp +--- parser-genOut/qmljsparser.cpp 2020-03-02 13:53:50.000000000 +0100 ++++ parser/qmljsparser.cpp 2020-03-02 14:16:01.000000000 +0100 +@@ -22,5 +22,6 @@ + ** be met: https://www.gnu.org/licenses/gpl-3.0.html. + ** + ****************************************************************************/ ++#line 172 "qmljs.g" + + #include "qmljs/parser/qmljsengine_p.h" +diff -u parser-genOut/qmljsparser_p.h parser/qmljsparser_p.h +--- parser-genOut/qmljsparser_p.h 2020-03-02 13:53:50.000000000 +0100 ++++ parser/qmljsparser_p.h 2020-03-02 14:13:25.000000000 +0100 +@@ -22,6 +22,7 @@ + ** be met: https://www.gnu.org/licenses/gpl-3.0.html. + ** + ****************************************************************************/ ++#line 223 "qmljs.g" + + + // + +diff -u parser-genOut/parser.pri parser/parser.pri +--- parser-genOut/parser.pri 2020-03-02 15:40:09.000000000 +0100 ++++ parser/parser.pri 2020-03-02 15:41:11.000000000 +0100 +@@ -22,10 +22,10 @@ + $$PWD/qmljsparser.cpp \ + +-CONFIG += qlalr ++#CONFIG += qlalr + QLALRSOURCES = $$PWD/qmljs.g +-QMAKE_QLALRFLAGS = --no-debug --qt ++#QMAKE_QLALRFLAGS = --no-debug --qt + + OTHER_FILES += $$QLALRSOURCES + + # make sure we install the headers generated by qlalr +-private_headers.CONFIG += no_check_exist ++#private_headers.CONFIG += no_check_exist diff --git a/src/libs/qmljs/parser/parser.pri b/src/libs/qmljs/parser/parser.pri index 7418ea56be..0694a5188b 100644 --- a/src/libs/qmljs/parser/parser.pri +++ b/src/libs/qmljs/parser/parser.pri @@ -3,30 +3,29 @@ HEADERS += \ $$PWD/qmljsastfwd_p.h \ $$PWD/qmljsastvisitor_p.h \ $$PWD/qmljsengine_p.h \ - $$PWD/qmljsgrammar_p.h \ $$PWD/qmljslexer_p.h \ - $$PWD/qmljsmemorypool_p.h \ - $$PWD/qmljsparser_p.h \ $$PWD/qmljsglobal_p.h \ + $$PWD/qmljssourcelocation_p.h \ + $$PWD/qmljsmemorypool_p.h \ $$PWD/qmldirparser_p.h \ - $$PWD/qmlerror.h \ + $$PWD/qmljsgrammar_p.h \ + $$PWD/qmljsparser_p.h \ $$PWD/qmljskeywords_p.h SOURCES += \ $$PWD/qmljsast.cpp \ $$PWD/qmljsastvisitor.cpp \ $$PWD/qmljsengine_p.cpp \ - $$PWD/qmljsgrammar.cpp \ $$PWD/qmljslexer.cpp \ - $$PWD/qmljsparser.cpp \ $$PWD/qmldirparser.cpp \ - $$PWD/qmlerror.cpp + $$PWD/qmljsgrammar.cpp \ + $$PWD/qmljsparser.cpp \ #CONFIG += qlalr QLALRSOURCES = $$PWD/qmljs.g #QMAKE_QLALRFLAGS = --no-debug --qt -DISTFILES += $$QLALRSOURCES +OTHER_FILES += $$QLALRSOURCES # make sure we install the headers generated by qlalr #private_headers.CONFIG += no_check_exist diff --git a/src/libs/qmljs/parser/qmldirparser.cpp b/src/libs/qmljs/parser/qmldirparser.cpp index d56affdbe1..003f4aa97b 100644 --- a/src/libs/qmljs/parser/qmldirparser.cpp +++ b/src/libs/qmljs/parser/qmldirparser.cpp @@ -24,11 +24,10 @@ ****************************************************************************/ #include "qmldirparser_p.h" -#include "qmlerror.h" #include <QtCore/QtDebug> -QT_BEGIN_NAMESPACE +QT_QML_BEGIN_NAMESPACE static int parseInt(const QStringRef &str, bool *ok) { @@ -60,12 +59,18 @@ static bool parseVersion(const QString &str, int *major, int *minor) return false; } -QmlDirParser::QmlDirParser() : _designerSupported(false) -{ -} - -QmlDirParser::~QmlDirParser() +void QmlDirParser::clear() { + _errors.clear(); + _typeNamespace.clear(); + _components.clear(); + _dependencies.clear(); + _imports.clear(); + _scripts.clear(); + _plugins.clear(); + _designerSupported = false; + _typeInfos.clear(); + _className.clear(); } inline static void scanSpace(const QChar *&ch) { @@ -88,13 +93,6 @@ inline static void scanWord(const QChar *&ch) { */ bool QmlDirParser::parse(const QString &source) { - _errors.clear(); - _plugins.clear(); - _components.clear(); - _scripts.clear(); - _designerSupported = false; - _className.clear(); - quint16 lineNumber = 0; bool firstLine = true; @@ -193,7 +191,7 @@ bool QmlDirParser::parse(const QString &source) } Component entry(sections[1], sections[2], -1, -1); entry.internal = true; - _components.insertMulti(entry.typeName, entry); + _components.insert(entry.typeName, entry); } else if (sections[0] == QLatin1String("singleton")) { if (sectionCount < 3 || sectionCount > 4) { reportError(lineNumber, 0, @@ -204,7 +202,7 @@ bool QmlDirParser::parse(const QString &source) // singleton TestSingletonType TestSingletonType.qml Component entry(sections[1], sections[2], -1, -1); entry.singleton = true; - _components.insertMulti(entry.typeName, entry); + _components.insert(entry.typeName, entry); } else { // handle qmldir module listing case where singleton is defined in the following pattern: // singleton TestSingletonType 2.0 TestSingletonType20.qml @@ -213,7 +211,7 @@ bool QmlDirParser::parse(const QString &source) const QString &fileName = sections[3]; Component entry(sections[1], fileName, major, minor); entry.singleton = true; - _components.insertMulti(entry.typeName, entry); + _components.insert(entry.typeName, entry); } else { reportError(lineNumber, 0, QStringLiteral("invalid version %1, expected <major>.<minor>").arg(sections[2])); } @@ -249,10 +247,17 @@ bool QmlDirParser::parse(const QString &source) } else { reportError(lineNumber, 0, QStringLiteral("invalid version %1, expected <major>.<minor>").arg(sections[2])); } + } else if (sections[0] == QLatin1String("import")) { + if (sectionCount != 2) { + reportError(lineNumber, 0, + QStringLiteral("import requires 2 arguments, but %1 were provided").arg(sectionCount - 1)); + continue; + } + _imports << sections[1]; } else if (sectionCount == 2) { // No version specified (should only be used for relative qmldir files) const Component entry(sections[0], sections[1], -1, -1); - _components.insertMulti(entry.typeName, entry); + _components.insert(entry.typeName, entry); } else if (sectionCount == 3) { int major, minor; if (parseVersion(sections[1], &major, &minor)) { @@ -264,7 +269,7 @@ bool QmlDirParser::parse(const QString &source) _scripts.append(entry); } else { const Component entry(sections[0], fileName, major, minor); - _components.insertMulti(entry.typeName, entry); + _components.insert(entry.typeName, entry); } } else { reportError(lineNumber, 0, QStringLiteral("invalid version %1, expected <major>.<minor>").arg(sections[1])); @@ -297,27 +302,20 @@ bool QmlDirParser::hasError() const return false; } -void QmlDirParser::setError(const QmlError &e) +void QmlDirParser::setError(const QmlJS::DiagnosticMessage &e) { _errors.clear(); - reportError(e.line(), e.column(), e.description()); + reportError(e.loc.startLine, e.loc.startColumn, e.message); } -QList<QmlError> QmlDirParser::errors(const QString &uri) const +QList<QmlJS::DiagnosticMessage> QmlDirParser::errors(const QString &uri) const { - QUrl url(uri); - QList<QmlError> errors; + QList<QmlJS::DiagnosticMessage> errors; const int numErrors = _errors.size(); errors.reserve(numErrors); for (int i = 0; i < numErrors; ++i) { - const QmlJS::DiagnosticMessage &msg = _errors.at(i); - QmlError e; - QString description = msg.message; - description.replace(QLatin1String("$$URI$$"), uri); - e.setDescription(description); - e.setUrl(url); - e.setLine(msg.loc.startLine); - e.setColumn(msg.loc.startColumn); + QmlJS::DiagnosticMessage e = _errors.at(i); + e.message.replace(QLatin1String("$$URI$$"), uri); errors << e; } return errors; @@ -338,7 +336,7 @@ QList<QmlDirParser::Plugin> QmlDirParser::plugins() const return _plugins; } -QHash<QString, QmlDirParser::Component> QmlDirParser::components() const +QMultiHash<QString, QmlDirParser::Component> QmlDirParser::components() const { return _components; } @@ -348,17 +346,20 @@ QHash<QString, QmlDirParser::Component> QmlDirParser::dependencies() const return _dependencies; } +QStringList QmlDirParser::imports() const +{ + return _imports; +} + QList<QmlDirParser::Script> QmlDirParser::scripts() const { return _scripts; } -#ifdef QT_CREATOR QList<QmlDirParser::TypeInfo> QmlDirParser::typeInfos() const { return _typeInfos; } -#endif bool QmlDirParser::designerSupported() const { @@ -384,4 +385,4 @@ QDebug &operator<< (QDebug &debug, const QmlDirParser::Script &script) return debug << qPrintable(output); } -QT_END_NAMESPACE +QT_QML_END_NAMESPACE diff --git a/src/libs/qmljs/parser/qmldirparser_p.h b/src/libs/qmljs/parser/qmldirparser_p.h index a39bfff0d2..9b26d02351 100644 --- a/src/libs/qmljs/parser/qmldirparser_p.h +++ b/src/libs/qmljs/parser/qmldirparser_p.h @@ -39,34 +39,44 @@ #include <QtCore/QUrl> #include <QtCore/QHash> #include <QtCore/QDebug> -#include "qmljsengine_p.h" -#include "qmljsglobal_p.h" +#include "qmljs/parser/qmljsglobal_p.h" +#include "qmljs/parser/qmljsengine_p.h" +#include "qmljs/parser/qmljsdiagnosticmessage_p.h" -QT_BEGIN_NAMESPACE +QT_QML_BEGIN_NAMESPACE -class QmlError; class QmlEngine; class QML_PARSER_EXPORT QmlDirParser { public: - QmlDirParser(); - ~QmlDirParser(); - + void clear(); bool parse(const QString &source); bool hasError() const; - void setError(const QmlError &); - QList<QmlError> errors(const QString &uri) const; + void setError(const QmlJS::DiagnosticMessage &); + QList<QmlJS::DiagnosticMessage> errors(const QString &uri) const; QString typeNamespace() const; void setTypeNamespace(const QString &s); + static void checkNonRelative(const char *item, const QString &typeName, const QString &fileName) + { + if (fileName.startsWith(QLatin1Char('/'))) { + qWarning() << item << typeName + << "is specified with non-relative URL" << fileName << "in a qmldir file." + << "URLs in qmldir files should be relative to the qmldir file's directory."; + } + } + struct Plugin { - Plugin() {} + Plugin() = default; Plugin(const QString &name, const QString &path) - : name(name), path(path) {} + : name(name), path(path) + { + checkNonRelative("Plugin", name, path); + } QString name; QString path; @@ -74,11 +84,14 @@ public: struct Component { - Component() {} + Component() = default; Component(const QString &typeName, const QString &fileName, int majorVersion, int minorVersion) : typeName(typeName), fileName(fileName), majorVersion(majorVersion), minorVersion(minorVersion), - internal(false), singleton(false) {} + internal(false), singleton(false) + { + checkNonRelative("Component", typeName, fileName); + } QString typeName; QString fileName; @@ -90,10 +103,13 @@ public: struct Script { - Script() {} + Script() = default; Script(const QString &nameSpace, const QString &fileName, int majorVersion, int minorVersion) - : nameSpace(nameSpace), fileName(fileName), majorVersion(majorVersion), minorVersion(minorVersion) {} + : nameSpace(nameSpace), fileName(fileName), majorVersion(majorVersion), minorVersion(minorVersion) + { + checkNonRelative("Script", nameSpace, fileName); + } QString nameSpace; QString fileName; @@ -101,16 +117,16 @@ public: int minorVersion = 0; }; - QHash<QString,Component> components() const; + QMultiHash<QString,Component> components() const; QHash<QString,Component> dependencies() const; + QStringList imports() const; QList<Script> scripts() const; QList<Plugin> plugins() const; bool designerSupported() const; -#ifdef QT_CREATOR struct TypeInfo { - TypeInfo() {} + TypeInfo() = default; TypeInfo(const QString &fileName) : fileName(fileName) {} @@ -118,7 +134,6 @@ public: }; QList<TypeInfo> typeInfos() const; -#endif QString className() const; @@ -129,23 +144,22 @@ private: private: QList<QmlJS::DiagnosticMessage> _errors; QString _typeNamespace; - QHash<QString,Component> _components; // multi hash + QMultiHash<QString,Component> _components; QHash<QString,Component> _dependencies; + QStringList _imports; QList<Script> _scripts; QList<Plugin> _plugins; - bool _designerSupported; -#ifdef QT_CREATOR + bool _designerSupported = false; QList<TypeInfo> _typeInfos; -#endif QString _className; }; -typedef QHash<QString,QmlDirParser::Component> QmlDirComponents; -typedef QList<QmlDirParser::Script> QmlDirScripts; -typedef QList<QmlDirParser::Plugin> QmlDirPlugins; +using QmlDirComponents = QMultiHash<QString,QmlDirParser::Component>; +using QmlDirScripts = QList<QmlDirParser::Script>; +using QmlDirPlugins = QList<QmlDirParser::Plugin>; QDebug &operator<< (QDebug &, const QmlDirParser::Component &); QDebug &operator<< (QDebug &, const QmlDirParser::Script &); -QT_END_NAMESPACE +QT_QML_END_NAMESPACE diff --git a/src/libs/qmljs/parser/qmlerror.cpp b/src/libs/qmljs/parser/qmlerror.cpp deleted file mode 100644 index 1703847bbd..0000000000 --- a/src/libs/qmljs/parser/qmlerror.cpp +++ /dev/null @@ -1,351 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** 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 General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** 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-3.0.html. -** -****************************************************************************/ - -#include "qmlerror.h" - - -#include <QtCore/qdebug.h> -#include <QtCore/qfile.h> -#include <QtCore/qstringlist.h> -#include <QtCore/qvector.h> -#include <QtCore/qpointer.h> - - - -QT_BEGIN_NAMESPACE - -/*! - \class QmlError - \since 5.0 - \inmodule QtQml - \brief The QmlError class encapsulates a QML error. - - QmlError includes a textual description of the error, as well - as location information (the file, line, and column). The toString() - method creates a single-line, human-readable string containing all of - this information, for example: - \code - file:///home/user/test.qml:7:8: Invalid property assignment: double expected - \endcode - - You can use qDebug(), qInfo(), or qWarning() to output errors to the console. - This method will attempt to open the file indicated by the error - and include additional contextual information. - \code - file:///home/user/test.qml:7:8: Invalid property assignment: double expected - y: "hello" - ^ - \endcode - - Note that the \l {Qt Quick 1} version is named QDeclarativeError - - \sa QQuickView::errors(), QmlComponent::errors() -*/ - -static quint16 qmlSourceCoordinate(int n) -{ - return (n > 0 && n <= static_cast<int>(USHRT_MAX)) ? static_cast<quint16>(n) : 0; -} - -class QmlErrorPrivate -{ -public: - QmlErrorPrivate(); - - QUrl url; - QString description; - quint16 line; - quint16 column; - QtMsgType messageType; - QPointer<QObject> object; -}; - -QmlErrorPrivate::QmlErrorPrivate() -: line(0), column(0), messageType(QtMsgType::QtWarningMsg), object() -{ -} - -/*! - Creates an empty error object. -*/ -QmlError::QmlError() -: d(nullptr) -{ -} - -/*! - Creates a copy of \a other. -*/ -QmlError::QmlError(const QmlError &other) -: d(nullptr) -{ - *this = other; -} - -/*! - Assigns \a other to this error object. -*/ -QmlError &QmlError::operator=(const QmlError &other) -{ - if (!other.d) { - delete d; - d = nullptr; - } else { - if (!d) - d = new QmlErrorPrivate; - d->url = other.d->url; - d->description = other.d->description; - d->line = other.d->line; - d->column = other.d->column; - d->object = other.d->object; - d->messageType = other.d->messageType; - } - return *this; -} - -/*! - \internal -*/ -QmlError::~QmlError() -{ - delete d; d = nullptr; -} - -/*! - Returns true if this error is valid, otherwise false. -*/ -bool QmlError::isValid() const -{ - return d != nullptr; -} - -/*! - Returns the url for the file that caused this error. -*/ -QUrl QmlError::url() const -{ - if (d) - return d->url; - return QUrl(); -} - -/*! - Sets the \a url for the file that caused this error. -*/ -void QmlError::setUrl(const QUrl &url) -{ - if (!d) - d = new QmlErrorPrivate; - d->url = url; -} - -/*! - Returns the error description. -*/ -QString QmlError::description() const -{ - if (d) - return d->description; - return QString(); -} - -/*! - Sets the error \a description. -*/ -void QmlError::setDescription(const QString &description) -{ - if (!d) - d = new QmlErrorPrivate; - d->description = description; -} - -/*! - Returns the error line number. -*/ -int QmlError::line() const -{ - if (d) - return qmlSourceCoordinate(d->line); - return -1; -} - -/*! - Sets the error \a line number. -*/ -void QmlError::setLine(int line) -{ - if (!d) - d = new QmlErrorPrivate; - d->line = qmlSourceCoordinate(line); -} - -/*! - Returns the error column number. -*/ -int QmlError::column() const -{ - if (d) - return qmlSourceCoordinate(d->column); - return -1; -} - -/*! - Sets the error \a column number. -*/ -void QmlError::setColumn(int column) -{ - if (!d) - d = new QmlErrorPrivate; - d->column = qmlSourceCoordinate(column); -} - -/*! - Returns the nearest object where this error occurred. - Exceptions in bound property expressions set this to the object - to which the property belongs. It will be 0 for all - other exceptions. - */ -QObject *QmlError::object() const -{ - if (d) - return d->object; - return nullptr; -} - -/*! - Sets the nearest \a object where this error occurred. - */ -void QmlError::setObject(QObject *object) -{ - if (!d) - d = new QmlErrorPrivate; - d->object = object; -} - -/*! - \since 5.9 - - Returns the message type. - */ -QtMsgType QmlError::messageType() const -{ - if (d) - return d->messageType; - return QtMsgType::QtWarningMsg; -} - -/*! - \since 5.9 - - Sets the \a messageType for this message. The message type determines which - QDebug handlers are responsible for receiving the message. - */ -void QmlError::setMessageType(QtMsgType messageType) -{ - if (!d) - d = new QmlErrorPrivate; - d->messageType = messageType; -} - -/*! - Returns the error as a human readable string. -*/ -QString QmlError::toString() const -{ - QString rv; - - QUrl u(url()); - int l(line()); - - if (u.isEmpty() || (u.isLocalFile() && u.path().isEmpty())) - rv += QLatin1String("<Unknown File>"); - else - rv += u.toString(); - - if (l != -1) { - rv += QLatin1Char(':') + QString::number(l); - - int c(column()); - if (c != -1) - rv += QLatin1Char(':') + QString::number(c); - } - - rv += QLatin1String(": ") + description(); - - return rv; -} - -/*! - \relates QmlError - \fn QDebug operator<<(QDebug debug, const QmlError &error) - - Outputs a human readable version of \a error to \a debug. -*/ - -QDebug operator<<(QDebug debug, const QmlError &error) -{ - debug << qPrintable(error.toString()); - - QUrl url = error.url(); - - if (error.line() > 0 && url.scheme() == QLatin1String("file")) { - QString file = url.toLocalFile(); - QFile f(file); - if (f.open(QIODevice::ReadOnly)) { - QByteArray data = f.readAll(); - QTextStream stream(data, QIODevice::ReadOnly); -#if QT_CONFIG(textcodec) - stream.setCodec("UTF-8"); -#endif - const QString code = stream.readAll(); - const auto lines = code.splitRef(QLatin1Char('\n')); - - if (lines.count() >= error.line()) { - const QStringRef &line = lines.at(error.line() - 1); - debug << "\n " << line.toLocal8Bit().constData(); - - if (error.column() > 0) { - int column = qMax(0, error.column() - 1); - column = qMin(column, line.length()); - - QByteArray ind; - ind.reserve(column); - for (int i = 0; i < column; ++i) { - const QChar ch = line.at(i); - if (ch.isSpace()) - ind.append(ch.unicode()); - else - ind.append(' '); - } - ind.append('^'); - debug << "\n " << ind.constData(); - } - } - } - } - return debug; -} - -QT_END_NAMESPACE diff --git a/src/libs/qmljs/parser/qmljs.g b/src/libs/qmljs/parser/qmljs.g index e0f7b92a23..46505af1ea 100644 --- a/src/libs/qmljs/parser/qmljs.g +++ b/src/libs/qmljs/parser/qmljs.g @@ -73,13 +73,14 @@ %token T_VAR "var" T_VOID "void" T_WHILE "while" %token T_WITH "with" T_XOR "^" T_XOR_EQ "^=" %token T_NULL "null" T_TRUE "true" T_FALSE "false" -%token T_CONST "const" T_LET "let" +%token T_CONST "const" T_LET "let" T_AT "@" %token T_DEBUGGER "debugger" %token T_RESERVED_WORD "reserved word" %token T_MULTILINE_STRING_LITERAL "multiline string literal" %token T_COMMENT "comment" %token T_COMPATIBILITY_SEMICOLON %token T_ARROW "=>" +%token T_QUESTION_QUESTION "??" %token T_ENUM "enum" %token T_ELLIPSIS "..." %token T_YIELD "yield" @@ -90,6 +91,7 @@ %token T_EXPORT "export" %token T_FROM "from" %token T_REQUIRED "required" +%token T_COMPONENT "component" --- template strings %token T_NO_SUBSTITUTION_TEMPLATE"(no subst template)" @@ -122,9 +124,10 @@ %token T_FOR_LOOKAHEAD_OK "(for lookahead ok)" --%left T_PLUS T_MINUS -%nonassoc T_IDENTIFIER T_COLON T_SIGNAL T_PROPERTY T_READONLY T_ON T_SET T_GET T_OF T_STATIC T_FROM T_AS T_REQUIRED +%nonassoc T_IDENTIFIER T_COLON T_SIGNAL T_PROPERTY T_READONLY T_ON T_SET T_GET T_OF T_STATIC T_FROM T_AS T_REQUIRED T_COMPONENT %nonassoc REDUCE_HERE %right T_THEN T_ELSE +%right T_WITHOUTAS T_AS %start TopLevel @@ -167,10 +170,10 @@ ** ****************************************************************************/ -#include "qmljsengine_p.h" -#include "qmljslexer_p.h" -#include "qmljsast_p.h" -#include "qmljsmemorypool_p.h" +#include "qmljs/parser/qmljsengine_p.h" +#include "qmljs/parser/qmljslexer_p.h" +#include "qmljs/parser/qmljsast_p.h" +#include "qmljs/parser/qmljsmemorypool_p.h" #include <QtCore/qdebug.h> #include <QtCore/qcoreapplication.h> @@ -245,10 +248,11 @@ #ifndef QMLJSPARSER_P_H #define QMLJSPARSER_P_H -#include "qmljsglobal_p.h" -#include "qmljsgrammar_p.h" -#include "qmljsast_p.h" -#include "qmljsengine_p.h" +#include "qmljs/parser/qmljsglobal_p.h" +#include "qmljs/parser/qmljsgrammar_p.h" +#include "qmljs/parser/qmljsast_p.h" +#include "qmljs/parser/qmljsengine_p.h" +#include "qmljs/parser/qmljsdiagnosticmessage_p.h" #include <QtCore/qlist.h> #include <QtCore/qstring.h> @@ -322,6 +326,8 @@ public: AST::UiQualifiedId *UiQualifiedId; AST::UiEnumMemberList *UiEnumMemberList; AST::UiVersionSpecifier *UiVersionSpecifier; + AST::UiAnnotation *UiAnnotation; + AST::UiAnnotationList *UiAnnotationList; }; public: @@ -403,7 +409,7 @@ protected: inline QStringRef &rawStringRef(int index) { return rawString_stack [tos + index - 1]; } - inline AST::SourceLocation &loc(int index) + inline SourceLocation &loc(int index) { return location_stack [tos + index - 1]; } AST::UiQualifiedId *reparseAsQualifiedId(AST::ExpressionNode *expr); @@ -411,20 +417,20 @@ protected: void pushToken(int token); int lookaheadToken(Lexer *lexer); - static DiagnosticMessage compileError(const AST::SourceLocation &location, - const QString &message, Severity::Enum kind = Severity::Error) + static DiagnosticMessage compileError(const SourceLocation &location, + const QString &message, QtMsgType kind = QtCriticalMsg) { DiagnosticMessage error; error.loc = location; error.message = message; - error.kind = kind; + error.kind = DiagnosticMessage::qtMsgTypeToKind(kind); return error; } - void syntaxError(const AST::SourceLocation &location, const char *message) { + void syntaxError(const SourceLocation &location, const char *message) { diagnostic_messages.append(compileError(location, QLatin1String(message))); } - void syntaxError(const AST::SourceLocation &location, const QString &message) { + void syntaxError(const SourceLocation &location, const QString &message) { diagnostic_messages.append(compileError(location, message)); } @@ -437,7 +443,7 @@ protected: int stack_size = 0; Value *sym_stack = nullptr; int *state_stack = nullptr; - AST::SourceLocation *location_stack = nullptr; + SourceLocation *location_stack = nullptr; QVector<QStringRef> string_stack; QVector<QStringRef> rawString_stack; @@ -449,7 +455,7 @@ protected: struct SavedToken { int token; double dval; - AST::SourceLocation loc; + SourceLocation loc; QStringRef spell; QStringRef raw; }; @@ -458,8 +464,8 @@ protected: double yylval = 0.; QStringRef yytokenspell; QStringRef yytokenraw; - AST::SourceLocation yylloc; - AST::SourceLocation yyprevlloc; + SourceLocation yylloc; + SourceLocation yyprevlloc; SavedToken token_buffer[TOKEN_BUFFER_SIZE]; SavedToken *first_token = nullptr; @@ -472,7 +478,7 @@ protected: CE_ParenthesizedExpression, CE_FormalParameterList }; - AST::SourceLocation coverExpressionErrorLocation; + SourceLocation coverExpressionErrorLocation; CoverExpressionType coverExpressionType = CE_Invalid; QList<DiagnosticMessage> diagnostic_messages; @@ -517,7 +523,7 @@ void Parser::reallocateStack() sym_stack = reinterpret_cast<Value*> (realloc(sym_stack, stack_size * sizeof(Value))); state_stack = reinterpret_cast<int*> (realloc(state_stack, stack_size * sizeof(int))); - location_stack = reinterpret_cast<AST::SourceLocation*> (realloc(location_stack, stack_size * sizeof(AST::SourceLocation))); + location_stack = reinterpret_cast<SourceLocation*> (realloc(location_stack, stack_size * sizeof(SourceLocation))); string_stack.resize(stack_size); rawString_stack.resize(stack_size); } @@ -537,9 +543,9 @@ Parser::~Parser() } } -static inline AST::SourceLocation location(Lexer *lexer) +static inline SourceLocation location(Lexer *lexer) { - AST::SourceLocation loc; + SourceLocation loc; loc.offset = lexer->tokenOffset(); loc.length = lexer->tokenLength(); loc.startLine = lexer->tokenStartLine(); @@ -550,7 +556,7 @@ static inline AST::SourceLocation location(Lexer *lexer) AST::UiQualifiedId *Parser::reparseAsQualifiedId(AST::ExpressionNode *expr) { QVarLengthArray<QStringRef, 4> nameIds; - QVarLengthArray<AST::SourceLocation, 4> locations; + QVarLengthArray<SourceLocation, 4> locations; AST::ExpressionNode *it = expr; while (AST::FieldMemberExpression *m = AST::cast<AST::FieldMemberExpression *>(it)) { @@ -734,7 +740,7 @@ TopLevel: T_FEED_JS_EXPRESSION Expression; } break; ./ -TopLevel: T_FEED_UI_OBJECT_MEMBER UiObjectMember; +TopLevel: T_FEED_UI_OBJECT_MEMBER UiAnnotatedObjectMember; /. case $rule_number: { sym(1).Node = sym(2).Node; @@ -849,13 +855,7 @@ UiVersionSpecifier: T_VERSION_NUMBER; UiImport: UiImportHead UiVersionSpecifier Semicolon; /. case $rule_number: { - auto versionToken = loc(2); - auto version = sym(2).UiVersionSpecifier; - sym(1).UiImport->version = version; - if (version->minorToken.isValid()) { - versionToken.length += version->minorToken.length + (version->minorToken.offset - versionToken.offset - versionToken.length); - } - sym(1).UiImport->versionToken = versionToken; + sym(1).UiImport->version = sym(2).UiVersionSpecifier; sym(1).UiImport->semicolonToken = loc(3); } break; ./ @@ -863,13 +863,7 @@ UiImport: UiImportHead UiVersionSpecifier Semicolon; UiImport: UiImportHead UiVersionSpecifier T_AS QmlIdentifier Semicolon; /. case $rule_number: { - auto versionToken = loc(2); - auto version = sym(2).UiVersionSpecifier; - sym(1).UiImport->version = version; - if (version->minorToken.isValid()) { - versionToken.length += version->minorToken.length + (version->minorToken.offset - versionToken.offset - versionToken.length); - } - sym(1).UiImport->versionToken = versionToken; + sym(1).UiImport->version = sym(2).UiVersionSpecifier; sym(1).UiImport->asToken = loc(3); sym(1).UiImport->importIdToken = loc(4); sym(1).UiImport->importId = stringRef(4); @@ -920,21 +914,92 @@ Empty: ; } break; ./ -UiRootMember: UiObjectDefinition; +UiRootMember: UiAnnotatedObject; /. case $rule_number: { sym(1).Node = new (pool) AST::UiObjectMemberList(sym(1).UiObjectMember); } break; ./ -UiObjectMemberList: UiObjectMember; +UiSimpleQualifiedId: T_IDENTIFIER; +/. + case $rule_number: { + AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1)); + node->identifierToken = loc(1); + sym(1).Node = node; + } break; +./ + +UiSimpleQualifiedId: UiSimpleQualifiedId T_DOT T_IDENTIFIER; +/. + case $rule_number: { + AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3)); + node->dotToken = loc(2); + node->identifierToken = loc(3); + sym(1).Node = node; + } break; +./ + +UiAnnotationObjectDefinition: UiSimpleQualifiedId UiObjectInitializer; +/. + case $rule_number: { + if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(1).Expression)) { + sym(1).UiQualifiedId = qualifiedId; + } else { + sym(1).UiQualifiedId = 0; + + diagnostic_messages.append(compileError(loc(1), + QLatin1String("Expected a qualified name id"))); + + return false; + } + AST::UiAnnotation *node = new (pool) AST::UiAnnotation(sym(1).UiQualifiedId, sym(2).UiObjectInitializer); + sym(1).Node = node; + } break; +./ + +UiAnnotation: T_AT UiAnnotationObjectDefinition; +/. +case $rule_number: { + sym(1).Node = sym(2).Node; +} break; +./ + + +UiAnnotationList: UiAnnotation; +/. + case $rule_number: { + sym(1).Node = new (pool) AST::UiAnnotationList(sym(1).UiAnnotation); + } break; +./ + +UiAnnotationList: UiAnnotationList UiAnnotation; +/. + case $rule_number: { + AST::UiAnnotationList *node = new (pool) AST::UiAnnotationList(sym(1).UiAnnotationList, sym(2).UiAnnotation); + sym(1).Node = node; + } break; +./ + +UiAnnotatedObject: UiAnnotationList UiObjectDefinition; +/. + case $rule_number: { + AST::UiObjectDefinition *node = sym(2).UiObjectDefinition; + node->annotations = sym(1).UiAnnotationList->finish(); + sym(1).Node = node; + } break; +./ + +UiAnnotatedObject: UiObjectDefinition; + +UiObjectMemberList: UiAnnotatedObjectMember; /. case $rule_number: { sym(1).Node = new (pool) AST::UiObjectMemberList(sym(1).UiObjectMember); } break; ./ -UiObjectMemberList: UiObjectMemberList UiObjectMember; +UiObjectMemberList: UiObjectMemberList UiAnnotatedObjectMember; /. case $rule_number: { AST::UiObjectMemberList *node = new (pool) AST:: UiObjectMemberList(sym(1).UiObjectMemberList, sym(2).UiObjectMember); @@ -986,6 +1051,17 @@ UiObjectDefinition: UiQualifiedId UiObjectInitializer; } break; ./ +UiAnnotatedObjectMember: UiAnnotationList UiObjectMember; +/. + case $rule_number: { + AST::UiObjectMember *node = sym(2).UiObjectMember; + node->annotations = sym(1).UiAnnotationList->finish(); + sym(1).Node = sym(2).Node; + } break; +./ + +UiAnnotatedObjectMember: UiObjectMember; + UiObjectMember: UiObjectDefinition; UiObjectMember: UiQualifiedId T_COLON ExpressionStatementLookahead T_LBRACKET UiArrayMemberList T_RBRACKET; @@ -1021,15 +1097,27 @@ UiObjectMember: UiQualifiedId T_ON UiQualifiedId UiObjectInitializer; ./ -UiObjectLiteral: T_LBRACE ExpressionStatementLookahead UiPropertyDefinitionList T_RBRACE; -/. case $rule_number: Q_FALLTHROUGH(); ./ -UiObjectLiteral: T_LBRACE ExpressionStatementLookahead UiPropertyDefinitionList T_COMMA T_RBRACE; +UiObjectLiteral: T_LBRACE ExpressionStatementLookahead UiPropertyDefinitionList T_RBRACE Semicolon; /. case $rule_number: { AST::ObjectPattern *l = new (pool) AST::ObjectPattern(sym(3).PatternPropertyList->finish()); l->lbraceToken = loc(1); l->rbraceToken = loc(4); AST::ExpressionStatement *node = new (pool) AST::ExpressionStatement(l); + node->semicolonToken = loc(5); + sym(1).Node = node; + } break; +./ + + +UiObjectLiteral: T_LBRACE ExpressionStatementLookahead UiPropertyDefinitionList T_COMMA T_RBRACE Semicolon; +/. + case $rule_number: { + AST::ObjectPattern *l = new (pool) AST::ObjectPattern(sym(3).PatternPropertyList->finish()); + l->lbraceToken = loc(1); + l->rbraceToken = loc(5); + AST::ExpressionStatement *node = new (pool) AST::ExpressionStatement(l); + node->semicolonToken = loc(6); sym(1).Node = node; } break; ./ @@ -1242,12 +1330,49 @@ UiObjectMember: T_DEFAULT UiObjectMemberListPropertyNoInitialiser; } break; ./ +UiObjectMember: T_DEFAULT T_REQUIRED UiObjectMemberPropertyNoInitialiser; +/. + case $rule_number: { + AST::UiPublicMember *node = sym(3).UiPublicMember; + node->isDefaultMember = true; + node->defaultToken = loc(1); + node->isRequired = true; + node->requiredToken = loc(2); + sym(1).Node = node; + } break; +./ + + +UiObjectMember: T_REQUIRED T_DEFAULT UiObjectMemberPropertyNoInitialiser; +/. + case $rule_number: { + AST::UiPublicMember *node = sym(3).UiPublicMember; + node->isDefaultMember = true; + node->defaultToken = loc(2); + node->isRequired = true; + node->requiredToken = loc(1); + sym(1).Node = node; + } break; +./ + OptionalSemicolon: | Semicolon; /. /* we need OptionalSemicolon because UiScriptStatement might already parse the last semicolon and then we would miss a semicolon (see tests/auto/quick/qquickvisualdatamodel/data/objectlist.qml)*/ ./ +UiRequired: T_REQUIRED QmlIdentifier Semicolon; +/. + case $rule_number: { + AST::UiRequired *node = new (pool) AST::UiRequired(stringRef(2)); + node->requiredToken = loc(1); + node->semicolonToken = loc(3); + sym(1).Node = node; + } break; +./ + +UiObjectMember: UiRequired; + UiObjectMember: T_REQUIRED UiObjectMemberPropertyNoInitialiser; /. case $rule_number: { @@ -1258,7 +1383,6 @@ UiObjectMember: T_REQUIRED UiObjectMemberPropertyNoInitialiser; } break; ./ - UiObjectMemberWithScriptStatement: T_PROPERTY UiPropertyType QmlIdentifier T_COLON UiScriptStatement OptionalSemicolon; /. case $rule_number: { @@ -1393,7 +1517,7 @@ UiQualifiedId: MemberExpression; case $rule_number: { if (AST::ArrayMemberExpression *mem = AST::cast<AST::ArrayMemberExpression *>(sym(1).Expression)) { diagnostic_messages.append(compileError(mem->lbracketToken, - QLatin1String("Ignored annotation"), Severity::Warning)); + QLatin1String("Ignored annotation"), QtWarningMsg)); sym(1).Expression = mem->base; } @@ -1422,6 +1546,19 @@ UiObjectMember: T_ENUM T_IDENTIFIER T_LBRACE EnumMemberList T_RBRACE; } ./ +UiObjectMember: T_COMPONENT T_IDENTIFIER T_COLON UiObjectDefinition; +/. + case $rule_number: { + if (!stringRef(2).front().isUpper()) { + diagnostic_messages.append(compileError(loc(2), + QLatin1String("Type name must be upper case"), QtWarningMsg)); + } + auto inlineComponent = new (pool) AST::UiInlineComponent(stringRef(2), sym(4).UiObjectDefinition); + inlineComponent->componentToken = loc(1); + sym(1).Node = inlineComponent; + } break; +./ + EnumMemberList: T_IDENTIFIER; /. case $rule_number: { @@ -1464,29 +1601,31 @@ EnumMemberList: EnumMemberList T_COMMA T_IDENTIFIER T_EQ T_NUMERIC_LITERAL; } ./ -QmlIdentifier: T_IDENTIFIER; -QmlIdentifier: T_PROPERTY; -QmlIdentifier: T_SIGNAL; -QmlIdentifier: T_READONLY; -QmlIdentifier: T_ON; -QmlIdentifier: T_GET; -QmlIdentifier: T_SET; -QmlIdentifier: T_FROM; -QmlIdentifier: T_OF; -QmlIdentifier: T_REQUIRED; - -JsIdentifier: T_IDENTIFIER; -JsIdentifier: T_PROPERTY; -JsIdentifier: T_SIGNAL; -JsIdentifier: T_READONLY; -JsIdentifier: T_ON; -JsIdentifier: T_GET; -JsIdentifier: T_SET; -JsIdentifier: T_FROM; -JsIdentifier: T_STATIC; -JsIdentifier: T_OF; -JsIdentifier: T_AS; -JsIdentifier: T_REQUIRED; +QmlIdentifier: T_IDENTIFIER + | T_PROPERTY + | T_SIGNAL + | T_READONLY + | T_ON + | T_GET + | T_SET + | T_FROM + | T_OF + | T_REQUIRED + | T_COMPONENT; + +JsIdentifier: T_IDENTIFIER + | T_PROPERTY + | T_SIGNAL + | T_READONLY + | T_ON + | T_GET + | T_SET + | T_FROM + | T_STATIC + | T_OF + | T_AS + | T_REQUIRED + | T_COMPONENT; IdentifierReference: JsIdentifier; BindingIdentifier: IdentifierReference; @@ -2510,6 +2649,20 @@ RelationalExpression_In: RelationalExpression_In T_IN ShiftExpression; } break; ./ +TypeAssertExpression_In: RelationalExpression_In T_AS Type; +/. case $rule_number: Q_FALLTHROUGH(); ./ +TypeAssertExpression: RelationalExpression T_AS Type; +/. + case $rule_number: { + AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::As, sym(3).Expression); + node->operatorToken = loc(2); + sym(1).Node = node; + } break; +./ + +RelationalExpression_In: TypeAssertExpression_In; +RelationalExpression: TypeAssertExpression; + EqualityExpression_In: RelationalExpression_In; EqualityExpression: RelationalExpression; @@ -2621,13 +2774,48 @@ LogicalORExpression_In: LogicalORExpression_In T_OR_OR LogicalANDExpression_In; } break; ./ +CoalesceExpression: LogicalORExpression; +CoalesceExpression_In: LogicalORExpression_In; + +CoalesceExpression: CoalesceExpression T_QUESTION_QUESTION LogicalORExpression; +/. case $rule_number: Q_FALLTHROUGH(); ./ +CoalesceExpression_In: CoalesceExpression_In T_QUESTION_QUESTION LogicalORExpression_In; +/. + case $rule_number: { + + auto *lhs = sym(1).Expression; + auto *rhs = sym(3).Expression; + + // Check if lhs or rhs contain || or && + + if (lhs->binaryExpressionCast() != nullptr) { + auto *binaryExpr = lhs->binaryExpressionCast(); + if (binaryExpr->op == QSOperator::And || binaryExpr->op == QSOperator::Or) { + syntaxError(binaryExpr->operatorToken, "Left-hand side may not contain || or &&"); + return false; + } + } + + if (rhs->binaryExpressionCast() != nullptr) { + auto *binaryExpr = rhs->binaryExpressionCast(); + if (binaryExpr->op == QSOperator::And || binaryExpr->op == QSOperator::Or) { + syntaxError(binaryExpr->operatorToken, "Right-hand side may not contain || or &&"); + return false; + } + } + + AST::BinaryExpression *node = new (pool) AST::BinaryExpression(lhs, QSOperator::Coalesce, rhs); + node->operatorToken = loc(2); + sym(1).Node = node; + } break; +./ -ConditionalExpression: LogicalORExpression; -ConditionalExpression_In: LogicalORExpression_In; +ConditionalExpression: CoalesceExpression; +ConditionalExpression_In: CoalesceExpression_In; -ConditionalExpression: LogicalORExpression T_QUESTION AssignmentExpression_In T_COLON AssignmentExpression; +ConditionalExpression: CoalesceExpression T_QUESTION AssignmentExpression_In T_COLON AssignmentExpression; /. case $rule_number: Q_FALLTHROUGH(); ./ -ConditionalExpression_In: LogicalORExpression_In T_QUESTION AssignmentExpression_In T_COLON AssignmentExpression_In; +ConditionalExpression_In: CoalesceExpression_In T_QUESTION AssignmentExpression_In T_COLON AssignmentExpression_In; /. case $rule_number: { AST::ConditionalExpression *node = new (pool) AST::ConditionalExpression(sym(1).Expression, sym(3).Expression, sym(5).Expression); @@ -2653,7 +2841,7 @@ AssignmentExpression_In: LeftHandSideExpression T_EQ AssignmentExpression_In; case $rule_number: { // need to convert the LHS to an AssignmentPattern if it was an Array/ObjectLiteral if (AST::Pattern *p = sym(1).Expression->patternCast()) { - AST::SourceLocation errorLoc; + SourceLocation errorLoc; QString errorMsg; if (!p->convertLiteralToAssignmentPattern(pool, &errorLoc, &errorMsg)) { syntaxError(errorLoc, errorMsg); @@ -3319,7 +3507,7 @@ IterationStatement: T_FOR T_LPAREN LeftHandSideExpression InOrOf Expression_In T case $rule_number: { // need to convert the LHS to an AssignmentPattern if it was an Array/ObjectLiteral if (AST::Pattern *p = sym(3).Expression->patternCast()) { - AST::SourceLocation errorLoc; + SourceLocation errorLoc; QString errorMsg; if (!p->convertLiteralToAssignmentPattern(pool, &errorLoc, &errorMsg)) { syntaxError(errorLoc, errorMsg); @@ -4366,7 +4554,10 @@ ImportsList: ImportsList T_COMMA ImportSpecifier; } break; ./ -ImportSpecifier: ImportedBinding; +-- When enconutering an IdentifierReference it can resolve to both ImportedBinding and IdentifierName +-- Using %right and %prec, we tell qlalr that it should not reduce immediately, but rather shift +-- so that we have a chance of actually parsing the correct rule if there is an "as" identifier +ImportSpecifier: ImportedBinding %prec T_WITHOUTAS; /. case $rule_number: { auto importSpecifier = new (pool) AST::ImportSpecifier(stringRef(1)); @@ -4572,7 +4763,7 @@ ExportSpecifier: IdentifierName T_AS IdentifierName; yylloc.length = 0; //const QString msg = QCoreApplication::translate("QmlParser", "Missing `;'"); - //diagnostic_messages.append(compileError(yyloc, msg, Severity::Warning)); + //diagnostic_messages.append(compileError(yyloc, msg, QtWarningMsg)); first_token = &token_buffer[0]; last_token = &token_buffer[1]; diff --git a/src/libs/qmljs/parser/qmljsast.cpp b/src/libs/qmljs/parser/qmljsast.cpp index 0869de97ef..65337ec109 100644 --- a/src/libs/qmljs/parser/qmljsast.cpp +++ b/src/libs/qmljs/parser/qmljsast.cpp @@ -153,7 +153,7 @@ UiObjectMember *UiObjectMember::uiObjectMemberCast() return this; } -void NestedExpression::accept0(Visitor *visitor) +void NestedExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -171,7 +171,7 @@ ClassExpression *NestedExpression::asClassDefinition() return expression->asClassDefinition(); } -void ThisExpression::accept0(Visitor *visitor) +void ThisExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -179,7 +179,7 @@ void ThisExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void IdentifierExpression::accept0(Visitor *visitor) +void IdentifierExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -187,7 +187,7 @@ void IdentifierExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void NullExpression::accept0(Visitor *visitor) +void NullExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -195,7 +195,7 @@ void NullExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void TrueLiteral::accept0(Visitor *visitor) +void TrueLiteral::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -203,7 +203,7 @@ void TrueLiteral::accept0(Visitor *visitor) visitor->endVisit(this); } -void FalseLiteral::accept0(Visitor *visitor) +void FalseLiteral::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -211,7 +211,7 @@ void FalseLiteral::accept0(Visitor *visitor) visitor->endVisit(this); } -void SuperLiteral::accept0(Visitor *visitor) +void SuperLiteral::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -220,7 +220,7 @@ void SuperLiteral::accept0(Visitor *visitor) } -void StringLiteral::accept0(Visitor *visitor) +void StringLiteral::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -228,7 +228,7 @@ void StringLiteral::accept0(Visitor *visitor) visitor->endVisit(this); } -void TemplateLiteral::accept0(Visitor *visitor) +void TemplateLiteral::accept0(BaseVisitor *visitor) { bool accepted = true; for (TemplateLiteral *it = this; it && accepted; it = it->next) { @@ -237,7 +237,7 @@ void TemplateLiteral::accept0(Visitor *visitor) } } -void NumericLiteral::accept0(Visitor *visitor) +void NumericLiteral::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -245,7 +245,7 @@ void NumericLiteral::accept0(Visitor *visitor) visitor->endVisit(this); } -void RegExpLiteral::accept0(Visitor *visitor) +void RegExpLiteral::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -253,7 +253,7 @@ void RegExpLiteral::accept0(Visitor *visitor) visitor->endVisit(this); } -void ArrayPattern::accept0(Visitor *visitor) +void ArrayPattern::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) accept(elements, visitor); @@ -273,7 +273,7 @@ bool ArrayPattern::isValidArrayLiteral(SourceLocation *errorLocation) const { return true; } -void ObjectPattern::accept0(Visitor *visitor) +void ObjectPattern::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(properties, visitor); @@ -448,7 +448,7 @@ bool PatternProperty::convertLiteralToAssignmentPattern(MemoryPool *pool, Source } -void Elision::accept0(Visitor *visitor) +void Elision::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { // ### @@ -457,7 +457,7 @@ void Elision::accept0(Visitor *visitor) visitor->endVisit(this); } -void IdentifierPropertyName::accept0(Visitor *visitor) +void IdentifierPropertyName::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -465,7 +465,7 @@ void IdentifierPropertyName::accept0(Visitor *visitor) visitor->endVisit(this); } -void StringLiteralPropertyName::accept0(Visitor *visitor) +void StringLiteralPropertyName::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -473,7 +473,7 @@ void StringLiteralPropertyName::accept0(Visitor *visitor) visitor->endVisit(this); } -void NumericLiteralPropertyName::accept0(Visitor *visitor) +void NumericLiteralPropertyName::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -503,7 +503,7 @@ QString NumericLiteralPropertyName::asString()const return locale.toString(id, 'g', 16); } -void ArrayMemberExpression::accept0(Visitor *visitor) +void ArrayMemberExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(base, visitor); @@ -513,7 +513,7 @@ void ArrayMemberExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void FieldMemberExpression::accept0(Visitor *visitor) +void FieldMemberExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(base, visitor); @@ -522,7 +522,7 @@ void FieldMemberExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void NewMemberExpression::accept0(Visitor *visitor) +void NewMemberExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(base, visitor); @@ -532,7 +532,7 @@ void NewMemberExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void NewExpression::accept0(Visitor *visitor) +void NewExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -541,7 +541,7 @@ void NewExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void CallExpression::accept0(Visitor *visitor) +void CallExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(base, visitor); @@ -551,7 +551,7 @@ void CallExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void ArgumentList::accept0(Visitor *visitor) +void ArgumentList::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { for (ArgumentList *it = this; it; it = it->next) { @@ -562,7 +562,7 @@ void ArgumentList::accept0(Visitor *visitor) visitor->endVisit(this); } -void PostIncrementExpression::accept0(Visitor *visitor) +void PostIncrementExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(base, visitor); @@ -571,7 +571,7 @@ void PostIncrementExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void PostDecrementExpression::accept0(Visitor *visitor) +void PostDecrementExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(base, visitor); @@ -580,7 +580,7 @@ void PostDecrementExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void DeleteExpression::accept0(Visitor *visitor) +void DeleteExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -589,7 +589,7 @@ void DeleteExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void VoidExpression::accept0(Visitor *visitor) +void VoidExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -598,7 +598,7 @@ void VoidExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void TypeOfExpression::accept0(Visitor *visitor) +void TypeOfExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -607,7 +607,7 @@ void TypeOfExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void PreIncrementExpression::accept0(Visitor *visitor) +void PreIncrementExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -616,7 +616,7 @@ void PreIncrementExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void PreDecrementExpression::accept0(Visitor *visitor) +void PreDecrementExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -625,7 +625,7 @@ void PreDecrementExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void UnaryPlusExpression::accept0(Visitor *visitor) +void UnaryPlusExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -634,7 +634,7 @@ void UnaryPlusExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void UnaryMinusExpression::accept0(Visitor *visitor) +void UnaryMinusExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -643,7 +643,7 @@ void UnaryMinusExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void TildeExpression::accept0(Visitor *visitor) +void TildeExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -652,7 +652,7 @@ void TildeExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void NotExpression::accept0(Visitor *visitor) +void NotExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -661,7 +661,7 @@ void NotExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void BinaryExpression::accept0(Visitor *visitor) +void BinaryExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(left, visitor); @@ -671,7 +671,7 @@ void BinaryExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void ConditionalExpression::accept0(Visitor *visitor) +void ConditionalExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -682,7 +682,7 @@ void ConditionalExpression::accept0(Visitor *visitor) visitor->endVisit(this); } -void Expression::accept0(Visitor *visitor) +void Expression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(left, visitor); @@ -692,7 +692,7 @@ void Expression::accept0(Visitor *visitor) visitor->endVisit(this); } -void Block::accept0(Visitor *visitor) +void Block::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(statements, visitor); @@ -701,7 +701,7 @@ void Block::accept0(Visitor *visitor) visitor->endVisit(this); } -void StatementList::accept0(Visitor *visitor) +void StatementList::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { for (StatementList *it = this; it; it = it->next) { @@ -712,7 +712,7 @@ void StatementList::accept0(Visitor *visitor) visitor->endVisit(this); } -void VariableStatement::accept0(Visitor *visitor) +void VariableStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(declarations, visitor); @@ -721,7 +721,7 @@ void VariableStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void VariableDeclarationList::accept0(Visitor *visitor) +void VariableDeclarationList::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { for (VariableDeclarationList *it = this; it; it = it->next) { @@ -732,7 +732,7 @@ void VariableDeclarationList::accept0(Visitor *visitor) visitor->endVisit(this); } -void EmptyStatement::accept0(Visitor *visitor) +void EmptyStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -740,7 +740,7 @@ void EmptyStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void ExpressionStatement::accept0(Visitor *visitor) +void ExpressionStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -749,7 +749,7 @@ void ExpressionStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void IfStatement::accept0(Visitor *visitor) +void IfStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -760,7 +760,7 @@ void IfStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void DoWhileStatement::accept0(Visitor *visitor) +void DoWhileStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(statement, visitor); @@ -770,7 +770,7 @@ void DoWhileStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void WhileStatement::accept0(Visitor *visitor) +void WhileStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -780,7 +780,7 @@ void WhileStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void ForStatement::accept0(Visitor *visitor) +void ForStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(initialiser, visitor); @@ -793,7 +793,7 @@ void ForStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void ForEachStatement::accept0(Visitor *visitor) +void ForEachStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(lhs, visitor); @@ -804,7 +804,7 @@ void ForEachStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void ContinueStatement::accept0(Visitor *visitor) +void ContinueStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -812,7 +812,7 @@ void ContinueStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void BreakStatement::accept0(Visitor *visitor) +void BreakStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -820,7 +820,7 @@ void BreakStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void ReturnStatement::accept0(Visitor *visitor) +void ReturnStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -829,7 +829,7 @@ void ReturnStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void YieldExpression::accept0(Visitor *visitor) +void YieldExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -839,7 +839,7 @@ void YieldExpression::accept0(Visitor *visitor) } -void WithStatement::accept0(Visitor *visitor) +void WithStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -849,7 +849,7 @@ void WithStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void SwitchStatement::accept0(Visitor *visitor) +void SwitchStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -859,7 +859,7 @@ void SwitchStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void CaseBlock::accept0(Visitor *visitor) +void CaseBlock::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(clauses, visitor); @@ -870,7 +870,7 @@ void CaseBlock::accept0(Visitor *visitor) visitor->endVisit(this); } -void CaseClauses::accept0(Visitor *visitor) +void CaseClauses::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { for (CaseClauses *it = this; it; it = it->next) { @@ -881,7 +881,7 @@ void CaseClauses::accept0(Visitor *visitor) visitor->endVisit(this); } -void CaseClause::accept0(Visitor *visitor) +void CaseClause::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -891,7 +891,7 @@ void CaseClause::accept0(Visitor *visitor) visitor->endVisit(this); } -void DefaultClause::accept0(Visitor *visitor) +void DefaultClause::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(statements, visitor); @@ -900,7 +900,7 @@ void DefaultClause::accept0(Visitor *visitor) visitor->endVisit(this); } -void LabelledStatement::accept0(Visitor *visitor) +void LabelledStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(statement, visitor); @@ -909,7 +909,7 @@ void LabelledStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void ThrowStatement::accept0(Visitor *visitor) +void ThrowStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -918,7 +918,7 @@ void ThrowStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void TryStatement::accept0(Visitor *visitor) +void TryStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(statement, visitor); @@ -929,7 +929,7 @@ void TryStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void Catch::accept0(Visitor *visitor) +void Catch::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(patternElement, visitor); @@ -939,7 +939,7 @@ void Catch::accept0(Visitor *visitor) visitor->endVisit(this); } -void Finally::accept0(Visitor *visitor) +void Finally::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(statement, visitor); @@ -948,7 +948,7 @@ void Finally::accept0(Visitor *visitor) visitor->endVisit(this); } -void FunctionDeclaration::accept0(Visitor *visitor) +void FunctionDeclaration::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(formals, visitor); @@ -959,7 +959,7 @@ void FunctionDeclaration::accept0(Visitor *visitor) visitor->endVisit(this); } -void FunctionExpression::accept0(Visitor *visitor) +void FunctionExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(formals, visitor); @@ -1004,7 +1004,7 @@ BoundNames FormalParameterList::boundNames() const return names; } -void FormalParameterList::accept0(Visitor *visitor) +void FormalParameterList::accept0(BaseVisitor *visitor) { bool accepted = true; for (FormalParameterList *it = this; it && accepted; it = it->next) { @@ -1029,7 +1029,7 @@ FormalParameterList *FormalParameterList::finish(QmlJS::MemoryPool *pool) return front; } -void Program::accept0(Visitor *visitor) +void Program::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(statements, visitor); @@ -1038,7 +1038,7 @@ void Program::accept0(Visitor *visitor) visitor->endVisit(this); } -void ImportSpecifier::accept0(Visitor *visitor) +void ImportSpecifier::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { @@ -1046,7 +1046,7 @@ void ImportSpecifier::accept0(Visitor *visitor) visitor->endVisit(this); } -void ImportsList::accept0(Visitor *visitor) +void ImportsList::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { for (ImportsList *it = this; it; it = it->next) { @@ -1057,7 +1057,7 @@ void ImportsList::accept0(Visitor *visitor) visitor->endVisit(this); } -void NamedImports::accept0(Visitor *visitor) +void NamedImports::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(importsList, visitor); @@ -1066,7 +1066,7 @@ void NamedImports::accept0(Visitor *visitor) visitor->endVisit(this); } -void FromClause::accept0(Visitor *visitor) +void FromClause::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -1074,7 +1074,7 @@ void FromClause::accept0(Visitor *visitor) visitor->endVisit(this); } -void NameSpaceImport::accept0(Visitor *visitor) +void NameSpaceImport::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -1082,7 +1082,7 @@ void NameSpaceImport::accept0(Visitor *visitor) visitor->endVisit(this); } -void ImportClause::accept0(Visitor *visitor) +void ImportClause::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(nameSpaceImport, visitor); @@ -1092,7 +1092,7 @@ void ImportClause::accept0(Visitor *visitor) visitor->endVisit(this); } -void ImportDeclaration::accept0(Visitor *visitor) +void ImportDeclaration::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(importClause, visitor); @@ -1102,7 +1102,7 @@ void ImportDeclaration::accept0(Visitor *visitor) visitor->endVisit(this); } -void ExportSpecifier::accept0(Visitor *visitor) +void ExportSpecifier::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { @@ -1111,7 +1111,7 @@ void ExportSpecifier::accept0(Visitor *visitor) visitor->endVisit(this); } -void ExportsList::accept0(Visitor *visitor) +void ExportsList::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { for (ExportsList *it = this; it; it = it->next) { @@ -1122,7 +1122,7 @@ void ExportsList::accept0(Visitor *visitor) visitor->endVisit(this); } -void ExportClause::accept0(Visitor *visitor) +void ExportClause::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(exportsList, visitor); @@ -1131,7 +1131,7 @@ void ExportClause::accept0(Visitor *visitor) visitor->endVisit(this); } -void ExportDeclaration::accept0(Visitor *visitor) +void ExportDeclaration::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(fromClause, visitor); @@ -1142,7 +1142,7 @@ void ExportDeclaration::accept0(Visitor *visitor) visitor->endVisit(this); } -void ESModule::accept0(Visitor *visitor) +void ESModule::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(body, visitor); @@ -1151,7 +1151,7 @@ void ESModule::accept0(Visitor *visitor) visitor->endVisit(this); } -void DebuggerStatement::accept0(Visitor *visitor) +void DebuggerStatement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -1159,7 +1159,7 @@ void DebuggerStatement::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiProgram::accept0(Visitor *visitor) +void UiProgram::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(headers, visitor); @@ -1169,19 +1169,23 @@ void UiProgram::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiPublicMember::accept0(Visitor *visitor) +void UiPublicMember::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { + // accept(annotations, visitor); // accept manually in visit if interested + // accept(memberType, visitor); // accept manually in visit if interested accept(statement, visitor); accept(binding, visitor); + // accept(parameters, visitor); // accept manually in visit if interested } visitor->endVisit(this); } -void UiObjectDefinition::accept0(Visitor *visitor) +void UiObjectDefinition::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { + // accept(annotations, visitor); // accept manually in visit if interested accept(qualifiedTypeNameId, visitor); accept(initializer, visitor); } @@ -1189,7 +1193,7 @@ void UiObjectDefinition::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiObjectInitializer::accept0(Visitor *visitor) +void UiObjectInitializer::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(members, visitor); @@ -1198,16 +1202,18 @@ void UiObjectInitializer::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiParameterList::accept0(Visitor *visitor) +void UiParameterList::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { + // accept(type, visitor); // accept manually in visit if interested } visitor->endVisit(this); } -void UiObjectBinding::accept0(Visitor *visitor) +void UiObjectBinding::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { + // accept(annotations, visitor); // accept manually in visit if interested accept(qualifiedId, visitor); accept(qualifiedTypeNameId, visitor); accept(initializer, visitor); @@ -1216,9 +1222,10 @@ void UiObjectBinding::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiScriptBinding::accept0(Visitor *visitor) +void UiScriptBinding::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { + // accept(annotations, visitor); // accept manually in visit if interested accept(qualifiedId, visitor); accept(statement, visitor); } @@ -1226,9 +1233,10 @@ void UiScriptBinding::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiArrayBinding::accept0(Visitor *visitor) +void UiArrayBinding::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { + // accept(annotations, visitor); // accept manually in visit if interested accept(qualifiedId, visitor); accept(members, visitor); } @@ -1236,7 +1244,7 @@ void UiArrayBinding::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiObjectMemberList::accept0(Visitor *visitor) +void UiObjectMemberList::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { for (UiObjectMemberList *it = this; it; it = it->next) @@ -1246,7 +1254,7 @@ void UiObjectMemberList::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiArrayMemberList::accept0(Visitor *visitor) +void UiArrayMemberList::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { for (UiArrayMemberList *it = this; it; it = it->next) @@ -1256,15 +1264,16 @@ void UiArrayMemberList::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiQualifiedId::accept0(Visitor *visitor) +void UiQualifiedId::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { + // accept(next, visitor) // accept manually in visit if interested } visitor->endVisit(this); } -void Type::accept0(Visitor *visitor) +void Type::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(typeId, visitor); @@ -1274,7 +1283,7 @@ void Type::accept0(Visitor *visitor) visitor->endVisit(this); } -void TypeArgumentList::accept0(Visitor *visitor) +void TypeArgumentList::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { for (TypeArgumentList *it = this; it; it = it->next) @@ -1284,7 +1293,7 @@ void TypeArgumentList::accept0(Visitor *visitor) visitor->endVisit(this); } -void TypeAnnotation::accept0(Visitor *visitor) +void TypeAnnotation::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(type, visitor); @@ -1293,16 +1302,17 @@ void TypeAnnotation::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiImport::accept0(Visitor *visitor) +void UiImport::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(importUri, visitor); + // accept(version, visitor); // accept manually in visit if interested } visitor->endVisit(this); } -void UiPragma::accept0(Visitor *visitor) +void UiPragma::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -1310,7 +1320,7 @@ void UiPragma::accept0(Visitor *visitor) visitor->endVisit(this); } -void UiHeaderItemList::accept0(Visitor *visitor) +void UiHeaderItemList::accept0(BaseVisitor *visitor) { bool accepted = true; for (UiHeaderItemList *it = this; it && accepted; it = it->next) { @@ -1323,25 +1333,27 @@ void UiHeaderItemList::accept0(Visitor *visitor) } -void UiSourceElement::accept0(Visitor *visitor) +void UiSourceElement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { + // accept(annotations, visitor); // accept manually in visit if interested accept(sourceElement, visitor); } visitor->endVisit(this); } -void UiEnumDeclaration::accept0(Visitor *visitor) +void UiEnumDeclaration::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { + // accept(annotations, visitor); // accept manually in visit if interested accept(members, visitor); } visitor->endVisit(this); } -void UiEnumMemberList::accept0(Visitor *visitor) +void UiEnumMemberList::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -1349,7 +1361,7 @@ void UiEnumMemberList::accept0(Visitor *visitor) visitor->endVisit(this); } -void TaggedTemplate::accept0(Visitor *visitor) +void TaggedTemplate::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(base, visitor); @@ -1359,7 +1371,7 @@ void TaggedTemplate::accept0(Visitor *visitor) visitor->endVisit(this); } -void PatternElement::accept0(Visitor *visitor) +void PatternElement::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(bindingTarget, visitor); @@ -1382,7 +1394,7 @@ void PatternElement::boundNames(BoundNames *names) } } -void PatternElementList::accept0(Visitor *visitor) +void PatternElementList::accept0(BaseVisitor *visitor) { bool accepted = true; for (PatternElementList *it = this; it && accepted; it = it->next) { @@ -1403,7 +1415,7 @@ void PatternElementList::boundNames(BoundNames *names) } } -void PatternProperty::accept0(Visitor *visitor) +void PatternProperty::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(name, visitor); @@ -1420,7 +1432,7 @@ void PatternProperty::boundNames(BoundNames *names) PatternElement::boundNames(names); } -void PatternPropertyList::accept0(Visitor *visitor) +void PatternPropertyList::accept0(BaseVisitor *visitor) { bool accepted = true; for (PatternPropertyList *it = this; it && accepted; it = it->next) { @@ -1437,7 +1449,7 @@ void PatternPropertyList::boundNames(BoundNames *names) it->property->boundNames(names); } -void ComputedPropertyName::accept0(Visitor *visitor) +void ComputedPropertyName::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(expression, visitor); @@ -1446,7 +1458,7 @@ void ComputedPropertyName::accept0(Visitor *visitor) visitor->endVisit(this); } -void ClassExpression::accept0(Visitor *visitor) +void ClassExpression::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(heritage, visitor); @@ -1461,7 +1473,7 @@ ClassExpression *ClassExpression::asClassDefinition() return this; } -void ClassDeclaration::accept0(Visitor *visitor) +void ClassDeclaration::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { accept(heritage, visitor); @@ -1471,7 +1483,7 @@ void ClassDeclaration::accept0(Visitor *visitor) visitor->endVisit(this); } -void ClassElementList::accept0(Visitor *visitor) +void ClassElementList::accept0(BaseVisitor *visitor) { bool accepted = true; for (ClassElementList *it = this; it && accepted; it = it->next) { @@ -1500,7 +1512,7 @@ LeftHandSideExpression *LeftHandSideExpression::leftHandSideExpressionCast() return this; } -void UiVersionSpecifier::accept0(Visitor *visitor) +void UiVersionSpecifier::accept0(BaseVisitor *visitor) { if (visitor->visit(this)) { } @@ -1531,6 +1543,44 @@ void Type::toString(QString *out) const }; } +void UiInlineComponent::accept0(BaseVisitor *visitor) +{ + if (visitor->visit(this)) { + // accept(annotations, visitor); // accept manually in visit if interested + accept(component, visitor); + } + + visitor->endVisit(this); +} + +void UiRequired::accept0(BaseVisitor *visitor) +{ + if (visitor->visit(this)) { + } + + visitor->endVisit(this); +} + +void UiAnnotationList::accept0(BaseVisitor *visitor) +{ + if (visitor->visit(this)) { + for (UiAnnotationList *it = this; it; it = it->next) + accept(it->annotation, visitor); + } + + visitor->endVisit(this); +} + +void UiAnnotation::accept0(BaseVisitor *visitor) +{ + if (visitor->visit(this)) { + accept(qualifiedTypeNameId, visitor); + accept(initializer, visitor); + } + + visitor->endVisit(this); +} + } } // namespace QmlJS::AST QT_QML_END_NAMESPACE diff --git a/src/libs/qmljs/parser/qmljsast_p.h b/src/libs/qmljs/parser/qmljsast_p.h index 3faddcecb3..209a983c52 100644 --- a/src/libs/qmljs/parser/qmljsast_p.h +++ b/src/libs/qmljs/parser/qmljsast_p.h @@ -38,7 +38,8 @@ #include "qmljsastvisitor_p.h" #include "qmljsglobal_p.h" -#include "qmljsmemorypool_p.h" + +#include "qmljs/parser/qmljsmemorypool_p.h" #include <QtCore/qstring.h> @@ -88,6 +89,8 @@ enum Op { URShift, InplaceURightShift, InplaceXor, + As, + Coalesce, Invalid }; @@ -226,6 +229,7 @@ public: Kind_UiImport, Kind_UiObjectBinding, Kind_UiObjectDefinition, + Kind_UiInlineComponent, Kind_UiObjectInitializer, Kind_UiObjectMemberList, Kind_UiArrayMemberList, @@ -239,7 +243,10 @@ public: Kind_UiHeaderItemList, Kind_UiEnumDeclaration, Kind_UiEnumMemberList, - Kind_UiVersionSpecifier + Kind_UiVersionSpecifier, + Kind_UiRequired, + Kind_UiAnnotation, + Kind_UiAnnotationList }; inline Node() {} @@ -261,9 +268,9 @@ public: bool ignoreRecursionDepth() const; - inline void accept(Visitor *visitor) + inline void accept(BaseVisitor *visitor) { - Visitor::RecursionDepthCheck recursionCheck(visitor); + BaseVisitor::RecursionDepthCheck recursionCheck(visitor); // Stack overflow is uncommon, ignoreRecursionDepth() only returns true if // QV4_CRASH_ON_STACKOVERFLOW is set, and ignoreRecursionDepth() needs to be out of line. @@ -277,19 +284,19 @@ public: } } - inline static void accept(Node *node, Visitor *visitor) + inline static void accept(Node *node, BaseVisitor *visitor) { if (node) node->accept(visitor); } // ### Remove when we can. This is part of the qmldevtools library, though. - inline static void acceptChild(Node *node, Visitor *visitor) + inline static void acceptChild(Node *node, BaseVisitor *visitor) { return accept(node, visitor); } - virtual void accept0(Visitor *visitor) = 0; + virtual void accept0(BaseVisitor *visitor) = 0; virtual SourceLocation firstSourceLocation() const = 0; virtual SourceLocation lastSourceLocation() const = 0; @@ -330,7 +337,7 @@ public: return head; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return identifierToken; } @@ -354,7 +361,7 @@ public: , typeArguments(typeArguments) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return typeId->firstSourceLocation(); } @@ -389,7 +396,7 @@ public: previous->next = this; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return typeId->firstSourceLocation(); } @@ -418,7 +425,7 @@ public: : type(type) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return colonToken; } @@ -463,7 +470,7 @@ public: : expression(expression) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return lparenToken; } @@ -488,7 +495,7 @@ public: ThisExpression() { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return thisToken; } @@ -508,7 +515,7 @@ public: IdentifierExpression(const QStringRef &n): name (n) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return identifierToken; } @@ -528,7 +535,7 @@ public: NullExpression() { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return nullToken; } @@ -547,7 +554,7 @@ public: TrueLiteral() { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return trueToken; } @@ -566,7 +573,7 @@ public: FalseLiteral() { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return falseToken; } @@ -585,7 +592,7 @@ public: SuperLiteral() { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return superToken; } @@ -606,7 +613,7 @@ public: NumericLiteral(double v): value(v) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return literalToken; } @@ -626,7 +633,7 @@ public: UiVersionSpecifier(int majorum, int minorum) : majorVersion(majorum), minorVersion(minorum) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return majorToken; } @@ -650,7 +657,7 @@ public: StringLiteral(const QStringRef &v): value (v) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return literalToken; } @@ -681,7 +688,7 @@ public: return (last->expression ? last->expression->lastSourceLocation() : last->literalToken); } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; QStringRef value; QStringRef rawValue; @@ -698,7 +705,7 @@ public: RegExpLiteral(const QStringRef &p, int f): pattern (p), flags (f) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return literalToken; } @@ -733,7 +740,7 @@ public: : elements(elts) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return lbracketToken; } @@ -764,7 +771,7 @@ public: : properties(plist) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return lbraceToken; } @@ -795,7 +802,7 @@ public: previous->next = this; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return commaToken; } @@ -901,7 +908,7 @@ public: kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; virtual bool convertLiteralToAssignmentPattern(MemoryPool *pool, SourceLocation *errorLocation, QString *errorMessage); SourceLocation firstSourceLocation() const override @@ -954,7 +961,7 @@ public: return front; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; void boundNames(BoundNames *names); @@ -989,7 +996,7 @@ public: : PatternElement(pattern, i), name(name) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return name->firstSourceLocation(); } @@ -1025,7 +1032,7 @@ public: previous->next = this; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; void boundNames(BoundNames *names); @@ -1054,7 +1061,7 @@ public: IdentifierPropertyName(const QStringRef &n): id (n) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; QString asString() const override { return id.toString(); } @@ -1070,7 +1077,7 @@ public: StringLiteralPropertyName(const QStringRef &n): id (n) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; QString asString() const override { return id.toString(); } @@ -1086,7 +1093,7 @@ public: NumericLiteralPropertyName(double n): id (n) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; QString asString() const override; @@ -1103,7 +1110,7 @@ public: : expression(expression) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; QString asString() const override { return QString(); } @@ -1127,7 +1134,7 @@ public: base (b), expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return base->firstSourceLocation(); } @@ -1151,7 +1158,7 @@ public: base (b), name (n) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return base->firstSourceLocation(); } @@ -1175,7 +1182,7 @@ public: : base (b), templateLiteral(t) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return base->firstSourceLocation(); } @@ -1197,7 +1204,7 @@ public: base (b), arguments (a) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return newToken; } @@ -1221,7 +1228,7 @@ public: NewExpression(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return newToken; } @@ -1243,7 +1250,7 @@ public: base (b), arguments (a) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return base->firstSourceLocation(); } @@ -1275,7 +1282,7 @@ public: previous->next = this; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return expression->firstSourceLocation(); } @@ -1309,7 +1316,7 @@ public: PostIncrementExpression(ExpressionNode *b): base (b) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return base->firstSourceLocation(); } @@ -1330,7 +1337,7 @@ public: PostDecrementExpression(ExpressionNode *b): base (b) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return base->firstSourceLocation(); } @@ -1351,7 +1358,7 @@ public: DeleteExpression(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return deleteToken; } @@ -1372,7 +1379,7 @@ public: VoidExpression(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return voidToken; } @@ -1393,7 +1400,7 @@ public: TypeOfExpression(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return typeofToken; } @@ -1414,7 +1421,7 @@ public: PreIncrementExpression(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return incrementToken; } @@ -1435,7 +1442,7 @@ public: PreDecrementExpression(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return decrementToken; } @@ -1456,7 +1463,7 @@ public: UnaryPlusExpression(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return plusToken; } @@ -1477,7 +1484,7 @@ public: UnaryMinusExpression(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return minusToken; } @@ -1498,7 +1505,7 @@ public: TildeExpression(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return tildeToken; } @@ -1519,7 +1526,7 @@ public: NotExpression(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return notToken; } @@ -1543,7 +1550,7 @@ public: BinaryExpression *binaryExpressionCast() override; - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return left->firstSourceLocation(); } @@ -1567,7 +1574,7 @@ public: expression (e), ok (t), ko (f) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return expression->firstSourceLocation(); } @@ -1591,7 +1598,7 @@ public: Expression(ExpressionNode *l, ExpressionNode *r): left (l), right (r) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return left->firstSourceLocation(); } @@ -1613,7 +1620,7 @@ public: Block(StatementList *slist): statements (slist) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return lbraceToken; } @@ -1643,7 +1650,7 @@ public: return n; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return statement->firstSourceLocation(); } @@ -1682,7 +1689,7 @@ public: previous->next = this; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return declaration->firstSourceLocation(); } @@ -1720,7 +1727,7 @@ public: declarations (vlist) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return declarationKindToken; } @@ -1740,7 +1747,7 @@ public: EmptyStatement() { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return semicolonToken; } @@ -1760,13 +1767,13 @@ public: ExpressionStatement(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return expression->firstSourceLocation(); } SourceLocation lastSourceLocation() const override - { return semicolonToken.isValid() ? semicolonToken : expression->lastSourceLocation(); } + { return semicolonToken; } // attributes ExpressionNode *expression; @@ -1782,7 +1789,7 @@ public: expression (e), ok (t), ko (f) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return ifToken; } @@ -1814,7 +1821,7 @@ public: statement (stmt), expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return doToken; } @@ -1841,7 +1848,7 @@ public: expression (e), statement (stmt) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return whileToken; } @@ -1871,7 +1878,7 @@ public: { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return forToken; } @@ -1909,7 +1916,7 @@ public: : lhs(v), expression(e), statement(stmt) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return forToken; } @@ -1940,7 +1947,7 @@ public: ContinueStatement(const QStringRef &l = QStringRef()): label (l) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return continueToken; } @@ -1963,7 +1970,7 @@ public: BreakStatement(const QStringRef &l): label (l) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return breakToken; } @@ -1986,7 +1993,7 @@ public: ReturnStatement(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return returnToken; } @@ -2008,7 +2015,7 @@ public: YieldExpression(ExpressionNode *e = nullptr): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return yieldToken; } @@ -2031,7 +2038,7 @@ public: expression (e), statement (stmt) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return withToken; } @@ -2056,7 +2063,7 @@ public: clauses (c), defaultClause (d), moreClauses (r) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return lbraceToken; } @@ -2081,7 +2088,7 @@ public: expression (e), block (b) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return switchToken; } @@ -2106,7 +2113,7 @@ public: expression (e), statements (slist) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return caseToken; } @@ -2138,7 +2145,7 @@ public: previous->next = this; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return clause->firstSourceLocation(); } @@ -2169,7 +2176,7 @@ public: statements (slist) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return defaultToken; } @@ -2192,7 +2199,7 @@ public: label (l), statement (stmt) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return identifierToken; } @@ -2215,7 +2222,7 @@ public: ThrowStatement(ExpressionNode *e): expression (e) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return throwToken; } @@ -2238,7 +2245,7 @@ public: : patternElement(p), statement(stmt) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return catchToken; } @@ -2264,7 +2271,7 @@ public: statement (stmt) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return finallyToken; } @@ -2294,7 +2301,7 @@ public: statement (stmt), catchExpression (c), finallyExpression (nullptr) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return tryToken; } @@ -2326,7 +2333,7 @@ public: typeAnnotation(typeAnnotation) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return functionToken; } @@ -2360,7 +2367,7 @@ public: FunctionExpression(n, f, b, typeAnnotation) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; }; class QML_PARSER_EXPORT FormalParameterList: public Node @@ -2431,7 +2438,7 @@ public: BoundNames boundNames() const; - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return element->firstSourceLocation(); } @@ -2457,7 +2464,7 @@ public: : name(n), heritage(heritage), elements(elements) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return classToken; } @@ -2486,7 +2493,7 @@ public: : ClassExpression(n, heritage, elements) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; }; @@ -2508,7 +2515,7 @@ public: return n; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return property->firstSourceLocation(); } @@ -2536,7 +2543,7 @@ public: : statements(statements) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return statements ? statements->firstSourceLocation() : SourceLocation(); } @@ -2565,7 +2572,7 @@ public: kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return identifier.isNull() ? importedBindingToken : identifierToken; } @@ -2610,7 +2617,7 @@ public: return head; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return importSpecifierToken; } @@ -2642,7 +2649,7 @@ public: kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return leftBraceToken; } @@ -2666,7 +2673,7 @@ public: kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; virtual SourceLocation firstSourceLocation() const override { return starToken; } @@ -2716,7 +2723,7 @@ public: kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; virtual SourceLocation firstSourceLocation() const override { return importedDefaultBinding.isNull() ? (nameSpaceImport ? nameSpaceImport->firstSourceLocation() : namedImports->firstSourceLocation()) : importedDefaultBindingToken; } @@ -2741,7 +2748,7 @@ public: kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return fromToken; } @@ -2772,7 +2779,7 @@ public: kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return importToken; } @@ -2805,7 +2812,7 @@ public: kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return identifierToken; } @@ -2850,7 +2857,7 @@ public: return head; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return exportSpecifier->firstSourceLocation(); } @@ -2878,7 +2885,7 @@ public: kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return leftBraceToken; } @@ -2922,7 +2929,7 @@ public: kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return exportToken; } @@ -2949,7 +2956,7 @@ public: kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return body ? body->firstSourceLocation() : SourceLocation(); } @@ -2969,7 +2976,7 @@ public: DebuggerStatement() { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return debuggerToken; } @@ -2995,7 +3002,7 @@ public: : importUri(uri) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return importToken; } @@ -3009,7 +3016,6 @@ public: QStringRef importId; SourceLocation importToken; SourceLocation fileNameToken; - SourceLocation versionToken; SourceLocation asToken; SourceLocation importIdToken; SourceLocation semicolonToken; @@ -3023,6 +3029,9 @@ public: SourceLocation lastSourceLocation() const override = 0; UiObjectMember *uiObjectMemberCast() override; + +// attributes + UiAnnotationList *annotations = nullptr; }; class QML_PARSER_EXPORT UiObjectMemberList: public Node @@ -3042,7 +3051,7 @@ public: previous->next = this; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return member->firstSourceLocation(); } @@ -3071,7 +3080,7 @@ public: : name(name) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return pragmaToken; } @@ -3085,6 +3094,28 @@ public: SourceLocation semicolonToken; }; +class QML_PARSER_EXPORT UiRequired: public Node +{ +public: + QMLJS_DECLARE_AST_NODE(UiRequired) + + UiRequired(QStringRef name) + :name(name) + { kind = K; } + + void accept0(BaseVisitor *visitor) override; + + SourceLocation firstSourceLocation() const override + { return requiredToken; } + + SourceLocation lastSourceLocation() const override + { return semicolonToken; } + + QStringRef name; + SourceLocation requiredToken; + SourceLocation semicolonToken; +}; + class QML_PARSER_EXPORT UiHeaderItemList: public Node { public: @@ -3121,7 +3152,7 @@ public: return head; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return headerItem->firstSourceLocation(); } @@ -3143,7 +3174,7 @@ public: : headers(headers), members(members) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { @@ -3185,7 +3216,7 @@ public: previous->next = this; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return member->firstSourceLocation(); } @@ -3215,7 +3246,7 @@ public: : members(members) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return lbraceToken; } @@ -3246,7 +3277,7 @@ public: previous->next = this; } - void accept0(Visitor *) override; + void accept0(BaseVisitor *) override; SourceLocation firstSourceLocation() const override { return colonToken.isValid() ? identifierToken : propertyTypeToken; } @@ -3290,7 +3321,7 @@ public: : type(Property), memberType(memberType), name(name), statement(statement), binding(nullptr), isDefaultMember(false), isReadonlyMember(false), parameters(nullptr) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { @@ -3347,7 +3378,7 @@ public: : qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer) { kind = K; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { return qualifiedTypeNameId->identifierToken; } @@ -3360,6 +3391,29 @@ public: UiObjectInitializer *initializer; }; +class QML_PARSER_EXPORT UiInlineComponent: public UiObjectMember +{ +public: + QMLJS_DECLARE_AST_NODE(UiInlineComponent) + + UiInlineComponent(const QStringRef& inlineComponentName, UiObjectDefinition* inlineComponent) + : name(inlineComponentName), component(inlineComponent) + { kind = K; } + + SourceLocation lastSourceLocation() const override + {return component->lastSourceLocation();} + + SourceLocation firstSourceLocation() const override + {return componentToken;} + + void accept0(BaseVisitor *visitor) override; + + // attributes + QStringRef name; + UiObjectDefinition* component; + SourceLocation componentToken; +}; + class QML_PARSER_EXPORT UiSourceElement: public UiObjectMember { public: @@ -3389,7 +3443,7 @@ public: return SourceLocation(); } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; // attributes @@ -3421,7 +3475,7 @@ public: SourceLocation lastSourceLocation() const override { return initializer->rbraceToken; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; // attributes @@ -3449,7 +3503,7 @@ public: SourceLocation lastSourceLocation() const override { return statement->lastSourceLocation(); } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; // attributes UiQualifiedId *qualifiedId; @@ -3474,7 +3528,7 @@ public: SourceLocation lastSourceLocation() const override { return rbracketToken; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; // attributes UiQualifiedId *qualifiedId; @@ -3518,7 +3572,7 @@ public: return last->valueToken.isValid() ? last->valueToken : last->memberToken; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; UiEnumMemberList *finish() { @@ -3552,7 +3606,7 @@ public: SourceLocation lastSourceLocation() const override { return rbraceToken; } - void accept0(Visitor *visitor) override; + void accept0(BaseVisitor *visitor) override; // attributes SourceLocation enumToken; @@ -3561,8 +3615,67 @@ public: UiEnumMemberList *members; }; -} } // namespace AST +class QML_PARSER_EXPORT UiAnnotation: public Node +{ +public: + QMLJS_DECLARE_AST_NODE(UiAnnotation) + + UiAnnotation(UiQualifiedId *qualifiedTypeNameId, + UiObjectInitializer *initializer) + : qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer) + { kind = K; } + + void accept0(BaseVisitor *visitor) override; + + SourceLocation firstSourceLocation() const override + { return qualifiedTypeNameId->identifierToken; } + + SourceLocation lastSourceLocation() const override + { return initializer->rbraceToken; } + +// attributes + UiQualifiedId *qualifiedTypeNameId; + UiObjectInitializer *initializer; +}; + +class QML_PARSER_EXPORT UiAnnotationList: public Node +{ +public: + QMLJS_DECLARE_AST_NODE(UiAnnotationList) + UiAnnotationList(UiAnnotation *annotation) + : next(this), annotation(annotation) + { kind = K; } + + UiAnnotationList(UiAnnotationList *previous, UiAnnotation *annotation) + : annotation(annotation) + { + kind = K; + next = previous->next; + previous->next = this; + } + + void accept0(BaseVisitor *visitor) override; + + SourceLocation firstSourceLocation() const override + { return annotation->firstSourceLocation(); } + + SourceLocation lastSourceLocation() const override + { return lastListElement(this)->annotation->lastSourceLocation(); } + + UiAnnotationList *finish() + { + UiAnnotationList *head = next; + next = nullptr; + return head; + } + +// attributes + UiAnnotationList *next; + UiAnnotation *annotation; +}; + +} } // namespace AST QT_QML_END_NAMESPACE diff --git a/src/libs/qmljs/parser/qmljsastfwd_p.h b/src/libs/qmljs/parser/qmljsastfwd_p.h index 86d04ad25d..dd0a402ec7 100644 --- a/src/libs/qmljs/parser/qmljsastfwd_p.h +++ b/src/libs/qmljs/parser/qmljsastfwd_p.h @@ -26,8 +26,9 @@ #pragma once #include "qmljsglobal_p.h" +#include "qmljs/parser/qmljssourcelocation_p.h" -#include <QtCore/qglobal.h> +#include "qmljsglobal_p.h" // // W A R N I N G @@ -44,27 +45,7 @@ QT_QML_BEGIN_NAMESPACE namespace QmlJS { 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 BaseVisitor; class Visitor; class Node; class ExpressionNode; @@ -156,7 +137,6 @@ class NamedImport; class ImportClause; class FromClause; class ImportDeclaration; -class ModuleItem; class ESModule; class DebuggerStatement; class NestedExpression; @@ -174,6 +154,7 @@ class UiImport; class UiPublicMember; class UiParameterList; class UiObjectDefinition; +class UiInlineComponent; class UiObjectInitializer; class UiObjectBinding; class UiScriptBinding; @@ -187,8 +168,12 @@ class UiHeaderItemList; class UiEnumDeclaration; class UiEnumMemberList; class UiVersionSpecifier; +class UiRequired; +class UiAnnotation; +class UiAnnotationList; -} } // namespace AST +} // namespace AST +} // namespace QmlJS QT_QML_END_NAMESPACE diff --git a/src/libs/qmljs/parser/qmljsastvisitor.cpp b/src/libs/qmljs/parser/qmljsastvisitor.cpp index c5028337ef..b42a0c7022 100644 --- a/src/libs/qmljs/parser/qmljsastvisitor.cpp +++ b/src/libs/qmljs/parser/qmljsastvisitor.cpp @@ -29,11 +29,13 @@ QT_QML_BEGIN_NAMESPACE namespace QmlJS { namespace AST { -Visitor::Visitor(quint16 parentRecursionDepth) : m_recursionDepth(parentRecursionDepth) +Visitor::Visitor(quint16 parentRecursionDepth) : BaseVisitor(parentRecursionDepth) { } -Visitor::~Visitor() +BaseVisitor::BaseVisitor(quint16 parentRecursionDepth) : m_recursionDepth(parentRecursionDepth) {} + +BaseVisitor::~BaseVisitor() { } diff --git a/src/libs/qmljs/parser/qmljsastvisitor_p.h b/src/libs/qmljs/parser/qmljsastvisitor_p.h index 1bb8808246..ae2b323a59 100644 --- a/src/libs/qmljs/parser/qmljsastvisitor_p.h +++ b/src/libs/qmljs/parser/qmljsastvisitor_p.h @@ -43,7 +43,7 @@ QT_QML_BEGIN_NAMESPACE namespace QmlJS { namespace AST { -class QML_PARSER_EXPORT Visitor +class QML_PARSER_EXPORT BaseVisitor { public: class RecursionDepthCheck @@ -53,7 +53,7 @@ public: RecursionDepthCheck(RecursionDepthCheck &&) = delete; RecursionDepthCheck &operator=(RecursionDepthCheck &&) = delete; - RecursionDepthCheck(Visitor *visitor) : m_visitor(visitor) + RecursionDepthCheck(BaseVisitor *visitor) : m_visitor(visitor) { ++(m_visitor->m_recursionDepth); } @@ -69,335 +69,340 @@ public: private: static const quint16 s_recursionLimit = 4096; - Visitor *m_visitor; + BaseVisitor *m_visitor; }; - Visitor(quint16 parentRecursionDepth = 0); - virtual ~Visitor(); + BaseVisitor(quint16 parentRecursionDepth = 0); + virtual ~BaseVisitor(); - virtual bool preVisit(Node *) { return true; } - virtual void postVisit(Node *) {} + virtual bool preVisit(Node *) = 0; + virtual void postVisit(Node *) = 0; // Ui - virtual bool visit(UiProgram *) { return true; } - virtual bool visit(UiHeaderItemList *) { return true; } - virtual bool visit(UiPragma *) { return true; } - virtual bool visit(UiImport *) { return true; } - virtual bool visit(UiPublicMember *) { return true; } - virtual bool visit(UiSourceElement *) { return true; } - virtual bool visit(UiObjectDefinition *) { return true; } - virtual bool visit(UiObjectInitializer *) { return true; } - virtual bool visit(UiObjectBinding *) { return true; } - virtual bool visit(UiScriptBinding *) { return true; } - virtual bool visit(UiArrayBinding *) { return true; } - virtual bool visit(UiParameterList *) { return true; } - virtual bool visit(UiObjectMemberList *) { return true; } - virtual bool visit(UiArrayMemberList *) { return true; } - virtual bool visit(UiQualifiedId *) { return true; } - virtual bool visit(UiEnumDeclaration *) { return true; } - virtual bool visit(UiEnumMemberList *) { return true; } - virtual bool visit(UiVersionSpecifier *) { return true; } - - virtual void endVisit(UiProgram *) {} - virtual void endVisit(UiImport *) {} - virtual void endVisit(UiHeaderItemList *) {} - virtual void endVisit(UiPragma *) {} - virtual void endVisit(UiPublicMember *) {} - virtual void endVisit(UiSourceElement *) {} - virtual void endVisit(UiObjectDefinition *) {} - virtual void endVisit(UiObjectInitializer *) {} - virtual void endVisit(UiObjectBinding *) {} - virtual void endVisit(UiScriptBinding *) {} - virtual void endVisit(UiArrayBinding *) {} - virtual void endVisit(UiParameterList *) {} - virtual void endVisit(UiObjectMemberList *) {} - virtual void endVisit(UiArrayMemberList *) {} - virtual void endVisit(UiQualifiedId *) {} - virtual void endVisit(UiEnumDeclaration *) {} - virtual void endVisit(UiEnumMemberList *) { } - virtual void endVisit(UiVersionSpecifier *) {} + virtual bool visit(UiProgram *) = 0; + virtual bool visit(UiHeaderItemList *) = 0; + virtual bool visit(UiPragma *) = 0; + virtual bool visit(UiImport *) = 0; + virtual bool visit(UiPublicMember *) = 0; + virtual bool visit(UiSourceElement *) = 0; + virtual bool visit(UiObjectDefinition *) = 0; + virtual bool visit(UiObjectInitializer *) = 0; + virtual bool visit(UiObjectBinding *) = 0; + virtual bool visit(UiScriptBinding *) = 0; + virtual bool visit(UiArrayBinding *) = 0; + virtual bool visit(UiParameterList *) = 0; + virtual bool visit(UiObjectMemberList *) = 0; + virtual bool visit(UiArrayMemberList *) = 0; + virtual bool visit(UiQualifiedId *) = 0; + virtual bool visit(UiEnumDeclaration *) = 0; + virtual bool visit(UiEnumMemberList *) = 0; + virtual bool visit(UiVersionSpecifier *) = 0; + virtual bool visit(UiInlineComponent *) = 0; + virtual bool visit(UiAnnotation *) = 0; + virtual bool visit(UiAnnotationList *) = 0; + virtual bool visit(UiRequired *) = 0; + + virtual void endVisit(UiProgram *) = 0; + virtual void endVisit(UiImport *) = 0; + virtual void endVisit(UiHeaderItemList *) = 0; + virtual void endVisit(UiPragma *) = 0; + virtual void endVisit(UiPublicMember *) = 0; + virtual void endVisit(UiSourceElement *) = 0; + virtual void endVisit(UiObjectDefinition *) = 0; + virtual void endVisit(UiObjectInitializer *) = 0; + virtual void endVisit(UiObjectBinding *) = 0; + virtual void endVisit(UiScriptBinding *) = 0; + virtual void endVisit(UiArrayBinding *) = 0; + virtual void endVisit(UiParameterList *) = 0; + virtual void endVisit(UiObjectMemberList *) = 0; + virtual void endVisit(UiArrayMemberList *) = 0; + virtual void endVisit(UiQualifiedId *) = 0; + virtual void endVisit(UiEnumDeclaration *) = 0; + virtual void endVisit(UiEnumMemberList *) = 0; + virtual void endVisit(UiVersionSpecifier *) = 0; + virtual void endVisit(UiInlineComponent *) = 0; + virtual void endVisit(UiAnnotation *) = 0; + virtual void endVisit(UiAnnotationList *) = 0; + virtual void endVisit(UiRequired *) = 0; // QmlJS - virtual bool visit(ThisExpression *) { return true; } - virtual void endVisit(ThisExpression *) {} - - virtual bool visit(IdentifierExpression *) { return true; } - virtual void endVisit(IdentifierExpression *) {} + virtual bool visit(ThisExpression *) = 0; + virtual void endVisit(ThisExpression *) = 0; - virtual bool visit(NullExpression *) { return true; } - virtual void endVisit(NullExpression *) {} + virtual bool visit(IdentifierExpression *) = 0; + virtual void endVisit(IdentifierExpression *) = 0; - virtual bool visit(TrueLiteral *) { return true; } - virtual void endVisit(TrueLiteral *) {} + virtual bool visit(NullExpression *) = 0; + virtual void endVisit(NullExpression *) = 0; - virtual bool visit(FalseLiteral *) { return true; } - virtual void endVisit(FalseLiteral *) {} + virtual bool visit(TrueLiteral *) = 0; + virtual void endVisit(TrueLiteral *) = 0; - virtual bool visit(SuperLiteral *) { return true; } - virtual void endVisit(SuperLiteral *) {} + virtual bool visit(FalseLiteral *) = 0; + virtual void endVisit(FalseLiteral *) = 0; - virtual bool visit(StringLiteral *) { return true; } - virtual void endVisit(StringLiteral *) {} + virtual bool visit(SuperLiteral *) = 0; + virtual void endVisit(SuperLiteral *) = 0; - virtual bool visit(TemplateLiteral *) { return true; } - virtual void endVisit(TemplateLiteral *) {} + virtual bool visit(StringLiteral *) = 0; + virtual void endVisit(StringLiteral *) = 0; - virtual bool visit(NumericLiteral *) { return true; } - virtual void endVisit(NumericLiteral *) {} + virtual bool visit(TemplateLiteral *) = 0; + virtual void endVisit(TemplateLiteral *) = 0; - virtual bool visit(RegExpLiteral *) { return true; } - virtual void endVisit(RegExpLiteral *) {} + virtual bool visit(NumericLiteral *) = 0; + virtual void endVisit(NumericLiteral *) = 0; - virtual bool visit(ArrayPattern *) { return true; } - virtual void endVisit(ArrayPattern *) {} + virtual bool visit(RegExpLiteral *) = 0; + virtual void endVisit(RegExpLiteral *) = 0; - virtual bool visit(ObjectPattern *) { return true; } - virtual void endVisit(ObjectPattern *) {} + virtual bool visit(ArrayPattern *) = 0; + virtual void endVisit(ArrayPattern *) = 0; - virtual bool visit(PatternElementList *) { return true; } - virtual void endVisit(PatternElementList *) {} + virtual bool visit(ObjectPattern *) = 0; + virtual void endVisit(ObjectPattern *) = 0; - virtual bool visit(PatternPropertyList *) { return true; } - virtual void endVisit(PatternPropertyList *) {} + virtual bool visit(PatternElementList *) = 0; + virtual void endVisit(PatternElementList *) = 0; - virtual bool visit(PatternElement *) { return true; } - virtual void endVisit(PatternElement *) {} + virtual bool visit(PatternPropertyList *) = 0; + virtual void endVisit(PatternPropertyList *) = 0; - virtual bool visit(PatternProperty *) { return true; } - virtual void endVisit(PatternProperty *) {} + virtual bool visit(PatternElement *) = 0; + virtual void endVisit(PatternElement *) = 0; - virtual bool visit(Elision *) { return true; } - virtual void endVisit(Elision *) {} + virtual bool visit(PatternProperty *) = 0; + virtual void endVisit(PatternProperty *) = 0; - virtual bool visit(NestedExpression *) { return true; } - virtual void endVisit(NestedExpression *) {} + virtual bool visit(Elision *) = 0; + virtual void endVisit(Elision *) = 0; - virtual bool visit(IdentifierPropertyName *) { return true; } - virtual void endVisit(IdentifierPropertyName *) {} + virtual bool visit(NestedExpression *) = 0; + virtual void endVisit(NestedExpression *) = 0; - virtual bool visit(StringLiteralPropertyName *) { return true; } - virtual void endVisit(StringLiteralPropertyName *) {} + virtual bool visit(IdentifierPropertyName *) = 0; + virtual void endVisit(IdentifierPropertyName *) = 0; - virtual bool visit(NumericLiteralPropertyName *) { return true; } - virtual void endVisit(NumericLiteralPropertyName *) {} + virtual bool visit(StringLiteralPropertyName *) = 0; + virtual void endVisit(StringLiteralPropertyName *) = 0; - virtual bool visit(ComputedPropertyName *) { return true; } - virtual void endVisit(ComputedPropertyName *) {} + virtual bool visit(NumericLiteralPropertyName *) = 0; + virtual void endVisit(NumericLiteralPropertyName *) = 0; - virtual bool visit(ArrayMemberExpression *) { return true; } - virtual void endVisit(ArrayMemberExpression *) {} + virtual bool visit(ComputedPropertyName *) = 0; + virtual void endVisit(ComputedPropertyName *) = 0; - virtual bool visit(FieldMemberExpression *) { return true; } - virtual void endVisit(FieldMemberExpression *) {} + virtual bool visit(ArrayMemberExpression *) = 0; + virtual void endVisit(ArrayMemberExpression *) = 0; - virtual bool visit(TaggedTemplate *) { return true; } - virtual void endVisit(TaggedTemplate *) {} + virtual bool visit(FieldMemberExpression *) = 0; + virtual void endVisit(FieldMemberExpression *) = 0; - virtual bool visit(NewMemberExpression *) { return true; } - virtual void endVisit(NewMemberExpression *) {} + virtual bool visit(TaggedTemplate *) = 0; + virtual void endVisit(TaggedTemplate *) = 0; - virtual bool visit(NewExpression *) { return true; } - virtual void endVisit(NewExpression *) {} + virtual bool visit(NewMemberExpression *) = 0; + virtual void endVisit(NewMemberExpression *) = 0; - virtual bool visit(CallExpression *) { return true; } - virtual void endVisit(CallExpression *) {} + virtual bool visit(NewExpression *) = 0; + virtual void endVisit(NewExpression *) = 0; - virtual bool visit(ArgumentList *) { return true; } - virtual void endVisit(ArgumentList *) {} + virtual bool visit(CallExpression *) = 0; + virtual void endVisit(CallExpression *) = 0; - virtual bool visit(PostIncrementExpression *) { return true; } - virtual void endVisit(PostIncrementExpression *) {} + virtual bool visit(ArgumentList *) = 0; + virtual void endVisit(ArgumentList *) = 0; - virtual bool visit(PostDecrementExpression *) { return true; } - virtual void endVisit(PostDecrementExpression *) {} + virtual bool visit(PostIncrementExpression *) = 0; + virtual void endVisit(PostIncrementExpression *) = 0; - virtual bool visit(DeleteExpression *) { return true; } - virtual void endVisit(DeleteExpression *) {} + virtual bool visit(PostDecrementExpression *) = 0; + virtual void endVisit(PostDecrementExpression *) = 0; - virtual bool visit(VoidExpression *) { return true; } - virtual void endVisit(VoidExpression *) {} + virtual bool visit(DeleteExpression *) = 0; + virtual void endVisit(DeleteExpression *) = 0; - virtual bool visit(TypeOfExpression *) { return true; } - virtual void endVisit(TypeOfExpression *) {} + virtual bool visit(VoidExpression *) = 0; + virtual void endVisit(VoidExpression *) = 0; - virtual bool visit(PreIncrementExpression *) { return true; } - virtual void endVisit(PreIncrementExpression *) {} + virtual bool visit(TypeOfExpression *) = 0; + virtual void endVisit(TypeOfExpression *) = 0; - virtual bool visit(PreDecrementExpression *) { return true; } - virtual void endVisit(PreDecrementExpression *) {} + virtual bool visit(PreIncrementExpression *) = 0; + virtual void endVisit(PreIncrementExpression *) = 0; - virtual bool visit(UnaryPlusExpression *) { return true; } - virtual void endVisit(UnaryPlusExpression *) {} + virtual bool visit(PreDecrementExpression *) = 0; + virtual void endVisit(PreDecrementExpression *) = 0; - virtual bool visit(UnaryMinusExpression *) { return true; } - virtual void endVisit(UnaryMinusExpression *) {} + virtual bool visit(UnaryPlusExpression *) = 0; + virtual void endVisit(UnaryPlusExpression *) = 0; - virtual bool visit(TildeExpression *) { return true; } - virtual void endVisit(TildeExpression *) {} + virtual bool visit(UnaryMinusExpression *) = 0; + virtual void endVisit(UnaryMinusExpression *) = 0; - virtual bool visit(NotExpression *) { return true; } - virtual void endVisit(NotExpression *) {} + virtual bool visit(TildeExpression *) = 0; + virtual void endVisit(TildeExpression *) = 0; - virtual bool visit(BinaryExpression *) { return true; } - virtual void endVisit(BinaryExpression *) {} + virtual bool visit(NotExpression *) = 0; + virtual void endVisit(NotExpression *) = 0; - virtual bool visit(ConditionalExpression *) { return true; } - virtual void endVisit(ConditionalExpression *) {} + virtual bool visit(BinaryExpression *) = 0; + virtual void endVisit(BinaryExpression *) = 0; - virtual bool visit(Expression *) { return true; } - virtual void endVisit(Expression *) {} + virtual bool visit(ConditionalExpression *) = 0; + virtual void endVisit(ConditionalExpression *) = 0; - virtual bool visit(Block *) { return true; } - virtual void endVisit(Block *) {} + virtual bool visit(Expression *) = 0; + virtual void endVisit(Expression *) = 0; - virtual bool visit(StatementList *) { return true; } - virtual void endVisit(StatementList *) {} + virtual bool visit(Block *) = 0; + virtual void endVisit(Block *) = 0; - virtual bool visit(VariableStatement *) { return true; } - virtual void endVisit(VariableStatement *) {} + virtual bool visit(StatementList *) = 0; + virtual void endVisit(StatementList *) = 0; - virtual bool visit(VariableDeclarationList *) { return true; } - virtual void endVisit(VariableDeclarationList *) {} + virtual bool visit(VariableStatement *) = 0; + virtual void endVisit(VariableStatement *) = 0; - virtual bool visit(EmptyStatement *) { return true; } - virtual void endVisit(EmptyStatement *) {} + virtual bool visit(VariableDeclarationList *) = 0; + virtual void endVisit(VariableDeclarationList *) = 0; - virtual bool visit(ExpressionStatement *) { return true; } - virtual void endVisit(ExpressionStatement *) {} + virtual bool visit(EmptyStatement *) = 0; + virtual void endVisit(EmptyStatement *) = 0; - virtual bool visit(IfStatement *) { return true; } - virtual void endVisit(IfStatement *) {} + virtual bool visit(ExpressionStatement *) = 0; + virtual void endVisit(ExpressionStatement *) = 0; - virtual bool visit(DoWhileStatement *) { return true; } - virtual void endVisit(DoWhileStatement *) {} + virtual bool visit(IfStatement *) = 0; + virtual void endVisit(IfStatement *) = 0; - virtual bool visit(WhileStatement *) { return true; } - virtual void endVisit(WhileStatement *) {} + virtual bool visit(DoWhileStatement *) = 0; + virtual void endVisit(DoWhileStatement *) = 0; - virtual bool visit(ForStatement *) { return true; } - virtual void endVisit(ForStatement *) {} + virtual bool visit(WhileStatement *) = 0; + virtual void endVisit(WhileStatement *) = 0; - virtual bool visit(ForEachStatement *) { return true; } - virtual void endVisit(ForEachStatement *) {} + virtual bool visit(ForStatement *) = 0; + virtual void endVisit(ForStatement *) = 0; - virtual bool visit(ContinueStatement *) { return true; } - virtual void endVisit(ContinueStatement *) {} + virtual bool visit(ForEachStatement *) = 0; + virtual void endVisit(ForEachStatement *) = 0; - virtual bool visit(BreakStatement *) { return true; } - virtual void endVisit(BreakStatement *) {} + virtual bool visit(ContinueStatement *) = 0; + virtual void endVisit(ContinueStatement *) = 0; - virtual bool visit(ReturnStatement *) { return true; } - virtual void endVisit(ReturnStatement *) {} + virtual bool visit(BreakStatement *) = 0; + virtual void endVisit(BreakStatement *) = 0; - virtual bool visit(YieldExpression *) { return true; } - virtual void endVisit(YieldExpression *) {} + virtual bool visit(ReturnStatement *) = 0; + virtual void endVisit(ReturnStatement *) = 0; - virtual bool visit(WithStatement *) { return true; } - virtual void endVisit(WithStatement *) {} + virtual bool visit(YieldExpression *) = 0; + virtual void endVisit(YieldExpression *) = 0; - virtual bool visit(SwitchStatement *) { return true; } - virtual void endVisit(SwitchStatement *) {} + virtual bool visit(WithStatement *) = 0; + virtual void endVisit(WithStatement *) = 0; - virtual bool visit(CaseBlock *) { return true; } - virtual void endVisit(CaseBlock *) {} + virtual bool visit(SwitchStatement *) = 0; + virtual void endVisit(SwitchStatement *) = 0; - virtual bool visit(CaseClauses *) { return true; } - virtual void endVisit(CaseClauses *) {} + virtual bool visit(CaseBlock *) = 0; + virtual void endVisit(CaseBlock *) = 0; - virtual bool visit(CaseClause *) { return true; } - virtual void endVisit(CaseClause *) {} + virtual bool visit(CaseClauses *) = 0; + virtual void endVisit(CaseClauses *) = 0; - virtual bool visit(DefaultClause *) { return true; } - virtual void endVisit(DefaultClause *) {} + virtual bool visit(CaseClause *) = 0; + virtual void endVisit(CaseClause *) = 0; - virtual bool visit(LabelledStatement *) { return true; } - virtual void endVisit(LabelledStatement *) {} + virtual bool visit(DefaultClause *) = 0; + virtual void endVisit(DefaultClause *) = 0; - virtual bool visit(ThrowStatement *) { return true; } - virtual void endVisit(ThrowStatement *) {} + virtual bool visit(LabelledStatement *) = 0; + virtual void endVisit(LabelledStatement *) = 0; - virtual bool visit(TryStatement *) { return true; } - virtual void endVisit(TryStatement *) {} + virtual bool visit(ThrowStatement *) = 0; + virtual void endVisit(ThrowStatement *) = 0; - virtual bool visit(Catch *) { return true; } - virtual void endVisit(Catch *) {} + virtual bool visit(TryStatement *) = 0; + virtual void endVisit(TryStatement *) = 0; - virtual bool visit(Finally *) { return true; } - virtual void endVisit(Finally *) {} + virtual bool visit(Catch *) = 0; + virtual void endVisit(Catch *) = 0; - virtual bool visit(FunctionDeclaration *) { return true; } - virtual void endVisit(FunctionDeclaration *) {} + virtual bool visit(Finally *) = 0; + virtual void endVisit(Finally *) = 0; - virtual bool visit(FunctionExpression *) { return true; } - virtual void endVisit(FunctionExpression *) {} + virtual bool visit(FunctionDeclaration *) = 0; + virtual void endVisit(FunctionDeclaration *) = 0; - virtual bool visit(FormalParameterList *) { return true; } - virtual void endVisit(FormalParameterList *) {} + virtual bool visit(FunctionExpression *) = 0; + virtual void endVisit(FunctionExpression *) = 0; - virtual bool visit(ClassExpression *) { return true; } - virtual void endVisit(ClassExpression *) {} + virtual bool visit(FormalParameterList *) = 0; + virtual void endVisit(FormalParameterList *) = 0; - virtual bool visit(ClassDeclaration *) { return true; } - virtual void endVisit(ClassDeclaration *) {} + virtual bool visit(ClassExpression *) = 0; + virtual void endVisit(ClassExpression *) = 0; - virtual bool visit(ClassElementList *) { return true; } - virtual void endVisit(ClassElementList *) {} + virtual bool visit(ClassDeclaration *) = 0; + virtual void endVisit(ClassDeclaration *) = 0; - virtual bool visit(Program *) { return true; } - virtual void endVisit(Program *) {} + virtual bool visit(ClassElementList *) = 0; + virtual void endVisit(ClassElementList *) = 0; - virtual bool visit(NameSpaceImport *) { return true; } - virtual void endVisit(NameSpaceImport *) {} + virtual bool visit(Program *) = 0; + virtual void endVisit(Program *) = 0; - virtual bool visit(ImportSpecifier *) { return true; } - virtual void endVisit(ImportSpecifier *) {} + virtual bool visit(NameSpaceImport *) = 0; + virtual void endVisit(NameSpaceImport *) = 0; - virtual bool visit(ImportsList *) { return true; } - virtual void endVisit(ImportsList *) {} + virtual bool visit(ImportSpecifier *) = 0; + virtual void endVisit(ImportSpecifier *) = 0; - virtual bool visit(NamedImports *) { return true; } - virtual void endVisit(NamedImports *) {} + virtual bool visit(ImportsList *) = 0; + virtual void endVisit(ImportsList *) = 0; - virtual bool visit(FromClause *) { return true; } - virtual void endVisit(FromClause *) {} + virtual bool visit(NamedImports *) = 0; + virtual void endVisit(NamedImports *) = 0; - virtual bool visit(ImportClause *) { return true; } - virtual void endVisit(ImportClause *) {} + virtual bool visit(FromClause *) = 0; + virtual void endVisit(FromClause *) = 0; - virtual bool visit(ImportDeclaration *) { return true; } - virtual void endVisit(ImportDeclaration *) {} + virtual bool visit(ImportClause *) = 0; + virtual void endVisit(ImportClause *) = 0; - virtual bool visit(ExportSpecifier *) { return true; } - virtual void endVisit(ExportSpecifier *) {} + virtual bool visit(ImportDeclaration *) = 0; + virtual void endVisit(ImportDeclaration *) = 0; - virtual bool visit(ExportsList *) { return true; } - virtual void endVisit(ExportsList *) {} + virtual bool visit(ExportSpecifier *) = 0; + virtual void endVisit(ExportSpecifier *) = 0; - virtual bool visit(ExportClause *) { return true; } - virtual void endVisit(ExportClause *) {} + virtual bool visit(ExportsList *) = 0; + virtual void endVisit(ExportsList *) = 0; - virtual bool visit(ExportDeclaration *) { return true; } - virtual void endVisit(ExportDeclaration *) {} + virtual bool visit(ExportClause *) = 0; + virtual void endVisit(ExportClause *) = 0; - virtual bool visit(ModuleItem *) { return true; } - virtual void endVisit(ModuleItem *) {} + virtual bool visit(ExportDeclaration *) = 0; + virtual void endVisit(ExportDeclaration *) = 0; - virtual bool visit(ESModule *) { return true; } - virtual void endVisit(ESModule *) {} + virtual bool visit(ESModule *) = 0; + virtual void endVisit(ESModule *) = 0; - virtual bool visit(DebuggerStatement *) { return true; } - virtual void endVisit(DebuggerStatement *) {} + virtual bool visit(DebuggerStatement *) = 0; + virtual void endVisit(DebuggerStatement *) = 0; - virtual bool visit(Type *) { return true; } - virtual void endVisit(Type *) {} + virtual bool visit(Type *) = 0; + virtual void endVisit(Type *) = 0; - virtual bool visit(TypeArgumentList *) { return true; } - virtual void endVisit(TypeArgumentList *) {} + virtual bool visit(TypeArgumentList *) = 0; + virtual void endVisit(TypeArgumentList *) = 0; - virtual bool visit(TypeAnnotation *) { return true; } - virtual void endVisit(TypeAnnotation *) {} + virtual bool visit(TypeAnnotation *) = 0; + virtual void endVisit(TypeAnnotation *) = 0; - virtual void throwRecursionDepthError() {} + virtual void throwRecursionDepthError() = 0; quint16 recursionDepth() const { return m_recursionDepth; } @@ -406,6 +411,339 @@ protected: friend class RecursionDepthCheck; }; +class QML_PARSER_EXPORT Visitor: public BaseVisitor +{ +public: + Visitor(quint16 parentRecursionDepth = 0); + + bool preVisit(Node *) override { return true; } + void postVisit(Node *) override {} + + // Ui + bool visit(UiProgram *) override { return true; } + bool visit(UiHeaderItemList *) override { return true; } + bool visit(UiPragma *) override { return true; } + bool visit(UiImport *) override { return true; } + bool visit(UiPublicMember *) override { return true; } + bool visit(UiSourceElement *) override { return true; } + bool visit(UiObjectDefinition *) override { return true; } + bool visit(UiObjectInitializer *) override { return true; } + bool visit(UiObjectBinding *) override { return true; } + bool visit(UiScriptBinding *) override { return true; } + bool visit(UiArrayBinding *) override { return true; } + bool visit(UiParameterList *) override { return true; } + bool visit(UiObjectMemberList *) override { return true; } + bool visit(UiArrayMemberList *) override { return true; } + bool visit(UiQualifiedId *) override { return true; } + bool visit(UiEnumDeclaration *) override { return true; } + bool visit(UiEnumMemberList *) override { return true; } + bool visit(UiVersionSpecifier *) override { return true; } + bool visit(UiInlineComponent *) override { return true; } + bool visit(UiAnnotation *) override { return true; } + bool visit(UiAnnotationList *) override { return true; } + bool visit(UiRequired *) override { return true; } + + void endVisit(UiProgram *) override {} + void endVisit(UiImport *) override {} + void endVisit(UiHeaderItemList *) override {} + void endVisit(UiPragma *) override {} + void endVisit(UiPublicMember *) override {} + void endVisit(UiSourceElement *) override {} + void endVisit(UiObjectDefinition *) override {} + void endVisit(UiObjectInitializer *) override {} + void endVisit(UiObjectBinding *) override {} + void endVisit(UiScriptBinding *) override {} + void endVisit(UiArrayBinding *) override {} + void endVisit(UiParameterList *) override {} + void endVisit(UiObjectMemberList *) override {} + void endVisit(UiArrayMemberList *) override {} + void endVisit(UiQualifiedId *) override {} + void endVisit(UiEnumDeclaration *) override {} + void endVisit(UiEnumMemberList *) override {} + void endVisit(UiVersionSpecifier *) override {} + void endVisit(UiInlineComponent *) override {} + void endVisit(UiAnnotation *) override {} + void endVisit(UiAnnotationList *) override {} + void endVisit(UiRequired *) override {} + + // QmlJS + bool visit(ThisExpression *) override { return true; } + void endVisit(ThisExpression *) override {} + + bool visit(IdentifierExpression *) override { return true; } + void endVisit(IdentifierExpression *) override {} + + bool visit(NullExpression *) override { return true; } + void endVisit(NullExpression *) override {} + + bool visit(TrueLiteral *) override { return true; } + void endVisit(TrueLiteral *) override {} + + bool visit(FalseLiteral *) override { return true; } + void endVisit(FalseLiteral *) override {} + + bool visit(SuperLiteral *) override { return true; } + void endVisit(SuperLiteral *) override {} + + bool visit(StringLiteral *) override { return true; } + void endVisit(StringLiteral *) override {} + + bool visit(TemplateLiteral *) override { return true; } + void endVisit(TemplateLiteral *) override {} + + bool visit(NumericLiteral *) override { return true; } + void endVisit(NumericLiteral *) override {} + + bool visit(RegExpLiteral *) override { return true; } + void endVisit(RegExpLiteral *) override {} + + bool visit(ArrayPattern *) override { return true; } + void endVisit(ArrayPattern *) override {} + + bool visit(ObjectPattern *) override { return true; } + void endVisit(ObjectPattern *) override {} + + bool visit(PatternElementList *) override { return true; } + void endVisit(PatternElementList *) override {} + + bool visit(PatternPropertyList *) override { return true; } + void endVisit(PatternPropertyList *) override {} + + bool visit(PatternElement *) override { return true; } + void endVisit(PatternElement *) override {} + + bool visit(PatternProperty *) override { return true; } + void endVisit(PatternProperty *) override {} + + bool visit(Elision *) override { return true; } + void endVisit(Elision *) override {} + + bool visit(NestedExpression *) override { return true; } + void endVisit(NestedExpression *) override {} + + bool visit(IdentifierPropertyName *) override { return true; } + void endVisit(IdentifierPropertyName *) override {} + + bool visit(StringLiteralPropertyName *) override { return true; } + void endVisit(StringLiteralPropertyName *) override {} + + bool visit(NumericLiteralPropertyName *) override { return true; } + void endVisit(NumericLiteralPropertyName *) override {} + + bool visit(ComputedPropertyName *) override { return true; } + void endVisit(ComputedPropertyName *) override {} + + bool visit(ArrayMemberExpression *) override { return true; } + void endVisit(ArrayMemberExpression *) override {} + + bool visit(FieldMemberExpression *) override { return true; } + void endVisit(FieldMemberExpression *) override {} + + bool visit(TaggedTemplate *) override { return true; } + void endVisit(TaggedTemplate *) override {} + + bool visit(NewMemberExpression *) override { return true; } + void endVisit(NewMemberExpression *) override {} + + bool visit(NewExpression *) override { return true; } + void endVisit(NewExpression *) override {} + + bool visit(CallExpression *) override { return true; } + void endVisit(CallExpression *) override {} + + bool visit(ArgumentList *) override { return true; } + void endVisit(ArgumentList *) override {} + + bool visit(PostIncrementExpression *) override { return true; } + void endVisit(PostIncrementExpression *) override {} + + bool visit(PostDecrementExpression *) override { return true; } + void endVisit(PostDecrementExpression *) override {} + + bool visit(DeleteExpression *) override { return true; } + void endVisit(DeleteExpression *) override {} + + bool visit(VoidExpression *) override { return true; } + void endVisit(VoidExpression *) override {} + + bool visit(TypeOfExpression *) override { return true; } + void endVisit(TypeOfExpression *) override {} + + bool visit(PreIncrementExpression *) override { return true; } + void endVisit(PreIncrementExpression *) override {} + + bool visit(PreDecrementExpression *) override { return true; } + void endVisit(PreDecrementExpression *) override {} + + bool visit(UnaryPlusExpression *) override { return true; } + void endVisit(UnaryPlusExpression *) override {} + + bool visit(UnaryMinusExpression *) override { return true; } + void endVisit(UnaryMinusExpression *) override {} + + bool visit(TildeExpression *) override { return true; } + void endVisit(TildeExpression *) override {} + + bool visit(NotExpression *) override { return true; } + void endVisit(NotExpression *) override {} + + bool visit(BinaryExpression *) override { return true; } + void endVisit(BinaryExpression *) override {} + + bool visit(ConditionalExpression *) override { return true; } + void endVisit(ConditionalExpression *) override {} + + bool visit(Expression *) override { return true; } + void endVisit(Expression *) override {} + + bool visit(Block *) override { return true; } + void endVisit(Block *) override {} + + bool visit(StatementList *) override { return true; } + void endVisit(StatementList *) override {} + + bool visit(VariableStatement *) override { return true; } + void endVisit(VariableStatement *) override {} + + bool visit(VariableDeclarationList *) override { return true; } + void endVisit(VariableDeclarationList *) override {} + + bool visit(EmptyStatement *) override { return true; } + void endVisit(EmptyStatement *) override {} + + bool visit(ExpressionStatement *) override { return true; } + void endVisit(ExpressionStatement *) override {} + + bool visit(IfStatement *) override { return true; } + void endVisit(IfStatement *) override {} + + bool visit(DoWhileStatement *) override { return true; } + void endVisit(DoWhileStatement *) override {} + + bool visit(WhileStatement *) override { return true; } + void endVisit(WhileStatement *) override {} + + bool visit(ForStatement *) override { return true; } + void endVisit(ForStatement *) override {} + + bool visit(ForEachStatement *) override { return true; } + void endVisit(ForEachStatement *) override {} + + bool visit(ContinueStatement *) override { return true; } + void endVisit(ContinueStatement *) override {} + + bool visit(BreakStatement *) override { return true; } + void endVisit(BreakStatement *) override {} + + bool visit(ReturnStatement *) override { return true; } + void endVisit(ReturnStatement *) override {} + + bool visit(YieldExpression *) override { return true; } + void endVisit(YieldExpression *) override {} + + bool visit(WithStatement *) override { return true; } + void endVisit(WithStatement *) override {} + + bool visit(SwitchStatement *) override { return true; } + void endVisit(SwitchStatement *) override {} + + bool visit(CaseBlock *) override { return true; } + void endVisit(CaseBlock *) override {} + + bool visit(CaseClauses *) override { return true; } + void endVisit(CaseClauses *) override {} + + bool visit(CaseClause *) override { return true; } + void endVisit(CaseClause *) override {} + + bool visit(DefaultClause *) override { return true; } + void endVisit(DefaultClause *) override {} + + bool visit(LabelledStatement *) override { return true; } + void endVisit(LabelledStatement *) override {} + + bool visit(ThrowStatement *) override { return true; } + void endVisit(ThrowStatement *) override {} + + bool visit(TryStatement *) override { return true; } + void endVisit(TryStatement *) override {} + + bool visit(Catch *) override { return true; } + void endVisit(Catch *) override {} + + bool visit(Finally *) override { return true; } + void endVisit(Finally *) override {} + + bool visit(FunctionDeclaration *) override { return true; } + void endVisit(FunctionDeclaration *) override {} + + bool visit(FunctionExpression *) override { return true; } + void endVisit(FunctionExpression *) override {} + + bool visit(FormalParameterList *) override { return true; } + void endVisit(FormalParameterList *) override {} + + bool visit(ClassExpression *) override { return true; } + void endVisit(ClassExpression *) override {} + + bool visit(ClassDeclaration *) override { return true; } + void endVisit(ClassDeclaration *) override {} + + bool visit(ClassElementList *) override { return true; } + void endVisit(ClassElementList *) override {} + + bool visit(Program *) override { return true; } + void endVisit(Program *) override {} + + bool visit(NameSpaceImport *) override { return true; } + void endVisit(NameSpaceImport *) override {} + + bool visit(ImportSpecifier *) override { return true; } + void endVisit(ImportSpecifier *) override {} + + bool visit(ImportsList *) override { return true; } + void endVisit(ImportsList *) override {} + + bool visit(NamedImports *) override { return true; } + void endVisit(NamedImports *) override {} + + bool visit(FromClause *) override { return true; } + void endVisit(FromClause *) override {} + + bool visit(ImportClause *) override { return true; } + void endVisit(ImportClause *) override {} + + bool visit(ImportDeclaration *) override { return true; } + void endVisit(ImportDeclaration *) override {} + + bool visit(ExportSpecifier *) override { return true; } + void endVisit(ExportSpecifier *) override {} + + bool visit(ExportsList *) override { return true; } + void endVisit(ExportsList *) override {} + + bool visit(ExportClause *) override { return true; } + void endVisit(ExportClause *) override {} + + bool visit(ExportDeclaration *) override { return true; } + void endVisit(ExportDeclaration *) override {} + + bool visit(ESModule *) override { return true; } + void endVisit(ESModule *) override {} + + bool visit(DebuggerStatement *) override { return true; } + void endVisit(DebuggerStatement *) override {} + + bool visit(Type *) override { return true; } + void endVisit(Type *) override {} + + bool visit(TypeArgumentList *) override { return true; } + void endVisit(TypeArgumentList *) override {} + + bool visit(TypeAnnotation *) override { return true; } + void endVisit(TypeAnnotation *) override {} +}; + } } // namespace AST QT_QML_END_NAMESPACE diff --git a/src/libs/qmljs/parser/qmljsdiagnosticmessage_p.h b/src/libs/qmljs/parser/qmljsdiagnosticmessage_p.h new file mode 100644 index 0000000000..1e6e86971c --- /dev/null +++ b/src/libs/qmljs/parser/qmljsdiagnosticmessage_p.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** 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-3.0.html. +** +****************************************************************************/ + +#pragma once + +// +// 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. +// + +#include <QtCore/qlogging.h> +#include <QtCore/qstring.h> +#include "qmljsglobal_p.h" +#include "qmljs/qmljsconstants.h" + +// Include the API version here, to avoid complications when querying it for the +// QmlSourceLocation -> line/column change. + + +#include "qmljssourcelocation_p.h" + +QT_BEGIN_NAMESPACE + +namespace QmlJS { +class DiagnosticMessage +{ +public: + QString message; + Severity::Enum kind = Severity::Error; + SourceLocation loc; + static Severity::Enum qtMsgTypeToKind(QtMsgType msgType) { + switch (msgType) { + case QtDebugMsg: + return Severity::Hint; + case QtWarningMsg: + return Severity::Warning; + case QtCriticalMsg: + return Severity::Error; + case QtFatalMsg: + return Severity::Error; + case QtInfoMsg: + return Severity::MaybeWarning; + } + } + DiagnosticMessage() {} + DiagnosticMessage(Severity::Enum kind, SourceLocation loc, QString message): + message(message), kind(kind), loc(loc) + { } + + bool isError() const + { + return kind == Severity::Error; + } + + bool isWarning() const + { + return kind == Severity::Warning; + } + + bool isValid() const + { + return !message.isEmpty(); + } +}; +} // namespace QmlJS + +Q_DECLARE_TYPEINFO(QmlJS::DiagnosticMessage, Q_MOVABLE_TYPE); + +QT_END_NAMESPACE + diff --git a/src/libs/qmljs/parser/qmljsengine_p.cpp b/src/libs/qmljs/parser/qmljsengine_p.cpp index f38d801a02..1a2b0fd222 100644 --- a/src/libs/qmljs/parser/qmljsengine_p.cpp +++ b/src/libs/qmljs/parser/qmljsengine_p.cpp @@ -109,9 +109,9 @@ void Engine::setCode(const QString &code) { _code = code; } void Engine::addComment(int pos, int len, int line, int col) -{ if (len > 0) _comments.append(QmlJS::AST::SourceLocation(pos, len, line, col)); } +{ if (len > 0) _comments.append(QmlJS::SourceLocation(pos, len, line, col)); } -QList<QmlJS::AST::SourceLocation> Engine::comments() const +QList<QmlJS::SourceLocation> Engine::comments() const { return _comments; } Lexer *Engine::lexer() const diff --git a/src/libs/qmljs/parser/qmljsengine_p.h b/src/libs/qmljs/parser/qmljsengine_p.h index 2321c5aa8f..28d5913679 100644 --- a/src/libs/qmljs/parser/qmljsengine_p.h +++ b/src/libs/qmljs/parser/qmljsengine_p.h @@ -37,8 +37,9 @@ // #include "qmljsglobal_p.h" -#include "qmljsastfwd_p.h" -#include "qmljsmemorypool_p.h" +#include "qmljs/parser/qmljssourcelocation_p.h" + +#include "qmljs/parser/qmljsmemorypool_p.h" #include <QString> #include <QSet> @@ -61,49 +62,28 @@ public: virtual void importFile(const QString &jsfile, const QString &module, int line, int column) { - Q_UNUSED(jsfile) - Q_UNUSED(module) - Q_UNUSED(line) - Q_UNUSED(column) + Q_UNUSED(jsfile); + Q_UNUSED(module); + Q_UNUSED(line); + Q_UNUSED(column); } virtual void importModule(const QString &uri, const QString &version, const QString &module, int line, int column) { - Q_UNUSED(uri) - Q_UNUSED(version) - Q_UNUSED(module) - Q_UNUSED(line) - Q_UNUSED(column) + Q_UNUSED(uri); + Q_UNUSED(version); + Q_UNUSED(module); + Q_UNUSED(line); + Q_UNUSED(column); } }; - -class QML_PARSER_EXPORT DiagnosticMessage -{ -public: - - DiagnosticMessage() {} - - DiagnosticMessage(Severity::Enum kind, const AST::SourceLocation &loc, const QString &message) - : kind(kind), loc(loc), message(message) {} - - bool isWarning() const - { return kind == Severity::Warning; } - - bool isError() const - { return kind == Severity::Error; } - - Severity::Enum kind = Severity::Error; - AST::SourceLocation loc; - QString message; -}; - class QML_PARSER_EXPORT Engine { Lexer *_lexer; Directives *_directives; MemoryPool _pool; - QList<AST::SourceLocation> _comments; + QList<SourceLocation> _comments; QString _extraCode; QString _code; @@ -115,7 +95,7 @@ public: const QString &code() const { return _code; } void addComment(int pos, int len, int line, int col); - QList<AST::SourceLocation> comments() const; + QList<SourceLocation> comments() const; Lexer *lexer() const; void setLexer(Lexer *lexer); diff --git a/src/libs/qmljs/parser/qmljsgrammar.cpp b/src/libs/qmljs/parser/qmljsgrammar.cpp index e0fdfd0103..d468b9d6dc 100644 --- a/src/libs/qmljs/parser/qmljsgrammar.cpp +++ b/src/libs/qmljs/parser/qmljsgrammar.cpp @@ -3,9 +3,8 @@ ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** -** This file is part of the Qt Toolkit. +** This file is part of Qt Creator. ** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the @@ -22,15 +21,10 @@ ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** -** $QT_END_LICENSE$ -** -****************************************************************************/ - +***************************************************************************/ // This file was generated by qlalr - DO NOT EDIT! #include "qmljsgrammar_p.h" -QT_BEGIN_NAMESPACE - const char *const QmlJSGrammar::spell [] = { "end of file", "&", "&&", "&=", "break", "case", "catch", ":", ",", "continue", "default", "delete", "/", "/=", "do", ".", "else", "=", "==", "===", @@ -41,1270 +35,1474 @@ const char *const QmlJSGrammar::spell [] = { "%=", "return", ")", ";", 0, "*", "**", "**=", "*=", "string literal", "property", "signal", "readonly", "switch", "this", "throw", "~", "try", "typeof", "var", "void", "while", "with", "^", "^=", "null", "true", "false", "const", "let", - "debugger", "reserved word", "multiline string literal", "comment", 0, "=>", "enum", "...", "yield", "super", - "class", "extends", "static", "export", "from", "required", "(no subst template)", "(template head)", "(template middle)", "(template tail)", - "public", "import", "pragma", "as", "of", "get", "set", 0, 0, 0, - 0, 0, 0, 0, "(force decl)", "(force block)", "(for lookahead ok)", 0, 0, 0 + "@", "debugger", "reserved word", "multiline string literal", "comment", 0, "=>", "??", "enum", "...", + "yield", "super", "class", "extends", "static", "export", "from", "required", "component", "(no subst template)", + "(template head)", "(template middle)", "(template tail)", "public", "import", "pragma", "as", "of", "get", "set", + 0, 0, 0, 0, 0, 0, 0, "(force decl)", "(force block)", "(for lookahead ok)", + 0, 0, 0, 0, +#ifndef QLALR_NO_QMLJSGRAMMAR_DEBUG_INFO +"TopLevel", "UiProgram", "Statement", "Expression", "UiAnnotatedObjectMember", "Script", + "Module", "UiHeaderItemListOpt", "UiRootMember", "Empty", "UiHeaderItemList", "UiPragma", "UiImport", "PragmaId", "JsIdentifier", "Semicolon", + "ImportId", "MemberExpression", "UiImportHead", "UiVersionSpecifier", "QmlIdentifier", "UiAnnotatedObject", "UiSimpleQualifiedId", "UiAnnotationObjectDefinition", "UiObjectInitializer", "UiAnnotation", + "UiAnnotationList", "UiObjectDefinition", "UiObjectMemberList", "UiArrayMemberList", "UiQualifiedId", "UiObjectMember", "ExpressionStatementLookahead", "UiObjectLiteral", "UiPropertyDefinitionList", "UiScriptStatement", + "ExpressionStatement", "Block", "EmptyStatement", "IfStatement", "WithStatement", "SwitchStatement", "TryStatement", "UiPropertyType", "UiParameterListOpt", "UiParameterList", + "UiObjectMemberListPropertyNoInitialiser", "UiObjectMemberPropertyNoInitialiser", "OptionalSemicolon", "UiRequired", "UiObjectMemberWithScriptStatement", "UiObjectMemberWithArray", "UiObjectMemberExpressionStatementLookahead", "GeneratorDeclaration", "FunctionDeclarationWithTypes", "VariableStatement", + "EnumMemberList", "IdentifierReference", "BindingIdentifier", "TypeArguments", "Type", "TypeAnnotation", "TypeAnnotationOpt", "PrimaryExpression", "Literal", "ArrayLiteral", + "ObjectLiteral", "FunctionExpression", "ClassExpression", "GeneratorExpression", "RegularExpressionLiteral", "TemplateLiteral", "CoverParenthesizedExpressionAndArrowParameterList", "Expression_In", "BindingRestElement", "BindingRestElementOpt", + "ElisionOpt", "ElementList", "AssignmentExpression_In", "Elision", "SpreadElement", "AssignmentExpression", "PropertyDefinitionList", "UiPropertyDefinition", "PropertyDefinition", "CoverInitializedName", + "Initializer_In", "UiPropertyName", "PropertyName", "MethodDefinition", "LiteralPropertyName", "ComputedPropertyName", "IdentifierName", "ReservedIdentifier", "Initializer", "InitializerOpt", + "InitializerOpt_In", "TemplateSpans", "Super", "NewTarget", "MetaProperty", "Arguments", "NewExpression", "CallExpression", "ArgumentList", "LeftHandSideExpression", + "UpdateExpression", "UnaryExpression", "ExponentiationExpression", "MultiplicativeExpression", "MultiplicativeOperator", "AdditiveExpression", "ShiftExpression", "RelationalExpression_In", "RelationalExpression", "RelationalOperator", + "TypeAssertExpression_In", "TypeAssertExpression", "EqualityExpression_In", "EqualityExpression", "EqualityOperator", "BitwiseANDExpression", "BitwiseANDExpression_In", "BitwiseXORExpression", "BitwiseXORExpression_In", "BitwiseORExpression", + "BitwiseORExpression_In", "LogicalANDExpression", "LogicalANDExpression_In", "LogicalORExpression", "LogicalORExpression_In", "CoalesceExpression", "CoalesceExpression_In", "ConditionalExpression", "ConditionalExpression_In", "YieldExpression", + "YieldExpression_In", "ArrowFunction", "ArrowFunction_In", "AssignmentOperator", "ExpressionOpt", "ExpressionOpt_In", "BlockStatement", "BreakableStatement", "ContinueStatement", "BreakStatement", + "ReturnStatement", "LabelledStatement", "ThrowStatement", "DebuggerStatement", "Declaration", "HoistableDeclaration", "ClassDeclaration", "LexicalDeclaration_In", "FunctionDeclaration", "HoistableDeclaration_Default", + "FunctionDeclaration_Default", "GeneratorDeclaration_Default", "IterationStatement", "StatementListOpt", "StatementList", "StatementListItem", "LetOrConst", "Var", "LexicalDeclaration", "BindingList", + "BindingList_In", "VarDeclaration", "VariableDeclarationList", "VarDeclaration_In", "VariableDeclarationList_In", "LexicalBinding_In", "VariableDeclaration", "VariableDeclaration_In", "LexicalBinding", "BindingPattern", + "ObjectBindingPattern", "ArrayBindingPattern", "BindingPropertyList", "BindingElementList", "BindingProperty", "BindingElisionElement", "BindingElement", "InOrOf", "ForDeclaration", "CaseBlock", + "CaseClausesOpt", "DefaultClause", "CaseClauses", "CaseClause", "LabelledItem", "Catch", "Finally", "CatchParameter", "Function", "FormalParameters", + "FunctionLBrace", "FunctionBody", "FunctionRBrace", "StrictFormalParameters", "FormalParameterList", "FormalParameter", "ArrowParameters", "ConciseBodyLookahead", "GeneratorLParen", "GeneratorBody", + "GeneratorRBrace", "PropertySetParameterList", "FunctionStar", "ClassHeritageOpt", "ClassLBrace", "ClassBodyOpt", "ClassRBrace", "ClassDeclaration_Default", "ClassStaticQualifier", "ClassElementList", + "ClassElement", "ScriptBody", "ModuleBodyOpt", "ModuleBody", "ModuleItemList", "ModuleItem", "ImportDeclaration", "ExportDeclaration", "ImportClause", "FromClause", + "ModuleSpecifier", "ImportedDefaultBinding", "NameSpaceImport", "NamedImports", "ImportedBinding", "ImportsList", "ImportSpecifier", "ExportDeclarationLookahead", "ExportClause", "ExportsList", + "ExportSpecifier", "$accept" +#endif // QLALR_NO_QMLJSGRAMMAR_DEBUG_INFO + }; const short QmlJSGrammar::lhs [] = { - 130, 130, 130, 130, 130, 130, 131, 137, 137, 140, - 140, 140, 140, 143, 145, 145, 141, 146, 142, 149, - 149, 142, 142, 142, 148, 139, 138, 152, 152, 153, - 153, 154, 154, 151, 134, 134, 134, 134, 157, 157, - 159, 159, 159, 159, 159, 159, 159, 159, 159, 134, - 167, 167, 167, 167, 168, 168, 169, 169, 169, 169, - 134, 134, 170, 134, 134, 171, 134, 134, 134, 172, - 172, 134, 173, 134, 134, 134, 174, 134, 134, 175, - 134, 134, 134, 134, 134, 155, 134, 179, 179, 179, - 179, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 180, 181, 182, 182, 183, 183, 183, - 184, 185, 185, 186, 186, 186, 186, 186, 186, 186, - 186, 186, 186, 186, 195, 195, 195, 195, 187, 187, - 187, 187, 187, 187, 193, 193, 188, 188, 188, 200, - 200, 200, 200, 200, 202, 202, 199, 199, 203, 189, - 189, 189, 158, 205, 158, 205, 207, 207, 208, 206, - 207, 207, 211, 211, 213, 210, 213, 210, 213, 215, - 215, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 214, - 217, 209, 218, 219, 218, 219, 194, 220, 220, 194, - 147, 221, 147, 147, 222, 147, 147, 147, 147, 223, - 225, 225, 226, 147, 226, 226, 226, 226, 226, 224, - 224, 224, 227, 227, 227, 227, 228, 228, 229, 229, - 229, 229, 229, 230, 230, 230, 230, 230, 230, 230, - 230, 231, 231, 232, 232, 233, 233, 233, 234, 234, - 234, 235, 235, 235, 235, 236, 237, 236, 237, 238, - 238, 238, 238, 238, 236, 239, 240, 239, 240, 241, - 241, 241, 241, 242, 243, 242, 243, 244, 245, 244, - 245, 246, 247, 246, 247, 248, 249, 248, 249, 250, - 251, 250, 251, 252, 253, 252, 253, 204, 201, 204, - 201, 204, 201, 204, 201, 204, 201, 258, 258, 258, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 133, - 196, 133, 196, 259, 260, 259, 260, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 269, 269, 269, 270, 270, 274, 274, 262, 262, - 261, 161, 279, 279, 280, 280, 278, 278, 281, 281, - 282, 283, 272, 286, 288, 178, 284, 285, 287, 289, - 284, 285, 287, 289, 293, 290, 291, 292, 293, 290, - 291, 292, 294, 294, 295, 295, 295, 296, 296, 296, - 297, 297, 298, 298, 300, 299, 299, 299, 301, 301, - 197, 197, 198, 198, 162, 156, 160, 163, 163, 277, - 277, 277, 277, 277, 277, 302, 302, 277, 277, 303, - 303, 303, 303, 263, 263, 264, 264, 265, 164, 165, - 304, 304, 307, 307, 305, 305, 308, 306, 266, 309, - 309, 267, 166, 166, 166, 310, 311, 312, 312, 268, - 313, 273, 177, 275, 275, 190, 190, 318, 314, 314, - 314, 314, 314, 319, 319, 320, 315, 317, 316, 256, - 257, 256, 257, 321, 321, 322, 212, 212, 212, 212, - 326, 323, 325, 327, 176, 276, 276, 192, 192, 324, - 254, 255, 254, 255, 254, 255, 271, 191, 332, 191, - 332, 329, 331, 333, 328, 328, 330, 330, 334, 334, - 335, 335, 335, 135, 135, 336, 136, 338, 337, 337, - 339, 339, 340, 340, 340, 341, 341, 343, 343, 343, - 343, 343, 346, 347, 348, 348, 348, 344, 350, 350, - 351, 351, 345, 349, 352, 342, 342, 342, 342, 342, - 342, 342, 342, 353, 353, 353, 354, 354, 355, 355, - 356 + 134, 134, 134, 134, 134, 134, 135, 141, 141, 144, + 144, 144, 144, 147, 149, 149, 145, 150, 146, 153, + 153, 146, 146, 146, 152, 143, 142, 156, 156, 157, + 159, 160, 160, 155, 155, 162, 162, 163, 163, 158, + 158, 161, 138, 138, 165, 165, 165, 165, 167, 167, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 165, + 177, 177, 177, 177, 178, 178, 179, 179, 179, 179, + 165, 165, 180, 165, 165, 181, 165, 165, 165, 165, + 165, 182, 182, 183, 165, 165, 184, 165, 165, 165, + 185, 165, 165, 186, 165, 165, 165, 165, 165, 164, + 165, 165, 190, 190, 190, 190, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 191, 192, 193, 193, 194, 194, 194, 195, 196, 196, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 206, 206, 206, 206, 198, 198, 198, 198, 198, + 198, 204, 204, 199, 199, 199, 211, 211, 211, 211, + 211, 213, 213, 210, 210, 214, 200, 200, 200, 168, + 216, 168, 216, 218, 218, 219, 217, 218, 218, 222, + 222, 224, 221, 224, 221, 224, 226, 226, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 225, 228, 220, 229, + 230, 229, 230, 205, 231, 231, 205, 151, 232, 151, + 151, 233, 151, 151, 151, 151, 234, 236, 236, 237, + 151, 237, 237, 237, 237, 237, 235, 235, 235, 238, + 238, 238, 238, 239, 239, 240, 240, 240, 240, 240, + 241, 241, 241, 241, 241, 241, 241, 241, 242, 242, + 243, 243, 244, 244, 244, 245, 245, 245, 246, 246, + 246, 246, 247, 248, 247, 248, 249, 249, 249, 249, + 249, 247, 250, 251, 247, 248, 252, 253, 252, 253, + 254, 254, 254, 254, 255, 256, 255, 256, 257, 258, + 257, 258, 259, 260, 259, 260, 261, 262, 261, 262, + 263, 264, 263, 264, 265, 266, 265, 266, 267, 268, + 267, 268, 215, 212, 215, 212, 215, 212, 215, 212, + 215, 212, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 137, 207, 137, 207, 274, 275, + 274, 275, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 284, 284, 284, 285, + 285, 289, 289, 277, 277, 276, 171, 294, 294, 295, + 295, 293, 293, 296, 296, 297, 298, 287, 301, 303, + 189, 299, 300, 302, 304, 299, 300, 302, 304, 308, + 305, 306, 307, 308, 305, 306, 307, 309, 309, 310, + 310, 310, 311, 311, 311, 312, 312, 313, 313, 315, + 314, 314, 314, 316, 316, 208, 208, 209, 209, 172, + 166, 170, 173, 173, 292, 292, 292, 292, 292, 292, + 317, 317, 292, 292, 318, 318, 318, 318, 278, 278, + 279, 279, 280, 174, 175, 319, 319, 322, 322, 320, + 320, 323, 321, 281, 324, 324, 282, 176, 176, 176, + 325, 326, 327, 327, 283, 328, 288, 188, 290, 290, + 201, 201, 333, 329, 329, 329, 329, 329, 334, 334, + 335, 330, 332, 331, 271, 272, 271, 272, 336, 336, + 337, 223, 223, 223, 223, 341, 338, 340, 342, 187, + 291, 291, 203, 203, 339, 269, 270, 269, 270, 269, + 270, 286, 202, 347, 202, 347, 344, 346, 348, 343, + 343, 345, 345, 349, 349, 350, 350, 350, 139, 139, + 351, 140, 353, 352, 352, 354, 354, 355, 355, 355, + 356, 356, 358, 358, 358, 358, 358, 361, 362, 363, + 363, 363, 359, 365, 365, 366, 366, 360, 364, 367, + 357, 357, 357, 357, 357, 357, 357, 357, 368, 368, + 368, 369, 369, 370, 370, 371 }; const short QmlJSGrammar::rhs [] = { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 3, 1, 2, 3, - 1, 3, 5, 4, 2, 0, 1, 1, 2, 1, - 3, 2, 3, 2, 1, 6, 5, 4, 4, 5, + 1, 3, 5, 4, 2, 0, 1, 1, 3, 2, + 2, 1, 2, 2, 1, 1, 2, 1, 3, 2, + 3, 2, 2, 1, 1, 6, 5, 4, 5, 6, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 1, 1, 1, 3, 0, 1, 3, 2, 5, 4, - 6, 3, 7, 1, 2, 4, 1, 2, 2, 0, - 1, 2, 6, 1, 2, 2, 11, 1, 2, 8, - 1, 2, 1, 1, 1, 1, 5, 1, 3, 3, - 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 6, 3, 7, 1, 2, 4, 1, 2, 2, 3, + 3, 0, 1, 3, 1, 2, 6, 1, 2, 2, + 11, 1, 2, 8, 1, 2, 1, 1, 1, 1, + 5, 4, 1, 3, 3, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 4, 1, 1, - 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 2, 3, 5, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 3, 5, 1, - 2, 2, 4, 4, 1, 2, 0, 1, 2, 2, - 3, 4, 1, 1, 3, 3, 1, 1, 2, 3, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 4, 1, 1, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 2, 3, 5, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 3, 5, 1, 2, 2, 4, + 4, 1, 2, 0, 1, 2, 2, 3, 4, 1, + 1, 3, 3, 1, 1, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 2, 2, 0, 0, 1, 1, 1, 1, 3, 3, - 1, 1, 4, 4, 3, 3, 3, 1, 5, 1, - 1, 2, 2, 2, 4, 4, 4, 4, 3, 0, - 1, 2, 1, 2, 3, 4, 1, 1, 1, 2, - 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, - 2, 1, 3, 1, 3, 1, 1, 1, 1, 3, - 3, 1, 3, 3, 3, 1, 1, 3, 3, 1, - 1, 1, 1, 1, 3, 1, 1, 3, 3, 1, - 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, - 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, - 1, 3, 3, 1, 1, 5, 5, 1, 1, 1, - 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 3, 0, 0, 1, 1, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 1, 2, 1, 4, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, - 2, 2, 3, 3, 0, 1, 2, 2, 1, 4, - 1, 3, 1, 3, 2, 2, 4, 4, 3, 2, - 2, 2, 0, 1, 1, 0, 2, 7, 5, 7, - 7, 5, 9, 9, 9, 1, 1, 7, 7, 3, - 3, 2, 2, 2, 3, 2, 3, 3, 5, 5, - 3, 5, 1, 2, 0, 1, 4, 3, 3, 1, - 3, 3, 3, 3, 4, 5, 2, 1, 1, 2, - 1, 9, 9, 1, 8, 9, 8, 1, 0, 1, - 1, 2, 3, 1, 3, 1, 1, 1, 1, 4, - 4, 7, 7, 1, 1, 0, 8, 9, 8, 9, - 1, 1, 1, 1, 8, 1, 7, 8, 7, 1, - 1, 1, 3, 3, 2, 2, 6, 6, 5, 5, - 1, 1, 1, 1, 0, 2, 0, 1, 1, 2, - 1, 2, 1, 0, 1, 1, 1, 1, 0, 1, - 1, 2, 2, 2, 1, 3, 2, 1, 1, 1, - 3, 3, 1, 3, 2, 3, 4, 2, 1, 3, - 1, 3, 1, 1, 0, 3, 3, 2, 2, 2, - 5, 5, 4, 2, 3, 4, 1, 3, 1, 3, - 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 2, 2, 0, + 0, 1, 1, 1, 1, 3, 3, 1, 1, 4, + 4, 3, 3, 3, 1, 5, 1, 1, 2, 2, + 2, 4, 4, 4, 4, 3, 0, 1, 2, 1, + 2, 3, 4, 1, 1, 1, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 2, 1, 3, + 1, 3, 1, 1, 1, 1, 3, 3, 1, 3, + 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, + 1, 3, 3, 3, 1, 1, 1, 1, 3, 3, + 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, + 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, + 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, + 5, 5, 1, 1, 1, 1, 1, 1, 3, 3, + 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 3, 0, 0, + 1, 1, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, + 4, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 2, 2, 2, 3, 3, 0, + 1, 2, 2, 1, 4, 1, 3, 1, 3, 2, + 2, 4, 4, 3, 2, 2, 2, 0, 1, 1, + 0, 2, 7, 5, 7, 7, 5, 9, 9, 9, + 1, 1, 7, 7, 3, 3, 2, 2, 2, 3, + 2, 3, 3, 5, 5, 3, 5, 1, 2, 0, + 1, 4, 3, 3, 1, 3, 3, 3, 3, 4, + 5, 2, 1, 1, 2, 1, 9, 9, 1, 8, + 9, 8, 1, 0, 1, 1, 2, 3, 1, 3, + 1, 1, 1, 1, 4, 4, 7, 7, 1, 1, + 0, 8, 9, 8, 9, 1, 1, 1, 1, 8, + 1, 7, 8, 7, 1, 1, 1, 3, 3, 2, + 2, 6, 6, 5, 5, 1, 1, 1, 1, 0, + 2, 0, 1, 1, 2, 1, 2, 1, 0, 1, + 1, 1, 1, 0, 1, 1, 2, 2, 2, 1, + 3, 2, 1, 1, 1, 3, 3, 1, 3, 2, + 3, 4, 2, 1, 3, 1, 3, 1, 1, 0, + 3, 3, 2, 2, 2, 5, 5, 4, 2, 3, + 4, 1, 3, 1, 3, 2 +}; + + +#ifndef QLALR_NO_QMLJSGRAMMAR_DEBUG_INFO +const int QmlJSGrammar::rule_info [] = { + 134, 121, 135, 134, 123, 136, 134, 124, 137, 134, 122, 138, 134, 125, 139, 134, 126, 140, 135, 141, 142, 141, 143, 141, 144, 144, 145, + 144, 146, 144, 144, 145, 144, 144, 146, 147, 148, 149, 64, 149, 63, 145, 115, 147, 149, 150, 151, 146, 152, 149, 153, 50, 15, 50, + 153, 50, 146, 152, 153, 149, 146, 152, 153, 116, 154, 149, 146, 152, 116, 154, 149, 152, 114, 150, 143, 142, 155, 156, 30, 156, 156, 15, 30, 157, 156, 158, + 159, 90, 157, 160, 159, 160, 160, 159, 155, 160, 161, 155, 161, 162, 138, 162, 162, 138, 163, 161, 163, 163, 8, 161, 158, 34, 57, + 158, 34, 162, 57, 161, 164, 158, 138, 160, 165, 138, 165, 165, 161, 165, 164, 7, 166, 35, 163, 58, 165, 164, 7, 166, 164, 158, 165, 164, 130, 164, 158, 167, 34, 166, 168, 57, 149, 167, 34, 166, 168, 8, 57, 149, + 169, 166, 127, 170, 169, 166, 128, 171, 169, 166, 128, 167, 169, 166, 172, 169, 166, 170, 169, 166, 173, 169, 166, 174, 169, 166, 175, 169, 166, 176, 165, 164, 7, 169, + 177, 79, 177, 92, 177, 30, 177, 177, 15, 30, 178, 178, 179, 179, 154, 7, 177, 179, 177, 154, 179, 179, 8, 154, 7, 177, 179, 179, 8, 177, 154, + 165, 71, 30, 37, 178, 62, 149, 165, 71, 30, 149, 180, 70, 30, 38, 177, 25, 154, 149, 165, 180, 165, 72, 180, 181, 70, 177, 154, 149, 165, 181, 165, 10, 181, 165, 10, 180, 165, 10, 107, 181, + 165, 107, 10, 181, 182, 182, 149, 183, 107, 154, 149, 165, 183, 165, 107, 181, 184, 70, 177, 154, 7, 169, 182, 165, 184, 165, 72, 184, 165, 10, 184, + 185, 70, 30, 38, 177, 25, 154, 7, 35, 163, 58, 149, 165, 185, 165, 72, 185, 186, 70, 177, 154, 7, 166, 164, 158, 149, 165, 186, 165, 72, 186, 165, 187, 165, 188, 165, 189, 164, 151, + 165, 98, 30, 34, 190, 57, 165, 108, 30, 7, 161, 190, 30, 190, 30, 17, 48, 190, 190, 8, 30, 190, 190, 8, 30, 17, 48, 154, 30, 154, 70, 154, 71, 154, 72, + 154, 130, 154, 118, 154, 119, 154, 106, 154, 117, 154, 107, 154, 108, 148, 30, 148, 70, 148, 71, + 148, 72, 148, 130, 148, 118, 148, 119, 148, 106, 148, 104, 148, 117, 148, 116, 148, 107, 148, 108, + 191, 148, 192, 191, 193, 194, 193, 193, 8, 194, 194, 164, 38, 193, 25, 194, 92, 194, 164, 195, 7, 194, 196, 195, 196, + 197, 74, 197, 191, 197, 198, 197, 199, 197, 200, 197, 201, 197, 202, 197, 203, 197, 204, 197, 205, + 197, 206, 206, 37, 207, 62, 206, 37, 62, 206, 37, 208, 62, 206, 37, 207, 8, 209, 62, 198, 85, 198, 86, 198, 87, 198, 48, 198, 93, + 198, 69, 204, 12, 204, 13, 199, 35, 210, 58, 199, 35, 211, 58, 199, 35, 211, 8, 210, 58, 211, 212, 211, 213, 212, 211, 210, 214, 211, 211, 8, 210, 212, + 211, 211, 8, 210, 214, 213, 8, 213, 213, 8, 210, 210, 213, 214, 99, 215, 200, 34, 57, 200, 34, 216, 57, 200, 34, 216, 8, 57, 168, 217, + 216, 218, 168, 168, 8, 217, 216, 216, 8, 218, 218, 191, 218, 219, 219, 191, 220, 217, 221, 7, 212, 218, 222, 7, 212, 218, 223, 222, 224, + 222, 225, 224, 226, 221, 69, 224, 69, 221, 48, 224, 48, 226, 191, 226, 227, 227, 4, 227, 5, + 227, 6, 227, 9, 227, 10, 227, 11, 227, 14, 227, 16, 227, 98, 227, 87, 227, 20, 227, 21, + 227, 23, 227, 31, 227, 32, 227, 33, 227, 44, 227, 85, 227, 61, 227, 73, 227, 74, 227, 75, + 227, 86, 227, 77, 227, 78, 227, 79, 227, 80, 227, 81, 227, 88, 227, 89, 227, 91, 227, 92, + 227, 101, 227, 82, 227, 102, 227, 103, 227, 105, 227, 114, 225, 35, 212, 58, 228, 17, 215, 220, 17, 212, 229, + 230, 229, 228, 230, 220, 205, 109, 231, 112, 231, 111, 137, 231, 205, 110, 137, 231, 151, 197, 232, 101, 151, 232, 35, 207, 58, + 151, 151, 35, 207, 58, 233, 44, 15, 30, 151, 232, 15, 226, 151, 151, 15, 226, 151, 234, 151, 44, 151, 37, 235, 62, 234, 233, 236, 151, 236, 44, 236, 237, 237, 205, + 151, 151, 205, 237, 151, 37, 235, 62, 237, 232, 37, 235, 62, 237, 237, 37, 235, 62, 237, 237, 35, 207, 58, 237, 237, 15, 226, 235, 235, 238, 235, 238, 8, 238, 212, + 238, 99, 212, 238, 238, 8, 212, 238, 238, 8, 99, 212, 239, 236, 239, 237, 240, 239, 240, 239, 55, 240, 239, 43, 240, 55, 241, 240, 43, 241, + 241, 240, 241, 11, 241, 241, 80, 241, 241, 78, 241, 241, 53, 241, 241, 41, 241, 241, 76, 241, 241, 45, 241, 242, 241, 242, 240, 66, 242, + 243, 242, 243, 243, 244, 242, 244, 65, 244, 12, 244, 59, 245, 243, 245, 245, 53, 243, 245, 245, 41, 243, 246, 245, 246, 246, 39, 245, + 246, 246, 26, 245, 246, 246, 28, 245, 247, 246, 248, 246, 247, 247, 249, 246, 248, 248, 249, 246, 249, 38, 249, 25, 249, 36, 249, 24, + 249, 33, 247, 247, 32, 246, 250, 247, 116, 194, 251, 248, 116, 194, 247, 250, 248, 251, 252, 247, 253, 248, 252, 252, 254, 247, 253, 253, 254, 248, + 254, 18, 254, 46, 254, 19, 254, 47, 255, 253, 256, 252, 255, 255, 1, 253, 256, 256, 1, 252, 257, 255, 258, 256, + 257, 257, 83, 255, 258, 258, 83, 256, 259, 257, 260, 258, 259, 259, 49, 257, 260, 260, 49, 258, 261, 259, 262, 260, 261, 261, 2, 259, 262, 262, 2, 260, + 263, 261, 264, 262, 263, 263, 52, 261, 264, 264, 52, 262, 265, 263, 266, 264, 265, 265, 97, 263, 266, 266, 97, 264, 267, 265, 268, 266, + 267, 265, 56, 212, 7, 215, 268, 266, 56, 212, 7, 212, 215, 267, 212, 268, 215, 269, 212, 270, 215, 271, 212, 272, 215, 239, 17, 215, 212, 239, 17, 212, + 215, 239, 273, 215, 212, 239, 273, 212, 273, 68, 273, 67, 273, 13, 273, 60, 273, 54, 273, 42, 273, 40, 273, 27, + 273, 29, 273, 3, 273, 84, 273, 51, 137, 215, 207, 212, 137, 137, 8, 215, 207, 207, 8, 212, 274, 275, + 274, 137, 275, 207, 136, 166, 128, 276, 136, 166, 189, 136, 166, 172, 136, 166, 170, 136, 166, 173, 136, 166, 277, 136, 166, 278, 136, 166, 279, + 136, 166, 280, 136, 166, 174, 136, 166, 281, 136, 166, 282, 136, 166, 176, 136, 166, 283, 284, 285, 284, 286, 284, 287, 285, 288, + 285, 187, 289, 290, 289, 291, 277, 292, 277, 175, 276, 171, 171, 34, 293, 57, 294, 295, 294, 294, 295, 295, 136, + 295, 166, 127, 284, 149, 293, 166, 293, 294, 296, 89, 296, 88, 297, 79, 298, 296, 299, 287, 296, 300, 301, 297, 302, 303, 297, 304, + 189, 303, 149, 299, 305, 300, 305, 302, 306, 304, 307, 299, 299, 8, 308, 300, 300, 8, 305, 302, 302, 8, 306, 304, 304, 8, 307, 308, 192, 196, 229, + 305, 192, 196, 230, 306, 192, 196, 229, 307, 192, 196, 230, 308, 309, 228, 305, 309, 220, 306, 309, 228, 307, 309, 220, 309, 34, 310, 57, 309, 35, 311, 58, 310, + 310, 312, 310, 312, 8, 311, 210, 209, 311, 313, 311, 313, 8, 210, 209, 312, 314, 312, 312, 8, 314, 313, 315, 313, 313, 8, 315, 315, 210, 316, + 314, 192, 230, 314, 222, 7, 192, 230, 314, 222, 7, 309, 230, 316, 192, 196, 230, 316, 309, 230, 208, 99, 192, 208, 99, 309, 209, 209, 208, 172, 63, + 166, 170, 207, 149, 173, 31, 37, 207, 62, 136, 16, 136, 173, 31, 37, 207, 62, 136, 292, 14, 136, 81, 37, 207, 62, 95, 292, 14, 136, 81, 37, 207, 62, 149, 292, 81, 37, 207, 62, 136, 292, 21, 37, 274, 63, 275, 63, 275, 62, 136, 292, 21, 37, 301, 63, 275, 63, 275, 62, 136, 292, 21, 37, 298, 63, 275, 63, 275, 62, 136, + 317, 32, 317, 117, 292, 21, 37, 239, 317, 207, 62, 136, 292, 21, 37, 318, 317, 207, 62, 136, 318, 296, 192, 196, 318, 297, 192, 196, 318, 296, 309, 318, 297, 309, 278, 9, 149, 278, 9, 191, 149, + 279, 4, 149, 279, 4, 191, 149, 280, 61, 275, 149, 174, 82, 37, 207, 62, 136, 175, 73, 37, 207, 62, 319, 319, 34, 320, 57, 319, 34, 320, 321, 320, 57, 322, 323, 322, 322, 323, 320, + 320, 322, 323, 5, 207, 7, 293, 321, 10, 7, 293, 281, 191, 7, 324, 324, 136, 324, 166, 127, 288, 282, 75, 207, 149, 176, 77, 171, 325, 176, 77, 171, 326, 176, 77, 171, 325, 326, + 325, 6, 37, 327, 62, 171, 326, 20, 171, 327, 192, 327, 309, 283, 91, 149, 328, 23, 288, 328, 192, 37, 329, 62, 196, 330, 331, 332, 188, 328, 192, 37, 329, 62, 196, 330, 331, 332, 290, 288, 290, 328, 37, 329, 62, 196, 330, 331, 332, + 201, 23, 192, 37, 329, 62, 196, 330, 331, 332, 201, 23, 37, 329, 62, 196, 330, 331, 332, 333, 329, 329, 329, 208, 329, 334, 329, 334, 8, 329, 334, 8, 208, 334, 316, 334, 334, 8, 316, + 335, 316, 330, 34, 332, 57, 331, 293, 271, 336, 96, 337, 215, 272, 336, 96, 337, 212, 271, 336, 96, 337, 128, 330, 331, 332, 272, 336, 96, 337, 128, 330, 331, 332, 336, 192, 336, 206, + 337, 223, 222, 37, 333, 62, 196, 330, 331, 332, 223, 65, 222, 338, 333, 62, 196, 330, 339, 340, 223, 118, 222, 37, 62, 196, 330, 331, 332, 223, 119, 222, 37, 341, 62, 196, 330, 331, 332, 341, 335, 338, 37, 340, 57, 342, 22, 187, 342, 192, 338, 329, 62, 330, 339, 340, + 291, 187, 291, 342, 338, 329, 62, 330, 339, 340, 203, 22, 192, 338, 329, 62, 330, 339, 340, 203, 22, 338, 329, 62, 330, 339, 340, 339, 331, 269, 100, 270, 100, 269, 100, 65, 215, 270, 100, 65, 212, 269, 100, 215, + 270, 100, 212, 286, 102, 192, 343, 344, 345, 346, 202, 102, 192, 343, 344, 345, 346, 347, 102, 343, 344, 345, 346, 202, 102, 343, 344, 345, 346, 347, 286, 344, 34, 346, 57, 348, 104, 343, + 343, 103, 239, 345, 345, 349, 349, 350, 349, 349, 350, 350, 223, 350, 348, 223, 350, 63, 139, 139, 351, + 351, 294, 140, 352, 353, 354, 352, 352, 353, 354, 355, 354, 354, 355, 355, 356, 149, 355, 357, 149, 355, 295, + 356, 114, 358, 359, 356, 114, 360, 358, 361, 358, 362, 358, 363, 358, 361, 8, 362, 358, 361, 8, 363, 361, 364, 362, 65, 116, 364, 363, 34, 57, + 363, 34, 365, 57, 363, 34, 365, 8, 57, 359, 106, 360, 365, 366, 365, 365, 8, 366, 366, 364, 366, 226, 116, 364, 360, 69, 364, 192, 367, + 357, 105, 65, 359, 357, 105, 368, 359, 357, 105, 368, 357, 105, 189, 357, 105, 284, 357, 105, 10, 367, 127, 289, 357, 105, 10, 367, 127, 347, 357, 105, 10, 367, 212, 368, 34, 57, 368, 34, 369, 57, + 368, 34, 369, 8, 57, 369, 370, 369, 369, 8, 370, 370, 226, 370, 226, 116, 226, 371, 134, 0 +}; + +const int QmlJSGrammar::rule_index [] = { + 0, 3, 6, 9, 12, 15, 18, 21, 23, 25, + 27, 29, 32, 35, 37, 39, 41, 45, 47, 50, + 54, 56, 60, 66, 71, 74, 75, 77, 79, 83, + 86, 89, 91, 94, 97, 99, 101, 104, 106, 110, + 113, 117, 120, 123, 125, 127, 134, 140, 145, 151, + 158, 162, 166, 170, 173, 176, 179, 182, 185, 188, + 192, 194, 196, 198, 202, 203, 205, 209, 212, 218, + 223, 230, 234, 242, 244, 247, 252, 254, 257, 260, + 264, 268, 269, 271, 275, 277, 280, 287, 289, 292, + 295, 307, 309, 312, 321, 323, 326, 328, 330, 332, + 334, 340, 345, 347, 351, 355, 361, 363, 365, 367, + 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, + 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, + 409, 411, 413, 415, 419, 424, 426, 428, 431, 433, + 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, + 454, 456, 460, 463, 467, 473, 475, 477, 479, 481, + 483, 485, 487, 489, 493, 497, 503, 505, 508, 511, + 516, 521, 523, 526, 527, 529, 532, 535, 539, 544, + 546, 548, 552, 556, 558, 560, 563, 567, 571, 573, + 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, + 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, + 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, + 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, + 655, 657, 659, 661, 663, 665, 667, 671, 674, 677, + 678, 679, 681, 683, 685, 687, 691, 695, 697, 699, + 704, 709, 713, 717, 721, 723, 729, 731, 733, 736, + 739, 742, 747, 752, 757, 762, 766, 767, 769, 772, + 774, 777, 781, 786, 788, 790, 792, 795, 798, 801, + 804, 806, 809, 812, 815, 818, 821, 824, 827, 829, + 833, 835, 839, 841, 843, 845, 847, 851, 855, 857, + 861, 865, 869, 871, 873, 877, 881, 883, 885, 887, + 889, 891, 895, 899, 903, 905, 907, 909, 911, 915, + 919, 921, 923, 925, 927, 929, 931, 935, 939, 941, + 943, 947, 951, 953, 955, 959, 963, 965, 967, 971, + 975, 977, 979, 983, 987, 989, 991, 995, 999, 1001, + 1003, 1009, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1031, + 1035, 1039, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, + 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1075, 1079, 1080, + 1081, 1083, 1085, 1089, 1092, 1095, 1098, 1101, 1104, 1107, + 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1130, 1132, 1134, + 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1152, 1154, 1157, + 1159, 1164, 1166, 1168, 1170, 1172, 1174, 1177, 1180, 1183, + 1186, 1189, 1191, 1193, 1195, 1197, 1201, 1205, 1209, 1213, + 1217, 1221, 1225, 1229, 1232, 1235, 1238, 1241, 1245, 1249, + 1250, 1252, 1255, 1258, 1260, 1265, 1267, 1271, 1273, 1277, + 1280, 1283, 1288, 1293, 1297, 1300, 1303, 1306, 1307, 1309, + 1311, 1312, 1315, 1323, 1329, 1337, 1345, 1351, 1361, 1371, + 1381, 1383, 1385, 1393, 1401, 1405, 1409, 1412, 1415, 1418, + 1422, 1425, 1429, 1433, 1439, 1445, 1449, 1455, 1457, 1460, + 1461, 1463, 1468, 1472, 1476, 1478, 1482, 1486, 1490, 1494, + 1499, 1505, 1508, 1510, 1512, 1515, 1517, 1527, 1537, 1539, + 1548, 1558, 1567, 1569, 1570, 1572, 1574, 1577, 1581, 1583, + 1587, 1589, 1591, 1593, 1595, 1600, 1605, 1613, 1621, 1623, + 1625, 1626, 1635, 1645, 1654, 1664, 1666, 1668, 1670, 1672, + 1681, 1683, 1691, 1700, 1708, 1710, 1712, 1714, 1718, 1722, + 1725, 1728, 1735, 1742, 1748, 1754, 1756, 1758, 1760, 1762, + 1763, 1766, 1767, 1769, 1771, 1774, 1776, 1779, 1781, 1782, + 1784, 1786, 1788, 1790, 1791, 1793, 1795, 1798, 1801, 1804, + 1806, 1810, 1813, 1815, 1817, 1819, 1823, 1827, 1829, 1833, + 1836, 1840, 1845, 1848, 1850, 1854, 1856, 1860, 1862, 1864, + 1865, 1869, 1873, 1876, 1879, 1882, 1888, 1894, 1899, 1902, + 1906, 1911, 1913, 1917, 1919, 1923 }; +#endif // QLALR_NO_QMLJSGRAMMAR_DEBUG_INFO const short QmlJSGrammar::action_default [] = { - 0, 0, 436, 436, 436, 0, 26, 0, 282, 127, - 332, 0, 350, 504, 308, 316, 312, 258, 130, 328, - 134, 304, 274, 3, 129, 131, 125, 114, 259, 126, - 320, 324, 241, 238, 279, 257, 240, 128, 231, 132, - 297, 287, 0, 112, 535, 0, 145, 146, 141, 109, - 0, 0, 107, 102, 0, 157, 0, 0, 0, 143, - 0, 0, 227, 139, 142, 111, 106, 0, 0, 103, - 105, 113, 108, 104, 110, 144, 232, 0, 124, 0, - 140, 0, 0, 521, 133, 272, 264, 330, 0, 0, - 134, 125, 259, 281, 261, 260, 0, 277, 278, 276, - 275, 280, 506, 0, 500, 0, 436, 497, 387, 0, - 385, 436, 383, 499, 333, 0, 351, 309, 317, 313, - 365, 363, 329, 364, 371, 360, 305, 361, 0, 125, - 362, 379, 368, 259, 321, 325, 296, 366, 286, 380, - 0, 0, 0, 436, 0, 0, 0, 0, 355, 435, - 0, 0, 0, 391, 0, 0, 522, 369, 370, 0, - 0, 359, 367, 331, 506, 0, 501, 0, 436, 0, - 503, 498, 0, 307, 0, 300, 302, 301, 303, 298, - 0, 293, 291, 0, 294, 292, 290, 288, 0, 0, - 0, 284, 285, 283, 295, 0, 315, 0, 311, 437, - 15, 0, 16, 353, 436, 0, 469, 470, 0, 0, - 471, 481, 0, 115, 489, 494, 123, 224, 490, 491, - 0, 0, 415, 157, 0, 122, 224, 86, 0, 0, - 119, 121, 120, 0, 0, 244, 237, 180, 181, 182, - 183, 184, 216, 210, 185, 212, 186, 187, 188, 189, - 190, 218, 217, 191, 192, 193, 194, 195, 219, 196, - 197, 211, 198, 199, 213, 200, 214, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 215, 0, 234, 0, - 0, 236, 0, 233, 0, 0, 250, 251, 0, 253, - 0, 252, 255, 0, 256, 239, 254, 235, 0, 116, - 0, 0, 118, 117, 429, 226, 0, 222, 430, 492, - 495, 493, 123, 0, 436, 0, 482, 431, 432, 224, - 421, 416, 174, 175, 115, 173, 0, 0, 0, 179, - 177, 426, 417, 422, 413, 0, 224, 224, 427, 428, - 0, 220, 0, 419, 423, 158, 433, 155, 414, 157, - 424, 433, 425, 434, 420, 156, 418, 0, 347, 340, - 0, 345, 346, 344, 343, 349, 342, 341, 338, 339, - 348, 337, 335, 0, 319, 0, 0, 323, 0, 0, - 327, 0, 456, 457, 0, 454, 455, 480, 0, 0, - 0, 0, 0, 0, 441, 440, 354, 356, 0, 0, - 259, 0, 0, 390, 389, 0, 0, 0, 352, 355, - 0, 357, 355, 0, 436, 443, 0, 446, 447, 0, - 436, 449, 0, 0, 0, 336, 0, 436, 448, 334, - 123, 392, 452, 397, 450, 406, 0, 123, 0, 401, - 223, 225, 405, 0, 221, 409, 410, 355, 0, 355, - 0, 436, 445, 123, 453, 399, 394, 451, 407, 411, - 0, 123, 0, 403, 223, 355, 0, 355, 0, 436, - 444, 381, 358, 436, 0, 382, 373, 0, 375, 0, - 376, 372, 0, 374, 0, 514, 386, 0, 489, 512, - 0, 0, 436, 520, 0, 515, 513, 123, 393, 0, - 398, 224, 0, 402, 535, 0, 0, 537, 532, 0, - 539, 538, 0, 541, 0, 107, 543, 108, 0, 534, - 527, 533, 540, 542, 489, 488, 0, 123, 0, 436, - 0, 507, 0, 0, 123, 0, 436, 0, 509, 0, - 0, 496, 511, 0, 123, 0, 436, 0, 510, 0, - 489, 0, 123, 0, 436, 0, 508, 536, 0, 0, - 436, 439, 436, 438, 0, 458, 0, 0, 0, 460, - 465, 463, 466, 0, 0, 464, 465, 0, 461, 0, - 462, 436, 468, 0, 436, 467, 0, 472, 0, 473, - 474, 0, 0, 475, 0, 478, 479, 0, 0, 476, - 477, 0, 0, 436, 442, 0, 0, 436, 459, 526, - 0, 524, 123, 0, 395, 400, 224, 408, 412, 0, - 404, 396, 502, 0, 384, 0, 306, 0, 299, 0, - 289, 0, 314, 0, 310, 0, 0, 250, 243, 249, - 0, 248, 0, 247, 0, 318, 0, 0, 322, 0, - 0, 326, 250, 0, 245, 250, 0, 246, 535, 0, - 0, 537, 0, 528, 537, 0, 530, 265, 264, 0, - 489, 489, 0, 123, 0, 436, 0, 486, 0, 123, - 0, 436, 0, 487, 0, 489, 489, 0, 0, 436, - 0, 518, 0, 0, 436, 0, 519, 168, 167, 172, - 164, 0, 0, 160, 169, 0, 161, 166, 162, 0, - 171, 150, 0, 158, 0, 157, 148, 0, 153, 154, - 0, 149, 159, 151, 152, 147, 0, 0, 136, 137, - 433, 135, 0, 138, 269, 263, 241, 242, 271, 268, - 262, 0, 0, 228, 230, 0, 229, 270, 267, 266, - 525, 0, 523, 0, 273, 0, 0, 6, 550, 547, - 551, 436, 555, 0, 0, 554, 553, 552, 580, 578, - 575, 0, 0, 579, 577, 0, 568, 573, 0, 583, - 0, 531, 582, 0, 484, 377, 0, 516, 378, 581, - 535, 489, 0, 123, 0, 436, 0, 485, 489, 0, - 0, 436, 0, 517, 0, 537, 0, 529, 587, 0, - 589, 584, 0, 585, 588, 586, 0, 590, 576, 574, - 0, 563, 558, 557, 559, 560, 0, 0, 556, 0, - 561, 562, 0, 569, 571, 0, 565, 0, 572, 0, - 566, 570, 567, 0, 564, 5, 545, 436, 2, 0, - 84, 83, 0, 0, 481, 514, 103, 105, 113, 104, - 35, 4, 81, 64, 67, 78, 74, 0, 85, 0, - 489, 0, 123, 0, 436, 0, 483, 0, 69, 68, - 76, 53, 52, 51, 0, 0, 53, 0, 0, 0, - 54, 0, 99, 97, 92, 100, 96, 93, 95, 101, - 98, 94, 63, 0, 66, 436, 0, 70, 44, 45, - 46, 48, 0, 0, 49, 47, 42, 436, 43, 387, - 142, 144, 163, 0, 0, 0, 39, 178, 40, 176, - 165, 0, 170, 41, 73, 71, 0, 0, 0, 88, - 0, 87, 90, 0, 91, 0, 89, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 31, 77, 0, 34, 32, 28, 0, 33, 29, 0, - 436, 0, 241, 0, 0, 80, 0, 82, 65, 79, - 75, 53, 0, 0, 0, 0, 0, 0, 436, 0, - 241, 0, 72, 0, 0, 0, 62, 55, 0, 53, - 56, 0, 0, 0, 57, 0, 0, 0, 0, 59, - 60, 0, 61, 58, 436, 0, 0, 50, 157, 0, - 0, 36, 37, 0, 38, 8, 0, 0, 9, 0, + 0, 0, 461, 461, 461, 0, 26, 0, 299, 144, + 357, 0, 375, 529, 329, 337, 333, 275, 147, 349, + 353, 151, 325, 291, 3, 146, 148, 142, 131, 276, + 143, 341, 345, 258, 255, 296, 274, 257, 145, 248, + 149, 318, 304, 0, 128, 560, 130, 0, 162, 163, + 158, 125, 0, 0, 123, 118, 0, 174, 0, 0, + 0, 160, 0, 0, 244, 156, 159, 127, 122, 0, + 0, 119, 121, 129, 124, 120, 126, 161, 249, 0, + 141, 0, 157, 0, 0, 546, 150, 316, 289, 281, + 355, 0, 0, 151, 142, 276, 298, 278, 277, 0, + 294, 295, 293, 292, 297, 531, 0, 525, 0, 461, + 522, 412, 0, 410, 461, 408, 524, 358, 0, 376, + 330, 338, 334, 390, 388, 350, 354, 389, 396, 385, + 326, 386, 0, 142, 387, 404, 393, 276, 342, 346, + 317, 391, 303, 405, 0, 0, 0, 461, 0, 0, + 0, 0, 380, 460, 0, 0, 0, 416, 0, 0, + 547, 394, 395, 315, 0, 0, 384, 392, 356, 531, + 0, 526, 0, 461, 0, 528, 523, 0, 328, 0, + 321, 323, 322, 324, 319, 0, 0, 310, 308, 0, + 311, 309, 307, 305, 0, 0, 0, 301, 302, 300, + 100, 0, 0, 136, 313, 137, 0, 0, 261, 254, + 197, 198, 199, 200, 201, 233, 227, 202, 229, 203, + 204, 205, 206, 207, 235, 234, 208, 209, 210, 211, + 212, 236, 213, 214, 228, 215, 216, 230, 217, 231, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 232, + 0, 0, 251, 378, 0, 0, 253, 0, 250, 0, + 0, 267, 268, 0, 270, 0, 269, 272, 0, 273, + 256, 271, 252, 0, 133, 0, 0, 135, 134, 312, + 0, 336, 0, 332, 0, 0, 0, 0, 352, 348, + 0, 344, 0, 340, 462, 15, 16, 461, 0, 494, + 495, 0, 0, 496, 506, 0, 132, 514, 519, 140, + 241, 515, 516, 0, 0, 440, 174, 0, 139, 241, + 138, 454, 243, 0, 239, 455, 517, 520, 518, 140, + 0, 461, 0, 507, 456, 457, 241, 446, 441, 191, + 192, 132, 190, 0, 0, 0, 196, 194, 451, 442, + 447, 438, 0, 241, 241, 452, 453, 0, 237, 0, + 444, 448, 175, 458, 172, 439, 174, 449, 458, 450, + 459, 445, 173, 443, 0, 372, 365, 0, 370, 371, + 369, 368, 374, 367, 366, 363, 364, 373, 362, 360, + 0, 481, 482, 0, 479, 480, 505, 0, 0, 0, + 0, 0, 0, 466, 465, 379, 381, 0, 0, 276, + 0, 0, 415, 414, 0, 0, 0, 377, 380, 0, + 382, 380, 0, 461, 468, 0, 471, 472, 0, 461, + 474, 0, 0, 0, 361, 0, 461, 473, 359, 140, + 417, 477, 422, 475, 431, 0, 140, 0, 426, 240, + 242, 430, 0, 238, 434, 435, 380, 0, 380, 0, + 461, 470, 140, 478, 424, 419, 476, 432, 436, 0, + 140, 0, 428, 240, 380, 0, 380, 0, 461, 469, + 406, 383, 461, 0, 407, 398, 0, 400, 0, 401, + 397, 0, 399, 0, 539, 411, 0, 514, 537, 0, + 0, 461, 545, 0, 540, 538, 140, 418, 0, 423, + 241, 0, 427, 560, 0, 0, 562, 557, 0, 564, + 563, 0, 566, 0, 123, 568, 124, 0, 559, 552, + 558, 565, 567, 514, 513, 0, 140, 0, 461, 0, + 532, 0, 0, 140, 0, 461, 0, 534, 0, 0, + 521, 536, 0, 140, 0, 461, 0, 535, 0, 514, + 0, 140, 0, 461, 0, 533, 561, 0, 0, 461, + 464, 461, 463, 0, 483, 0, 0, 0, 485, 490, + 488, 491, 0, 0, 489, 490, 0, 486, 0, 487, + 461, 493, 0, 461, 492, 0, 497, 0, 498, 499, + 0, 0, 500, 0, 503, 504, 0, 0, 501, 502, + 0, 0, 461, 467, 0, 0, 461, 484, 551, 0, + 549, 140, 0, 420, 425, 241, 433, 437, 0, 429, + 421, 527, 0, 409, 0, 327, 0, 320, 0, 0, + 306, 314, 0, 335, 0, 331, 0, 0, 267, 260, + 266, 0, 265, 0, 264, 0, 0, 0, 0, 351, + 347, 0, 343, 0, 339, 267, 0, 262, 267, 0, + 263, 560, 0, 0, 562, 0, 553, 562, 0, 555, + 282, 281, 0, 514, 514, 0, 140, 0, 461, 0, + 511, 0, 140, 0, 461, 0, 512, 0, 514, 514, + 0, 0, 461, 0, 543, 0, 0, 461, 0, 544, + 185, 184, 189, 181, 0, 0, 177, 186, 0, 178, + 183, 179, 0, 188, 167, 0, 175, 0, 174, 165, + 0, 170, 171, 0, 166, 176, 168, 169, 164, 0, + 0, 153, 154, 458, 152, 0, 155, 286, 280, 258, + 259, 288, 285, 279, 0, 0, 245, 247, 0, 246, + 287, 284, 283, 550, 0, 548, 0, 290, 0, 0, + 6, 575, 572, 576, 461, 580, 0, 0, 579, 578, + 577, 605, 603, 600, 0, 0, 604, 602, 0, 593, + 598, 0, 608, 0, 556, 607, 0, 509, 402, 0, + 541, 403, 606, 560, 514, 0, 140, 0, 461, 0, + 510, 514, 0, 0, 461, 0, 542, 0, 562, 0, + 554, 612, 0, 614, 609, 0, 610, 613, 611, 0, + 615, 601, 599, 0, 588, 583, 582, 584, 585, 0, + 0, 581, 0, 586, 587, 0, 594, 596, 0, 590, + 0, 597, 0, 591, 595, 592, 0, 589, 5, 570, + 461, 2, 0, 98, 97, 0, 130, 0, 0, 506, + 539, 119, 121, 129, 120, 4, 32, 0, 45, 44, + 95, 74, 77, 92, 88, 0, 85, 99, 0, 514, + 0, 140, 0, 461, 0, 508, 28, 31, 0, 0, + 0, 30, 29, 40, 36, 0, 41, 37, 0, 0, + 102, 0, 42, 0, 0, 79, 78, 90, 63, 62, + 61, 0, 0, 63, 0, 0, 0, 64, 0, 117, + 114, 112, 107, 115, 111, 108, 110, 116, 113, 109, + 73, 0, 76, 461, 0, 82, 54, 55, 56, 58, + 0, 0, 59, 57, 52, 461, 53, 412, 159, 161, + 180, 0, 0, 0, 0, 195, 0, 193, 182, 50, + 49, 0, 187, 51, 87, 83, 0, 80, 0, 0, + 0, 0, 0, 103, 0, 101, 105, 0, 106, 0, + 104, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 38, 0, 0, 39, 91, 0, 461, 0, 258, 0, + 0, 94, 0, 96, 75, 93, 89, 63, 0, 0, + 0, 0, 0, 0, 461, 0, 258, 0, 0, 108, + 86, 84, 81, 0, 72, 65, 0, 63, 66, 0, + 0, 0, 67, 0, 0, 0, 0, 69, 70, 0, + 71, 68, 33, 43, 461, 0, 0, 60, 174, 0, + 0, 46, 47, 0, 48, 8, 0, 0, 9, 0, 11, 0, 10, 1, 25, 18, 14, 0, 17, 13, - 12, 27, 7, 19, 0, 21, 0, 0, 24, 0, - 20, 22, 0, 0, 23, 591 + 12, 27, 0, 35, 7, 34, 19, 0, 21, 0, + 0, 24, 0, 20, 22, 0, 0, 23, 616 }; const short QmlJSGrammar::goto_default [] = { - 7, 1033, 110, 23, 861, 845, 757, 1029, 1042, 1025, - 1028, 1032, 1030, 1037, 27, 902, 1034, 32, 1031, 1046, - 903, 860, 966, 955, 963, 957, 108, 918, 923, 907, - 127, 471, 125, 130, 162, 139, 158, 948, 1001, 1000, - 863, 864, 934, 866, 865, 862, 851, 850, 161, 938, - 26, 13, 300, 231, 225, 226, 38, 29, 9, 37, - 24, 18, 25, 39, 84, 20, 128, 218, 356, 714, - 712, 116, 345, 724, 12, 701, 922, 700, 697, 305, - 924, 514, 513, 325, 322, 323, 238, 441, 458, 435, - 744, 42, 36, 33, 288, 35, 17, 287, 133, 86, - 85, 22, 34, 96, 8, 138, 136, 40, 180, 126, - 21, 174, 14, 117, 16, 119, 15, 118, 30, 134, - 31, 135, 19, 122, 87, 163, 10, 114, 422, 398, - 564, 472, 121, 123, 120, 137, 132, 157, 124, 477, - 481, 476, 483, 478, 789, 785, 788, 131, 113, 111, - 112, 482, 159, 402, 431, 498, 406, 456, 160, 614, - 433, 455, 615, 439, 217, 326, 342, 321, 343, 320, - 344, 215, 416, 399, 569, 573, 576, 572, 571, 206, - 589, 590, 597, 209, 525, 106, 493, 622, 526, 219, - 542, 115, 103, 685, 494, 495, 543, 479, 659, 507, - 509, 520, 782, 512, 511, 510, 846, 759, 758, 761, - 760, 756, 755, 820, 774, 823, 822, 824, 825, 834, - 835, 833, 778, 769, 809, 808, 0 + 7, 1073, 113, 24, 875, 858, 770, 1069, 1084, 1065, + 1068, 1072, 1070, 1077, 28, 942, 1074, 33, 1071, 1089, + 1027, 1081, 898, 897, 912, 876, 877, 878, 905, 999, + 911, 879, 111, 956, 961, 945, 131, 480, 129, 134, + 167, 143, 162, 978, 1039, 1038, 881, 882, 974, 886, + 884, 883, 880, 864, 863, 166, 982, 27, 13, 275, + 204, 318, 319, 39, 30, 9, 38, 25, 18, 26, + 40, 86, 21, 132, 311, 373, 727, 725, 119, 362, + 737, 12, 714, 960, 713, 710, 322, 962, 523, 522, + 342, 339, 340, 211, 450, 467, 444, 757, 43, 37, + 34, 263, 36, 17, 262, 137, 89, 88, 23, 35, + 99, 8, 142, 140, 41, 185, 163, 87, 130, 22, + 179, 14, 120, 16, 122, 15, 121, 31, 138, 32, + 139, 19, 125, 20, 126, 90, 168, 10, 117, 431, + 407, 573, 481, 124, 127, 123, 141, 136, 161, 128, + 486, 490, 485, 492, 487, 802, 798, 801, 135, 116, + 114, 115, 491, 164, 411, 440, 507, 415, 465, 165, + 623, 442, 464, 624, 448, 310, 343, 359, 338, 360, + 337, 361, 308, 425, 408, 578, 582, 585, 581, 580, + 299, 598, 599, 606, 862, 534, 109, 502, 631, 535, + 312, 551, 118, 106, 698, 503, 504, 552, 488, 672, + 516, 518, 529, 795, 521, 520, 519, 859, 772, 771, + 774, 773, 769, 768, 833, 787, 836, 835, 837, 838, + 847, 848, 846, 791, 782, 822, 821, 0 }; const short QmlJSGrammar::action_index [] = { - 411, 3072, 372, 153, -130, 2475, 205, 152, 274, -130, - -130, 80, -130, -130, 150, 115, 77, 488, -130, -130, - 68, 463, -130, 142, -130, -130, 67, -130, 1520, -130, - 144, 190, 484, -130, 377, -130, -130, -130, -130, -130, - 596, 385, 363, -130, 959, 2834, -130, -130, -130, -130, - 1058, 1073, -130, -130, 6123, 3432, 4387, 2834, 2834, -130, - 2355, 2834, -130, -130, -130, -130, -130, 2834, 2834, -130, - -130, -130, -130, -130, -130, -130, -130, 3072, -130, 2834, - -130, 2834, 2834, 4146, -130, -130, 78, -130, 2834, 2834, - -130, -130, 251, 391, -130, -130, 2834, -130, -130, -130, - -130, 400, -130, 3191, -130, 108, -130, -130, 6501, 91, - -130, 428, -130, -130, -130, 66, -130, 139, 90, 62, - -130, -130, -130, -130, -130, -130, 458, -130, 368, 216, - -130, -130, -130, 1438, 135, 176, 550, -130, 418, -130, - 1172, 1094, 196, -130, 110, 109, 479, 104, 2953, -130, - 98, 2953, 109, -130, 112, 141, 4027, -130, -130, 1311, - 229, -130, -130, -130, -130, 3908, -130, 147, -130, 120, - -130, -130, 2834, 445, 2834, -130, -130, -130, -130, 512, - 2834, -130, -130, 2834, -130, -130, -130, 342, 2834, 2834, - 2834, 231, 246, 197, 305, 2834, 119, 2834, 175, -130, - -130, 2953, -130, -130, -130, 6375, -130, -130, 156, 747, - -130, -130, 137, -130, 1638, -130, 166, 155, -130, 161, - 94, 1211, 5619, 159, 2119, -130, 151, 373, 228, 2237, - -130, -130, 128, 4989, 2953, -130, -130, -130, -130, -130, - -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, - -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, - -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, - -130, -130, -130, -130, -130, -130, -130, 221, -130, 4989, - 2953, -130, 367, -130, 478, 129, 3670, 149, 118, -130, - 2953, 3551, -130, 2953, -130, -130, -130, -130, 2119, -130, - 270, 2119, -130, -130, -130, -130, 2953, -130, -130, 1413, - -130, -130, 158, 124, -130, 113, -130, -130, -130, 138, - -130, 146, -130, -130, 219, -130, 73, 103, 2953, -130, - -130, -130, 5619, -130, -130, 1311, 102, 97, -130, -130, - 60, -130, 57, 100, -130, 96, 1398, -130, -130, 95, - -130, 1538, -130, -130, -130, -130, -130, 2953, -130, -130, - 2953, -130, -130, -130, -130, -130, -130, -130, -130, -130, - -130, -130, -130, 2834, 58, 2834, 2953, 99, 93, 2953, - -130, 198, -130, -130, 206, -130, -130, -130, 6249, 15, - 61, 2953, 209, 366, -130, -130, 4625, 89, 54, 199, - 1765, 1311, 48, -130, -130, 1311, 43, 3072, -130, 2953, - 42, 87, 2953, 40, -130, -130, 2953, -130, -130, 266, - -130, -130, 3072, 2953, 3072, -130, 275, -130, -130, -130, - 85, 81, 71, -130, 365, -130, 1311, 92, 117, -130, - 116, -130, -130, 3072, -130, -130, -130, 2953, 75, 2953, - 74, -130, -130, 125, 114, -130, 245, 354, -130, -130, - 1311, 106, 114, -130, 111, 2953, 59, 2953, 65, -130, - -130, -130, -130, -130, 72, -130, -130, 262, -130, 861, - -130, -130, 1311, -130, 840, -130, -130, 88, 1538, -130, - 64, 82, -130, -130, 63, -130, -130, 105, 101, 107, - -130, 107, 1311, -130, 20, 173, 2001, 5871, -130, 183, - -130, 5871, 5745, -130, 174, 5619, -130, 5619, 5619, 145, - -130, -130, -130, -130, 1638, -130, 132, 180, -30, -130, - 131, -130, 160, 130, 186, 162, -130, 163, -130, 169, - 1311, -130, -130, 171, 192, 170, -130, 165, -130, 168, - 1638, 148, 188, 164, -130, 143, -130, -130, 2953, 204, - -130, 167, -130, -130, 227, -130, 2953, 241, 157, -130, - 185, -130, 184, 248, 2953, -130, 181, 178, -130, 127, - -130, -130, -130, 240, -130, -130, 322, -130, 224, 189, - -130, 177, 179, -130, 1311, -130, -130, 172, 182, -130, - -130, 2953, 296, -130, -130, 2953, 301, -130, -130, -130, - 2953, -130, 194, 154, 195, -130, 2, -130, -130, 1311, - -130, -130, -130, 6501, -130, 2834, 443, 2834, 462, 2834, - 415, 2834, -67, 2834, 30, 4989, 2953, 3670, -130, -130, - 256, -130, -26, -130, 2834, -8, 2834, 2953, 1, -7, - 3072, -130, 3670, -57, -130, 3670, -54, -130, -91, -22, - -22, 5871, -44, -130, 5871, 23, -130, -130, -130, 38, - 1523, 1538, 14, 70, 44, -130, 24, -130, 31, 76, - 51, -130, 37, -130, 5, 1287, 1259, -19, 10, -130, - -6, -130, -13, 16, -130, 3, -130, -130, 332, -130, - -130, 290, 273, -130, -130, 5997, -130, -130, -130, 2953, - -130, -130, 321, 4268, 254, 79, -130, 4506, -130, -130, - 3072, -130, -130, -130, -130, -130, -32, 294, -130, -130, - 3789, -130, -24, -130, -130, -130, 491, -130, -130, -130, - -130, 340, 3072, -130, -130, 358, -130, -130, -130, -130, - -130, 3072, -130, 2834, -130, 257, 255, -130, -130, -130, - -130, 239, -130, 570, 1235, -130, -130, -130, -130, -65, - -130, 5241, -71, -130, -130, -52, -130, -130, 3310, -130, - 396, -130, -130, 1007, -130, -130, 941, -130, -130, -130, - 1111, 1638, -56, 0, -23, -130, -42, -130, 1638, 9, - 45, -130, 33, -130, 12, 5871, -2, -130, -130, 211, - -27, -130, 5493, -130, -130, -130, 4989, -130, -130, -130, - -31, -130, 56, -130, -130, -130, 5367, -51, -130, 187, - -130, -130, -61, -130, -130, 200, -130, 773, -130, 5115, - -130, -130, -130, 700, -130, -130, -130, 123, -130, 835, - -130, -130, -38, -3, -9, -12, 331, -46, -47, -10, - -130, -130, -130, -130, -130, -130, -130, 346, -130, 21, - 1638, 6, 52, 27, -130, 8, -130, 344, -130, -130, - -130, 32, -130, -130, 811, 311, -130, 220, 4, 546, - -130, 218, -130, -130, -130, -130, -130, -130, -130, -130, - -130, -130, -130, 333, -130, -130, 4744, 222, -130, -130, - -130, -130, -33, 2953, -130, -130, -130, -130, -130, 6627, - 11, 19, -130, 265, 28, 295, -130, -130, -130, -130, - -130, 2953, -130, -130, -130, -130, -20, -28, 210, 50, - 36, -130, 55, 26, -130, 34, -130, 53, 811, 361, - 212, 696, 490, 22, 1883, 217, -130, 29, 1883, 213, - -130, -130, 2595, -130, -130, -130, 2715, -130, -130, 352, - -130, 4744, 536, -5, 191, -130, 315, -130, -130, -130, - -130, -1, 633, 335, 226, 575, 329, 47, -130, 4744, - 524, 330, -130, 811, 225, 320, -130, 1011, 49, 41, - 39, -17, 693, 316, 25, 911, 46, 669, 308, 69, - -130, 233, -130, -130, -130, 1883, 4863, -130, 3432, 35, - 207, -130, -130, -25, -130, -130, 1883, 720, 223, 1883, - -130, 405, -130, -130, -130, 436, -130, 244, -130, -130, - -130, -130, -130, -130, 582, 7, 291, 260, -130, -29, - -130, -130, 696, 237, -130, -130, + 430, 3137, 359, 14, -134, 2520, 182, 21, 252, -134, + -134, -74, -134, -134, 22, -23, -56, 498, -134, 265, + -134, -68, 609, -134, 23, -134, -134, -67, -134, 1527, + -134, 30, -15, 504, -134, 358, -134, -134, -134, -134, + -134, 545, 369, 493, -134, 1248, -134, 2891, -134, -134, + -134, -134, 1045, 1144, -134, -134, 6158, 3878, 4619, 2891, + 2891, -134, 2152, 2891, -134, -134, -134, -134, -134, 2891, + 2891, -134, -134, -134, -134, -134, -134, -134, -134, 3137, + -134, 2891, -134, 2891, 2891, 3383, -134, -134, -134, 0, + -134, 2891, 2891, -134, -134, 227, 426, -134, -134, 2891, + -134, -134, -134, -134, 419, -134, 3506, -134, 59, -134, + -134, 6808, 45, -134, 391, -134, -134, -134, -10, -134, + 87, 46, 6, -134, -134, 268, -134, -134, -134, -134, + 491, -134, 342, 326, -134, -134, -134, 1330, 94, 49, + 573, -134, 321, -134, 1560, 1402, 267, -134, 66, 70, + 434, 68, 3014, -134, 69, 3014, 73, -134, 71, 74, + 4250, -134, -134, -134, 1194, 222, -134, -134, -134, -134, + 4373, -134, 81, -134, 86, -134, -134, 2891, 478, 2891, + -134, -134, -134, -134, 593, 2891, 2274, -134, -134, 2891, + -134, -134, -134, 408, 2891, 2891, 2891, 190, 214, 221, + 435, 209, 2396, -134, -134, 122, 5118, 3014, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + 220, 3014, -134, -134, 5118, 3014, -134, 293, -134, 492, + 137, 3260, 129, 131, -134, 3014, 4001, -134, 3014, -134, + -134, -134, -134, 2274, -134, 318, 2274, -134, -134, 345, + 2891, 139, 2891, 144, 3014, 2891, 146, 3014, -134, 142, + 2891, 152, 2891, 147, -134, -134, -134, -134, 6548, -134, + -134, 149, 936, -134, -134, 158, -134, 1664, -134, 167, + 168, -134, 169, 170, 1352, 5768, 171, 2274, -134, 173, + -134, -134, -134, 3014, -134, -134, 1664, -134, -134, 180, + 178, -134, 179, -134, -134, -134, 189, -134, 199, -134, + -134, 206, -134, 181, 202, 3014, -134, -134, -134, 5768, + -134, -134, 1456, 187, 185, -134, -134, 177, -134, 176, + 192, -134, 191, 1664, -134, -134, 174, -134, 1664, -134, + -134, -134, -134, -134, 3014, -134, -134, 3014, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + 226, -134, -134, 228, -134, -134, -134, 6418, 164, 161, + 3014, 276, 323, -134, -134, 4742, 162, 151, 201, 1642, + 1169, 145, -134, -134, 1163, 140, 3137, -134, 3014, 138, + 136, 3014, 130, -134, -134, 3014, -134, -134, 238, -134, + -134, 3137, 3014, 3137, -134, 215, -134, -134, -134, 121, + 246, 113, -134, 344, -134, 1456, 111, 100, -134, 97, + -134, -134, 3137, -134, -134, -134, 3014, 78, 3014, 61, + -134, -134, 120, 82, -134, 83, 361, -134, -134, 1352, + 120, 65, -134, 63, 3014, 18, 3014, 7, -134, -134, + -134, -134, -134, 11, -134, -134, 200, -134, 907, -134, + -134, 1456, -134, 733, -134, -134, 26, 1664, -134, -5, + 24, -134, -134, -3, -134, -134, 120, 39, 35, -134, + 32, 1352, -134, -61, 10, 1908, 6028, -134, -22, -134, + 6028, 5898, -134, -12, 5768, -134, 5768, 5768, -19, -134, + -134, -134, -134, 1664, -134, -49, 120, -26, -134, -50, + -134, -32, -60, -7, -33, -134, -54, -134, -31, 1352, + -134, -134, -53, 120, -24, -134, -46, -134, -25, 1664, + -47, 120, -18, -134, -40, -134, -134, 3014, 272, -134, + 8, -134, -134, 248, -134, 3014, 320, -4, -134, 28, + -134, 29, 319, 3014, -134, 33, 34, -134, -14, -134, + -134, -134, 232, -134, -134, 441, -134, 374, 36, -134, + 13, 19, -134, 1219, -134, -134, -2, 27, -134, -134, + 3014, 328, -134, -134, 3014, 217, -134, -134, -134, 3014, + -134, 120, 50, 62, -134, 55, -134, -134, 1345, -134, + -134, -134, 6808, -134, 2891, 609, 2891, 549, 2891, 2274, + 365, -134, 2891, 15, 2891, 89, 5118, 3014, 3260, -134, + -134, 317, -134, 58, -134, 3014, 2891, 90, 3137, -134, + 64, 2891, 98, 2891, 72, 3260, 76, -134, 3260, 84, + -134, 9, 88, 91, 6028, 92, -134, 6028, 93, -134, + -134, -134, 96, 1664, 1664, 102, 112, 105, -134, 104, + -134, 107, 119, 108, -134, 109, -134, 110, 1664, 1664, + 116, 123, -134, 118, -134, 124, 125, -134, 126, -134, + -134, 418, -134, -134, 298, 302, -134, -134, 6288, -134, + -134, -134, 3014, -134, -134, 327, 4127, 184, 160, -134, + 4496, -134, -134, 3137, -134, -134, -134, -134, -134, 154, + 294, -134, -134, 3752, -134, 159, -134, -134, -134, 483, + -134, -134, -134, -134, 403, 3137, -134, -134, 355, -134, + -134, -134, -134, -134, 3137, -134, 2891, -134, 197, 195, + -134, -134, -134, -134, 348, -134, 557, 1531, -134, -134, + -134, -134, 175, -134, 5638, 175, -134, -134, 172, -134, + -134, 3629, -134, 429, -134, -134, 1101, -134, -134, 979, + -134, -134, -134, 961, 1664, 165, 166, 157, -134, 163, + -134, 1664, 156, 155, -134, 153, -134, 150, 6028, 148, + -134, -134, 307, -112, -134, 5378, -134, -134, -134, 5118, + -134, -134, -134, 141, -134, 143, -134, -134, -134, 5508, + 20, -134, 303, -134, -134, 16, -134, -134, 315, -134, + 857, -134, 5248, -134, -134, -134, 803, -134, -134, -134, + 134, -134, 936, -134, -134, 135, 133, 203, 132, 216, + 211, 407, 127, 580, 128, -134, -134, 2520, -134, -134, + -134, -134, -134, -134, -134, 347, -134, -134, 115, 1664, + 114, 117, 106, -134, 99, -134, -134, -134, 196, 101, + 2768, -134, -134, -134, -134, 2644, -134, -134, 103, 1786, + -134, 95, -134, 414, 85, -134, -134, -134, 75, -134, + -134, 651, 390, -134, 251, 79, 713, -134, 235, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, 339, -134, -134, 4988, 277, -134, -134, -134, -134, + 60, 3014, -134, -134, -134, -134, -134, 6678, 80, 77, + -134, 300, 67, 364, 240, -134, 231, -134, -134, -134, + -134, 3014, -134, -134, -134, -134, 409, -134, 705, 205, + 51, 53, 218, 56, 47, -134, 54, 44, -134, 17, + -134, 41, 632, 349, 204, 607, 351, 43, 1786, 207, + -134, 1786, 193, -134, -134, 346, -134, 4988, 525, 42, + 188, -134, 353, -134, -134, -134, -134, 37, 832, 400, + 292, 713, 335, 57, -134, 4988, 531, 256, -8, 337, + -134, -134, -134, 363, -134, 875, 52, 48, 40, -11, + 832, 389, 31, 806, 38, 832, 410, 25, -134, 224, + -134, -134, -134, -134, -134, 1786, 4865, -134, 3878, 5, + 308, -134, -134, 2, -134, -134, 1786, 1040, 230, 2030, + -134, 396, -134, -134, -134, 439, -134, 250, -134, -134, + -134, -134, 2030, -134, -134, -134, -134, 713, 4, 379, + 208, -134, -30, -134, -134, 600, 186, -134, -134, - -227, 229, 225, 224, 237, 781, -227, -227, -227, -227, - -227, -227, -227, -227, -227, -227, -227, 97, -227, -227, - -227, 67, -227, -227, -227, -227, -227, -227, -227, -227, - -227, -227, 101, -227, -227, -227, -227, -227, -227, -227, - 71, -227, -227, -227, 216, 559, -227, -227, -227, -227, - 211, 209, -227, -227, 255, 177, 176, 567, 571, -227, - 590, 776, -227, -227, -227, -227, -227, 603, 611, -227, - -227, -227, -227, -227, -227, -227, -227, 353, -227, 622, - -227, 545, 627, 348, -227, -227, -227, -227, 336, 363, - -227, -227, -227, -227, -227, -227, 356, -227, -227, -227, - -227, -227, -227, 335, -227, -227, 0, -227, 145, -227, - -227, 201, -227, -227, -227, -227, -227, -227, -227, -227, - -227, -227, -227, -227, -227, -227, -227, -227, 155, -227, - -227, -227, -227, 70, -227, -227, -227, -227, -227, -227, - 204, 203, 154, 214, -227, -227, 138, -227, 119, -227, - -227, 98, 57, -227, -227, -227, 43, -227, -227, 278, - 51, -227, -227, -227, -135, 8, -227, -104, -64, -91, - -227, -227, 599, -227, 500, -227, -227, -227, -227, -227, - 525, -227, -227, 529, -227, -227, -227, -227, 527, 522, - 524, -227, -227, -227, -227, 499, -227, 469, -227, -227, - -227, 45, -227, -227, 268, 53, -227, -227, -34, 157, - -227, -227, -227, -227, 280, -227, -227, 61, -227, -227, - -227, 265, 260, 5, 663, -227, 21, 41, -227, 470, - -227, -227, -227, 156, 106, -227, -227, -227, -227, -227, - -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, - -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, - -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, - -227, -227, -227, -227, -227, -227, -227, -227, -227, 161, - 128, -227, -227, -227, 133, -227, 78, -227, -227, -227, - 76, 88, -227, 87, -227, -227, -227, -227, 752, -227, - -227, 762, -227, -227, -227, -227, 55, -227, -227, 376, - -227, -227, 105, -19, -43, -49, -227, -227, -227, 64, - -227, -227, -227, -227, -227, -227, -227, -227, 73, -227, - -227, -227, 434, -227, -227, 340, 65, 104, -227, -227, - -227, -227, -227, -227, -227, -227, 466, -227, -227, 136, - -227, 534, -227, -227, -227, -227, -227, 121, -227, -227, - 125, -227, -227, -227, -227, -227, -227, -227, -227, -227, - -227, -227, -227, 425, -227, 432, 103, -227, -227, 109, - -227, 162, -227, -227, 166, -227, -227, -227, 132, -227, - -227, 117, -227, 69, -227, -227, 659, -227, -227, -227, - -87, 317, -227, -227, -227, 313, -227, 438, -227, 147, - -227, -227, 144, -227, 207, -227, 12, -227, -227, -227, - 200, -227, 447, 62, 455, -227, -227, 212, -227, -227, - 74, -227, 60, -227, -227, -227, 299, 75, 17, -227, - 44, -227, -227, 457, -227, -227, -227, 134, -227, 135, - -227, 422, -227, 58, 49, -227, -227, -227, -227, -227, - 419, 56, 48, -227, -227, 227, -227, 190, -227, 266, - -227, -227, -227, -41, -227, -227, -227, 86, -227, 234, - -227, -227, 399, -227, 238, -227, -227, -94, 294, -227, - -227, -88, -227, -227, -227, -227, -227, 47, -227, 46, - -227, -227, 490, -227, -100, -227, 316, 50, -227, -227, - -227, 179, 226, -227, -227, 228, -227, 231, 241, -227, - -227, -227, -227, -227, 222, -227, -227, 72, -172, -62, - -75, -227, -227, -227, 68, -66, -65, -67, -227, -227, - 347, -227, -227, -227, 63, -68, -71, -101, -227, -111, - 349, -227, 38, -105, -117, -119, -227, -227, 9, -227, - 273, -227, 288, -227, 54, -227, 7, -227, -227, -227, - -227, -227, -110, -227, -1, -227, -115, -227, -227, -227, - -227, -76, -227, -227, -53, -227, 77, -227, -227, -90, - -227, -227, 59, -227, 304, -227, -227, -227, 52, -227, - -227, 42, -227, 298, -227, 40, -227, 300, -227, -227, - 16, -227, 39, 10, -227, -227, 99, -227, -227, 360, - -227, -227, -227, 139, -227, 633, 80, 634, 79, 354, - -227, 668, -227, 680, -227, 170, 110, 150, -227, -227, - -227, -227, -227, -227, 685, -227, 686, 102, -227, -227, - 334, -227, 163, -227, -227, 164, -227, -227, 81, -9, - 83, 178, 85, -227, 165, 82, -227, -227, -227, -227, - 292, 319, -227, 96, -33, -40, -39, -227, -227, 90, - -54, -45, -47, -227, -51, 326, 329, -227, -52, -57, - -61, -227, -227, -10, -23, -28, -227, -227, 89, -227, - -227, -227, -227, -227, -227, 385, -227, -227, -227, 91, - -227, -227, -227, 84, -227, 94, -227, 198, -227, -227, - 397, -227, -227, -227, -227, -227, -227, -227, -227, -227, - 325, -227, -227, -227, -227, -227, 93, -227, -227, -227, - -227, -227, 402, -227, -227, 66, -227, -227, -227, -227, - -227, 400, -227, 391, -227, 1, -13, -227, -227, -227, - -227, 281, -227, 277, 338, -227, -227, -227, -227, -227, - -227, 195, -155, -227, -227, -153, -227, -227, -8, -227, - 492, -227, -227, 186, -227, -227, 321, -227, -227, -227, - 310, 296, -227, -24, -156, -154, -157, -227, 289, -227, - -162, -160, -159, -227, -161, 174, -158, -227, -227, -227, - -227, -227, 263, -227, -227, -227, 167, -227, -227, -227, - -170, -227, -227, -227, -227, -227, 302, -227, -227, 100, - -227, -227, -227, -227, -227, -227, -227, 308, -227, 352, - -227, -227, -227, 282, -227, -227, -227, 275, -227, 247, - -227, -227, 342, -227, 153, 245, -227, 526, -26, -227, - -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, - 344, -227, -35, -180, -182, -177, -227, -20, -227, -227, - -227, -227, -227, -227, -227, 33, -227, -227, -227, 4, - -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, - -227, -227, -227, 26, -227, 14, 973, 22, -227, -227, - -227, -227, -4, -5, -227, -227, -227, 173, -227, 6, - -227, -227, -227, -227, -227, -22, -227, -227, -227, -227, - -227, -60, -227, -227, -227, -227, -227, -227, -227, -227, - -227, -227, -227, -227, -227, -227, -227, -227, 28, 24, - -227, 25, -227, -227, 669, -227, -227, -227, 679, 11, - -227, -227, 817, -227, -227, -227, 782, -227, -227, 37, - 32, 827, -11, 23, 36, -227, -30, -227, -227, -227, - -227, -227, 2, -16, -227, -14, -227, -227, -25, 803, - -55, -18, -227, -6, -15, -12, -227, 267, -227, -227, - -227, -227, 29, 27, -227, 210, -227, 35, 34, -227, - -227, 20, -227, -227, 196, 690, 853, -227, 725, 18, - -227, -227, -227, 15, -227, -227, 395, 19, 220, 591, - -227, 13, -227, -227, -227, 3, -227, 197, -227, -227, - -227, -227, -227, -227, 30, -227, 31, -7, -227, -227, - -227, -227, -2, -3, -227, -227 + -238, 221, 177, 179, 208, 796, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -53, -238, -238, + -238, -238, -96, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -44, -238, -238, -238, -238, -238, -238, + -238, -89, -238, -238, -238, 160, -238, 691, -238, -238, + -238, -238, 166, 168, -238, -238, 292, 150, 159, 644, + 635, -238, 632, 576, -238, -238, -238, -238, -238, 565, + 554, -238, -238, -238, -238, -238, -238, -238, -238, 520, + -238, 533, -238, 593, 675, 492, -238, -238, -238, -238, + -238, 512, 498, -238, -238, -238, -238, -238, -238, 472, + -238, -238, -238, -238, -238, -238, 462, -238, -238, -152, + -238, -11, -238, -238, 215, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, 34, -238, -238, -238, -238, -88, -238, -238, + -238, -238, -238, -238, 234, 240, 40, 255, -238, -238, + 211, -238, -16, -238, -238, -7, 41, -238, -238, -238, + 6, -238, -238, -238, 351, 72, -238, -238, -238, -114, + 19, -238, -95, -72, -69, -238, -238, 415, -238, 529, + -238, -238, -238, -238, -238, 524, 735, -238, -238, 460, + -238, -238, -238, -238, 404, 391, 375, -238, -238, -238, + 63, -238, 481, -238, -238, -238, 258, 62, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, 64, -238, -238, 250, 66, -238, -238, -238, 69, + -238, 67, -238, -238, -238, 68, 70, -238, 71, -238, + -238, -238, -238, 788, -238, -238, 799, -238, -238, -238, + 373, -238, 541, -238, 76, 354, -238, 77, -238, -238, + 361, -238, 362, -238, -238, -238, -238, 261, 101, -238, + -238, 106, 201, -238, -238, -238, -238, 313, -238, -238, + 74, -238, -238, -238, 307, 304, 84, 806, -238, 83, + -238, -238, -238, 90, -238, -238, 461, -238, -238, 119, + -9, -8, -14, -238, -238, -238, 92, -238, -238, -238, + -238, -238, -238, -238, -238, 108, -238, -238, -238, 505, + -238, -238, 300, 95, 96, -238, -238, -238, -238, -238, + -238, -238, -238, 448, -238, -238, 136, -238, 653, -238, + -238, -238, -238, -238, 118, -238, -238, 123, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + 183, -238, -238, 184, -238, -238, -238, 143, -238, -238, + 131, -238, 187, -238, -238, 652, -238, -238, -238, 20, + 337, -238, -238, -238, 283, -238, 348, -238, 140, -238, + -238, 141, -238, 214, -238, 122, -238, -238, -238, 205, + -238, 494, 117, 504, -238, -238, 219, -238, -238, 120, + -238, 91, -238, -238, -238, 302, 116, 89, -238, 85, + -238, -238, 456, -238, -238, -238, 171, -238, 172, -238, + 239, -238, 103, 82, -238, -238, -238, -238, -238, 367, + 100, 82, -238, -238, 175, -238, 188, -238, 260, -238, + -238, -238, 7, -238, -238, -238, 135, -238, 226, -238, + -238, 359, -238, 248, -238, -238, -57, 296, -238, -238, + -52, -238, -238, -238, -238, -238, 75, -238, 50, -238, + -238, 407, -238, -66, -238, 262, 81, -238, -238, -238, + 257, 246, -238, -238, 244, -238, 242, 233, -238, -238, + -238, -238, -238, 237, -238, -238, 59, -68, -70, -74, + -238, -238, -238, 58, -73, -75, -79, -238, -238, 267, + -238, -238, -238, 55, -80, -82, -85, -238, -93, 329, + -238, 47, -91, -97, -99, -238, -238, 31, -238, 206, + -238, 272, -238, 79, -238, 18, -238, -238, -238, -238, + -238, -103, -238, 17, -238, -101, -238, -238, -238, -238, + -76, -238, -238, -77, -238, 65, -238, -238, -115, -238, + -238, 42, -238, 339, -238, -238, -238, 38, -238, -238, + -1, -238, 270, -238, -5, -238, 266, -238, -238, -13, + -238, 5, -22, -238, -238, -33, -238, -238, 381, -238, + -238, -238, 1, -238, 612, -64, 621, -62, 459, 983, + -238, -238, 648, -238, 682, -238, 186, -30, 164, -238, + -238, -238, -238, -238, -238, -37, 664, -238, 323, -238, + -238, 563, -238, 590, -238, 153, -238, -238, 152, -238, + -238, -174, -176, -178, 162, -184, -238, 158, -187, -238, + -238, -238, -238, 290, 288, -238, -40, -175, -177, -179, + -238, -238, -45, -180, -183, -186, -238, -194, 286, 279, + -238, -190, -200, -202, -238, -238, -193, -203, -205, -238, + -238, -86, -238, -238, -238, -238, -238, -238, 353, -238, + -238, -238, -71, -238, -238, -238, -67, -238, -63, -238, + 142, -238, -238, 389, -238, -238, -238, -238, -238, -238, + -238, -238, -238, 253, -238, -238, -238, -238, -238, -38, + -238, -238, -238, -238, -238, 454, -238, -238, -55, -238, + -238, -238, -238, -238, 398, -238, 399, -238, 37, 39, + -238, -238, -238, -238, 331, -238, 319, 327, -238, -238, + -238, -238, -238, -238, 216, -155, -238, -238, -153, -238, + -238, -4, -238, 458, -238, -238, 222, -238, -238, 356, + -238, -238, -238, 349, 345, -238, 26, -104, -102, -105, + -238, 341, -238, -98, -106, -100, -238, -110, 220, -109, + -238, -238, -238, -238, -238, 309, -238, -238, -238, 228, + -238, -238, -238, -107, -238, -238, -238, -238, -238, 320, + -238, -238, 60, -238, -238, -238, -238, -238, -238, -238, + 265, -238, 363, -238, -238, -238, 294, -238, -238, -238, + 254, -238, 252, -238, -238, -238, -238, 343, -238, 212, + 209, 114, 400, 109, -238, -238, -238, 857, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, 298, + -238, 107, -24, -23, -25, -238, -238, -238, 151, -238, + 853, -238, -238, -238, -238, 820, -238, -238, -238, 686, + -238, -238, -238, 154, 147, -238, -238, -238, -238, -238, + -238, 185, 163, -238, -238, -238, 173, -238, 170, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, 139, 770, 149, -238, -238, -238, -238, + 130, 127, -238, -238, -238, 224, -238, 102, -238, -238, + -238, -238, -238, 78, 138, -238, 360, -238, -238, -238, + -238, 73, -238, -238, -238, -238, -238, -238, 121, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, 113, 88, -238, 112, 115, -238, 729, -238, + -238, 640, 111, -238, -238, -238, 80, 922, 43, 86, + 87, -238, 53, -238, -238, -238, -238, -238, 61, 33, + -238, 51, 54, -238, 30, 896, -10, 45, 12, -238, + -238, -238, -238, 35, -238, 232, -238, -238, -238, -238, + 28, 4, -238, 207, -238, 24, -3, -238, -238, 23, + -238, -238, -238, -238, 204, 657, 881, -238, 762, 15, + -238, -238, -238, 13, -238, -238, 530, 22, 223, 804, + -238, 16, -238, -238, -238, -41, -238, 14, -238, -238, + -238, -238, 745, -238, -238, -238, -238, 3, -238, 0, + -6, -238, -238, -238, -238, -12, 137, -238, -238 }; const short QmlJSGrammar::action_info [] = { - 650, 917, 939, 644, 107, 654, 793, 224, 657, 962, - 506, 107, 508, 521, 937, 171, 633, 777, -178, 306, - 995, 1050, 1049, 991, 976, 489, -176, 936, 670, 962, - 729, 625, 877, 775, 890, 931, 643, 983, 733, 775, - 888, 631, 489, 688, 107, 1011, 508, 1005, -92, 693, - 107, 496, 837, 1008, 988, 521, 1003, 954, 870, 224, - 496, 107, 843, 962, 829, 171, 942, 945, 872, 962, - 885, 800, 943, 775, 944, 671, 673, 224, 107, 107, - 521, 171, 946, 224, 888, 107, 816, 347, 306, 436, - 496, 949, 224, 679, 171, 201, 390, 407, 391, 224, - 379, 373, 414, 347, 355, 412, 465, 195, 349, 502, - 335, 447, 224, 224, 306, 348, 107, 409, 341, 306, - 496, 506, 467, -546, 306, 489, 491, 469, 443, 475, - 334, 443, 224, 443, 443, 566, 451, 373, 449, 195, - 172, 558, 107, 473, 753, 197, 644, 396, 171, 601, - 407, 625, 1055, -544, 332, 306, 312, 291, 107, 297, - 633, 164, -115, -505, 631, 224, 298, 347, 306, 309, - 171, 306, 306, 224, 214, 102, 172, 171, 605, 211, - 295, 107, -110, 562, 580, 581, 574, 224, 171, 574, - 574, 570, 534, 224, 527, 224, 107, 533, 107, 224, - 496, 224, 197, 619, 107, 489, 540, 508, 839, 592, - 552, 524, 201, 473, 594, 958, 473, 201, 940, 812, - 171, 826, 171, 204, 0, 958, -180, 888, 375, 201, - 591, 417, 376, 544, 598, 888, 0, 951, 88, -548, - 521, 888, 646, 279, 592, 889, 647, 584, 201, 201, - 89, 985, 827, 460, 202, 200, 0, 840, 577, 202, - 200, 202, 200, 280, 201, 1021, 560, 941, 813, 202, - 200, 393, 88, 925, 201, 959, 202, 200, 301, 278, - 709, 202, 200, 201, 89, 202, 200, 88, 202, 200, - 202, 200, 202, 200, 94, 302, 202, 200, 705, 89, - 202, 200, 730, 568, 201, 578, 95, 202, 200, 201, - 524, -115, 725, 418, 641, 88, 1026, 1027, 202, 200, - 202, 200, 926, 202, 200, 202, 200, 89, 420, 715, - 201, 188, -180, 189, 1026, 1027, 953, 427, 886, -180, - 905, 886, 763, 927, 190, 981, 886, 706, 407, 306, - 764, 720, 928, 1014, 202, 200, 731, 997, 603, 970, - 886, 947, -223, 607, 929, 886, 407, 0, 188, -180, - 189, 443, -549, -224, 881, 201, 201, 0, 279, 716, - 962, 190, 306, 202, 200, 202, 200, 883, 233, 97, - 883, 886, 202, 200, 883, 883, 202, 200, 280, 882, - 655, 0, 882, 97, 1052, 0, 882, 882, 234, 883, - 883, 188, 97, 189, 883, 202, 200, -223, 485, 211, - 0, 882, 882, 883, 190, 283, 882, 0, -224, 202, - 200, 202, 200, -388, 0, 882, 98, 0, -388, 0, - 883, 188, 99, 189, 188, 0, 189, 0, 742, 743, - 98, 233, 882, 0, 190, 1045, 99, 190, 0, 98, - 395, 175, 176, 175, 176, 99, 742, 743, 202, 200, - 0, 234, 0, 1015, 0, 763, 175, 176, 0, 62, - 77, 175, 176, 764, 0, -388, 181, 182, 0, 177, - 178, 177, 178, 233, 0, 184, 790, 953, 185, 233, - 186, 485, 211, 635, 177, 178, 233, 0, 0, 177, - 178, 0, 0, 234, 0, 286, 0, 0, 1044, 234, - 0, 652, 0, 636, 0, 637, 234, 0, 286, 6, - 5, 4, 1, 3, 2, 0, 181, 182, 0, 233, - 0, 0, 62, 77, 183, 184, 0, 0, 185, 0, - 186, 233, 0, 202, 200, 0, 0, 0, -86, 234, - 0, 652, 0, 0, 0, 0, 0, 403, 404, 0, - -86, 234, 0, 652, 181, 182, 894, 0, 0, 484, - 770, 0, 183, 184, 62, 77, 185, 0, 186, 0, - 62, 77, 485, 211, 62, 77, 0, 62, 77, 0, - 0, 0, 0, 0, 771, 894, 0, 0, 0, 0, - 0, 0, 894, 0, 0, 0, 897, 901, 898, 0, - 181, 182, 0, 0, 0, 0, 0, 0, 0, 184, - 62, 77, 185, 0, 186, 772, 0, 0, 0, 0, - 0, 0, 62, 77, 0, 897, 901, 898, 888, 153, - 892, 899, 897, 901, 898, 0, 0, 0, 403, 404, - 895, 893, 900, 894, 0, 0, 0, 0, 0, 0, - 484, 0, 0, 896, 0, 0, 0, 0, 0, 892, - 899, 0, 0, 0, 888, 0, 892, 899, 0, 895, - 893, 900, 0, 0, 0, 0, 895, 893, 900, 894, - 0, 0, 896, 897, 901, 898, 0, 0, 888, 896, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 894, 0, 0, 894, 0, 0, 0, - 53, 0, 0, 0, 0, 0, 0, 892, 899, 897, - 901, 898, 0, 0, 0, 0, 0, 895, 893, 900, - 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 896, 0, 0, 897, 901, 898, 897, 901, 898, 0, - 69, 73, 70, 892, 899, 0, 0, 53, 0, 0, - 0, 0, 0, 895, 893, 900, 0, 0, 0, 0, - 69, 73, 70, 0, 0, 0, 896, 892, 899, 0, - 892, 899, 74, 53, 49, 71, 0, 895, 893, 900, - 895, 893, 900, 43, 65, 52, 72, 69, 73, 70, - 896, 0, 74, 896, 49, 71, 888, 66, 0, 0, - 0, 0, 0, 43, 65, 52, 72, 0, 0, 0, - 0, 894, 0, 69, 73, 70, 0, 66, 0, 74, - 0, 49, 71, 0, 0, 0, 0, 0, 0, 0, - 43, 65, 52, 72, 0, 53, 0, 0, 0, 0, - 53, 0, 0, 0, 66, 74, 0, 49, 71, 0, - 0, 897, 901, 898, 0, 0, 43, 65, 52, 72, - 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 0, 0, 0, 0, 69, 73, 70, 0, 0, - 69, 73, 70, 0, 0, 892, 899, 0, 0, 0, - 0, 0, 0, 0, 0, 895, 893, 900, 0, 0, - 0, 69, 73, 70, 0, 0, 0, 74, 896, 49, - 71, 999, 74, 0, 49, 71, 0, 0, 43, 65, - 52, 72, 0, 43, 65, 52, 72, 0, 0, 0, - 0, 0, 66, 74, 0, 49, 71, 66, 0, 0, - 0, 53, 0, 0, 43, 65, 52, 72, 489, 0, - 0, 897, 901, 898, 0, 0, 0, 0, 66, 53, - 883, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 882, 0, 0, 0, 0, 0, 0, 0, - 0, 69, 73, 70, 0, 892, 899, 0, 0, 0, - 0, 0, 0, 0, 0, 895, 893, 900, 0, 69, - 73, 70, 0, 0, 0, 0, 0, 53, 896, 0, - 0, 999, 0, 74, 791, 49, 71, 0, 0, 0, - 0, 0, 0, 0, 43, 65, 52, 72, 0, 0, - 506, 74, 0, 49, 71, 0, 0, 0, 66, 0, - 0, 0, 43, 65, 52, 72, 0, 69, 73, 70, - 0, 897, 901, 898, 0, 0, 66, 0, 53, 0, - 883, 0, 0, 0, 0, 670, 0, 0, 0, 0, - 0, 0, 882, 53, 0, 0, 0, 0, 0, 74, - 489, 49, 71, 0, 0, 892, 899, 0, 0, 0, - 43, 65, 52, 72, 53, 895, 893, 900, 69, 73, - 70, 0, 0, 0, 66, 0, 0, 0, 896, 0, - 0, 53, 0, 69, 73, 70, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 202, 200, 0, - 74, 0, 49, 71, 69, 73, 70, 0, 0, 0, - 0, 43, 65, 52, 72, 74, 0, 49, 71, 0, - 0, 69, 73, 70, 0, 66, 43, 65, 52, 72, - 0, 0, 0, 0, 0, 0, 74, 0, 49, 71, - 66, 0, 53, 0, 0, 0, 0, 43, 65, 52, - 72, 0, 506, 74, 0, 49, 71, 0, 0, 0, - 0, 66, 0, 0, 43, 65, 52, 72, 0, 0, - 0, 0, 0, 0, 0, 202, 200, 0, 66, 0, - 0, 53, 69, 73, 70, 222, 223, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 53, 0, 0, 0, 826, - 0, 0, 0, 0, 74, 0, 49, 71, 0, 0, - 0, 69, 73, 70, 0, 43, 65, 52, 72, 53, - 0, 0, 0, 222, 223, 0, 0, 0, 0, 66, - 827, 0, 0, 0, 777, 69, 73, 70, 0, 0, - 0, 0, 0, 74, 0, 49, 71, 53, 0, 0, - 0, 222, 223, 0, 43, 65, 52, 72, 0, 69, - 73, 70, 0, 0, 0, 0, 0, 74, 66, 49, - 71, 53, 0, 0, 0, 222, 223, 0, 43, 65, - 52, 72, 0, 0, 0, 0, 221, 69, 73, 70, - 0, 74, 66, 49, 71, 0, 0, 0, 0, 0, - 0, 0, 43, 65, 52, 72, 0, 0, 0, 0, - 0, 69, 73, 70, 221, 0, 66, 0, 0, 74, - 0, 49, 71, 0, 0, 0, 0, 0, 0, 0, - 43, 65, 52, 72, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 74, 66, 49, 71, 0, 0, 0, - 0, 0, 0, 0, 43, 65, 52, 72, 53, 0, - 0, 0, 222, 223, 0, 0, 0, 0, 66, 0, - 0, 358, 0, 53, 0, 0, 0, 222, 223, 0, - 0, 359, 0, 0, 0, 360, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 362, 69, 73, - 70, 0, 0, 0, 0, 0, 0, 0, 363, 0, - 364, 94, 0, 69, 73, 70, 0, 0, 0, 365, - 0, 0, 366, 95, 0, 221, 0, 0, 367, 0, - 74, 0, 49, 71, 0, 369, 368, 0, 0, 0, - 221, 43, 65, 52, 72, 74, 0, 49, 71, 0, - 0, 0, 370, 358, 0, 66, 43, 65, 52, 72, - 0, 0, 0, 359, 0, 0, 0, 424, 0, 0, - 66, 0, 0, 0, 0, 0, 0, 361, 0, 362, - 0, 0, 0, 53, 0, 0, 0, 222, 223, 0, - 363, 0, 364, 94, 0, 0, 0, 0, 53, 0, - 0, 365, 222, 223, 366, 95, 0, 0, 0, 0, - 367, 0, 0, 0, 0, 0, 0, 369, 368, 0, - 0, 0, 0, 69, 73, 70, 0, 0, 0, 0, - 0, 0, 0, 0, 370, 0, 0, 0, 69, 73, - 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 221, 0, 0, 0, 0, 74, 0, 49, 71, 0, - 0, 0, 0, 0, 0, 221, 43, 65, 52, 72, - 74, 0, 49, 71, 0, 0, 0, 0, 0, 0, - 66, 43, 65, 52, 72, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 66, 0, 0, 53, 0, - 0, 0, 222, 223, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 69, 73, - 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, - 74, 0, 49, 71, 0, 0, 0, 0, 0, 0, - 0, 43, 65, 52, 72, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 66, 0, 0, 358, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, - 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 361, 0, 362, 0, 0, 417, 0, 0, - 0, 0, 0, 0, 0, 363, 0, 364, 94, 0, - 0, 0, 0, 0, 0, 0, 365, 0, 0, 366, - 95, 0, 0, 0, 0, 367, 0, 0, 0, 0, - 0, 0, 369, 368, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, + 317, 110, 543, 176, 829, 542, 549, 176, 110, 553, + 110, 176, 498, 536, -569, 561, 110, 505, -126, 1092, + 1093, 1098, 105, 634, 571, 533, 642, 644, -530, -132, + 579, 416, 663, 583, 583, 530, 900, 661, 583, 900, + 925, 590, 515, 589, 517, 1046, 925, 511, 1043, 323, + 603, 1049, 323, 482, 505, -107, 601, 500, 110, 1041, + 607, 482, 976, 498, 1024, 990, 766, 323, 484, 478, + 628, 987, 323, 989, 971, 1019, 900, 986, 998, 993, + 452, 476, 452, 983, -193, 981, 169, -195, 177, 282, + 634, 469, 988, 110, 955, 280, 292, 658, 644, 452, + 663, 290, 176, 405, 482, 567, 575, 482, 610, 927, + 909, 614, 515, 922, 452, 110, 661, 452, 317, 317, + 654, 642, 517, 460, 317, 517, 317, 317, 317, 900, + 323, 902, 850, 684, -571, 0, 856, 266, 667, 110, + 110, 458, 110, 176, 251, 177, 670, 498, 0, 530, + 530, 842, 889, 287, 292, 976, 176, 110, 1033, 110, + 273, 176, 980, 908, 686, 896, 176, 272, 364, 692, + 416, 0, 304, 317, 317, 505, 891, 326, 701, 364, + 0, 0, 364, 505, 517, 323, 706, 317, 0, 110, + 323, 110, 423, 270, 290, 307, 280, 1012, 400, 372, + 366, 421, 323, 474, 323, 530, 323, 349, 456, 352, + 505, 899, 110, -197, 418, 1001, 742, 0, 813, 925, + 176, 746, 282, 251, 254, 251, 984, 806, 251, 995, + 900, 91, 329, 426, 365, 358, 176, 0, 351, 593, + 251, 790, 738, 92, 255, 399, 251, 788, 498, 296, + 295, 296, 295, 683, 445, 91, 296, 295, 296, 295, + 296, 295, 91, 296, 295, 1002, 925, 92, 296, 295, + 97, 296, 295, 913, 92, 985, 926, 436, 252, 616, + 251, 788, 98, 733, 251, 296, 295, 296, 295, 296, + 295, 296, 295, 91, 296, 295, 1066, 1067, 296, 295, + 429, 251, 743, 296, 295, 92, 718, 925, 963, 722, + 914, 296, 295, 296, 295, 825, 1001, 1021, 427, 296, + 295, 655, -197, 852, 284, 251, 276, 44, 251, 586, + 296, 295, 44, 297, 569, 728, 251, 839, 402, 533, + 296, 295, 997, 277, 1066, 1067, 943, 194, -573, 195, + 251, 258, -241, 1006, 1054, 719, 744, 964, 997, -574, + 196, 323, 656, 416, 826, 285, 1061, 923, 840, -240, + 100, 194, 853, 195, 0, 652, 587, 0, 452, 923, + 600, 900, 577, 1017, 196, 729, 296, 295, 0, 0, + 612, 194, 0, 195, 601, 194, -413, 195, 296, 295, + 1035, -413, 296, 295, 196, 296, 295, -241, 196, 296, + 295, 416, 965, 0, 296, 295, 920, 101, 404, 923, + 923, 966, -132, 102, -240, -197, 296, 295, 920, 919, + 923, 100, 920, 967, 194, 323, 195, 991, 100, 923, + 923, 919, 296, 295, 918, 919, 1088, 196, -413, 251, + 206, 494, 304, 776, 206, -197, 494, 304, 0, 296, + 295, 0, 777, 0, 776, 0, 755, 756, 920, 920, + 207, 0, 0, 777, 207, 0, 0, 1055, 101, 920, + 0, 919, 919, 0, 102, 101, 920, 0, 920, 920, + 0, 102, 919, 920, 0, 1095, 180, 181, 206, 919, + 0, 919, 919, 0, 296, 295, 919, 206, 254, 180, + 181, 0, 1087, 646, 755, 756, 0, 0, 207, 206, + 261, 0, 412, 413, 182, 183, 0, 207, 255, 261, + 668, 803, 0, 647, 0, 648, 493, 182, 183, 207, + 206, 665, 0, 0, 64, 79, 206, 0, 64, 79, + 0, 6, 5, 4, 1, 3, 2, 0, 0, -100, + 207, 0, 665, 0, 0, -100, 207, 783, 665, 187, + 188, 0, 0, 187, 188, 0, 0, 0, 190, 494, + 304, 191, 190, 192, 0, 191, 0, 192, 0, 0, + 1028, 784, 64, 79, 0, 0, 0, 187, 188, 0, + 0, 64, 79, 0, 0, 189, 190, 64, 79, 191, + 932, 192, 0, 64, 79, 0, 0, 187, 188, 0, + 0, 0, 785, 0, 0, 189, 190, 180, 181, 191, + 932, 192, 0, 0, 64, 79, 157, 932, 0, 0, + 64, 79, 0, 0, 0, 412, 413, 925, 0, 0, + 1029, 939, 936, 0, 0, 182, 183, 0, 0, 493, + 0, 639, 932, 0, 0, 639, 925, 0, 0, 0, + 935, 939, 936, 0, 0, 0, 0, 935, 939, 936, + 0, 932, 0, 0, 0, 0, 930, 937, 929, 186, + 0, 0, 0, 0, 0, 0, 0, 933, 931, 938, + 0, 0, 935, 939, 936, 0, 930, 937, 929, 186, + 0, 0, 0, 930, 937, 929, 0, 933, 931, 938, + 925, 935, 939, 936, 933, 931, 938, 0, 0, 0, + 934, 0, 0, 0, 0, 932, 0, 934, 930, 937, + 929, 0, 0, 932, 0, 0, 0, 0, 0, 933, + 931, 938, 0, 0, 0, 0, 0, 930, 937, 929, + 0, 0, 934, 55, 0, 0, 0, 0, 933, 931, + 938, 0, 0, 0, 0, 935, 939, 936, 0, 0, + 0, 934, 0, 935, 939, 936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 71, 75, 72, 0, 0, 0, 0, + 0, 930, 937, 929, 0, 0, 0, 0, 0, 930, + 937, 929, 933, 931, 938, 0, 0, 0, 0, 0, + 933, 931, 938, 55, 0, 934, 1037, 76, 0, 51, + 73, 46, 0, 934, 0, 0, 0, 925, 0, 44, + 67, 54, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 932, 68, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 71, 75, 72, 935, 939, 936, 0, + 0, 0, 0, 0, 0, 920, 0, 55, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 919, 0, + 0, 0, 935, 939, 936, 1037, 0, 76, 0, 51, + 73, 46, 930, 937, 929, 0, 0, 0, 0, 44, + 67, 54, 74, 933, 931, 938, 0, 71, 75, 72, + 0, 0, 0, 68, 0, 0, 934, 55, 930, 937, + 929, 0, 0, 0, 0, 935, 939, 936, 0, 933, + 931, 938, 0, 0, 920, 0, 0, 0, 0, 0, + 0, 76, 934, 51, 73, 46, 55, 919, 0, 0, + 0, 0, 0, 44, 67, 54, 74, 71, 75, 72, + 0, 930, 937, 929, 0, 0, 0, 68, 0, 0, + 0, 55, 933, 931, 938, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 934, 71, 75, 72, 55, + 0, 76, 0, 51, 73, 46, 498, 0, 0, 0, + 0, 0, 0, 44, 67, 54, 74, 0, 0, 0, + 0, 71, 75, 72, 0, 0, 0, 68, 0, 0, + 76, 0, 51, 73, 46, 0, 0, 0, 0, 71, + 75, 72, 44, 67, 54, 74, 0, 0, 0, 0, + 0, 0, 0, 0, 515, 76, 68, 51, 73, 46, + 55, 0, 0, 0, 0, 55, 0, 44, 67, 54, + 74, 0, 683, 76, 0, 51, 73, 46, 0, 0, + 0, 68, 0, 0, 0, 44, 67, 54, 74, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, + 71, 75, 72, 0, 0, 71, 75, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, + 0, 55, 0, 0, 0, 0, 0, 0, 804, 0, + 0, 0, 0, 0, 76, 0, 51, 73, 46, 76, + 0, 51, 73, 46, 0, 0, 44, 67, 54, 74, + 0, 44, 67, 54, 74, 0, 0, 0, 0, 0, + 68, 71, 75, 72, 55, 68, 0, 0, 0, 0, + 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 55, 0, 0, 0, 315, 316, 55, + 0, 0, 0, 315, 316, 76, 0, 51, 73, 46, + 0, 0, 0, 0, 71, 75, 72, 44, 67, 54, + 74, 0, 0, 0, 55, 0, 0, 0, 315, 316, + 0, 68, 0, 71, 75, 72, 0, 0, 0, 71, + 75, 72, 0, 0, 0, 0, 0, 0, 76, 55, + 51, 73, 46, 315, 316, 0, 0, 0, 0, 0, + 44, 67, 54, 74, 71, 75, 72, 76, 0, 51, + 73, 46, 0, 76, 68, 51, 73, 46, 55, 44, + 67, 54, 74, 0, 0, 44, 67, 54, 74, 71, + 75, 72, 0, 68, 0, 0, 0, 0, 76, 68, + 51, 73, 46, 0, 0, 0, 0, 0, 0, 0, + 44, 67, 54, 74, 0, 0, 0, 0, 71, 75, + 72, 0, 0, 76, 68, 51, 73, 46, 0, 0, + 0, 0, 0, 375, 0, 44, 67, 54, 74, 0, + 0, 0, 0, 376, 0, 0, 0, 377, 0, 68, + 0, 515, 76, 0, 51, 73, 46, 378, 0, 379, + 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, + 380, 0, 381, 97, 0, 55, 0, 0, 68, 315, + 316, 382, 55, 0, 383, 98, 315, 316, 0, 0, + 384, 0, 0, 0, 0, 0, 0, 386, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 46, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 51, 50, 0, 0, 0, - 0, 0, 0, 53, 0, 0, 0, 54, 55, 0, - 56, 0, 0, 0, 0, 0, 0, 229, 0, 0, - 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 387, 71, 75, 72, 0, 0, + 0, 0, 71, 75, 72, 0, 0, 0, 0, 0, + 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, + 0, 51, 73, 46, 0, 0, 76, 0, 51, 73, + 46, 44, 67, 54, 74, 296, 295, 0, 44, 67, + 54, 74, 71, 75, 72, 68, 0, 0, 0, 0, + 0, 0, 68, 0, 0, 0, 55, 0, 0, 0, + 315, 316, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 76, 0, 51, 73, + 46, 0, 0, 0, 0, 0, 0, 0, 44, 67, + 54, 74, 0, 0, 0, 0, 71, 75, 72, 0, + 375, 0, 68, 0, 0, 0, 0, 0, 0, 0, + 376, 0, 0, 0, 433, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, + 76, 55, 51, 73, 46, 839, 0, 380, 0, 381, + 97, 0, 44, 67, 54, 74, 0, 0, 382, 0, + 0, 383, 98, 0, 0, 0, 68, 384, 0, 0, + 55, 0, 0, 0, 386, 385, 840, 0, 0, 0, + 790, 71, 75, 72, 0, 0, 0, 0, 0, 0, + 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 295, 0, 0, 0, 0, 0, + 71, 75, 72, 0, 0, 76, 0, 51, 73, 46, + 0, 0, 0, 0, 0, 375, 0, 44, 67, 54, + 74, 0, 0, 0, 0, 376, 0, 0, 0, 433, + 0, 68, 0, 0, 76, 0, 51, 73, 46, 378, + 0, 379, 0, 0, 426, 0, 44, 67, 54, 74, + 0, 0, 380, 0, 381, 97, 0, 0, 0, 0, + 68, 0, 0, 382, 55, 0, 383, 98, 315, 316, + 0, 0, 384, 0, 0, 0, 0, 0, 0, 386, + 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, + 0, 0, 0, 0, 71, 75, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 75, 69, 73, 70, 0, 78, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 80, - 48, 0, 0, 0, 0, 59, 0, 0, 0, 0, - 0, 0, 76, 44, 0, 74, 0, 49, 71, 62, - 77, 0, 0, 0, 0, 0, 43, 65, 52, 72, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, + 0, 0, 0, 314, 0, 0, 0, 0, 76, 0, + 51, 73, 46, 0, 0, 0, 0, 0, 0, 0, + 44, 67, 54, 74, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 0, 0, 0, 48, 49, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 52, + 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, + 56, 57, 0, 58, 0, 0, 0, 0, 0, 0, + 202, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 0, 0, 46, 47, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 50, 0, 0, 0, 0, 0, - 0, 53, 0, 0, 0, 54, 55, 0, 56, 0, - 0, 0, 0, 0, 0, 60, 0, 0, 0, 64, + 0, 0, 0, 0, 0, 77, 71, 75, 72, 0, + 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 65, 82, 50, 0, 0, 0, 0, 0, 61, + 0, 0, 0, 0, 0, 0, 0, 78, 45, 0, + 76, 0, 51, 73, 46, 64, 79, 0, 0, 0, + 0, 0, 44, 67, 54, 74, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, + 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 52, 0, 0, 0, 0, 0, 0, 55, 0, + 0, 0, 56, 57, 0, 58, 0, 0, 0, 0, + 0, 0, 62, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 77, 71, 75, + 72, 0, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 65, 82, 50, 0, 0, 0, 0, + 0, 61, 0, 0, 0, 0, 0, 0, 0, 78, + 45, 0, 76, 0, 51, 73, 46, 64, 79, 0, + 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 52, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 0, 56, 57, 0, 58, 0, 0, + 0, 0, 0, 0, 202, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75, 69, 73, 70, 0, 78, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 63, 80, 48, 0, - 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, - 76, 44, 0, 74, 0, 49, 71, 62, 77, 0, - 0, 0, 0, 0, 43, 65, 52, 72, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, - 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, - 0, 51, 50, 0, 0, 0, 0, 0, 0, 53, - 0, 0, 0, 54, 55, 0, 56, 0, 0, 0, - 0, 0, 0, 229, 0, 0, 0, 64, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, + 71, 75, 72, 0, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 65, 82, 50, 0, 0, + 865, 0, 0, 61, 0, 0, 0, 0, 0, 0, + 0, 78, 45, 0, 76, 0, 51, 73, 46, 64, + 79, 0, 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 75, 69, - 73, 70, 0, 78, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 80, 48, 0, 0, 0, - 230, 59, 0, 0, 0, 0, 0, 0, 76, 44, - 0, 74, 0, 49, 71, 62, 77, 0, 0, 0, - 0, 0, 43, 65, 52, 72, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 66, 0, 0, 46, - 47, 0, 285, 0, 0, 0, 0, 0, 0, 51, - 50, 0, 0, 0, 0, 0, 0, 53, 0, 0, - 0, 54, 55, 0, 56, 0, 0, 0, 0, 0, - 0, 229, 0, 0, 0, 64, 0, 0, 0, 0, + 68, 0, 0, 0, 48, 49, 0, 260, 0, 0, + 0, 0, 0, 0, 53, 52, 0, 0, 0, 0, + 0, 0, 55, 0, 0, 0, 56, 57, 0, 58, + 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, + 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 75, 69, 73, 70, - 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 63, 80, 48, 0, 0, 0, 0, 59, - 0, 0, 0, 0, 0, 0, 76, 44, 0, 74, - 0, 49, 71, 62, 77, 0, 0, 0, 0, 0, - 43, 65, 52, 72, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 0, 0, 46, 47, 0, - 285, 0, 0, 0, 0, 0, 0, 51, 50, 0, - 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, - 55, 0, 56, 0, 0, 0, 0, 0, 0, 60, - 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, + 0, 77, 71, 75, 72, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 65, 82, 50, + 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, + 0, 0, 0, 78, 45, 0, 76, 0, 51, 73, + 46, 64, 79, 0, 0, 0, 0, 0, 44, 67, + 54, 74, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 68, 0, 0, 0, 48, 49, 0, 0, + 0, 0, 0, 0, 0, 0, 53, 52, 0, 0, + 0, 0, 0, 0, 55, 0, 0, 0, 56, 57, + 0, 58, 0, 0, 0, 0, 0, 0, 202, 0, + 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 69, 73, 70, 0, 78, + 0, 0, 0, 77, 71, 75, 72, 0, 80, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, + 82, 50, 0, 0, 0, 0, 203, 61, 0, 0, + 0, 0, 0, 0, 0, 78, 45, 0, 76, 0, + 51, 73, 46, 64, 79, 0, 0, 0, 0, 0, + 44, 67, 54, 74, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 0, 0, 0, 48, 49, + 0, 260, 0, 0, 0, 0, 0, 0, 53, 52, + 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, + 56, 57, 0, 58, 0, 0, 0, 0, 0, 0, + 202, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 80, 48, 0, 0, 0, 0, 59, 0, 0, - 0, 0, 0, 0, 76, 44, 0, 74, 0, 49, - 71, 62, 77, 0, 0, 0, 0, 0, 43, 65, - 52, 72, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 66, 0, 0, 852, 0, 46, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 855, 854, 0, - 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, - 55, 0, 56, 0, 0, 0, 0, 0, 0, 229, - 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 77, 71, 75, 72, 0, + 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 65, 82, 50, 0, 0, 0, 0, 0, 61, + 0, 0, 0, 0, 0, 0, 0, 78, 45, 0, + 76, 0, 51, 73, 46, 64, 79, 0, 0, 0, + 0, 0, 44, 67, 54, 74, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, + 867, 0, 48, 49, 0, 0, 0, 0, 0, 0, + 0, 0, 870, 869, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 0, 56, 57, 0, 58, 0, 0, + 0, 0, 0, 0, 202, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 856, 859, 857, 0, 78, - 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, - 63, 80, 48, 0, 0, 0, 0, 59, 0, 0, - 0, 853, 0, 0, 76, 44, 0, 74, 0, 49, - 858, 62, 77, 0, 0, 0, 0, 0, 43, 65, - 52, 72, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 66, 0, 0, 852, 0, 46, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 855, 854, 0, - 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, - 55, 0, 56, 0, 0, 0, 0, 0, 0, 229, - 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, - 0, 0, 964, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 856, 859, 857, 0, 78, - 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, - 63, 80, 48, 0, 0, 0, 0, 59, 0, 0, - 0, 853, 0, 0, 76, 44, 0, 74, 0, 49, - 858, 62, 77, 0, 0, 0, 0, 0, 43, 65, - 52, 72, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 66, 0, 0, 852, 0, 46, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 855, 854, 0, - 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, - 55, 0, 56, 0, 0, 0, 0, 0, 0, 229, - 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, - 0, 0, 967, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 856, 859, 857, 0, 78, - 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, - 63, 80, 48, 0, 0, 0, 0, 59, 0, 0, - 0, 853, 0, 0, 76, 44, 0, 74, 0, 49, - 858, 62, 77, 0, 0, 0, 0, 0, 43, 65, - 52, 72, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 66, 0, 0, 45, 46, 47, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 50, 0, 0, - 0, 0, 0, 0, 53, 0, 0, 0, 54, 55, - 0, 56, 0, 0, 0, 57, 0, 58, 60, 61, - 0, 0, 64, 0, 0, 0, 0, 67, 0, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, + 871, 874, 872, 0, 80, 0, 0, 0, 0, 157, + 0, 0, 0, 0, 0, 65, 82, 50, 0, 0, + 865, 0, 0, 61, 0, 0, 0, 0, 868, 0, + 0, 78, 45, 0, 76, 0, 51, 873, 866, 64, + 79, 0, 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 75, 69, 73, 70, 0, 78, 0, - 79, 0, 81, 0, 82, 0, 0, 0, 0, 63, - 80, 48, 0, 0, 0, 0, 59, 0, 0, 0, - 0, 0, 0, 76, 44, 0, 74, 0, 49, 71, - 62, 77, 0, 0, 0, 0, 0, 43, 65, 52, - 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 66, 0, 0, 45, 46, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 51, 50, 0, 0, 0, - 0, 0, 0, 53, 0, 0, 0, 54, 55, 0, - 56, 0, 0, 0, 57, 0, 58, 60, 61, 0, - 0, 64, 0, 0, 0, 0, 67, 0, 68, 0, + 68, 0, 0, 0, 867, 0, 48, 49, 0, 0, + 0, 0, 0, 0, 0, 0, 870, 869, 0, 0, + 0, 0, 0, 0, 55, 0, 0, 0, 56, 57, + 0, 58, 0, 0, 0, 0, 0, 0, 202, 0, + 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, + 0, 906, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 77, 871, 874, 872, 0, 80, 0, + 0, 0, 0, 157, 0, 0, 0, 0, 0, 65, + 82, 50, 0, 0, 865, 0, 0, 61, 0, 0, + 0, 0, 868, 0, 0, 78, 45, 0, 76, 0, + 51, 873, 866, 64, 79, 0, 0, 0, 0, 0, + 44, 67, 54, 74, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 0, 0, 0, 867, 0, + 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, + 870, 869, 0, 0, 0, 0, 0, 0, 55, 0, + 0, 0, 56, 57, 0, 58, 0, 0, 0, 0, + 0, 0, 202, 0, 0, 0, 66, 0, 0, 0, + 0, 0, 0, 0, 0, 903, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 77, 871, 874, + 872, 0, 80, 0, 0, 0, 0, 157, 0, 0, + 0, 0, 0, 65, 82, 50, 0, 0, 865, 0, + 0, 61, 0, 0, 0, 0, 868, 0, 0, 78, + 45, 0, 76, 0, 51, 873, 866, 64, 79, 0, + 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 47, 48, 49, 0, 0, 0, 0, 0, + 0, 0, 0, 53, 52, 0, 0, 0, 0, 0, + 0, 55, 0, 0, 0, 56, 57, 0, 58, 0, + 0, 0, 59, 0, 60, 62, 63, 0, 0, 66, + 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 75, 69, 73, 70, 0, 78, 0, 79, - 0, 81, 0, 82, 0, 0, 0, 0, 63, 80, - 48, 0, 0, 0, 0, 59, 0, 0, 0, 0, - 0, 156, 76, 44, 0, 74, 0, 49, 71, 62, - 77, 0, 0, 0, 0, 0, 43, 65, 52, 72, + 77, 71, 75, 72, 0, 80, 0, 81, 0, 83, + 0, 84, 0, 0, 0, 0, 65, 82, 50, 0, + 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, + 0, 0, 78, 45, 0, 76, 0, 51, 73, 46, + 64, 79, 0, 0, 0, 0, 0, 44, 67, 54, + 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 68, 0, 0, 0, 47, 48, 49, 0, 0, + 0, 0, 0, 0, 0, 0, 53, 52, 0, 0, + 0, 0, 0, 0, 55, 0, 0, 0, 56, 57, + 0, 58, 0, 0, 0, 59, 0, 60, 62, 63, + 0, 0, 66, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 0, 0, 45, 46, 47, 0, 0, 0, 0, - 0, 0, 0, 0, 51, 50, 0, 0, 0, 0, - 0, 0, 53, 0, 0, 0, 54, 55, 0, 56, - 0, 0, 0, 57, 0, 58, 60, 61, 0, 0, - 64, 0, 0, 0, 0, 67, 0, 68, 0, 0, + 0, 0, 0, 77, 71, 75, 72, 0, 80, 0, + 81, 0, 83, 0, 84, 0, 0, 0, 0, 65, + 82, 50, 0, 0, 0, 0, 0, 61, 0, 0, + 0, 0, 0, 0, 160, 78, 45, 0, 76, 0, + 51, 73, 46, 64, 79, 0, 0, 0, 0, 0, + 44, 67, 54, 74, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 0, 0, 0, 47, 48, + 49, 0, 0, 0, 0, 0, 0, 0, 0, 53, + 52, 0, 0, 0, 0, 0, 0, 55, 0, 0, + 0, 56, 57, 0, 58, 0, 0, 0, 59, 0, + 60, 62, 63, 0, 0, 66, 0, 0, 0, 0, + 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 77, 71, 75, 72, + 0, 80, 0, 81, 0, 83, 0, 84, 0, 0, + 0, 0, 65, 82, 50, 0, 0, 0, 0, 0, + 61, 0, 0, 0, 0, 0, 0, 85, 78, 45, + 0, 76, 0, 51, 73, 46, 64, 79, 0, 0, + 0, 0, 0, 44, 67, 54, 74, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, + 0, 47, 48, 49, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 52, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 0, 56, 57, 0, 58, 0, 0, + 0, 59, 0, 60, 62, 63, 0, 0, 66, 0, + 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, + 71, 75, 72, 0, 80, 0, 81, 0, 83, 0, + 84, 0, 0, 0, 0, 65, 82, 50, 0, 0, + 0, 0, 0, 61, 0, 0, 0, 0, 0, 265, + 160, 78, 45, 0, 76, 0, 51, 73, 46, 64, + 79, 0, 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 75, 69, 73, 70, 0, 78, 0, 79, 0, - 81, 0, 82, 0, 0, 0, 0, 63, 80, 48, - 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, - 83, 76, 44, 0, 74, 0, 49, 71, 62, 77, - 0, 0, 0, 0, 0, 43, 65, 52, 72, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, - 0, 0, 45, 46, 47, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 50, 0, 0, 0, 0, 0, - 0, 53, 0, 0, 0, 54, 55, 0, 56, 0, - 0, 0, 57, 0, 58, 60, 61, 0, 0, 64, - 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, + 68, 0, 0, 0, 47, 48, 49, 0, 0, 0, + 0, 0, 0, 0, 0, 53, 52, 0, 0, 0, + 0, 0, 0, 55, 0, 0, 0, 56, 57, 0, + 58, 0, 0, 0, 59, 0, 60, 62, 63, 0, + 0, 66, 0, 0, 0, 0, 69, 0, 70, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, + 0, 0, 77, 71, 75, 72, 0, 80, 0, 81, + 0, 83, 0, 84, 0, 0, 0, 0, 65, 82, + 50, 0, 0, 0, 0, 0, 61, 0, 0, 0, + 0, 0, 0, 85, 78, 45, 0, 76, 0, 51, + 73, 46, 64, 79, 0, 0, 0, 0, 0, 44, + 67, 54, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 68, 0, 0, 0, 47, 48, 49, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 52, + 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, + 56, 57, 0, 58, 0, 0, 0, 59, 0, 60, + 62, 63, 0, 0, 66, 0, 0, 0, 0, 69, + 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 77, 71, 75, 72, 0, + 80, 0, 81, 0, 83, 0, 84, 0, 0, 0, + 0, 65, 82, 50, 0, 0, 0, 0, 0, 61, + 0, 0, 0, 0, 0, 0, 85, 78, 45, 0, + 76, 0, 51, 73, 46, 64, 79, 0, 0, 0, + 0, 0, 44, 67, 54, 74, 0, 0, 0, 0, + 0, 0, 0, 0, 108, 0, 68, 0, 0, 0, + 47, 48, 49, 0, 0, 0, 0, 0, 0, 0, + 0, 53, 52, 0, 0, 0, 0, 0, 0, 55, + 0, 0, 0, 56, 57, 0, 58, 0, 0, 0, + 59, 0, 60, 62, 63, 0, 0, 66, 0, 0, + 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 77, 71, + 75, 72, 0, 80, 0, 81, 0, 83, 0, 84, + 0, 0, 0, 0, 65, 82, 50, 0, 0, 0, + 0, 0, 61, 0, 0, 0, 0, 0, 0, 160, + 78, 45, 0, 76, 0, 51, 73, 46, 64, 79, + 0, 0, 0, 0, 0, 44, 67, 54, 74, 0, + 0, 0, 0, 0, 0, 0, 793, 0, 0, 68, + 0, 0, 0, 47, 48, 49, 0, 0, 0, 0, + 0, 0, 0, 0, 53, 52, 0, 0, 0, 0, + 0, 0, 55, 0, 0, 0, 56, 57, 0, 58, + 0, 0, 0, 59, 0, 60, 62, 63, 0, 0, + 66, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75, 69, 73, 70, 0, 78, 0, 79, 0, 81, - 0, 82, 0, 0, 0, 0, 63, 80, 48, 0, - 0, 0, 0, 59, 0, 0, 0, 0, 0, 83, - 76, 44, 0, 74, 0, 49, 71, 62, 77, 0, - 0, 0, 0, 0, 43, 65, 52, 72, 0, 0, - 0, 0, 0, 0, 0, 0, 105, 0, 66, 0, - 0, 45, 46, 47, 0, 0, 0, 0, 0, 0, - 0, 0, 51, 50, 0, 0, 0, 0, 0, 0, - 53, 0, 0, 0, 54, 55, 0, 56, 0, 0, - 0, 57, 0, 58, 60, 61, 0, 0, 64, 0, - 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, - 69, 73, 70, 0, 78, 0, 79, 0, 81, 0, - 82, 0, 0, 0, 0, 63, 80, 48, 0, 0, - 0, 0, 59, 0, 0, 0, 0, 0, 156, 76, - 44, 0, 74, 0, 49, 71, 62, 77, 0, 0, - 0, 0, 0, 43, 65, 52, 72, 0, 0, 0, - 0, 0, 0, 0, 780, 0, 0, 66, 0, 0, - 347, 0, 0, 45, 46, 47, 0, 0, 0, 0, - 0, 0, 0, 0, 51, 50, 0, 0, 0, 0, - 0, 0, 53, 0, 0, 0, 54, 55, 0, 56, - 0, 0, 0, 57, 0, 58, 60, 61, 0, 0, - 64, 0, 0, 0, 0, 67, 0, 68, 0, 0, + 0, 77, 71, 75, 72, 0, 80, 0, 81, 0, + 83, 0, 84, 0, 0, 0, 0, 65, 82, 50, + 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, + 0, 314, 160, 78, 45, 0, 76, 0, 51, 73, + 46, 64, 79, 0, 0, 0, 0, 0, 44, 67, + 54, 74, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 68, 0, 0, 0, 364, 0, 0, 47, + 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 52, 0, 0, 0, 0, 0, 0, 55, 0, + 0, 0, 56, 57, 0, 58, 0, 0, 0, 59, + 0, 60, 62, 63, 0, 0, 66, 0, 0, 0, + 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 77, 71, 75, + 72, 0, 80, 0, 81, 0, 83, 0, 84, 0, + 0, 0, 0, 65, 82, 50, 0, 0, 0, 0, + 0, 61, 0, 0, 0, 0, 0, 0, 160, 78, + 45, 0, 76, 0, 51, 73, 46, 64, 79, 0, + 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 47, 48, 49, 0, 0, 0, 0, 0, + 0, 0, 0, 53, 52, 0, 0, 0, 0, 0, + 0, 55, 0, 0, 0, 56, 57, 0, 58, 0, + 0, 0, 59, 0, 60, 62, 63, 0, 0, 66, + 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 75, 69, 73, 70, 0, 78, 0, 79, 0, - 81, 0, 82, 0, 0, 0, 0, 63, 80, 48, - 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, - 156, 76, 44, 0, 74, 0, 49, 71, 62, 77, - 0, 0, 0, 0, 0, 43, 65, 52, 72, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, - 0, 0, 45, 46, 47, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 50, 0, 0, 0, 0, 0, - 0, 53, 0, 0, 0, 54, 55, 0, 56, 0, - 0, 0, 57, 0, 58, 60, 61, 0, 0, 64, - 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, + 77, 71, 75, 72, 0, 80, 0, 81, 0, 83, + 0, 84, 0, 0, 0, 0, 65, 82, 50, 0, + 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, + 268, 160, 78, 45, 0, 76, 0, 51, 73, 46, + 64, 79, 0, 0, 0, 0, 0, 44, 67, 54, + 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 68, 0, 0, 0, 372, 0, 0, 47, 48, + 49, 0, 0, 0, 0, 0, 0, 0, 0, 53, + 52, 0, 0, 0, 0, 0, 0, 55, 0, 0, + 0, 56, 57, 0, 58, 0, 0, 0, 59, 0, + 60, 62, 63, 0, 0, 66, 0, 0, 0, 0, + 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 77, 71, 75, 72, + 0, 80, 0, 81, 0, 83, 0, 84, 0, 0, + 0, 0, 65, 82, 50, 0, 0, 0, 0, 0, + 61, 0, 0, 0, 0, 0, 0, 160, 78, 45, + 0, 76, 0, 51, 73, 46, 64, 79, 0, 0, + 0, 0, 0, 44, 67, 54, 74, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, + 0, 47, 48, 49, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 52, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 0, 56, 57, 0, 58, 0, 0, + 0, 59, 0, 60, 62, 63, 0, 0, 66, 0, + 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 619, 0, 0, 0, 77, + 71, 75, 72, 0, 80, 0, 81, 0, 83, 0, + 84, 0, 0, 0, 0, 65, 82, 50, 0, 0, + 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, + 160, 78, 45, 0, 76, 0, 51, 73, 46, 64, + 79, 0, 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75, 69, 73, 70, 0, 78, 0, 79, 0, 81, - 0, 82, 0, 0, 0, 0, 63, 80, 48, 0, - 0, 0, 0, 59, 0, 0, 0, 0, 293, 156, - 76, 44, 0, 74, 0, 49, 71, 62, 77, 0, - 0, 0, 0, 0, 43, 65, 52, 72, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, - 0, 45, 46, 47, 0, 0, 0, 0, 0, 0, - 0, 0, 51, 50, 0, 0, 0, 0, 0, 0, - 53, 0, 0, 0, 54, 55, 0, 56, 0, 0, - 0, 57, 0, 58, 60, 61, 0, 0, 64, 0, - 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, - 69, 73, 70, 0, 78, 0, 79, 0, 81, 0, - 82, 0, 0, 0, 0, 63, 80, 48, 0, 0, - 0, 0, 59, 0, 0, 0, 0, 290, 156, 76, - 44, 0, 74, 0, 49, 71, 62, 77, 0, 0, - 0, 0, 0, 43, 65, 52, 72, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, - 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, - 0, 51, 50, 0, 0, 0, 0, 0, 0, 53, - 0, 0, 0, 54, 55, 0, 56, 0, 0, 0, - 57, 0, 58, 60, 61, 0, 0, 64, 0, 0, - 0, 0, 67, 0, 68, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 75, 69, - 73, 70, 0, 78, 0, 79, 0, 81, 0, 82, - 0, 0, 0, 0, 63, 80, 48, 0, 0, 0, - 0, 59, 0, 0, 0, 0, 221, 156, 76, 44, - 0, 74, 0, 49, 71, 62, 77, 0, 0, 0, - 0, 0, 43, 65, 52, 72, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 66, 0, 0, 45, - 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 50, 0, 0, 0, 0, 0, 0, 53, 0, - 0, 0, 54, 55, 0, 56, 0, 0, 0, 57, - 0, 58, 60, 61, 0, 0, 64, 0, 0, 0, - 0, 67, 0, 68, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 75, 69, 73, - 70, 0, 78, 0, 79, 0, 81, 0, 82, 0, - 0, 0, 0, 63, 80, 48, 0, 0, 0, 0, - 59, 0, 0, 0, 0, 0, 156, 76, 44, 0, - 74, 0, 49, 71, 62, 77, 0, 0, 0, 0, - 0, 43, 65, 52, 72, 0, 0, 0, 0, 0, - 0, 0, 0, 167, 0, 66, 0, 0, 45, 46, - 47, 0, 0, 0, 0, 0, 0, 0, 0, 51, - 50, 0, 0, 0, 0, 0, 0, 53, 0, 0, - 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, - 58, 60, 61, 0, 0, 64, 0, 0, 0, 0, - 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 0, 0, 0, 75, 69, 73, 70, - 0, 78, 0, 79, 0, 81, 0, 82, 0, 0, - 0, 0, 63, 80, 48, 0, 0, 0, 0, 59, - 0, 0, 0, 0, 0, 156, 76, 44, 0, 74, - 0, 49, 71, 62, 77, 0, 0, 0, 0, 0, - 43, 65, 52, 72, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 0, 0, 45, 46, 47, - 0, 0, 0, 0, 0, 0, 0, 0, 51, 50, - 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, - 54, 55, 0, 56, 0, 0, 0, 57, 0, 58, - 60, 61, 0, 0, 64, 0, 0, 0, 0, 67, - 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 751, 0, 0, 0, 75, 69, 73, 70, 0, - 78, 0, 79, 0, 81, 0, 82, 0, 0, 0, - 0, 63, 80, 48, 0, 0, 0, 0, 59, 0, - 0, 0, 0, 0, 83, 76, 44, 0, 74, 0, - 49, 71, 62, 77, 0, 0, 0, 0, 0, 43, - 65, 52, 72, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 66, 0, 0, 355, 0, 0, 45, - 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 50, 0, 0, 0, 0, 0, 0, 53, 0, - 0, 0, 54, 55, 0, 56, 0, 0, 0, 57, - 0, 58, 60, 61, 0, 0, 64, 0, 0, 0, - 0, 67, 0, 68, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 75, 69, 73, - 70, 0, 78, 0, 79, 0, 81, 0, 82, 0, - 0, 0, 0, 63, 80, 48, 0, 0, 0, 0, - 59, 0, 0, 0, 0, 0, 156, 76, 44, 0, - 74, 0, 49, 71, 62, 77, 0, 0, 0, 0, - 0, 43, 65, 52, 72, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 66, 0, 0, 45, 46, - 47, 0, 0, 0, 0, 0, 0, 0, 0, 51, - 50, 0, 0, 0, 0, 0, 0, 53, 0, 0, - 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, - 58, 60, 61, 0, 0, 64, 0, 0, 0, 0, - 67, 0, 68, 0, 0, 0, 0, 0, 0, 728, - 0, 0, 0, 0, 0, 0, 75, 69, 73, 70, - 0, 78, 0, 79, 0, 81, 0, 82, 0, 0, - 0, 0, 63, 80, 48, 0, 0, 0, 0, 59, - 0, 0, 0, 0, 221, 156, 76, 44, 0, 74, - 0, 49, 71, 62, 77, 0, 0, 0, 0, 0, - 43, 65, 52, 72, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 0, 0, 45, 46, 47, - 0, 0, 0, 0, 0, 0, 0, 0, 51, 50, - 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, - 54, 55, 0, 56, 0, 0, 0, 57, 0, 58, - 60, 61, 0, 0, 64, 0, 0, 0, 0, 67, - 0, 68, 0, 0, 721, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 75, 69, 73, 70, 0, - 78, 0, 79, 0, 81, 0, 82, 0, 0, 0, - 0, 63, 80, 48, 0, 0, 0, 0, 59, 0, - 0, 0, 0, 720, 156, 76, 44, 0, 74, 0, - 49, 71, 62, 77, 0, 0, 0, 0, 0, 43, - 65, 52, 72, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 66, 0, 0, 45, 46, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 51, 50, 0, - 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, - 55, 0, 56, 0, 0, 0, 57, 0, 58, 60, - 61, 0, 0, 64, 0, 0, 0, 0, 67, 0, - 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 69, 73, 70, 0, 78, - 0, 79, 0, 81, 153, 82, 0, 0, 0, 0, - 63, 80, 48, 403, 404, 0, 0, 59, 0, 0, - 0, 0, 0, 83, 76, 44, 0, 74, 0, 49, - 71, 62, 77, 0, 0, 0, 0, 0, 43, 65, - 52, 72, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 66, 0, 0, 45, 46, 47, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 50, 0, 0, - 0, 0, 0, 0, 53, 147, 0, 0, 54, 55, - 0, 56, 0, 0, 0, 57, 0, 58, 60, 61, - 0, 0, 64, 0, 0, 0, 0, 67, 0, 68, - 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, - 0, 0, 0, 75, 69, 73, 70, 150, 78, 0, - 79, 152, 81, 0, 82, 0, 155, 0, 0, 63, - 80, 48, 0, 0, 0, 0, 59, 0, 0, 0, - 0, 0, 156, 76, 44, 0, 74, 0, 49, 71, - 62, 77, 0, 0, 0, 0, 0, 43, 65, 52, - 72, 0, 0, 0, 0, 0, 0, 0, 913, 912, - 0, 66, 0, 0, 45, 46, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 51, 50, 0, 0, 0, - 0, 0, 0, 53, 147, 0, 0, 54, 1018, 0, - 56, 0, 0, 0, 57, 0, 58, 60, 61, 0, - 0, 64, 0, 0, 0, 0, 67, 0, 68, 0, - 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, - 0, 0, 75, 69, 73, 70, 150, 78, 0, 79, - 152, 81, 0, 82, 0, 155, 0, 0, 63, 80, - 48, 0, 0, 0, 0, 59, 0, 0, 0, 0, - 0, 156, 76, 44, 0, 74, 0, 49, 71, 62, - 77, 0, 0, 0, 0, 0, 43, 65, 52, 72, - 0, 0, 0, 0, 0, 0, 0, 913, 912, 0, - 66, 0, 0, 239, 240, 241, 0, 0, 244, 246, - 247, 0, 0, 248, 0, 249, 0, 0, 0, 254, - 255, 0, 256, 0, 0, 0, 0, 0, 0, 53, - 257, 259, 260, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, + 68, 0, 0, 0, 47, 48, 49, 0, 0, 0, + 0, 0, 0, 0, 0, 53, 52, 0, 0, 0, + 0, 0, 0, 55, 0, 0, 0, 56, 57, 0, + 58, 0, 0, 0, 59, 0, 60, 62, 63, 0, + 0, 66, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 265, 0, 0, 0, 0, 0, 0, 0, 0, 69, - 73, 70, 267, 268, 269, 0, 271, 272, 273, 274, - 275, 276, 0, 0, 263, 270, 253, 243, 261, 245, - 264, 0, 0, 0, 0, 250, 0, 0, 266, 242, - 252, 74, 251, 49, 71, 0, 0, 0, 0, 0, - 258, 0, 43, 65, 52, 72, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 66, 0, 0, 239, - 240, 241, 0, 0, 244, 246, 247, 0, 0, 248, - 0, 249, 0, 0, 0, 254, 255, 0, 256, 0, - 0, 0, 0, 0, 0, 53, 257, 259, 260, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, + 0, 0, 77, 71, 75, 72, 0, 80, 0, 81, + 0, 83, 0, 84, 0, 0, 0, 0, 65, 82, + 50, 0, 0, 0, 0, 0, 61, 0, 0, 0, + 0, 0, 0, 160, 78, 45, 0, 76, 0, 51, + 73, 46, 64, 79, 0, 0, 0, 0, 0, 44, + 67, 54, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 172, 0, 68, 0, 0, 0, 47, 48, 49, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 52, + 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, + 56, 57, 0, 58, 0, 0, 0, 59, 0, 60, + 62, 63, 0, 0, 66, 0, 0, 0, 0, 69, + 0, 70, 0, 0, 734, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 77, 71, 75, 72, 0, + 80, 0, 81, 0, 83, 0, 84, 0, 0, 0, + 0, 65, 82, 50, 0, 0, 0, 0, 0, 61, + 0, 0, 0, 0, 0, 733, 160, 78, 45, 0, + 76, 0, 51, 73, 46, 64, 79, 0, 0, 0, + 0, 0, 44, 67, 54, 74, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, + 47, 48, 49, 0, 0, 0, 0, 0, 0, 0, + 0, 53, 52, 0, 0, 0, 0, 0, 0, 55, + 0, 0, 0, 56, 57, 0, 58, 0, 0, 0, + 59, 0, 60, 62, 63, 0, 0, 66, 0, 0, + 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, + 0, 741, 0, 0, 0, 0, 0, 0, 77, 71, + 75, 72, 0, 80, 0, 81, 0, 83, 0, 84, + 0, 0, 0, 0, 65, 82, 50, 0, 0, 0, + 0, 0, 61, 0, 0, 0, 0, 0, 314, 160, + 78, 45, 0, 76, 0, 51, 73, 46, 64, 79, + 0, 0, 0, 0, 0, 44, 67, 54, 74, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, + 0, 0, 0, 47, 48, 49, 0, 0, 0, 0, + 0, 0, 0, 0, 53, 52, 0, 0, 0, 0, + 0, 0, 55, 0, 0, 0, 56, 57, 0, 58, + 0, 0, 0, 59, 0, 60, 62, 63, 0, 0, + 66, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 842, 0, 0, 0, 265, 0, 0, 0, - 0, 0, 0, 0, 0, 69, 73, 70, 267, 268, - 269, 0, 271, 272, 273, 274, 275, 276, 0, 0, - 263, 270, 253, 243, 261, 245, 264, 0, 0, 0, - 0, 250, 0, 0, 266, 242, 252, 74, 251, 49, - 71, 0, 0, 0, 0, 0, 258, 0, 43, 65, - 52, 72, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 66, 0, 0, 239, 240, 241, 0, 0, - 244, 246, 247, 0, 0, 248, 0, 249, 0, 0, - 0, 254, 255, 0, 256, 0, 0, 0, 0, 0, - 0, 53, 257, 259, 260, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 811, 0, - 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, - 0, 69, 73, 70, 267, 268, 269, 0, 271, 272, - 273, 274, 275, 276, 0, 0, 263, 270, 253, 243, - 261, 245, 264, 0, 0, 0, 0, 250, 0, 0, - 266, 242, 252, 74, 251, 49, 71, 0, 0, 0, - 0, 0, 258, 0, 43, 65, 52, 72, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, - 0, 239, 240, 241, 0, 0, 244, 246, 247, 0, - 0, 248, 0, 249, 0, 0, 0, 254, 255, 0, - 256, 0, 0, 0, 0, 0, 0, 53, 257, 259, - 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 836, 0, 0, 0, 265, 0, - 0, 0, 0, 0, 0, 0, 0, 69, 73, 70, - 267, 268, 269, 0, 271, 272, 273, 274, 275, 276, - 0, 0, 263, 270, 253, 243, 261, 245, 264, 0, - 0, 0, 0, 250, 0, 0, 266, 242, 252, 74, - 251, 49, 71, 0, 0, 0, 0, 0, 258, 0, - 43, 65, 52, 72, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 0, 0, 239, 240, 241, - 0, 0, 244, 246, 247, 0, 0, 248, 0, 249, - 0, 0, 0, 254, 255, 0, 256, 0, 0, 0, - 0, 0, 0, 53, 257, 259, 260, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 815, 0, 0, 0, 265, 0, 0, 0, 0, 0, - 0, 0, 0, 69, 73, 70, 267, 268, 269, 0, - 271, 272, 273, 274, 275, 276, 0, 0, 263, 270, - 253, 243, 261, 245, 264, 0, 0, 0, 0, 250, - 0, 0, 266, 242, 252, 74, 251, 49, 71, 0, - 0, 0, 0, 0, 258, 0, 43, 65, 52, 72, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 0, 0, 239, 240, 241, 0, 0, 244, 246, - 247, 0, 0, 248, 0, 249, 0, 0, 0, 254, - 255, 0, 256, 0, 0, 0, 0, 0, 0, 53, - 257, 259, 260, 0, 328, 0, 0, 0, 0, 0, - 0, 0, 0, 262, 0, 0, 0, 329, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 265, 0, 0, 0, 0, 0, 0, 0, 330, 69, - 73, 70, 267, 268, 269, 0, 271, 272, 273, 274, - 275, 276, 0, 0, 263, 270, 253, 243, 261, 245, - 264, 0, 0, 0, 0, 250, 0, 0, 266, 242, - 252, 74, 251, 49, 71, 0, 0, 0, 0, 0, - 258, 0, 43, 65, 52, 72, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 66, 0, 0, 239, - 240, 241, 0, 0, 244, 246, 247, 0, 0, 248, - 0, 249, 0, 0, 0, 254, 255, 0, 256, 0, - 0, 0, 0, 0, 0, 53, 257, 259, 260, 0, - 328, 0, 0, 0, 0, 0, 0, 0, 0, 262, - 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, - 518, 0, 0, 0, 330, 69, 73, 70, 267, 268, - 269, 0, 271, 272, 273, 274, 275, 276, 0, 0, - 263, 270, 253, 243, 261, 245, 264, 0, 0, 0, - 0, 250, 0, 0, 266, 242, 252, 74, 251, 49, - 71, 0, 0, 0, 0, 0, 258, 0, 43, 65, - 515, 517, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 66, 0, 0, 239, 240, 241, 0, 0, - 244, 246, 247, 0, 0, 248, 0, 249, 0, 0, - 0, 254, 255, 0, 256, 0, 0, 0, 0, 0, - 0, 53, 257, 259, 260, 0, 328, 0, 0, 0, - 0, 0, 0, 0, 0, 262, 0, 0, 0, 329, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 265, 0, 516, 0, 518, 0, 0, 0, - 330, 69, 73, 70, 267, 268, 269, 0, 271, 272, - 273, 274, 275, 276, 0, 0, 263, 270, 253, 243, - 261, 245, 264, 0, 0, 0, 0, 250, 0, 0, - 266, 242, 252, 519, 251, 49, 71, 0, 0, 0, - 0, 0, 258, 0, 43, 65, 515, 517, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, - 0, 239, 240, 241, 0, 0, 244, 246, 247, 0, - 0, 248, 0, 249, 0, 0, 0, 254, 255, 0, - 256, 0, 0, 0, 0, 0, 0, 53, 257, 259, - 260, 0, 328, 0, 0, 0, 0, 0, 0, 0, - 0, 262, 0, 0, 0, 329, 0, 0, 0, 0, - 0, 0, 0, 0, 708, 0, 0, 0, 265, 0, - 0, 0, 518, 0, 0, 0, 330, 69, 73, 70, - 267, 268, 269, 0, 271, 272, 273, 274, 275, 276, - 0, 0, 263, 270, 253, 243, 261, 245, 264, 0, - 0, 0, 0, 250, 0, 0, 266, 242, 252, 74, - 251, 49, 71, 0, 0, 0, 0, 0, 258, 0, - 43, 65, 515, 517, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 0, 0, 239, 240, 241, - 0, 0, 244, 246, 247, 0, 0, 248, 0, 249, - 0, 0, 0, 254, 255, 0, 256, 0, 0, 0, - 0, 0, 0, 53, 257, 259, 260, 0, 328, 0, - 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, - 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, - 703, 0, 0, 0, 265, 0, 0, 0, 518, 0, - 0, 0, 330, 69, 73, 70, 267, 268, 269, 0, - 271, 272, 273, 274, 275, 276, 0, 0, 263, 270, - 253, 243, 261, 245, 264, 0, 0, 0, 0, 250, - 0, 0, 266, 242, 252, 74, 251, 49, 71, 0, - 0, 0, 0, 0, 258, 0, 43, 65, 515, 517, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 0, 0, 140, 0, 0, 0, 0, 141, 0, - 45, 46, 47, 143, 0, 0, 0, 0, 0, 0, - 144, 51, 50, 0, 0, 0, 0, 0, 0, 53, - 147, 0, 0, 54, 55, 0, 56, 0, 0, 0, - 57, 0, 58, 60, 61, 0, 0, 64, 0, 0, - 0, 0, 67, 0, 68, 0, 0, 0, 0, 0, - 148, 0, 149, 0, 0, 0, 0, 0, 75, 69, - 73, 70, 150, 78, 151, 79, 152, 81, 153, 82, - 154, 155, 0, 0, 63, 80, 48, 0, 0, 142, - 0, 59, 0, 0, 0, 0, 0, 156, 76, 44, - 0, 74, 0, 49, 71, 62, 77, 0, 0, 0, - 0, 0, 43, 65, 52, 72, 0, 0, 0, 0, - 0, 0, 0, 0, 145, 0, 66, 0, 0, 140, - 0, 0, 0, 0, 141, 0, 45, 46, 47, 143, - 0, 0, 0, 0, 0, 0, 144, 51, 50, 0, - 0, 0, 0, 0, 0, 53, 147, 0, 0, 54, - 55, 0, 56, 0, 0, 0, 57, 0, 58, 60, - 61, 0, 0, 64, 0, 0, 0, 0, 67, 0, - 68, 0, 0, 0, 0, 0, 148, 0, 149, 0, - 0, 0, 0, 0, 75, 69, 73, 70, 150, 78, - 151, 79, 152, 81, 153, 82, 154, 155, 0, 0, - 63, 80, 48, 0, 0, 142, 0, 59, 0, 0, - 0, 0, 0, 156, 76, 44, 0, 74, 0, 49, - 71, 62, 77, 0, 0, 0, 0, 0, 43, 65, - 52, 72, 0, 0, 0, 0, 0, 0, 0, 208, - 145, 0, 66, 0, 0, 140, 0, 0, 0, 0, - 141, 0, 45, 46, 47, 143, 0, 0, 0, 0, - 0, 0, 144, 51, 50, 0, 0, 0, 0, 0, - 0, 53, 147, 0, 0, 54, 55, 0, 56, 0, - 0, 0, 57, 0, 58, 60, 61, 0, 0, 64, - 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, - 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, - 75, 69, 73, 70, 150, 78, 151, 79, 152, 81, - 153, 82, 154, 155, 0, 0, 63, 80, 48, 0, - 0, 142, 0, 59, 0, 0, 0, 0, 0, 156, - 76, 44, 0, 74, 0, 49, 71, 62, 77, 0, - 0, 0, 0, 0, 43, 65, 52, 72, 0, 0, - 0, 0, 0, 0, 0, 146, 145, 0, 66, 0, - 0, 140, 0, 0, 0, 0, 141, 0, 45, 46, - 47, 143, 0, 0, 0, 0, 0, 0, 144, 51, - 50, 0, 0, 0, 0, 0, 0, 53, 147, 0, - 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, - 58, 60, 61, 0, 0, 920, 0, 0, 0, 0, - 67, 0, 68, 0, 0, 0, 0, 0, 148, 0, - 149, 0, 0, 0, 0, 0, 921, 69, 73, 70, - 150, 78, 151, 79, 152, 81, 153, 82, 154, 155, - 0, 0, 63, 80, 48, 0, 0, 142, 0, 59, - 0, 0, 0, 0, 0, 156, 76, 44, 0, 74, - 0, 49, 71, 62, 77, 0, 0, 0, 0, 0, - 43, 65, 52, 72, 0, 0, 0, 0, 0, 0, - 0, 146, 145, 0, 66, 0, 0, + 0, 77, 71, 75, 72, 0, 80, 0, 81, 0, + 83, 157, 84, 0, 0, 0, 0, 65, 82, 50, + 412, 413, 0, 0, 0, 61, 0, 0, 0, 0, + 0, 0, 85, 78, 45, 0, 76, 0, 51, 73, + 46, 64, 79, 0, 0, 0, 0, 0, 44, 67, + 54, 74, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 68, 0, 0, 0, 47, 48, 49, 0, + 0, 0, 0, 0, 0, 0, 0, 53, 52, 0, + 0, 0, 0, 0, 0, 55, 151, 0, 0, 56, + 1058, 0, 58, 0, 0, 0, 59, 0, 60, 62, + 63, 0, 0, 66, 0, 0, 0, 0, 69, 0, + 70, 0, 0, 0, 0, 0, 0, 0, 153, 0, + 0, 0, 0, 0, 77, 71, 75, 72, 154, 80, + 0, 81, 156, 83, 0, 84, 0, 159, 0, 0, + 65, 82, 50, 0, 0, 0, 0, 0, 61, 0, + 0, 0, 0, 0, 0, 160, 78, 45, 0, 76, + 0, 51, 73, 46, 64, 79, 0, 0, 0, 0, + 0, 44, 67, 54, 74, 0, 0, 0, 0, 0, + 0, 0, 951, 950, 0, 68, 0, 0, 0, 47, + 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 52, 0, 0, 0, 0, 0, 0, 55, 151, + 0, 0, 56, 57, 0, 58, 0, 0, 0, 59, + 0, 60, 62, 63, 0, 0, 66, 0, 0, 0, + 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, + 0, 153, 0, 0, 0, 0, 0, 77, 71, 75, + 72, 154, 80, 0, 81, 156, 83, 0, 84, 0, + 159, 0, 0, 65, 82, 50, 0, 0, 0, 0, + 0, 61, 0, 0, 0, 0, 0, 0, 160, 78, + 45, 0, 76, 0, 51, 73, 46, 64, 79, 0, + 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 951, 950, 0, 68, 0, + 0, 0, 212, 213, 214, 0, 0, 217, 219, 220, + 0, 0, 221, 0, 222, 0, 0, 0, 227, 228, + 0, 229, 0, 0, 0, 0, 0, 0, 55, 230, + 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 0, 71, 75, + 72, 240, 241, 242, 0, 244, 245, 246, 247, 248, + 249, 0, 0, 236, 243, 226, 216, 234, 0, 218, + 237, 0, 0, 0, 0, 0, 223, 0, 0, 239, + 215, 225, 76, 224, 51, 73, 46, 0, 0, 0, + 0, 0, 231, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 212, 213, 214, 0, 0, 217, 219, 220, + 0, 0, 221, 0, 222, 0, 0, 0, 227, 228, + 0, 229, 0, 0, 0, 0, 0, 0, 55, 230, + 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 855, 0, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 0, 71, 75, + 72, 240, 241, 242, 0, 244, 245, 246, 247, 248, + 249, 0, 0, 236, 243, 226, 216, 234, 0, 218, + 237, 0, 0, 0, 0, 0, 223, 0, 0, 239, + 215, 225, 76, 224, 51, 73, 46, 0, 0, 0, + 0, 0, 231, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 212, 213, 214, 0, 0, 217, 219, 220, + 0, 0, 221, 0, 222, 0, 0, 0, 227, 228, + 0, 229, 0, 0, 0, 0, 0, 0, 55, 230, + 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 828, 0, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 0, 71, 75, + 72, 240, 241, 242, 0, 244, 245, 246, 247, 248, + 249, 0, 0, 236, 243, 226, 216, 234, 0, 218, + 237, 0, 0, 0, 0, 0, 223, 0, 0, 239, + 215, 225, 76, 224, 51, 73, 46, 0, 0, 0, + 0, 0, 231, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 212, 213, 214, 0, 0, 217, 219, 220, + 0, 0, 221, 0, 222, 0, 0, 0, 227, 228, + 0, 229, 0, 0, 0, 0, 0, 0, 55, 230, + 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 849, 0, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 0, 71, 75, + 72, 240, 241, 242, 0, 244, 245, 246, 247, 248, + 249, 0, 0, 236, 243, 226, 216, 234, 0, 218, + 237, 0, 0, 0, 0, 0, 223, 0, 0, 239, + 215, 225, 76, 224, 51, 73, 46, 0, 0, 0, + 0, 0, 231, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 212, 213, 214, 0, 0, 217, 219, 220, + 0, 0, 221, 0, 222, 0, 0, 0, 227, 228, + 0, 229, 0, 0, 0, 0, 0, 0, 55, 230, + 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 824, 0, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 0, 71, 75, + 72, 240, 241, 242, 0, 244, 245, 246, 247, 248, + 249, 0, 0, 236, 243, 226, 216, 234, 0, 218, + 237, 0, 0, 0, 0, 0, 223, 0, 0, 239, + 215, 225, 76, 224, 51, 73, 46, 0, 0, 0, + 0, 0, 231, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 212, 213, 214, 0, 0, 217, 219, 220, + 0, 0, 221, 0, 222, 0, 0, 0, 227, 228, + 0, 229, 0, 0, 0, 0, 0, 0, 55, 230, + 232, 233, 0, 345, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 0, 0, 0, 346, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, + 0, 0, 0, 0, 0, 0, 0, 347, 71, 75, + 72, 240, 241, 242, 0, 244, 245, 246, 247, 248, + 249, 0, 0, 236, 243, 226, 216, 234, 0, 218, + 237, 0, 0, 0, 0, 0, 223, 0, 0, 239, + 215, 225, 76, 224, 51, 73, 46, 0, 0, 0, + 0, 0, 231, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 212, 213, 214, 0, 0, 217, 219, 220, + 0, 0, 221, 0, 222, 0, 0, 0, 227, 228, + 0, 229, 0, 0, 0, 0, 0, 0, 55, 230, + 232, 233, 0, 345, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 0, 0, 0, 346, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, + 0, 0, 0, 527, 0, 0, 0, 347, 71, 75, + 72, 240, 241, 242, 0, 244, 245, 246, 247, 248, + 249, 0, 0, 236, 243, 226, 216, 234, 0, 218, + 237, 0, 0, 0, 0, 0, 223, 0, 0, 239, + 215, 225, 76, 224, 51, 73, 46, 0, 0, 0, + 0, 0, 231, 0, 44, 67, 524, 526, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 212, 213, 214, 0, 0, 217, 219, 220, + 0, 0, 221, 0, 222, 0, 0, 0, 227, 228, + 0, 229, 0, 0, 0, 0, 0, 0, 55, 230, + 232, 233, 0, 345, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 0, 0, 0, 346, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, + 0, 525, 0, 527, 0, 0, 0, 347, 71, 75, + 72, 240, 241, 242, 0, 244, 245, 246, 247, 248, + 249, 0, 0, 236, 243, 226, 216, 234, 0, 218, + 237, 0, 0, 0, 0, 0, 223, 0, 0, 239, + 215, 225, 528, 224, 51, 73, 46, 0, 0, 0, + 0, 0, 231, 0, 44, 67, 524, 526, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 212, 213, 214, 0, 0, 217, 219, 220, + 0, 0, 221, 0, 222, 0, 0, 0, 227, 228, + 0, 229, 0, 0, 0, 0, 0, 0, 55, 230, + 232, 233, 0, 345, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 0, 0, 0, 346, 0, 0, 0, + 0, 0, 0, 0, 0, 716, 0, 0, 0, 238, + 0, 0, 0, 527, 0, 0, 0, 347, 71, 75, + 72, 240, 241, 242, 0, 244, 245, 246, 247, 248, + 249, 0, 0, 236, 243, 226, 216, 234, 0, 218, + 237, 0, 0, 0, 0, 0, 223, 0, 0, 239, + 215, 225, 76, 224, 51, 73, 46, 0, 0, 0, + 0, 0, 231, 0, 44, 67, 524, 526, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 212, 213, 214, 0, 0, 217, 219, 220, + 0, 0, 221, 0, 222, 0, 0, 0, 227, 228, + 0, 229, 0, 0, 0, 0, 0, 0, 55, 230, + 232, 233, 0, 345, 0, 0, 0, 0, 0, 0, + 0, 0, 235, 0, 0, 0, 346, 0, 0, 0, + 0, 0, 0, 0, 0, 721, 0, 0, 0, 238, + 0, 0, 0, 527, 0, 0, 0, 347, 71, 75, + 72, 240, 241, 242, 0, 244, 245, 246, 247, 248, + 249, 0, 0, 236, 243, 226, 216, 234, 0, 218, + 237, 0, 0, 0, 0, 0, 223, 0, 0, 239, + 215, 225, 76, 224, 51, 73, 46, 0, 0, 0, + 0, 0, 231, 0, 44, 67, 524, 526, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, + 0, 0, 144, 0, 0, 0, 0, 145, 0, 47, + 48, 49, 147, 0, 0, 0, 0, 0, 0, 148, + 53, 52, 0, 0, 0, 0, 0, 0, 55, 151, + 0, 0, 56, 57, 0, 58, 0, 0, 0, 59, + 0, 60, 62, 63, 0, 0, 66, 0, 0, 0, + 0, 69, 0, 70, 0, 0, 0, 0, 0, 152, + 0, 153, 0, 0, 0, 0, 0, 77, 71, 75, + 72, 154, 80, 155, 81, 156, 83, 157, 84, 158, + 159, 0, 0, 65, 82, 50, 0, 0, 0, 146, + 0, 61, 0, 0, 0, 0, 0, 0, 160, 78, + 45, 0, 76, 0, 51, 73, 46, 64, 79, 0, + 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 149, 0, 68, 0, + 0, 0, 144, 0, 0, 0, 0, 145, 0, 47, + 48, 49, 147, 0, 0, 0, 0, 0, 0, 148, + 53, 52, 0, 0, 0, 0, 0, 0, 55, 151, + 0, 0, 56, 57, 0, 58, 0, 0, 0, 59, + 0, 60, 62, 63, 0, 0, 66, 0, 0, 0, + 0, 69, 0, 70, 0, 0, 0, 0, 0, 152, + 0, 153, 0, 0, 0, 0, 0, 77, 71, 75, + 72, 154, 80, 155, 81, 156, 83, 157, 84, 158, + 159, 0, 0, 65, 82, 50, 0, 0, 0, 146, + 0, 61, 0, 0, 0, 0, 0, 0, 160, 78, + 45, 0, 76, 0, 51, 73, 46, 64, 79, 0, + 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 301, 149, 0, 68, 0, + 0, 0, 144, 0, 0, 0, 0, 145, 0, 47, + 48, 49, 147, 0, 0, 0, 0, 0, 0, 148, + 53, 52, 0, 0, 0, 0, 0, 0, 55, 151, + 0, 0, 56, 57, 0, 58, 0, 0, 0, 59, + 0, 60, 62, 63, 0, 0, 958, 0, 0, 0, + 0, 69, 0, 70, 0, 0, 0, 0, 0, 152, + 0, 153, 0, 0, 0, 0, 0, 959, 71, 75, + 72, 154, 80, 155, 81, 156, 83, 157, 84, 158, + 159, 0, 0, 65, 82, 50, 0, 0, 0, 146, + 0, 61, 0, 0, 0, 0, 0, 0, 160, 78, + 45, 0, 76, 0, 51, 73, 46, 64, 79, 0, + 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 150, 149, 0, 68, 0, + 0, 0, 144, 0, 0, 0, 0, 145, 0, 47, + 48, 49, 147, 0, 0, 0, 0, 0, 0, 148, + 53, 52, 0, 0, 0, 0, 0, 0, 55, 151, + 0, 0, 56, 57, 0, 58, 0, 0, 0, 59, + 0, 60, 62, 63, 0, 0, 66, 0, 0, 0, + 0, 69, 0, 70, 0, 0, 0, 0, 0, 152, + 0, 153, 0, 0, 0, 0, 0, 77, 71, 75, + 72, 154, 80, 155, 81, 156, 83, 157, 84, 158, + 159, 0, 0, 65, 82, 50, 0, 0, 0, 146, + 0, 61, 0, 0, 0, 0, 0, 0, 160, 78, + 45, 0, 76, 0, 51, 73, 46, 64, 79, 0, + 0, 0, 0, 0, 44, 67, 54, 74, 0, 0, + 0, 0, 0, 0, 0, 150, 149, 0, 68, 0, + 0, 0, - 904, 989, 766, 996, 875, 874, 986, 982, 1048, 235, - 876, 932, 1054, 529, 994, 992, 765, 884, 1053, 993, - 873, 984, 987, 801, 891, 933, 961, 916, 1043, 795, - 797, 794, 796, 1036, 802, 1012, 803, 935, 805, 1024, - 906, 904, 1022, 807, 828, 952, 1051, 974, 969, 1013, - 1047, 975, 904, 235, 930, 1010, 129, 165, 971, 818, - 579, 950, 776, 779, 1004, 583, 621, 235, 575, 565, - 887, 1009, 582, 567, 346, 559, 556, 555, 419, 166, - 554, 168, 550, 599, 394, 423, 548, 611, 588, 618, - 600, 593, 587, 553, 616, 585, 170, 492, 505, 488, - 237, 486, 501, 129, 445, 235, 606, 474, 602, 210, - 304, 464, 531, 457, 609, 547, 203, 546, 545, 536, - 538, 537, 169, 535, 530, 446, 307, 528, 426, 434, - 440, 681, 442, 689, 691, 459, 459, 690, 316, 446, - 683, 682, 686, 315, 340, 680, 676, 296, 677, 289, - 308, 674, 675, 331, 338, 723, 746, 235, 294, 292, - 313, 638, 710, 717, 586, 235, 314, 696, 704, 387, - 199, 695, 277, 649, 378, 694, 640, 383, 627, 629, - 380, 386, 129, 392, 480, 411, 109, 629, 617, 129, - 664, 627, 371, 339, 282, 129, 372, 235, 357, 919, - 411, 411, 421, 213, 669, 351, 237, 213, 212, 415, - 411, 237, 1038, 411, 428, 237, 389, 237, 385, 382, - 237, 289, 1016, 0, 237, 1017, 388, 623, 237, 237, - 1006, 1040, 1039, 388, 289, 289, 213, 212, 388, 848, - 388, 236, 727, 726, 642, 237, 281, 1007, 711, 713, - 623, 623, 817, 384, 381, 639, 411, 653, 656, 213, - 684, 213, 669, 388, 448, 450, 213, 658, 470, 718, - 207, 719, 213, 216, 413, 561, 237, 410, 237, 660, - 810, 237, 661, 666, 213, 487, 663, 998, 213, 504, - 563, 237, 388, 411, 205, 213, 684, 213, 869, 388, - 604, 623, 608, 0, 1002, 698, 350, 623, 523, 532, - 324, 319, 539, 237, 388, 213, 317, 830, 831, 0, - 468, 474, 549, 480, 388, 773, 388, 28, 213, 612, - 213, 216, 213, 819, 41, 0, 702, 699, 0, 213, - 216, 327, 213, 216, 213, 216, 213, 216, 810, 213, - 437, 624, 324, 819, 213, 595, 741, 466, 213, 819, - 213, 504, 0, 213, 453, 665, 91, 213, 430, 213, - 216, 213, 487, 847, 806, 762, 213, 216, 662, 213, - 216, 90, 878, 879, 522, 880, 91, 832, 213, 819, - 213, 336, 353, 732, 213, 216, 203, 213, 216, 213, - 216, 90, 324, 819, 91, 745, 91, 0, 651, 104, - 213, 612, 1035, 91, 557, 0, 768, 0, 0, 90, - 11, 90, 750, 0, 452, 624, 213, 216, 90, 318, - 0, 762, 28, 28, 92, 698, 0, 832, 93, 41, - 41, 91, 613, 311, 0, 91, 28, 0, 388, 213, - 497, 28, 92, 41, 92, 0, 90, 100, 41, 630, - 90, 92, 707, 438, 220, 101, 702, 699, 596, 213, - 461, 722, 0, 799, 752, 91, 678, 454, 490, 0, - 792, 432, 91, 0, 324, 319, 228, 284, 814, 92, - 90, 767, 754, 0, 0, 28, 0, 90, 28, 0, - 28, 844, 41, 672, 337, 41, 0, 41, 804, 0, - 692, 0, 408, 687, 798, 327, 213, 216, 541, 91, - 91, 425, 620, 92, 613, 11, 11, 838, 871, 429, - 92, 444, 0, 353, 90, 90, 28, 551, 787, 11, - 213, 497, 374, 41, 11, 28, 0, 310, 0, 91, - 91, 377, 41, 28, 0, 28, 0, 821, 0, 500, - 41, 228, 41, 499, 90, 90, 978, 92, 0, 980, - 979, 977, 91, 841, 91, 91, 0, 91, 0, 91, - 463, 0, 198, 462, 213, 216, 0, 90, 11, 90, - 90, 11, 90, 11, 90, 91, 0, 92, 92, 0, - 0, 353, 354, 333, 0, 0, 179, 736, 227, 91, - 90, 0, 1041, 0, 196, 0, 0, 91, 0, 0, - 92, 91, 92, 92, 90, 92, 192, 92, 193, 11, - 187, 191, 90, 781, 194, 784, 90, 352, 11, 0, - 91, 91, 0, 92, 668, 748, 11, 0, 11, 91, - 503, 0, 0, 91, 499, 90, 90, 92, 668, 667, - 0, 91, 397, 0, 90, 92, 668, 734, 90, 92, - 668, 735, 91, 0, 0, 783, 90, 91, 0, 0, - 227, 228, 228, 91, 91, 737, 227, 90, 232, 786, - 956, 0, 90, 0, 0, 0, 227, 92, 90, 90, - 960, 92, 668, 739, 0, 352, 0, 227, 173, 92, - 668, 740, 0, 91, 0, 1023, 0, 0, 91, 91, - 92, 668, 747, 0, 0, 92, 668, 749, 90, 91, - 91, 92, 92, 90, 90, 91, 91, 0, 41, 41, - 91, 628, 972, 626, 90, 90, 956, 0, 1020, 0, - 90, 90, 0, 0, 228, 90, 0, 400, 0, 0, - 228, 0, 0, 0, 41, 0, 92, 0, 0, 227, - 228, 0, 0, 41, 0, 0, 0, 232, 92, 227, - 0, 228, 632, 92, 92, 41, 968, 232, 0, 0, - 41, 41, 634, 0, 0, 0, 711, 713, 227, 227, - 0, 645, 91, 0, 648, 299, 867, 867, 0, 0, - 401, 405, 91, 0, 0, 303, 0, 90, 0, 0, - 990, 965, 0, 0, 0, 0, 91, 90, 973, 868, - 868, 91, 91, 909, 227, 908, 910, 915, 911, 914, - 0, 90, 867, 228, 972, 0, 90, 90, 0, 0, - 11, 0, 973, 228, 0, 0, 0, 909, 0, 908, - 910, 915, 911, 914, 0, 868, 0, 91, 0, 0, - 990, 0, 228, 228, 92, 668, 738, 0, 1019, 0, - 0, 0, 90, 909, 0, 908, 910, 915, 911, 914, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 717, 709, 708, 707, 704, 703, 702, 723, 1096, 1091, + 699, 736, 696, 730, 695, 1094, 694, 693, 649, 690, + 689, 688, 687, 1090, 636, 679, 638, 208, 676, 1078, + 208, 1086, 674, 208, 677, 673, 1076, 1064, 1050, 1062, + 1047, 657, 759, 651, 1048, 112, 133, 1042, 1051, 294, + 1034, 374, 778, 638, 779, 396, 636, 420, 133, 1032, + 1031, 208, 1025, 626, 627, 620, 595, 625, 615, 940, + 831, 1022, 611, 789, 792, 608, 1020, 602, 597, 609, + 596, 1023, 594, 591, 618, 588, 584, 630, 807, 170, + 592, 576, 808, 810, 574, 809, 1018, 171, 814, 815, + 818, 173, 1011, 820, 568, 563, 816, 565, 564, 562, + 1010, 559, 1007, 557, 208, 556, 555, 554, 841, 547, + 544, 537, 546, 545, 540, 174, 1004, 539, 538, 175, + 940, 994, 996, 1005, 208, 250, 455, 510, 210, 257, + 208, 979, 253, 514, 501, 264, 271, 497, 267, 269, + 495, 972, 1097, 970, 286, 288, 1030, 992, 133, 133, + 363, 968, 473, 973, 975, 466, 483, 954, 324, 892, + 325, 944, 893, 895, 894, 901, 468, 455, 449, 321, + 451, 330, 443, 454, 333, 940, 357, 331, 348, 332, + 435, 355, 356, 928, 977, 428, 388, 921, 392, 395, + 133, 389, 403, 432, 401, 941, 924, 430, 570, 632, + 861, 632, 368, 420, 420, 210, 424, 306, 671, 210, + 731, 437, 732, 306, 682, 306, 697, 1044, 724, 726, + 264, 264, 740, 739, 1080, 1079, 1056, 397, 397, 1057, + 397, 461, 264, 210, 420, 420, 397, 632, 420, 391, + 1045, 397, 1036, 669, 666, 394, 957, 398, 306, 305, + 303, 420, 479, 300, 489, 653, 306, 697, 617, 306, + 682, 397, 613, 210, 572, 1040, 0, 210, 650, 306, + 305, 419, 422, 306, 496, 210, 632, 397, 843, 844, + 210, 390, 397, 298, 306, 309, 0, 393, 397, 210, + 302, 210, 397, 210, 397, 306, 513, 210, 823, 306, + 888, 0, 457, 459, 210, 210, 475, 367, 0, 94, + 830, 558, 306, 832, 306, 309, 29, 370, 745, 477, + 548, 253, 541, 42, 93, 532, 306, 309, 775, 860, + 306, 462, 256, 306, 309, 306, 309, 306, 309, 711, + 209, 306, 832, 306, 309, 306, 309, 306, 353, 306, + 446, 341, 336, 632, 306, 334, 210, 566, 0, 678, + 306, 309, 489, 675, 786, 969, 633, 341, 832, 0, + 715, 712, 0, 483, 306, 832, 306, 309, 0, 915, + 916, 0, 344, 917, 306, 439, 306, 604, 306, 309, + 0, 823, 306, 309, 659, 302, 306, 513, 306, 621, + 711, 94, 845, 306, 496, 633, 306, 506, 94, 94, + 341, 832, 0, 11, 306, 470, 93, 0, 29, 417, + 94, 819, 94, 93, 93, 42, 0, 720, 306, 621, + 0, 715, 712, 0, 0, 93, 1014, 93, 94, 550, + 1016, 1015, 1013, 29, 0, 845, 94, 758, 463, 95, + 42, 94, 0, 93, 306, 506, 95, 95, 0, 781, + 735, 93, 94, 531, 700, 354, 93, 447, 95, 765, + 95, 705, 335, 685, 289, 691, 199, 93, 293, 291, + 0, 499, 775, 890, 29, 851, 95, 281, 259, 0, + 0, 42, 198, 29, 95, 306, 309, 767, 313, 95, + 42, 800, 441, 302, 605, 197, 94, 94, 306, 309, + 95, 0, 370, 754, 857, 11, 622, 0, 560, 94, + 509, 93, 93, 178, 508, 328, 812, 453, 94, 472, + 805, 0, 471, 107, 93, 827, 0, 1075, 0, 0, + 11, 0, 780, 93, 629, 94, 622, 834, 817, 29, + 811, 29, 341, 336, 95, 95, 42, 29, 42, 94, + 93, 640, 279, 763, 42, 434, 0, 95, 512, 201, + 103, 94, 508, 0, 93, 438, 94, 94, 0, 0, + 94, 11, 0, 344, 0, 854, 93, 29, 94, 29, + 11, 93, 93, 95, 42, 93, 42, 104, 0, 29, + 794, 94, 797, 93, 0, 0, 42, 95, 0, 0, + 94, 96, 94, 0, 0, 29, 93, 0, 201, 95, + 369, 0, 42, 94, 95, 93, 193, 93, 95, 681, + 760, 0, 184, 327, 0, 0, 95, 94, 93, 749, + 94, 0, 796, 0, 0, 406, 11, 200, 11, 95, + 681, 753, 93, 283, 11, 93, 799, 1003, 95, 94, + 95, 681, 752, 0, 200, 42, 0, 0, 94, 0, + 0, 95, 681, 751, 93, 350, 0, 1063, 0, 94, + 662, 0, 94, 93, 11, 95, 11, 94, 95, 681, + 761, 94, 42, 200, 93, 94, 11, 93, 0, 0, + 306, 309, 93, 910, 94, 664, 93, 95, 0, 0, + 93, 94, 11, 0, 42, 0, 95, 370, 371, 93, + 201, 635, 94, 42, 750, 637, 93, 0, 201, 94, + 95, 681, 748, 94, 0, 0, 200, 93, 94, 95, + 681, 747, 200, 95, 93, 201, 1000, 409, 93, 0, + 42, 0, 200, 93, 42, 205, 0, 0, 0, 95, + 1052, 643, 1085, 0, 0, 0, 42, 0, 0, 1008, + 95, 681, 762, 0, 201, 0, 94, 95, 0, 1000, + 0, 1060, 94, 660, 42, 0, 95, 681, 680, 0, + 0, 93, 94, 645, 0, 200, 947, 93, 946, 948, + 953, 949, 952, 200, 410, 414, 200, 93, 205, 0, + 0, 200, 0, 200, 907, 0, 885, 201, 0, 205, + 1082, 1083, 0, 201, 0, 369, 205, 200, 0, 0, + 724, 726, 0, 201, 0, 94, 0, 0, 274, 0, + 885, 887, 0, 94, 11, 0, 94, 904, 0, 278, + 93, 94, 0, 94, 0, 0, 320, 0, 93, 0, + 200, 93, 0, 0, 200, 887, 93, 94, 93, 0, + 0, 0, 1052, 885, 0, 0, 201, 885, 1053, 0, + 0, 0, 93, 0, 201, 0, 0, 201, 1026, 0, + 0, 0, 201, 0, 201, 0, 0, 0, 887, 0, + 94, 1059, 887, 1026, 94, 0, 0, 947, 201, 946, + 948, 953, 949, 952, 0, 93, 1009, 0, 0, 93, + 0, 0, 947, 0, 946, 948, 953, 949, 952, 1008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 1009, 0, 0, 201, 0, 0, 947, 0, + 946, 948, 953, 949, 952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 849, 849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 849, 0, 0, 909, 0, 908, 910, 915, 911, 914, + 94, 0, 0, 641, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1318,369 +1516,300 @@ const short QmlJSGrammar::action_info [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + 0 }; const short QmlJSGrammar::action_check [] = { - 7, 34, 30, 2, 34, 62, 62, 7, 62, 34, - 101, 34, 34, 57, 34, 57, 83, 69, 7, 17, - 30, 50, 15, 70, 70, 37, 7, 30, 37, 34, - 62, 1, 70, 104, 30, 7, 62, 38, 62, 104, - 15, 49, 37, 62, 34, 62, 34, 8, 7, 62, - 34, 57, 113, 7, 7, 57, 7, 35, 37, 7, - 57, 34, 113, 34, 8, 57, 30, 17, 62, 34, - 38, 62, 17, 104, 48, 37, 62, 7, 34, 34, - 57, 57, 48, 7, 15, 34, 113, 8, 17, 8, - 57, 38, 7, 62, 57, 8, 81, 8, 37, 7, - 7, 2, 62, 8, 8, 63, 63, 49, 8, 8, - 7, 63, 7, 7, 17, 58, 34, 63, 58, 17, - 57, 101, 63, 0, 17, 37, 62, 62, 17, 57, - 57, 17, 7, 17, 17, 37, 62, 2, 63, 49, - 1, 37, 34, 34, 66, 83, 2, 37, 57, 37, - 8, 1, 0, 0, 8, 17, 62, 8, 34, 30, - 83, 95, 95, 95, 49, 7, 38, 8, 17, 8, - 57, 17, 17, 7, 37, 95, 1, 57, 37, 23, - 62, 34, 37, 16, 57, 7, 5, 7, 57, 5, - 5, 34, 62, 7, 62, 7, 34, 37, 34, 7, - 57, 7, 83, 8, 34, 37, 37, 34, 8, 20, - 62, 37, 8, 34, 37, 8, 34, 8, 8, 8, - 57, 34, 57, 7, -1, 8, 7, 15, 52, 8, - 6, 32, 56, 62, 62, 15, -1, 25, 41, 0, - 57, 15, 52, 15, 20, 25, 56, 7, 8, 8, - 53, 25, 65, 8, 63, 64, -1, 57, 10, 63, - 64, 63, 64, 35, 8, 58, 62, 57, 57, 63, - 64, 62, 41, 8, 8, 58, 63, 64, 8, 58, - 7, 63, 64, 8, 53, 63, 64, 41, 63, 64, - 63, 64, 63, 64, 43, 25, 63, 64, 8, 53, - 63, 64, 8, 62, 8, 57, 55, 63, 64, 8, - 37, 95, 58, 114, 58, 41, 111, 112, 63, 64, - 63, 64, 57, 63, 64, 63, 64, 53, 62, 8, - 8, 26, 113, 28, 111, 112, 7, 62, 30, 7, - 7, 30, 103, 48, 39, 30, 30, 57, 8, 17, - 111, 97, 57, 7, 63, 64, 62, 37, 62, 7, - 30, 30, 8, 62, 69, 30, 8, -1, 26, 37, - 28, 17, 0, 8, 30, 8, 8, -1, 15, 58, - 34, 39, 17, 63, 64, 63, 64, 79, 15, 12, - 79, 30, 63, 64, 79, 79, 63, 64, 35, 91, - 37, -1, 91, 12, 113, -1, 91, 91, 35, 79, - 79, 26, 12, 28, 79, 63, 64, 63, 22, 23, - -1, 91, 91, 79, 39, 58, 91, -1, 63, 63, - 64, 63, 64, 5, -1, 91, 59, -1, 10, -1, - 79, 26, 65, 28, 26, -1, 28, -1, 108, 109, - 59, 15, 91, -1, 39, 50, 65, 39, -1, 59, - 94, 18, 19, 18, 19, 65, 108, 109, 63, 64, - -1, 35, -1, 127, -1, 103, 18, 19, -1, 106, - 107, 18, 19, 111, -1, 57, 24, 25, -1, 46, - 47, 46, 47, 15, -1, 33, 100, 7, 36, 15, - 38, 22, 23, 15, 46, 47, 15, -1, -1, 46, - 47, -1, -1, 35, -1, 37, -1, -1, 113, 35, - -1, 37, -1, 35, -1, 37, 35, -1, 37, 118, - 119, 120, 121, 122, 123, -1, 24, 25, -1, 15, - -1, -1, 106, 107, 32, 33, -1, -1, 36, -1, - 38, 15, -1, 63, 64, -1, -1, -1, 34, 35, - -1, 37, -1, -1, -1, -1, -1, 88, 89, -1, - 34, 35, -1, 37, 24, 25, 30, -1, -1, 100, - 10, -1, 32, 33, 106, 107, 36, -1, 38, -1, - 106, 107, 22, 23, 106, 107, -1, 106, 107, -1, - -1, -1, -1, -1, 34, 30, -1, -1, -1, -1, - -1, -1, 30, -1, -1, -1, 70, 71, 72, -1, - 24, 25, -1, -1, -1, -1, -1, -1, -1, 33, - 106, 107, 36, -1, 38, 65, -1, -1, -1, -1, - -1, -1, 106, 107, -1, 70, 71, 72, 15, 79, - 104, 105, 70, 71, 72, -1, -1, -1, 88, 89, - 114, 115, 116, 30, -1, -1, -1, -1, -1, -1, - 100, -1, -1, 127, -1, -1, -1, -1, -1, 104, - 105, -1, -1, -1, 15, -1, 104, 105, -1, 114, - 115, 116, -1, -1, -1, -1, 114, 115, 116, 30, - -1, -1, 127, 70, 71, 72, -1, -1, 15, 127, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 30, -1, -1, 30, -1, -1, -1, - 30, -1, -1, -1, -1, -1, -1, 104, 105, 70, - 71, 72, -1, -1, -1, -1, -1, 114, 115, 116, - 30, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 127, -1, -1, 70, 71, 72, 70, 71, 72, -1, - 70, 71, 72, 104, 105, -1, -1, 30, -1, -1, - -1, -1, -1, 114, 115, 116, -1, -1, -1, -1, - 70, 71, 72, -1, -1, -1, 127, 104, 105, -1, - 104, 105, 102, 30, 104, 105, -1, 114, 115, 116, - 114, 115, 116, 113, 114, 115, 116, 70, 71, 72, - 127, -1, 102, 127, 104, 105, 15, 127, -1, -1, - -1, -1, -1, 113, 114, 115, 116, -1, -1, -1, - -1, 30, -1, 70, 71, 72, -1, 127, -1, 102, - -1, 104, 105, -1, -1, -1, -1, -1, -1, -1, - 113, 114, 115, 116, -1, 30, -1, -1, -1, -1, - 30, -1, -1, -1, 127, 102, -1, 104, 105, -1, - -1, 70, 71, 72, -1, -1, 113, 114, 115, 116, - -1, 30, -1, -1, -1, -1, -1, -1, -1, -1, - 127, -1, -1, -1, -1, 70, 71, 72, -1, -1, - 70, 71, 72, -1, -1, 104, 105, -1, -1, -1, - -1, -1, -1, -1, -1, 114, 115, 116, -1, -1, - -1, 70, 71, 72, -1, -1, -1, 102, 127, 104, - 105, 30, 102, -1, 104, 105, -1, -1, 113, 114, - 115, 116, -1, 113, 114, 115, 116, -1, -1, -1, - -1, -1, 127, 102, -1, 104, 105, 127, -1, -1, - -1, 30, -1, -1, 113, 114, 115, 116, 37, -1, - -1, 70, 71, 72, -1, -1, -1, -1, 127, 30, - 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, - -1, 70, 71, 72, -1, 104, 105, -1, -1, -1, - -1, -1, -1, -1, -1, 114, 115, 116, -1, 70, - 71, 72, -1, -1, -1, -1, -1, 30, 127, -1, - -1, 30, -1, 102, 37, 104, 105, -1, -1, -1, - -1, -1, -1, -1, 113, 114, 115, 116, -1, -1, - 101, 102, -1, 104, 105, -1, -1, -1, 127, -1, - -1, -1, 113, 114, 115, 116, -1, 70, 71, 72, - -1, 70, 71, 72, -1, -1, 127, -1, 30, -1, - 79, -1, -1, -1, -1, 37, -1, -1, -1, -1, - -1, -1, 91, 30, -1, -1, -1, -1, -1, 102, - 37, 104, 105, -1, -1, 104, 105, -1, -1, -1, - 113, 114, 115, 116, 30, 114, 115, 116, 70, 71, - 72, -1, -1, -1, 127, -1, -1, -1, 127, -1, - -1, 30, -1, 70, 71, 72, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 63, 64, -1, - 102, -1, 104, 105, 70, 71, 72, -1, -1, -1, - -1, 113, 114, 115, 116, 102, -1, 104, 105, -1, - -1, 70, 71, 72, -1, 127, 113, 114, 115, 116, - -1, -1, -1, -1, -1, -1, 102, -1, 104, 105, - 127, -1, 30, -1, -1, -1, -1, 113, 114, 115, - 116, -1, 101, 102, -1, 104, 105, -1, -1, -1, - -1, 127, -1, -1, 113, 114, 115, 116, -1, -1, - -1, -1, -1, -1, -1, 63, 64, -1, 127, -1, - -1, 30, 70, 71, 72, 34, 35, -1, -1, -1, + 7, 34, 62, 57, 116, 37, 37, 57, 34, 62, + 34, 57, 37, 62, 0, 62, 34, 57, 37, 15, + 50, 0, 96, 1, 16, 37, 49, 83, 96, 96, + 34, 8, 2, 5, 5, 57, 34, 52, 5, 34, + 15, 7, 103, 57, 34, 7, 15, 8, 8, 17, + 37, 62, 17, 34, 57, 7, 20, 62, 34, 7, + 62, 34, 70, 37, 7, 48, 66, 17, 57, 62, + 8, 17, 17, 17, 7, 38, 34, 30, 35, 38, + 17, 63, 17, 30, 7, 34, 96, 7, 1, 83, + 1, 8, 48, 34, 34, 49, 2, 7, 83, 17, + 2, 52, 57, 37, 34, 37, 37, 34, 37, 30, + 7, 37, 103, 38, 17, 34, 52, 17, 7, 7, + 62, 49, 34, 62, 7, 34, 7, 7, 7, 34, + 17, 30, 116, 37, 0, -1, 116, 8, 62, 34, + 34, 63, 34, 57, 8, 1, 62, 37, -1, 57, + 57, 8, 37, 7, 2, 70, 57, 34, 30, 34, + 38, 57, 30, 30, 62, 30, 57, 30, 8, 62, + 8, -1, 23, 7, 7, 57, 62, 8, 62, 8, + -1, -1, 8, 57, 34, 17, 62, 7, -1, 34, + 17, 34, 62, 62, 52, 37, 49, 70, 37, 8, + 8, 63, 17, 63, 17, 57, 17, 8, 63, 7, + 57, 15, 34, 7, 63, 8, 62, -1, 62, 15, + 57, 62, 83, 8, 15, 8, 8, 62, 8, 25, + 34, 41, 62, 32, 58, 58, 57, -1, 57, 7, + 8, 69, 58, 53, 35, 81, 8, 106, 37, 63, + 64, 63, 64, 37, 8, 41, 63, 64, 63, 64, + 63, 64, 41, 63, 64, 58, 15, 53, 63, 64, + 43, 63, 64, 70, 53, 57, 25, 62, 58, 62, + 8, 106, 55, 99, 8, 63, 64, 63, 64, 63, + 64, 63, 64, 41, 63, 64, 114, 115, 63, 64, + 62, 8, 8, 63, 64, 53, 8, 15, 8, 7, + 107, 63, 64, 63, 64, 8, 8, 25, 117, 63, + 64, 56, 116, 8, 56, 8, 8, 116, 8, 10, + 63, 64, 116, 7, 62, 8, 8, 34, 62, 37, + 63, 64, 7, 25, 114, 115, 7, 26, 0, 28, + 8, 58, 8, 7, 7, 57, 62, 57, 7, 0, + 39, 17, 97, 8, 57, 97, 58, 30, 65, 8, + 12, 26, 57, 28, -1, 58, 57, -1, 17, 30, + 6, 34, 62, 30, 39, 58, 63, 64, -1, -1, + 62, 26, -1, 28, 20, 26, 5, 28, 63, 64, + 37, 10, 63, 64, 39, 63, 64, 63, 39, 63, + 64, 8, 48, -1, 63, 64, 79, 59, 95, 30, + 30, 57, 96, 65, 63, 7, 63, 64, 79, 92, + 30, 12, 79, 69, 26, 17, 28, 30, 12, 30, + 30, 92, 63, 64, 30, 92, 50, 39, 57, 8, + 15, 22, 23, 105, 15, 37, 22, 23, -1, 63, + 64, -1, 114, -1, 105, -1, 111, 112, 79, 79, + 35, -1, -1, 114, 35, -1, -1, 130, 59, 79, + -1, 92, 92, -1, 65, 59, 79, -1, 79, 79, + -1, 65, 92, 79, -1, 116, 18, 19, 15, 92, + -1, 92, 92, -1, 63, 64, 92, 15, 15, 18, + 19, -1, 116, 15, 111, 112, -1, -1, 35, 15, + 37, -1, 88, 89, 46, 47, -1, 35, 35, 37, + 37, 102, -1, 35, -1, 37, 102, 46, 47, 35, + 15, 37, -1, -1, 109, 110, 15, -1, 109, 110, + -1, 121, 122, 123, 124, 125, 126, -1, -1, 34, + 35, -1, 37, -1, -1, 34, 35, 10, 37, 24, + 25, -1, -1, 24, 25, -1, -1, -1, 33, 22, + 23, 36, 33, 38, -1, 36, -1, 38, -1, -1, + 10, 34, 109, 110, -1, -1, -1, 24, 25, -1, + -1, 109, 110, -1, -1, 32, 33, 109, 110, 36, + 30, 38, -1, 109, 110, -1, -1, 24, 25, -1, + -1, -1, 65, -1, -1, 32, 33, 18, 19, 36, + 30, 38, -1, -1, 109, 110, 79, 30, -1, -1, + 109, 110, -1, -1, -1, 88, 89, 15, -1, -1, + 70, 71, 72, -1, -1, 46, 47, -1, -1, 102, + -1, 116, 30, -1, -1, 116, 15, -1, -1, -1, + 70, 71, 72, -1, -1, -1, -1, 70, 71, 72, + -1, 30, -1, -1, -1, -1, 106, 107, 108, 116, + -1, -1, -1, -1, -1, -1, -1, 117, 118, 119, + -1, -1, 70, 71, 72, -1, 106, 107, 108, 116, + -1, -1, -1, 106, 107, 108, -1, 117, 118, 119, + 15, 70, 71, 72, 117, 118, 119, -1, -1, -1, + 130, -1, -1, -1, -1, 30, -1, 130, 106, 107, + 108, -1, -1, 30, -1, -1, -1, -1, -1, 117, + 118, 119, -1, -1, -1, -1, -1, 106, 107, 108, + -1, -1, 130, 30, -1, -1, -1, -1, 117, 118, + 119, -1, -1, -1, -1, 70, 71, 72, -1, -1, + -1, 130, -1, 70, 71, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, - -1, -1, -1, -1, 102, -1, 104, 105, -1, -1, - -1, 70, 71, 72, -1, 113, 114, 115, 116, 30, - -1, -1, -1, 34, 35, -1, -1, -1, -1, 127, - 65, -1, -1, -1, 69, 70, 71, 72, -1, -1, - -1, -1, -1, 102, -1, 104, 105, 30, -1, -1, - -1, 34, 35, -1, 113, 114, 115, 116, -1, 70, - 71, 72, -1, -1, -1, -1, -1, 102, 127, 104, - 105, 30, -1, -1, -1, 34, 35, -1, 113, 114, - 115, 116, -1, -1, -1, -1, 97, 70, 71, 72, - -1, 102, 127, 104, 105, -1, -1, -1, -1, -1, - -1, -1, 113, 114, 115, 116, -1, -1, -1, -1, - -1, 70, 71, 72, 97, -1, 127, -1, -1, 102, - -1, 104, 105, -1, -1, -1, -1, -1, -1, -1, - 113, 114, 115, 116, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 102, 127, 104, 105, -1, -1, -1, - -1, -1, -1, -1, 113, 114, 115, 116, 30, -1, - -1, -1, 34, 35, -1, -1, -1, -1, 127, -1, - -1, 3, -1, 30, -1, -1, -1, 34, 35, -1, - -1, 13, -1, -1, -1, 17, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 27, -1, 29, 70, 71, - 72, -1, -1, -1, -1, -1, -1, -1, 40, -1, - 42, 43, -1, 70, 71, 72, -1, -1, -1, 51, - -1, -1, 54, 55, -1, 97, -1, -1, 60, -1, - 102, -1, 104, 105, -1, 67, 68, -1, -1, -1, - 97, 113, 114, 115, 116, 102, -1, 104, 105, -1, - -1, -1, 84, 3, -1, 127, 113, 114, 115, 116, - -1, -1, -1, 13, -1, -1, -1, 17, -1, -1, - 127, -1, -1, -1, -1, -1, -1, 27, -1, 29, - -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, - 40, -1, 42, 43, -1, -1, -1, -1, 30, -1, - -1, 51, 34, 35, 54, 55, -1, -1, -1, -1, - 60, -1, -1, -1, -1, -1, -1, 67, 68, -1, -1, -1, -1, 70, 71, 72, -1, -1, -1, -1, - -1, -1, -1, -1, 84, -1, -1, -1, 70, 71, - 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 97, -1, -1, -1, -1, 102, -1, 104, 105, -1, - -1, -1, -1, -1, -1, 97, 113, 114, 115, 116, - 102, -1, 104, 105, -1, -1, -1, -1, -1, -1, - 127, 113, 114, 115, 116, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 127, -1, -1, 30, -1, - -1, -1, 34, 35, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 106, 107, 108, -1, -1, -1, -1, -1, 106, + 107, 108, 117, 118, 119, -1, -1, -1, -1, -1, + 117, 118, 119, 30, -1, 130, 30, 104, -1, 106, + 107, 108, -1, 130, -1, -1, -1, 15, -1, 116, + 117, 118, 119, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 30, 130, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 70, 71, 72, 70, 71, 72, -1, + -1, -1, -1, -1, -1, 79, -1, 30, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 92, -1, + -1, -1, 70, 71, 72, 30, -1, 104, -1, 106, + 107, 108, 106, 107, 108, -1, -1, -1, -1, 116, + 117, 118, 119, 117, 118, 119, -1, 70, 71, 72, + -1, -1, -1, 130, -1, -1, 130, 30, 106, 107, + 108, -1, -1, -1, -1, 70, 71, 72, -1, 117, + 118, 119, -1, -1, 79, -1, -1, -1, -1, -1, + -1, 104, 130, 106, 107, 108, 30, 92, -1, -1, + -1, -1, -1, 116, 117, 118, 119, 70, 71, 72, + -1, 106, 107, 108, -1, -1, -1, 130, -1, -1, + -1, 30, 117, 118, 119, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 130, 70, 71, 72, 30, + -1, 104, -1, 106, 107, 108, 37, -1, -1, -1, + -1, -1, -1, 116, 117, 118, 119, -1, -1, -1, + -1, 70, 71, 72, -1, -1, -1, 130, -1, -1, + 104, -1, 106, 107, 108, -1, -1, -1, -1, 70, + 71, 72, 116, 117, 118, 119, -1, -1, -1, -1, + -1, -1, -1, -1, 103, 104, 130, 106, 107, 108, + 30, -1, -1, -1, -1, 30, -1, 116, 117, 118, + 119, -1, 37, 104, -1, 106, 107, 108, -1, -1, + -1, 130, -1, -1, -1, 116, 117, 118, 119, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 130, + 70, 71, 72, -1, -1, 70, 71, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, - 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 97, -1, -1, -1, -1, - 102, -1, 104, 105, -1, -1, -1, -1, -1, -1, - -1, 113, 114, 115, 116, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 127, -1, -1, 3, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 13, -1, - -1, -1, 17, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 27, -1, 29, -1, -1, 32, -1, -1, - -1, -1, -1, -1, -1, 40, -1, 42, 43, -1, - -1, -1, -1, -1, -1, -1, 51, -1, -1, 54, - 55, -1, -1, -1, -1, 60, -1, -1, -1, -1, - -1, -1, 67, 68, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 114, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 12, 13, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, - -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, - 37, -1, -1, -1, -1, -1, -1, 44, -1, -1, - -1, 48, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 69, 70, 71, 72, -1, 74, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, - 87, -1, -1, -1, -1, 92, -1, -1, -1, -1, - -1, -1, 99, 100, -1, 102, -1, 104, 105, 106, - 107, -1, -1, -1, -1, -1, 113, 114, 115, 116, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 127, -1, -1, 12, 13, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, - -1, 30, -1, -1, -1, 34, 35, -1, 37, -1, - -1, -1, -1, -1, -1, 44, -1, -1, -1, 48, + -1, 30, -1, -1, -1, -1, -1, -1, 37, -1, + -1, -1, -1, -1, 104, -1, 106, 107, 108, 104, + -1, 106, 107, 108, -1, -1, 116, 117, 118, 119, + -1, 116, 117, 118, 119, -1, -1, -1, -1, -1, + 130, 70, 71, 72, 30, 130, -1, -1, -1, -1, + -1, 37, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 30, -1, -1, -1, 34, 35, 30, + -1, -1, -1, 34, 35, 104, -1, 106, 107, 108, + -1, -1, -1, -1, 70, 71, 72, 116, 117, 118, + 119, -1, -1, -1, 30, -1, -1, -1, 34, 35, + -1, 130, -1, 70, 71, 72, -1, -1, -1, 70, + 71, 72, -1, -1, -1, -1, -1, -1, 104, 30, + 106, 107, 108, 34, 35, -1, -1, -1, -1, -1, + 116, 117, 118, 119, 70, 71, 72, 104, -1, 106, + 107, 108, -1, 104, 130, 106, 107, 108, 30, 116, + 117, 118, 119, -1, -1, 116, 117, 118, 119, 70, + 71, 72, -1, 130, -1, -1, -1, -1, 104, 130, + 106, 107, 108, -1, -1, -1, -1, -1, -1, -1, + 116, 117, 118, 119, -1, -1, -1, -1, 70, 71, + 72, -1, -1, 104, 130, 106, 107, 108, -1, -1, + -1, -1, -1, 3, -1, 116, 117, 118, 119, -1, + -1, -1, -1, 13, -1, -1, -1, 17, -1, 130, + -1, 103, 104, -1, 106, 107, 108, 27, -1, 29, + -1, -1, -1, -1, 116, 117, 118, 119, -1, -1, + 40, -1, 42, 43, -1, 30, -1, -1, 130, 34, + 35, 51, 30, -1, 54, 55, 34, 35, -1, -1, + 60, -1, -1, -1, -1, -1, -1, 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 70, 71, 72, -1, -1, + -1, -1, 70, 71, 72, -1, -1, -1, -1, -1, + -1, -1, 30, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 104, + -1, 106, 107, 108, -1, -1, 104, -1, 106, 107, + 108, 116, 117, 118, 119, 63, 64, -1, 116, 117, + 118, 119, 70, 71, 72, 130, -1, -1, -1, -1, + -1, -1, 130, -1, -1, -1, 30, -1, -1, -1, + 34, 35, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 104, -1, 106, 107, + 108, -1, -1, -1, -1, -1, -1, -1, 116, 117, + 118, 119, -1, -1, -1, -1, 70, 71, 72, -1, + 3, -1, 130, -1, -1, -1, -1, -1, -1, -1, + 13, -1, -1, -1, 17, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 27, -1, 29, -1, -1, -1, + 104, 30, 106, 107, 108, 34, -1, 40, -1, 42, + 43, -1, 116, 117, 118, 119, -1, -1, 51, -1, + -1, 54, 55, -1, -1, -1, 130, 60, -1, -1, + 30, -1, -1, -1, 67, 68, 65, -1, -1, -1, + 69, 70, 71, 72, -1, -1, -1, -1, -1, -1, + -1, 84, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 63, 64, -1, -1, -1, -1, -1, + 70, 71, 72, -1, -1, 104, -1, 106, 107, 108, + -1, -1, -1, -1, -1, 3, -1, 116, 117, 118, + 119, -1, -1, -1, -1, 13, -1, -1, -1, 17, + -1, 130, -1, -1, 104, -1, 106, 107, 108, 27, + -1, 29, -1, -1, 32, -1, 116, 117, 118, 119, + -1, -1, 40, -1, 42, 43, -1, -1, -1, -1, + 130, -1, -1, 51, 30, -1, 54, 55, 34, 35, + -1, -1, 60, -1, -1, -1, -1, -1, -1, 67, + 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, -1, -1, -1, + -1, -1, -1, -1, 70, 71, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 69, 70, 71, 72, -1, 74, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, - -1, -1, -1, 92, -1, -1, -1, -1, -1, -1, - 99, 100, -1, 102, -1, 104, 105, 106, 107, -1, - -1, -1, -1, -1, 113, 114, 115, 116, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 127, -1, - -1, 12, 13, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, -1, -1, -1, -1, -1, -1, 30, - -1, -1, -1, 34, 35, -1, 37, -1, -1, -1, - -1, -1, -1, 44, -1, -1, -1, 48, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 117, + -1, -1, -1, 99, -1, -1, -1, -1, 104, -1, + 106, 107, 108, -1, -1, -1, -1, -1, -1, -1, + 116, 117, 118, 119, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 130, -1, -1, -1, 12, 13, + -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, + -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, + 34, 35, -1, 37, -1, -1, -1, -1, -1, -1, + 44, -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 69, 70, - 71, 72, -1, 74, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, - 91, 92, -1, -1, -1, -1, -1, -1, 99, 100, - -1, 102, -1, 104, 105, 106, 107, -1, -1, -1, - -1, -1, 113, 114, 115, 116, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 127, -1, -1, 12, - 13, -1, 15, -1, -1, -1, -1, -1, -1, 22, - 23, -1, -1, -1, -1, -1, -1, 30, -1, -1, - -1, 34, 35, -1, 37, -1, -1, -1, -1, -1, - -1, 44, -1, -1, -1, 48, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 69, 70, 71, 72, -1, + 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 85, 86, 87, -1, -1, -1, -1, -1, 93, + -1, -1, -1, -1, -1, -1, -1, 101, 102, -1, + 104, -1, 106, 107, 108, 109, 110, -1, -1, -1, + -1, -1, 116, 117, 118, 119, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 130, -1, -1, -1, + 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, -1, -1, -1, -1, -1, -1, 30, -1, + -1, -1, 34, 35, -1, 37, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, - -1, 74, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 85, 86, 87, -1, -1, -1, -1, 92, - -1, -1, -1, -1, -1, -1, 99, 100, -1, 102, - -1, 104, 105, 106, 107, -1, -1, -1, -1, -1, - 113, 114, 115, 116, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 127, -1, -1, 12, 13, -1, - 15, -1, -1, -1, -1, -1, -1, 22, 23, -1, - -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, - 35, -1, 37, -1, -1, -1, -1, -1, -1, 44, - -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, + 72, -1, 74, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 85, 86, 87, -1, -1, -1, -1, + -1, 93, -1, -1, -1, -1, -1, -1, -1, 101, + 102, -1, 104, -1, 106, 107, 108, 109, 110, -1, + -1, -1, -1, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 12, 13, -1, -1, -1, -1, -1, -1, + -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, + 30, -1, -1, -1, 34, 35, -1, 37, -1, -1, + -1, -1, -1, -1, 44, -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 69, + 70, 71, 72, -1, 74, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, + 90, -1, -1, 93, -1, -1, -1, -1, -1, -1, + -1, 101, 102, -1, 104, -1, 106, 107, 108, 109, + 110, -1, -1, -1, -1, -1, 116, 117, 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 85, 86, 87, -1, -1, -1, -1, 92, -1, -1, - -1, -1, -1, -1, 99, 100, -1, 102, -1, 104, - 105, 106, 107, -1, -1, -1, -1, -1, 113, 114, - 115, 116, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 127, -1, -1, 10, -1, 12, 13, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, - -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, - 35, -1, 37, -1, -1, -1, -1, -1, -1, 44, - -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, + 130, -1, -1, -1, 12, 13, -1, 15, -1, -1, + -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, + -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, + -1, -1, -1, -1, -1, -1, 44, -1, -1, -1, + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, - -1, -1, -1, -1, 79, -1, -1, -1, -1, -1, - 85, 86, 87, -1, -1, -1, -1, 92, -1, -1, - -1, 96, -1, -1, 99, 100, -1, 102, -1, 104, - 105, 106, 107, -1, -1, -1, -1, -1, 113, 114, - 115, 116, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 127, -1, -1, 10, -1, 12, 13, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, - -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, - 35, -1, 37, -1, -1, -1, -1, -1, -1, 44, - -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, - -1, -1, 57, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, - -1, -1, -1, -1, 79, -1, -1, -1, -1, -1, - 85, 86, 87, -1, -1, -1, -1, 92, -1, -1, - -1, 96, -1, -1, 99, 100, -1, 102, -1, 104, - 105, 106, 107, -1, -1, -1, -1, -1, 113, 114, - 115, 116, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 127, -1, -1, 10, -1, 12, 13, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, - -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, - 35, -1, 37, -1, -1, -1, -1, -1, -1, 44, - -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, - -1, -1, 57, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, - -1, -1, -1, -1, 79, -1, -1, -1, -1, -1, - 85, 86, 87, -1, -1, -1, -1, 92, -1, -1, - -1, 96, -1, -1, 99, 100, -1, 102, -1, 104, - 105, 106, 107, -1, -1, -1, -1, -1, 113, 114, - 115, 116, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 127, -1, -1, 11, 12, 13, -1, -1, + -1, 69, 70, 71, 72, -1, 74, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, + -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, 101, 102, -1, 104, -1, 106, 107, + 108, 109, 110, -1, -1, -1, -1, -1, 116, 117, + 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 130, -1, -1, -1, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, 35, - -1, 37, -1, -1, -1, 41, -1, 43, 44, 45, - -1, -1, 48, -1, -1, -1, -1, 53, -1, 55, + -1, 37, -1, -1, -1, -1, -1, -1, 44, -1, + -1, -1, 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, -1, - 76, -1, 78, -1, 80, -1, -1, -1, -1, 85, - 86, 87, -1, -1, -1, -1, 92, -1, -1, -1, - -1, -1, -1, 99, 100, -1, 102, -1, 104, 105, - 106, 107, -1, -1, -1, -1, -1, 113, 114, 115, - 116, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 127, -1, -1, 11, 12, 13, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, - -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, - 37, -1, -1, -1, 41, -1, 43, 44, 45, -1, - -1, 48, -1, -1, -1, -1, 53, -1, 55, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 69, 70, 71, 72, -1, 74, -1, 76, - -1, 78, -1, 80, -1, -1, -1, -1, 85, 86, - 87, -1, -1, -1, -1, 92, -1, -1, -1, -1, - -1, 98, 99, 100, -1, 102, -1, 104, 105, 106, - 107, -1, -1, -1, -1, -1, 113, 114, 115, 116, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 127, -1, -1, 11, 12, 13, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, - -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, - -1, -1, -1, 41, -1, 43, 44, 45, -1, -1, - 48, -1, -1, -1, -1, 53, -1, 55, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 69, 70, 71, 72, -1, 74, -1, 76, -1, - 78, -1, 80, -1, -1, -1, -1, 85, 86, 87, - -1, -1, -1, -1, 92, -1, -1, -1, -1, -1, - 98, 99, 100, -1, 102, -1, 104, 105, 106, 107, - -1, -1, -1, -1, -1, 113, 114, 115, 116, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 127, - -1, -1, 11, 12, 13, -1, -1, -1, -1, -1, - -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, - -1, 30, -1, -1, -1, 34, 35, -1, 37, -1, - -1, -1, 41, -1, 43, 44, 45, -1, -1, 48, - -1, -1, -1, -1, 53, -1, 55, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, + 86, 87, -1, -1, -1, -1, 92, 93, -1, -1, + -1, -1, -1, -1, -1, 101, 102, -1, 104, -1, + 106, 107, 108, 109, 110, -1, -1, -1, -1, -1, + 116, 117, 118, 119, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 130, -1, -1, -1, 12, 13, + -1, 15, -1, -1, -1, -1, -1, -1, 22, 23, + -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, + 34, 35, -1, 37, -1, -1, -1, -1, -1, -1, + 44, -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 69, 70, 71, 72, -1, 74, -1, 76, -1, 78, - -1, 80, -1, -1, -1, -1, 85, 86, 87, -1, - -1, -1, -1, 92, -1, -1, -1, -1, -1, 98, - 99, 100, -1, 102, -1, 104, 105, 106, 107, -1, - -1, -1, -1, -1, 113, 114, 115, 116, -1, -1, - -1, -1, -1, -1, -1, -1, 125, -1, 127, -1, - -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 69, 70, 71, 72, -1, + 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 85, 86, 87, -1, -1, -1, -1, -1, 93, + -1, -1, -1, -1, -1, -1, -1, 101, 102, -1, + 104, -1, 106, 107, 108, 109, 110, -1, -1, -1, + -1, -1, 116, 117, 118, 119, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 130, -1, -1, -1, + 10, -1, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, -1, -1, - -1, 41, -1, 43, 44, 45, -1, -1, 48, -1, - -1, -1, -1, 53, -1, 55, -1, -1, -1, -1, + -1, -1, -1, -1, 44, -1, -1, -1, 48, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 69, - 70, 71, 72, -1, 74, -1, 76, -1, 78, -1, - 80, -1, -1, -1, -1, 85, 86, 87, -1, -1, - -1, -1, 92, -1, -1, -1, -1, -1, 98, 99, - 100, -1, 102, -1, 104, 105, 106, 107, -1, -1, - -1, -1, -1, 113, 114, 115, 116, -1, -1, -1, - -1, -1, -1, -1, 124, -1, -1, 127, -1, -1, - 8, -1, -1, 11, 12, 13, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, - -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, - -1, -1, -1, 41, -1, 43, 44, 45, -1, -1, - 48, -1, -1, -1, -1, 53, -1, 55, -1, -1, + 70, 71, 72, -1, 74, -1, -1, -1, -1, 79, + -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, + 90, -1, -1, 93, -1, -1, -1, -1, 98, -1, + -1, 101, 102, -1, 104, -1, 106, 107, 108, 109, + 110, -1, -1, -1, -1, -1, 116, 117, 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 69, 70, 71, 72, -1, 74, -1, 76, -1, - 78, -1, 80, -1, -1, -1, -1, 85, 86, 87, - -1, -1, -1, -1, 92, -1, -1, -1, -1, -1, - 98, 99, 100, -1, 102, -1, 104, 105, 106, 107, - -1, -1, -1, -1, -1, 113, 114, 115, 116, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 127, + 130, -1, -1, -1, 10, -1, 12, 13, -1, -1, + -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, + -1, -1, -1, -1, 30, -1, -1, -1, 34, 35, + -1, 37, -1, -1, -1, -1, -1, -1, 44, -1, + -1, -1, 48, -1, -1, -1, -1, -1, -1, -1, + -1, 57, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 69, 70, 71, 72, -1, 74, -1, + -1, -1, -1, 79, -1, -1, -1, -1, -1, 85, + 86, 87, -1, -1, 90, -1, -1, 93, -1, -1, + -1, -1, 98, -1, -1, 101, 102, -1, 104, -1, + 106, 107, 108, 109, 110, -1, -1, -1, -1, -1, + 116, 117, 118, 119, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 130, -1, -1, -1, 10, -1, + 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, -1, -1, -1, -1, -1, -1, 30, -1, + -1, -1, 34, 35, -1, 37, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, 48, -1, -1, -1, + -1, -1, -1, -1, -1, 57, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, + 72, -1, 74, -1, -1, -1, -1, 79, -1, -1, + -1, -1, -1, 85, 86, 87, -1, -1, 90, -1, + -1, 93, -1, -1, -1, -1, 98, -1, -1, 101, + 102, -1, 104, -1, 106, 107, 108, 109, 110, -1, + -1, -1, -1, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, -1, @@ -1689,10 +1818,35 @@ const short QmlJSGrammar::action_check [] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, -1, 76, -1, 78, -1, 80, -1, -1, -1, -1, 85, 86, 87, -1, - -1, -1, -1, 92, -1, -1, -1, -1, 97, 98, - 99, 100, -1, 102, -1, 104, 105, 106, 107, -1, - -1, -1, -1, -1, 113, 114, 115, 116, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 127, -1, + -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, + -1, -1, 101, 102, -1, 104, -1, 106, 107, 108, + 109, 110, -1, -1, -1, -1, -1, 116, 117, 118, + 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 130, -1, -1, -1, 11, 12, 13, -1, -1, + -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, + -1, -1, -1, -1, 30, -1, -1, -1, 34, 35, + -1, 37, -1, -1, -1, 41, -1, 43, 44, 45, + -1, -1, 48, -1, -1, -1, -1, 53, -1, 55, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 69, 70, 71, 72, -1, 74, -1, + 76, -1, 78, -1, 80, -1, -1, -1, -1, 85, + 86, 87, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, -1, -1, 100, 101, 102, -1, 104, -1, + 106, 107, 108, 109, 110, -1, -1, -1, -1, -1, + 116, 117, 118, 119, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 130, -1, -1, -1, 11, 12, + 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, + 23, -1, -1, -1, -1, -1, -1, 30, -1, -1, + -1, 34, 35, -1, 37, -1, -1, -1, 41, -1, + 43, 44, 45, -1, -1, 48, -1, -1, -1, -1, + 53, -1, 55, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, + -1, 74, -1, 76, -1, 78, -1, 80, -1, -1, + -1, -1, 85, 86, 87, -1, -1, -1, -1, -1, + 93, -1, -1, -1, -1, -1, -1, 100, 101, 102, + -1, 104, -1, 106, 107, 108, 109, 110, -1, -1, + -1, -1, -1, 116, 117, 118, 119, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 130, -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, -1, -1, @@ -1701,10 +1855,35 @@ const short QmlJSGrammar::action_check [] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, -1, 76, -1, 78, -1, 80, -1, -1, -1, -1, 85, 86, 87, -1, -1, - -1, -1, 92, -1, -1, -1, -1, 97, 98, 99, - 100, -1, 102, -1, 104, 105, 106, 107, -1, -1, - -1, -1, -1, 113, 114, 115, 116, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 127, -1, -1, + -1, -1, -1, 93, -1, -1, -1, -1, -1, 99, + 100, 101, 102, -1, 104, -1, 106, 107, 108, 109, + 110, -1, -1, -1, -1, -1, 116, 117, 118, 119, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 130, -1, -1, -1, 11, 12, 13, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, + -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, + 37, -1, -1, -1, 41, -1, 43, 44, 45, -1, + -1, 48, -1, -1, -1, -1, 53, -1, 55, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 65, -1, + -1, -1, 69, 70, 71, 72, -1, 74, -1, 76, + -1, 78, -1, 80, -1, -1, -1, -1, 85, 86, + 87, -1, -1, -1, -1, -1, 93, -1, -1, -1, + -1, -1, -1, 100, 101, 102, -1, 104, -1, 106, + 107, 108, 109, 110, -1, -1, -1, -1, -1, 116, + 117, 118, 119, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 130, -1, -1, -1, 11, 12, 13, + -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, + -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, + 34, 35, -1, 37, -1, -1, -1, 41, -1, 43, + 44, 45, -1, -1, 48, -1, -1, -1, -1, 53, + -1, 55, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 69, 70, 71, 72, -1, + 74, -1, 76, -1, 78, -1, 80, -1, -1, -1, + -1, 85, 86, 87, -1, -1, -1, -1, -1, 93, + -1, -1, -1, -1, -1, -1, 100, 101, 102, -1, + 104, -1, 106, 107, 108, 109, 110, -1, -1, -1, + -1, -1, 116, 117, 118, 119, -1, -1, -1, -1, + -1, -1, -1, -1, 128, -1, 130, -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, -1, -1, -1, @@ -1713,10 +1892,23 @@ const short QmlJSGrammar::action_check [] = { -1, -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, -1, 76, -1, 78, -1, 80, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, - -1, 92, -1, -1, -1, -1, 97, 98, 99, 100, - -1, 102, -1, 104, 105, 106, 107, -1, -1, -1, - -1, -1, 113, 114, 115, 116, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 127, -1, -1, 11, + -1, -1, 93, -1, -1, -1, -1, -1, -1, 100, + 101, 102, -1, 104, -1, 106, 107, 108, 109, 110, + -1, -1, -1, -1, -1, 116, 117, 118, 119, -1, + -1, -1, -1, -1, -1, -1, 127, -1, -1, 130, + -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, + -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, + -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, + -1, -1, -1, 41, -1, 43, 44, 45, -1, -1, + 48, -1, -1, -1, -1, 53, -1, 55, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 69, 70, 71, 72, -1, 74, -1, 76, -1, + 78, -1, 80, -1, -1, -1, -1, 85, 86, 87, + -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, + -1, 99, 100, 101, 102, -1, 104, -1, 106, 107, + 108, 109, 110, -1, -1, -1, -1, -1, 116, 117, + 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 130, -1, -1, -1, 8, -1, -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, -1, -1, -1, 41, @@ -1725,58 +1917,60 @@ const short QmlJSGrammar::action_check [] = { -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, -1, 76, -1, 78, -1, 80, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, -1, - 92, -1, -1, -1, -1, -1, 98, 99, 100, -1, - 102, -1, 104, 105, 106, 107, -1, -1, -1, -1, - -1, 113, 114, 115, 116, -1, -1, -1, -1, -1, - -1, -1, -1, 125, -1, 127, -1, -1, 11, 12, + -1, 93, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, 104, -1, 106, 107, 108, 109, 110, -1, + -1, -1, -1, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 11, 12, 13, -1, -1, -1, -1, -1, + -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, + -1, 30, -1, -1, -1, 34, 35, -1, 37, -1, + -1, -1, 41, -1, 43, 44, 45, -1, -1, 48, + -1, -1, -1, -1, 53, -1, 55, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 69, 70, 71, 72, -1, 74, -1, 76, -1, 78, + -1, 80, -1, -1, -1, -1, 85, 86, 87, -1, + -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, + 99, 100, 101, 102, -1, 104, -1, 106, 107, 108, + 109, 110, -1, -1, -1, -1, -1, 116, 117, 118, + 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 130, -1, -1, -1, 8, -1, -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, -1, -1, -1, 41, -1, 43, 44, 45, -1, -1, 48, -1, -1, -1, -1, 53, -1, 55, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 65, -1, -1, -1, 69, 70, 71, 72, - -1, 74, -1, 76, -1, 78, -1, 80, -1, -1, - -1, -1, 85, 86, 87, -1, -1, -1, -1, 92, - -1, -1, -1, -1, -1, 98, 99, 100, -1, 102, - -1, 104, 105, 106, 107, -1, -1, -1, -1, -1, - 113, 114, 115, 116, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 127, -1, -1, 11, 12, 13, - -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, - -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, - 34, 35, -1, 37, -1, -1, -1, 41, -1, 43, - 44, 45, -1, -1, 48, -1, -1, -1, -1, 53, - -1, 55, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 65, -1, -1, -1, 69, 70, 71, 72, -1, - 74, -1, 76, -1, 78, -1, 80, -1, -1, -1, - -1, 85, 86, 87, -1, -1, -1, -1, 92, -1, - -1, -1, -1, -1, 98, 99, 100, -1, 102, -1, - 104, 105, 106, 107, -1, -1, -1, -1, -1, 113, - 114, 115, 116, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 127, -1, -1, 8, -1, -1, 11, - 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, - 22, 23, -1, -1, -1, -1, -1, -1, 30, -1, - -1, -1, 34, 35, -1, 37, -1, -1, -1, 41, - -1, 43, 44, 45, -1, -1, 48, -1, -1, -1, - -1, 53, -1, 55, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, - 72, -1, 74, -1, 76, -1, 78, -1, 80, -1, - -1, -1, -1, 85, 86, 87, -1, -1, -1, -1, - 92, -1, -1, -1, -1, -1, 98, 99, 100, -1, - 102, -1, 104, 105, 106, 107, -1, -1, -1, -1, - -1, 113, 114, 115, 116, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 127, -1, -1, 11, 12, - 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, -1, -1, -1, -1, -1, -1, 30, -1, -1, - -1, 34, 35, -1, 37, -1, -1, -1, 41, -1, - 43, 44, 45, -1, -1, 48, -1, -1, -1, -1, - 53, -1, 55, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, -1, 76, -1, 78, -1, 80, -1, -1, - -1, -1, 85, 86, 87, -1, -1, -1, -1, 92, - -1, -1, -1, -1, 97, 98, 99, 100, -1, 102, - -1, 104, 105, 106, 107, -1, -1, -1, -1, -1, - 113, 114, 115, 116, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 127, -1, -1, 11, 12, 13, + -1, -1, 85, 86, 87, -1, -1, -1, -1, -1, + 93, -1, -1, -1, -1, -1, -1, 100, 101, 102, + -1, 104, -1, 106, 107, 108, 109, 110, -1, -1, + -1, -1, -1, 116, 117, 118, 119, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 130, -1, -1, + -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, + -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, + 30, -1, -1, -1, 34, 35, -1, 37, -1, -1, + -1, 41, -1, 43, 44, 45, -1, -1, 48, -1, + -1, -1, -1, 53, -1, 55, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 65, -1, -1, -1, 69, + 70, 71, 72, -1, 74, -1, 76, -1, 78, -1, + 80, -1, -1, -1, -1, 85, 86, 87, -1, -1, + -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, + 100, 101, 102, -1, 104, -1, 106, 107, 108, 109, + 110, -1, -1, -1, -1, -1, 116, 117, 118, 119, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 130, -1, -1, -1, 11, 12, 13, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, + -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, + 37, -1, -1, -1, 41, -1, 43, 44, 45, -1, + -1, 48, -1, -1, -1, -1, 53, -1, 55, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 69, 70, 71, 72, -1, 74, -1, 76, + -1, 78, -1, 80, -1, -1, -1, -1, 85, 86, + 87, -1, -1, -1, -1, -1, 93, -1, -1, -1, + -1, -1, -1, 100, 101, 102, -1, 104, -1, 106, + 107, 108, 109, 110, -1, -1, -1, -1, -1, 116, + 117, 118, 119, -1, -1, -1, -1, -1, -1, -1, + -1, 128, -1, 130, -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, -1, -1, -1, 41, -1, 43, @@ -1784,330 +1978,353 @@ const short QmlJSGrammar::action_check [] = { -1, 55, -1, -1, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, -1, 76, -1, 78, -1, 80, -1, -1, -1, - -1, 85, 86, 87, -1, -1, -1, -1, 92, -1, - -1, -1, -1, 97, 98, 99, 100, -1, 102, -1, - 104, 105, 106, 107, -1, -1, -1, -1, -1, 113, - 114, 115, 116, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 127, -1, -1, 11, 12, 13, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, - -1, -1, -1, -1, -1, 30, -1, -1, -1, 34, - 35, -1, 37, -1, -1, -1, 41, -1, 43, 44, - 45, -1, -1, 48, -1, -1, -1, -1, 53, -1, - 55, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 69, 70, 71, 72, -1, 74, - -1, 76, -1, 78, 79, 80, -1, -1, -1, -1, - 85, 86, 87, 88, 89, -1, -1, 92, -1, -1, - -1, -1, -1, 98, 99, 100, -1, 102, -1, 104, - 105, 106, 107, -1, -1, -1, -1, -1, 113, 114, - 115, 116, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 127, -1, -1, 11, 12, 13, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, - -1, -1, -1, -1, 30, 31, -1, -1, 34, 35, - -1, 37, -1, -1, -1, 41, -1, 43, 44, 45, - -1, -1, 48, -1, -1, -1, -1, 53, -1, 55, - -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, - -1, -1, -1, 69, 70, 71, 72, 73, 74, -1, - 76, 77, 78, -1, 80, -1, 82, -1, -1, 85, - 86, 87, -1, -1, -1, -1, 92, -1, -1, -1, - -1, -1, 98, 99, 100, -1, 102, -1, 104, 105, - 106, 107, -1, -1, -1, -1, -1, 113, 114, 115, - 116, -1, -1, -1, -1, -1, -1, -1, 124, 125, - -1, 127, -1, -1, 11, 12, 13, -1, -1, -1, - -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, - -1, -1, -1, 30, 31, -1, -1, 34, 35, -1, - 37, -1, -1, -1, 41, -1, 43, 44, 45, -1, - -1, 48, -1, -1, -1, -1, 53, -1, 55, -1, - -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, - -1, -1, 69, 70, 71, 72, 73, 74, -1, 76, - 77, 78, -1, 80, -1, 82, -1, -1, 85, 86, - 87, -1, -1, -1, -1, 92, -1, -1, -1, -1, - -1, 98, 99, 100, -1, 102, -1, 104, 105, 106, - 107, -1, -1, -1, -1, -1, 113, 114, 115, 116, - -1, -1, -1, -1, -1, -1, -1, 124, 125, -1, - 127, -1, -1, 4, 5, 6, -1, -1, 9, 10, - 11, -1, -1, 14, -1, 16, -1, -1, -1, 20, - 21, -1, 23, -1, -1, -1, -1, -1, -1, 30, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 44, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 61, -1, -1, -1, -1, -1, -1, -1, -1, 70, - 71, 72, 73, 74, 75, -1, 77, 78, 79, 80, - 81, 82, -1, -1, 85, 86, 87, 88, 89, 90, - 91, -1, -1, -1, -1, 96, -1, -1, 99, 100, - 101, 102, 103, 104, 105, -1, -1, -1, -1, -1, - 111, -1, 113, 114, 115, 116, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 127, -1, -1, 4, - 5, 6, -1, -1, 9, 10, 11, -1, -1, 14, - -1, 16, -1, -1, -1, 20, 21, -1, 23, -1, - -1, -1, -1, -1, -1, 30, 31, 32, 33, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 57, -1, -1, -1, 61, -1, -1, -1, - -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, - 75, -1, 77, 78, 79, 80, 81, 82, -1, -1, - 85, 86, 87, 88, 89, 90, 91, -1, -1, -1, - -1, 96, -1, -1, 99, 100, 101, 102, 103, 104, - 105, -1, -1, -1, -1, -1, 111, -1, 113, 114, - 115, 116, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 127, -1, -1, 4, 5, 6, -1, -1, - 9, 10, 11, -1, -1, 14, -1, 16, -1, -1, - -1, 20, 21, -1, 23, -1, -1, -1, -1, -1, - -1, 30, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 44, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 57, -1, - -1, -1, 61, -1, -1, -1, -1, -1, -1, -1, - -1, 70, 71, 72, 73, 74, 75, -1, 77, 78, - 79, 80, 81, 82, -1, -1, 85, 86, 87, 88, - 89, 90, 91, -1, -1, -1, -1, 96, -1, -1, - 99, 100, 101, 102, 103, 104, 105, -1, -1, -1, - -1, -1, 111, -1, 113, 114, 115, 116, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 127, -1, - -1, 4, 5, 6, -1, -1, 9, 10, 11, -1, - -1, 14, -1, 16, -1, -1, -1, 20, 21, -1, - 23, -1, -1, -1, -1, -1, -1, 30, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 57, -1, -1, -1, 61, -1, - -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, - 73, 74, 75, -1, 77, 78, 79, 80, 81, 82, - -1, -1, 85, 86, 87, 88, 89, 90, 91, -1, - -1, -1, -1, 96, -1, -1, 99, 100, 101, 102, - 103, 104, 105, -1, -1, -1, -1, -1, 111, -1, - 113, 114, 115, 116, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 127, -1, -1, 4, 5, 6, - -1, -1, 9, 10, 11, -1, -1, 14, -1, 16, - -1, -1, -1, 20, 21, -1, 23, -1, -1, -1, - -1, -1, -1, 30, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 44, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 57, -1, -1, -1, 61, -1, -1, -1, -1, -1, - -1, -1, -1, 70, 71, 72, 73, 74, 75, -1, - 77, 78, 79, 80, 81, 82, -1, -1, 85, 86, - 87, 88, 89, 90, 91, -1, -1, -1, -1, 96, - -1, -1, 99, 100, 101, 102, 103, 104, 105, -1, - -1, -1, -1, -1, 111, -1, 113, 114, 115, 116, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 127, -1, -1, 4, 5, 6, -1, -1, 9, 10, - 11, -1, -1, 14, -1, 16, -1, -1, -1, 20, - 21, -1, 23, -1, -1, -1, -1, -1, -1, 30, - 31, 32, 33, -1, 35, -1, -1, -1, -1, -1, - -1, -1, -1, 44, -1, -1, -1, 48, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 61, -1, -1, -1, -1, -1, -1, -1, 69, 70, - 71, 72, 73, 74, 75, -1, 77, 78, 79, 80, - 81, 82, -1, -1, 85, 86, 87, 88, 89, 90, - 91, -1, -1, -1, -1, 96, -1, -1, 99, 100, - 101, 102, 103, 104, 105, -1, -1, -1, -1, -1, - 111, -1, 113, 114, 115, 116, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 127, -1, -1, 4, - 5, 6, -1, -1, 9, 10, 11, -1, -1, 14, - -1, 16, -1, -1, -1, 20, 21, -1, 23, -1, - -1, -1, -1, -1, -1, 30, 31, 32, 33, -1, - 35, -1, -1, -1, -1, -1, -1, -1, -1, 44, - -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 61, -1, -1, -1, - 65, -1, -1, -1, 69, 70, 71, 72, 73, 74, - 75, -1, 77, 78, 79, 80, 81, 82, -1, -1, - 85, 86, 87, 88, 89, 90, 91, -1, -1, -1, - -1, 96, -1, -1, 99, 100, 101, 102, 103, 104, - 105, -1, -1, -1, -1, -1, 111, -1, 113, 114, - 115, 116, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 127, -1, -1, 4, 5, 6, -1, -1, - 9, 10, 11, -1, -1, 14, -1, 16, -1, -1, - -1, 20, 21, -1, 23, -1, -1, -1, -1, -1, - -1, 30, 31, 32, 33, -1, 35, -1, -1, -1, - -1, -1, -1, -1, -1, 44, -1, -1, -1, 48, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 61, -1, 63, -1, 65, -1, -1, -1, - 69, 70, 71, 72, 73, 74, 75, -1, 77, 78, - 79, 80, 81, 82, -1, -1, 85, 86, 87, 88, - 89, 90, 91, -1, -1, -1, -1, 96, -1, -1, - 99, 100, 101, 102, 103, 104, 105, -1, -1, -1, - -1, -1, 111, -1, 113, 114, 115, 116, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 127, -1, - -1, 4, 5, 6, -1, -1, 9, 10, 11, -1, - -1, 14, -1, 16, -1, -1, -1, 20, 21, -1, - 23, -1, -1, -1, -1, -1, -1, 30, 31, 32, - 33, -1, 35, -1, -1, -1, -1, -1, -1, -1, - -1, 44, -1, -1, -1, 48, -1, -1, -1, -1, - -1, -1, -1, -1, 57, -1, -1, -1, 61, -1, - -1, -1, 65, -1, -1, -1, 69, 70, 71, 72, - 73, 74, 75, -1, 77, 78, 79, 80, 81, 82, - -1, -1, 85, 86, 87, 88, 89, 90, 91, -1, - -1, -1, -1, 96, -1, -1, 99, 100, 101, 102, - 103, 104, 105, -1, -1, -1, -1, -1, 111, -1, - 113, 114, 115, 116, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 127, -1, -1, 4, 5, 6, - -1, -1, 9, 10, 11, -1, -1, 14, -1, 16, - -1, -1, -1, 20, 21, -1, 23, -1, -1, -1, - -1, -1, -1, 30, 31, 32, 33, -1, 35, -1, - -1, -1, -1, -1, -1, -1, -1, 44, -1, -1, - -1, 48, -1, -1, -1, -1, -1, -1, -1, -1, - 57, -1, -1, -1, 61, -1, -1, -1, 65, -1, - -1, -1, 69, 70, 71, 72, 73, 74, 75, -1, - 77, 78, 79, 80, 81, 82, -1, -1, 85, 86, - 87, 88, 89, 90, 91, -1, -1, -1, -1, 96, - -1, -1, 99, 100, 101, 102, 103, 104, 105, -1, - -1, -1, -1, -1, 111, -1, 113, 114, 115, 116, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 127, -1, -1, 4, -1, -1, -1, -1, 9, -1, - 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, - 21, 22, 23, -1, -1, -1, -1, -1, -1, 30, - 31, -1, -1, 34, 35, -1, 37, -1, -1, -1, + -1, 85, 86, 87, -1, -1, -1, -1, -1, 93, + -1, -1, -1, -1, -1, 99, 100, 101, 102, -1, + 104, -1, 106, 107, 108, 109, 110, -1, -1, -1, + -1, -1, 116, 117, 118, 119, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 130, -1, -1, -1, + 11, 12, 13, -1, -1, -1, -1, -1, -1, -1, + -1, 22, 23, -1, -1, -1, -1, -1, -1, 30, + -1, -1, -1, 34, 35, -1, 37, -1, -1, -1, 41, -1, 43, 44, 45, -1, -1, 48, -1, -1, -1, -1, 53, -1, 55, -1, -1, -1, -1, -1, - 61, -1, 63, -1, -1, -1, -1, -1, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, -1, -1, 85, 86, 87, -1, -1, 90, - -1, 92, -1, -1, -1, -1, -1, 98, 99, 100, - -1, 102, -1, 104, 105, 106, 107, -1, -1, -1, - -1, -1, 113, 114, 115, 116, -1, -1, -1, -1, - -1, -1, -1, -1, 125, -1, 127, -1, -1, 4, - -1, -1, -1, -1, 9, -1, 11, 12, 13, 14, - -1, -1, -1, -1, -1, -1, 21, 22, 23, -1, + -1, 62, -1, -1, -1, -1, -1, -1, 69, 70, + 71, 72, -1, 74, -1, 76, -1, 78, -1, 80, + -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, + -1, -1, 93, -1, -1, -1, -1, -1, 99, 100, + 101, 102, -1, 104, -1, 106, 107, 108, 109, 110, + -1, -1, -1, -1, -1, 116, 117, 118, 119, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 130, + -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, + -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, + -1, -1, 30, -1, -1, -1, 34, 35, -1, 37, + -1, -1, -1, 41, -1, 43, 44, 45, -1, -1, + 48, -1, -1, -1, -1, 53, -1, 55, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 69, 70, 71, 72, -1, 74, -1, 76, -1, + 78, 79, 80, -1, -1, -1, -1, 85, 86, 87, + 88, 89, -1, -1, -1, 93, -1, -1, -1, -1, + -1, -1, 100, 101, 102, -1, 104, -1, 106, 107, + 108, 109, 110, -1, -1, -1, -1, -1, 116, 117, + 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 130, -1, -1, -1, 11, 12, 13, -1, + -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, 30, 31, -1, -1, 34, 35, -1, 37, -1, -1, -1, 41, -1, 43, 44, 45, -1, -1, 48, -1, -1, -1, -1, 53, -1, - 55, -1, -1, -1, -1, -1, 61, -1, 63, -1, + 55, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, -1, -1, - 85, 86, 87, -1, -1, 90, -1, 92, -1, -1, - -1, -1, -1, 98, 99, 100, -1, 102, -1, 104, - 105, 106, 107, -1, -1, -1, -1, -1, 113, 114, - 115, 116, -1, -1, -1, -1, -1, -1, -1, 124, - 125, -1, 127, -1, -1, 4, -1, -1, -1, -1, - 9, -1, 11, 12, 13, 14, -1, -1, -1, -1, - -1, -1, 21, 22, 23, -1, -1, -1, -1, -1, - -1, 30, 31, -1, -1, 34, 35, -1, 37, -1, - -1, -1, 41, -1, 43, 44, 45, -1, -1, 48, - -1, -1, -1, -1, 53, -1, 55, -1, -1, -1, - -1, -1, 61, -1, 63, -1, -1, -1, -1, -1, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, -1, -1, 85, 86, 87, -1, - -1, 90, -1, 92, -1, -1, -1, -1, -1, 98, - 99, 100, -1, 102, -1, 104, 105, 106, 107, -1, - -1, -1, -1, -1, 113, 114, 115, 116, -1, -1, - -1, -1, -1, -1, -1, 124, 125, -1, 127, -1, - -1, 4, -1, -1, -1, -1, 9, -1, 11, 12, - 13, 14, -1, -1, -1, -1, -1, -1, 21, 22, - 23, -1, -1, -1, -1, -1, -1, 30, 31, -1, - -1, 34, 35, -1, 37, -1, -1, -1, 41, -1, - 43, 44, 45, -1, -1, 48, -1, -1, -1, -1, - 53, -1, 55, -1, -1, -1, -1, -1, 61, -1, - 63, -1, -1, -1, -1, -1, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - -1, -1, 85, 86, 87, -1, -1, 90, -1, 92, - -1, -1, -1, -1, -1, 98, 99, 100, -1, 102, - -1, 104, 105, 106, 107, -1, -1, -1, -1, -1, - 113, 114, 115, 116, -1, -1, -1, -1, -1, -1, - -1, 124, 125, -1, 127, -1, -1, + -1, 76, 77, 78, -1, 80, -1, 82, -1, -1, + 85, 86, 87, -1, -1, -1, -1, -1, 93, -1, + -1, -1, -1, -1, -1, 100, 101, 102, -1, 104, + -1, 106, 107, 108, 109, 110, -1, -1, -1, -1, + -1, 116, 117, 118, 119, -1, -1, -1, -1, -1, + -1, -1, 127, 128, -1, 130, -1, -1, -1, 11, + 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, -1, -1, -1, -1, -1, -1, 30, 31, + -1, -1, 34, 35, -1, 37, -1, -1, -1, 41, + -1, 43, 44, 45, -1, -1, 48, -1, -1, -1, + -1, 53, -1, 55, -1, -1, -1, -1, -1, -1, + -1, 63, -1, -1, -1, -1, -1, 69, 70, 71, + 72, 73, 74, -1, 76, 77, 78, -1, 80, -1, + 82, -1, -1, 85, 86, 87, -1, -1, -1, -1, + -1, 93, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, 104, -1, 106, 107, 108, 109, 110, -1, + -1, -1, -1, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, 127, 128, -1, 130, -1, + -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, + -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, + -1, 23, -1, -1, -1, -1, -1, -1, 30, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, + -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, -1, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, 103, 104, 105, 106, 107, 108, -1, -1, -1, + -1, -1, 114, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, + -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, + -1, 23, -1, -1, -1, -1, -1, -1, 30, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 57, -1, -1, -1, 61, + -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, -1, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, 103, 104, 105, 106, 107, 108, -1, -1, -1, + -1, -1, 114, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, + -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, + -1, 23, -1, -1, -1, -1, -1, -1, 30, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 57, -1, -1, -1, 61, + -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, -1, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, 103, 104, 105, 106, 107, 108, -1, -1, -1, + -1, -1, 114, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, + -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, + -1, 23, -1, -1, -1, -1, -1, -1, 30, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 57, -1, -1, -1, 61, + -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, -1, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, 103, 104, 105, 106, 107, 108, -1, -1, -1, + -1, -1, 114, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, + -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, + -1, 23, -1, -1, -1, -1, -1, -1, 30, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 57, -1, -1, -1, 61, + -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, -1, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, 103, 104, 105, 106, 107, 108, -1, -1, -1, + -1, -1, 114, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, + -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, + -1, 23, -1, -1, -1, -1, -1, -1, 30, 31, + 32, 33, -1, 35, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, 48, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, + -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, -1, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, 103, 104, 105, 106, 107, 108, -1, -1, -1, + -1, -1, 114, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, + -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, + -1, 23, -1, -1, -1, -1, -1, -1, 30, 31, + 32, 33, -1, 35, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, 48, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, + -1, -1, -1, 65, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, -1, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, 103, 104, 105, 106, 107, 108, -1, -1, -1, + -1, -1, 114, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, + -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, + -1, 23, -1, -1, -1, -1, -1, -1, 30, 31, + 32, 33, -1, 35, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, 48, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, + -1, 63, -1, 65, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, -1, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, 103, 104, 105, 106, 107, 108, -1, -1, -1, + -1, -1, 114, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, + -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, + -1, 23, -1, -1, -1, -1, -1, -1, 30, 31, + 32, 33, -1, 35, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, 48, -1, -1, -1, + -1, -1, -1, -1, -1, 57, -1, -1, -1, 61, + -1, -1, -1, 65, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, -1, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, 103, 104, 105, 106, 107, 108, -1, -1, -1, + -1, -1, 114, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, + -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, + -1, 23, -1, -1, -1, -1, -1, -1, 30, 31, + 32, 33, -1, 35, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, -1, -1, 48, -1, -1, -1, + -1, -1, -1, -1, -1, 57, -1, -1, -1, 61, + -1, -1, -1, 65, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, -1, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, 98, -1, -1, 101, + 102, 103, 104, 105, 106, 107, 108, -1, -1, -1, + -1, -1, 114, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 130, -1, + -1, -1, 4, -1, -1, -1, -1, 9, -1, 11, + 12, 13, 14, -1, -1, -1, -1, -1, -1, 21, + 22, 23, -1, -1, -1, -1, -1, -1, 30, 31, + -1, -1, 34, 35, -1, 37, -1, -1, -1, 41, + -1, 43, 44, 45, -1, -1, 48, -1, -1, -1, + -1, 53, -1, 55, -1, -1, -1, -1, -1, 61, + -1, 63, -1, -1, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, -1, -1, -1, 91, + -1, 93, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, 104, -1, 106, 107, 108, 109, 110, -1, + -1, -1, -1, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, 128, -1, 130, -1, + -1, -1, 4, -1, -1, -1, -1, 9, -1, 11, + 12, 13, 14, -1, -1, -1, -1, -1, -1, 21, + 22, 23, -1, -1, -1, -1, -1, -1, 30, 31, + -1, -1, 34, 35, -1, 37, -1, -1, -1, 41, + -1, 43, 44, 45, -1, -1, 48, -1, -1, -1, + -1, 53, -1, 55, -1, -1, -1, -1, -1, 61, + -1, 63, -1, -1, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, -1, -1, -1, 91, + -1, 93, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, 104, -1, 106, 107, 108, 109, 110, -1, + -1, -1, -1, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, 127, 128, -1, 130, -1, + -1, -1, 4, -1, -1, -1, -1, 9, -1, 11, + 12, 13, 14, -1, -1, -1, -1, -1, -1, 21, + 22, 23, -1, -1, -1, -1, -1, -1, 30, 31, + -1, -1, 34, 35, -1, 37, -1, -1, -1, 41, + -1, 43, 44, 45, -1, -1, 48, -1, -1, -1, + -1, 53, -1, 55, -1, -1, -1, -1, -1, 61, + -1, 63, -1, -1, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, -1, -1, -1, 91, + -1, 93, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, 104, -1, 106, 107, 108, 109, 110, -1, + -1, -1, -1, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, 127, 128, -1, 130, -1, + -1, -1, 4, -1, -1, -1, -1, 9, -1, 11, + 12, 13, 14, -1, -1, -1, -1, -1, -1, 21, + 22, 23, -1, -1, -1, -1, -1, -1, 30, 31, + -1, -1, 34, 35, -1, 37, -1, -1, -1, 41, + -1, 43, 44, 45, -1, -1, 48, -1, -1, -1, + -1, 53, -1, 55, -1, -1, -1, -1, -1, 61, + -1, 63, -1, -1, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, -1, -1, 85, 86, 87, -1, -1, -1, 91, + -1, 93, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, 104, -1, 106, 107, 108, 109, 110, -1, + -1, -1, -1, -1, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, 127, 128, -1, 130, -1, + -1, -1, - 15, 26, 15, 15, 186, 185, 20, 37, 15, 64, - 187, 71, 15, 185, 20, 41, 15, 37, 20, 37, - 55, 37, 20, 185, 20, 30, 15, 31, 15, 185, - 187, 55, 186, 14, 194, 15, 195, 15, 199, 24, - 26, 15, 24, 201, 214, 20, 15, 24, 20, 20, - 20, 15, 15, 64, 76, 20, 50, 192, 26, 214, - 175, 37, 215, 71, 37, 66, 15, 64, 178, 15, - 37, 37, 148, 66, 69, 66, 195, 194, 66, 71, - 185, 185, 193, 31, 15, 172, 187, 71, 31, 79, - 31, 181, 15, 55, 55, 148, 187, 185, 198, 193, - 50, 15, 55, 50, 87, 64, 66, 148, 66, 143, - 89, 55, 187, 55, 71, 186, 71, 185, 55, 185, - 187, 186, 186, 55, 186, 79, 71, 55, 66, 55, - 55, 185, 88, 185, 195, 87, 87, 194, 187, 79, - 187, 186, 193, 186, 71, 55, 186, 71, 187, 71, - 89, 55, 185, 89, 89, 71, 90, 64, 71, 71, - 55, 64, 71, 69, 66, 64, 185, 195, 79, 15, - 15, 194, 66, 71, 71, 185, 66, 15, 111, 108, - 71, 15, 50, 66, 46, 66, 186, 108, 89, 50, - 199, 111, 71, 89, 66, 50, 71, 64, 128, 26, - 66, 66, 2, 50, 51, 69, 50, 50, 51, 2, - 66, 50, 15, 66, 2, 50, 2, 50, 15, 15, - 50, 71, 26, -1, 50, 29, 26, 26, 50, 50, - 20, 11, 12, 26, 71, 71, 50, 51, 26, 2, - 26, 85, 66, 67, 94, 50, 85, 37, 71, 72, - 26, 26, 85, 50, 50, 85, 66, 94, 94, 50, - 51, 50, 51, 26, 130, 130, 50, 51, 2, 71, - 2, 73, 50, 51, 130, 2, 50, 130, 50, 198, - 85, 50, 199, 201, 50, 51, 201, 20, 50, 51, - 2, 50, 26, 66, 26, 50, 51, 50, 51, 26, - 2, 26, 2, -1, 37, 50, 170, 26, 82, 81, - 50, 51, 81, 50, 26, 50, 51, 217, 218, -1, - 130, 148, 81, 46, 26, 48, 26, 98, 50, 51, - 50, 51, 50, 51, 105, -1, 81, 82, -1, 50, - 51, 81, 50, 51, 50, 51, 50, 51, 85, 50, - 51, 150, 50, 51, 50, 51, 3, 130, 50, 51, - 50, 51, -1, 50, 51, 200, 50, 50, 51, 50, - 51, 50, 51, 149, 200, 150, 50, 51, 200, 50, - 51, 65, 40, 41, 205, 43, 50, 85, 50, 51, - 50, 51, 67, 68, 50, 51, 71, 50, 51, 50, - 51, 65, 50, 51, 50, 3, 50, -1, 74, 74, - 50, 51, 17, 50, 98, -1, 139, -1, -1, 65, - 191, 65, 74, -1, 2, 150, 50, 51, 65, 164, - -1, 150, 98, 98, 98, 50, -1, 85, 102, 105, - 105, 50, 164, 67, -1, 50, 98, -1, 26, 50, - 51, 98, 98, 105, 98, -1, 65, 101, 105, 105, - 65, 98, 77, 164, 184, 102, 81, 82, 164, 50, - 51, 74, -1, 184, 74, 50, 184, 164, 184, -1, - 184, 164, 50, -1, 50, 51, 91, 17, 225, 98, - 65, 210, 101, -1, -1, 98, -1, 65, 98, -1, - 98, 219, 105, 184, 164, 105, -1, 105, 198, -1, - 184, -1, 74, 184, 193, 81, 50, 51, 171, 50, - 50, 74, 162, 98, 164, 191, 191, 219, 184, 74, - 98, 74, -1, 67, 65, 65, 98, 188, 46, 191, - 50, 51, 117, 105, 191, 98, -1, 171, -1, 50, - 50, 119, 105, 98, -1, 98, -1, 219, -1, 160, - 105, 91, 105, 164, 65, 65, 40, 98, -1, 43, - 44, 45, 50, 221, 50, 50, -1, 50, -1, 50, - 161, -1, 113, 164, 50, 51, -1, 65, 191, 65, - 65, 191, 65, 191, 65, 50, -1, 98, 98, -1, - -1, 67, 68, 169, -1, -1, 106, 17, 17, 50, - 65, -1, 21, -1, 115, -1, -1, 50, -1, -1, - 98, 50, 98, 98, 65, 98, 104, 98, 104, 191, - 105, 104, 65, 141, 105, 143, 65, 171, 191, -1, - 50, 50, -1, 98, 99, 100, 191, -1, 191, 50, - 160, -1, -1, 50, 164, 65, 65, 98, 99, 100, - -1, 50, 3, -1, 65, 98, 99, 100, 65, 98, - 99, 100, 50, -1, -1, 183, 65, 50, -1, -1, - 17, 91, 91, 50, 50, 95, 17, 65, 25, 197, - 21, -1, 65, -1, -1, -1, 17, 98, 65, 65, - 21, 98, 99, 100, -1, 171, -1, 17, 109, 98, - 99, 100, -1, 50, -1, 25, -1, -1, 50, 50, - 98, 99, 100, -1, -1, 98, 99, 100, 65, 50, - 50, 98, 98, 65, 65, 50, 50, -1, 105, 105, - 50, 107, 17, 110, 65, 65, 21, -1, 23, -1, - 65, 65, -1, -1, 91, 65, -1, 98, -1, -1, - 91, -1, -1, -1, 105, -1, 98, -1, -1, 17, - 91, -1, -1, 105, -1, -1, -1, 25, 98, 17, - -1, 91, 114, 98, 98, 105, 4, 25, -1, -1, - 105, 105, 112, -1, -1, -1, 71, 72, 17, 17, - -1, 116, 50, -1, 118, 53, 25, 25, -1, -1, - 151, 152, 50, -1, -1, 53, -1, 65, -1, -1, - 17, 4, -1, -1, -1, -1, 50, 65, 25, 48, - 48, 50, 50, 30, 17, 32, 33, 34, 35, 36, - -1, 65, 25, 91, 17, -1, 65, 65, -1, -1, - 191, -1, 25, 91, -1, -1, -1, 30, -1, 32, - 33, 34, 35, 36, -1, 48, -1, 50, -1, -1, - 17, -1, 91, 91, 98, 99, 100, -1, 25, -1, - -1, -1, 65, 30, -1, 32, 33, 34, 35, 36, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 183, 183, -1, -1, -1, -1, + 86, 206, 205, 196, 206, 205, 196, 78, 20, 15, + 204, 78, 198, 76, 197, 15, 196, 62, 71, 198, + 197, 196, 62, 20, 120, 212, 115, 71, 212, 15, + 71, 15, 210, 71, 210, 209, 14, 24, 15, 24, + 43, 78, 97, 73, 20, 197, 57, 43, 20, 15, + 15, 139, 15, 115, 15, 15, 120, 73, 57, 47, + 15, 71, 32, 96, 86, 78, 73, 62, 73, 15, + 225, 20, 73, 226, 78, 37, 43, 192, 37, 37, + 15, 20, 159, 159, 78, 186, 189, 15, 62, 203, + 73, 73, 196, 198, 15, 197, 43, 78, 196, 205, + 210, 196, 15, 212, 73, 196, 206, 206, 205, 62, + 24, 204, 32, 198, 71, 197, 196, 62, 225, 198, + 62, 62, 197, 196, 198, 197, 15, 197, 196, 198, + 15, 43, 20, 20, 71, 73, 86, 62, 57, 73, + 71, 20, 78, 209, 196, 78, 78, 204, 78, 78, + 15, 78, 15, 15, 78, 78, 47, 43, 57, 57, + 76, 83, 62, 36, 15, 62, 159, 37, 78, 62, + 96, 32, 196, 198, 197, 24, 94, 86, 62, 96, + 95, 62, 62, 94, 198, 15, 78, 196, 96, 197, + 73, 96, 96, 20, 47, 73, 78, 43, 15, 15, + 57, 78, 15, 183, 73, 20, 43, 2, 2, 32, + 2, 32, 76, 73, 73, 57, 2, 57, 58, 57, + 78, 2, 80, 57, 58, 57, 58, 20, 78, 79, + 78, 78, 73, 74, 11, 12, 32, 32, 32, 35, + 32, 2, 78, 57, 73, 73, 32, 32, 73, 15, + 43, 32, 20, 101, 101, 15, 32, 2, 57, 58, + 154, 73, 2, 2, 53, 101, 57, 58, 2, 57, + 58, 32, 2, 57, 2, 43, -1, 57, 92, 57, + 58, 141, 141, 57, 58, 57, 32, 32, 228, 229, + 57, 57, 32, 32, 57, 58, -1, 57, 32, 57, + 194, 57, 32, 57, 32, 57, 58, 57, 92, 57, + 58, -1, 141, 141, 57, 57, 141, 181, -1, 57, + 92, 88, 57, 58, 57, 58, 105, 74, 75, 141, + 88, 78, 88, 112, 72, 89, 57, 58, 161, 160, + 57, 58, 92, 57, 58, 57, 58, 57, 58, 57, + 92, 57, 58, 57, 58, 57, 58, 57, 58, 57, + 58, 57, 58, 32, 57, 58, 57, 105, -1, 211, + 57, 58, 53, 211, 55, 15, 161, 57, 58, -1, + 88, 89, -1, 159, 57, 58, 57, 58, -1, 46, + 47, -1, 88, 50, 57, 58, 57, 58, 57, 58, + -1, 92, 57, 58, 81, 194, 57, 58, 57, 58, + 57, 57, 92, 57, 58, 161, 57, 58, 57, 57, + 57, 58, -1, 202, 57, 58, 72, -1, 105, 81, + 57, 211, 57, 72, 72, 112, -1, 84, 57, 58, + -1, 88, 89, -1, -1, 72, 46, 72, 57, 182, + 50, 51, 52, 105, -1, 92, 57, 3, 175, 105, + 112, 57, -1, 72, 57, 58, 105, 105, -1, 150, + 81, 72, 57, 216, 195, 175, 72, 175, 105, 81, + 105, 195, 175, 195, 130, 195, 111, 72, 126, 128, + -1, 195, 161, 195, 105, 230, 105, 124, 17, -1, + -1, 112, 111, 105, 105, 57, 58, 108, 195, 105, + 112, 53, 175, 194, 175, 111, 57, 57, 57, 58, + 105, -1, 74, 3, 230, 202, 175, -1, 199, 57, + 171, 72, 72, 118, 175, 74, 195, 81, 57, 172, + 195, -1, 175, 81, 72, 236, -1, 17, -1, -1, + 202, -1, 221, 72, 173, 57, 175, 230, 209, 105, + 204, 105, 57, 58, 105, 105, 112, 105, 112, 57, + 72, 112, 112, 81, 112, 81, -1, 105, 171, 98, + 108, 57, 175, -1, 72, 81, 57, 57, -1, -1, + 57, 202, -1, 88, -1, 232, 72, 105, 57, 105, + 202, 72, 72, 105, 112, 72, 112, 109, -1, 105, + 152, 57, 154, 72, -1, -1, 112, 105, -1, -1, + 57, 109, 57, -1, -1, 105, 72, -1, 98, 105, + 182, -1, 112, 57, 105, 72, 112, 72, 105, 106, + 107, -1, 113, 182, -1, -1, 105, 57, 72, 17, + 57, -1, 194, -1, -1, 3, 202, 17, 202, 105, + 106, 107, 72, 122, 202, 72, 208, 27, 105, 57, + 105, 106, 107, -1, 17, 112, -1, -1, 57, -1, + -1, 105, 106, 107, 72, 180, -1, 30, -1, 57, + 127, -1, 57, 72, 202, 105, 202, 57, 105, 106, + 107, 57, 112, 17, 72, 57, 202, 72, -1, -1, + 57, 58, 72, 27, 57, 125, 72, 105, -1, -1, + 72, 57, 202, -1, 112, -1, 105, 74, 75, 72, + 98, 119, 57, 112, 102, 114, 72, -1, 98, 57, + 105, 106, 107, 57, -1, -1, 17, 72, 57, 105, + 106, 107, 17, 105, 72, 98, 27, 105, 72, -1, + 112, -1, 17, 72, 112, 30, -1, -1, -1, 105, + 25, 123, 27, -1, -1, -1, 112, -1, -1, 17, + 105, 106, 107, -1, 98, -1, 57, 105, -1, 27, + -1, 29, 57, 129, 112, -1, 105, 106, 107, -1, + -1, 72, 57, 121, -1, 17, 36, 72, 38, 39, + 40, 41, 42, 17, 162, 163, 17, 72, 30, -1, + -1, 17, -1, 17, 4, -1, 30, 98, -1, 30, + 26, 27, -1, 98, -1, 182, 30, 17, -1, -1, + 78, 79, -1, 98, -1, 57, -1, -1, 60, -1, + 30, 55, -1, 57, 202, -1, 57, 4, -1, 60, + 72, 57, -1, 57, -1, -1, 60, -1, 72, -1, + 17, 72, -1, -1, 17, 55, 72, 57, 72, -1, + -1, -1, 25, 30, -1, -1, 98, 30, 31, -1, + -1, -1, 72, -1, 98, -1, -1, 98, 17, -1, + -1, -1, 98, -1, 98, -1, -1, -1, 55, -1, + 57, 30, 55, 17, 57, -1, -1, 36, 98, 38, + 39, 40, 41, 42, -1, 72, 30, -1, -1, 72, + -1, -1, 36, -1, 38, 39, 40, 41, 42, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 98, 30, -1, -1, 98, -1, -1, 36, -1, + 38, 39, 40, 41, 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 183, -1, -1, 30, -1, 32, 33, 34, 35, 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 30, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 57, -1, -1, 60, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -2121,7 +2338,6 @@ const short QmlJSGrammar::action_check [] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + -1 }; -QT_END_NAMESPACE diff --git a/src/libs/qmljs/parser/qmljsgrammar_p.h b/src/libs/qmljs/parser/qmljsgrammar_p.h index e3d69b3603..ca006cfd96 100644 --- a/src/libs/qmljs/parser/qmljsgrammar_p.h +++ b/src/libs/qmljs/parser/qmljsgrammar_p.h @@ -3,9 +3,8 @@ ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** -** This file is part of the Qt Toolkit. +** This file is part of Qt Creator. ** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the @@ -22,84 +21,69 @@ ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of other Qt classes. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - +***************************************************************************/ // This file was generated by qlalr - DO NOT EDIT! #ifndef QMLJSGRAMMAR_P_H #define QMLJSGRAMMAR_P_H - #include "qmljsglobal_p.h" -QT_BEGIN_NAMESPACE - class QML_PARSER_EXPORT QmlJSGrammar { public: enum VariousConstants { EOF_SYMBOL = 0, - REDUCE_HERE = 128, + REDUCE_HERE = 131, T_AND = 1, T_AND_AND = 2, T_AND_EQ = 3, - T_ARROW = 95, - T_AS = 113, + T_ARROW = 96, + T_AS = 116, + T_AT = 90, T_AUTOMATIC_SEMICOLON = 64, T_BREAK = 4, T_CASE = 5, T_CATCH = 6, - T_CLASS = 100, + T_CLASS = 102, T_COLON = 7, T_COMMA = 8, - T_COMMENT = 93, - T_COMPATIBILITY_SEMICOLON = 94, + T_COMMENT = 94, + T_COMPATIBILITY_SEMICOLON = 95, + T_COMPONENT = 108, T_CONST = 88, T_CONTINUE = 9, - T_DEBUGGER = 90, + T_DEBUGGER = 91, T_DEFAULT = 10, T_DELETE = 11, T_DIVIDE_ = 12, T_DIVIDE_EQ = 13, T_DO = 14, T_DOT = 15, - T_ELLIPSIS = 97, + T_ELLIPSIS = 99, T_ELSE = 16, - T_ENUM = 96, + T_ENUM = 98, T_EQ = 17, T_EQ_EQ = 18, T_EQ_EQ_EQ = 19, - T_ERROR = 117, - T_EXPORT = 103, - T_EXTENDS = 101, + T_ERROR = 120, + T_EXPORT = 105, + T_EXTENDS = 103, T_FALSE = 87, - T_FEED_JS_EXPRESSION = 121, - T_FEED_JS_MODULE = 123, - T_FEED_JS_SCRIPT = 122, - T_FEED_JS_STATEMENT = 120, - T_FEED_UI_OBJECT_MEMBER = 119, - T_FEED_UI_PROGRAM = 118, + T_FEED_JS_EXPRESSION = 124, + T_FEED_JS_MODULE = 126, + T_FEED_JS_SCRIPT = 125, + T_FEED_JS_STATEMENT = 123, + T_FEED_UI_OBJECT_MEMBER = 122, + T_FEED_UI_PROGRAM = 121, T_FINALLY = 20, T_FOR = 21, - T_FORCE_BLOCK = 125, - T_FORCE_DECLARATION = 124, - T_FOR_LOOKAHEAD_OK = 126, - T_FROM = 104, + T_FORCE_BLOCK = 128, + T_FORCE_DECLARATION = 127, + T_FOR_LOOKAHEAD_OK = 129, + T_FROM = 106, T_FUNCTION = 23, T_FUNCTION_STAR = 22, T_GE = 24, - T_GET = 115, + T_GET = 118, T_GT = 25, T_GT_GT = 26, T_GT_GT_EQ = 27, @@ -107,7 +91,7 @@ public: T_GT_GT_GT_EQ = 29, T_IDENTIFIER = 30, T_IF = 31, - T_IMPORT = 111, + T_IMPORT = 114, T_IN = 32, T_INSTANCEOF = 33, T_LBRACE = 34, @@ -121,50 +105,51 @@ public: T_MINUS = 41, T_MINUS_EQ = 42, T_MINUS_MINUS = 43, - T_MULTILINE_STRING_LITERAL = 92, + T_MULTILINE_STRING_LITERAL = 93, T_NEW = 44, T_NOT = 45, T_NOT_EQ = 46, T_NOT_EQ_EQ = 47, - T_NO_SUBSTITUTION_TEMPLATE = 106, + T_NO_SUBSTITUTION_TEMPLATE = 109, T_NULL = 85, T_NUMERIC_LITERAL = 48, - T_OF = 114, - T_ON = 127, + T_OF = 117, + T_ON = 130, T_OR = 49, T_OR_EQ = 51, T_OR_OR = 52, T_PLUS = 53, T_PLUS_EQ = 54, T_PLUS_PLUS = 55, - T_PRAGMA = 112, + T_PRAGMA = 115, T_PROPERTY = 70, - T_PUBLIC = 110, + T_PUBLIC = 113, T_QUESTION = 56, + T_QUESTION_QUESTION = 97, T_RBRACE = 57, T_RBRACKET = 58, T_READONLY = 72, T_REMAINDER = 59, T_REMAINDER_EQ = 60, - T_REQUIRED = 105, - T_RESERVED_WORD = 91, + T_REQUIRED = 107, + T_RESERVED_WORD = 92, T_RETURN = 61, T_RPAREN = 62, T_SEMICOLON = 63, - T_SET = 116, + T_SET = 119, T_SIGNAL = 71, T_STAR = 65, T_STAR_EQ = 68, T_STAR_STAR = 66, T_STAR_STAR_EQ = 67, - T_STATIC = 102, + T_STATIC = 104, T_STRING_LITERAL = 69, - T_SUPER = 99, + T_SUPER = 101, T_SWITCH = 73, - T_TEMPLATE_HEAD = 107, - T_TEMPLATE_MIDDLE = 108, - T_TEMPLATE_TAIL = 109, - T_THEN = 129, + T_TEMPLATE_HEAD = 110, + T_TEMPLATE_MIDDLE = 111, + T_TEMPLATE_TAIL = 112, + T_THEN = 132, T_THIS = 74, T_THROW = 75, T_TILDE = 76, @@ -176,24 +161,31 @@ public: T_VOID = 80, T_WHILE = 81, T_WITH = 82, + T_WITHOUTAS = 133, T_XOR = 83, T_XOR_EQ = 84, - T_YIELD = 98, + T_YIELD = 100, - ACCEPT_STATE = 1055, - RULE_COUNT = 591, - STATE_COUNT = 1056, - TERMINAL_COUNT = 130, - NON_TERMINAL_COUNT = 227, + ACCEPT_STATE = 1098, + RULE_COUNT = 616, + STATE_COUNT = 1099, + TERMINAL_COUNT = 134, + NON_TERMINAL_COUNT = 238, - GOTO_INDEX_OFFSET = 1056, - GOTO_INFO_OFFSET = 6757, - GOTO_CHECK_OFFSET = 6757 + GOTO_INDEX_OFFSET = 1099, + GOTO_INFO_OFFSET = 6942, + GOTO_CHECK_OFFSET = 6942 }; static const char *const spell[]; static const short lhs[]; static const short rhs[]; + +#ifndef QLALR_NO_QMLJSGRAMMAR_DEBUG_INFO + static const int rule_index[]; + static const int rule_info[]; +#endif // QLALR_NO_QMLJSGRAMMAR_DEBUG_INFO + static const short goto_default[]; static const short action_default[]; static const short action_index[]; @@ -221,6 +213,5 @@ public: }; -QT_END_NAMESPACE #endif // QMLJSGRAMMAR_P_H diff --git a/src/libs/qmljs/parser/qmljskeywords_p.h b/src/libs/qmljs/parser/qmljskeywords_p.h index c59cab8325..4db12677a8 100644 --- a/src/libs/qmljs/parser/qmljskeywords_p.h +++ b/src/libs/qmljs/parser/qmljskeywords_p.h @@ -821,6 +821,25 @@ static inline int classify9(const QChar *s, int parseModeFlags) { } } } + else if (s[0].unicode() == 'c') { + if (s[1].unicode() == 'o') { + if (s[2].unicode() == 'm') { + if (s[3].unicode() == 'p') { + if (s[4].unicode() == 'o') { + if (s[5].unicode() == 'n') { + if (s[6].unicode() == 'e') { + if (s[7].unicode() == 'n') { + if (s[8].unicode() == 't') { + return (parseModeFlags & Lexer::QmlMode) ? int(Lexer::T_COMPONENT) : int(Lexer::T_IDENTIFIER); + } + } + } + } + } + } + } + } + } return Lexer::T_IDENTIFIER; } diff --git a/src/libs/qmljs/parser/qmljslexer.cpp b/src/libs/qmljs/parser/qmljslexer.cpp index 2af11acb76..58613159d3 100644 --- a/src/libs/qmljs/parser/qmljslexer.cpp +++ b/src/libs/qmljs/parser/qmljslexer.cpp @@ -25,17 +25,19 @@ #include "qmljslexer_p.h" #include "qmljsengine_p.h" -#include "qmljsmemorypool_p.h" #include "qmljskeywords_p.h" +#include "qmljs/parser/qmljsdiagnosticmessage_p.h" +#include "qmljs/parser/qmljsmemorypool_p.h" + #include <QtCore/qcoreapplication.h> #include <QtCore/qvarlengtharray.h> #include <QtCore/qdebug.h> #include <QtCore/QScopedValueRollback> -QT_BEGIN_NAMESPACE +QT_QML_BEGIN_NAMESPACE Q_CORE_EXPORT double qstrtod(const char *s00, char const **se, bool *ok); -QT_END_NAMESPACE +QT_QML_END_NAMESPACE using namespace QmlJS; @@ -564,7 +566,14 @@ again: case ']': return T_RBRACKET; case '[': return T_LBRACKET; - case '?': return T_QUESTION; + case '?': { + if (_char == QLatin1Char('?')) { + scanChar(); + return T_QUESTION_QUESTION; + } + + return T_QUESTION; + } case '>': if (_char == QLatin1Char('>')) { @@ -696,6 +705,8 @@ again: case ')': return T_RPAREN; case '(': return T_LPAREN; + case '@': return T_AT; + case '&': if (_char == QLatin1Char('=')) { scanChar(); diff --git a/src/libs/qmljs/parser/qmljslexer_p.h b/src/libs/qmljs/parser/qmljslexer_p.h index 24edb72c25..2a4388adad 100644 --- a/src/libs/qmljs/parser/qmljslexer_p.h +++ b/src/libs/qmljs/parser/qmljslexer_p.h @@ -36,8 +36,8 @@ // We mean it. // -#include "qmljsglobal_p.h" -#include "qmljsgrammar_p.h" +#include "qmljs/parser/qmljsglobal_p.h" +#include "qmljs/parser/qmljsgrammar_p.h" #include <QtCore/qstring.h> #include <QtCore/qstack.h> diff --git a/src/libs/qmljs/parser/qmljsmemorypool_p.h b/src/libs/qmljs/parser/qmljsmemorypool_p.h index 4c5ec5c310..c1e0726169 100644 --- a/src/libs/qmljs/parser/qmljsmemorypool_p.h +++ b/src/libs/qmljs/parser/qmljsmemorypool_p.h @@ -37,8 +37,6 @@ // #include "qmljsglobal_p.h" - -#include <QtCore/qglobal.h> #include <QtCore/qshareddata.h> #include <QtCore/qdebug.h> @@ -50,7 +48,7 @@ namespace QmlJS { class Managed; -class QML_PARSER_EXPORT MemoryPool : public QSharedData +class MemoryPool : public QSharedData { MemoryPool(const MemoryPool &other); void operator =(const MemoryPool &other); @@ -73,7 +71,7 @@ public: inline void *allocate(size_t size) { - size = (size + 7) & ~7; + size = (size + 7) & ~size_t(7); if (Q_LIKELY(_ptr && (_ptr + size < _end))) { void *addr = _ptr; _ptr += size; @@ -89,6 +87,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)); @@ -98,7 +98,9 @@ public: private: Q_NEVER_INLINE void *allocate_helper(size_t size) { - Q_ASSERT(size < BLOCK_SIZE); + size_t currentBlockSize = DEFAULT_BLOCK_SIZE; + while (Q_UNLIKELY(size >= currentBlockSize)) + currentBlockSize *= 2; if (++_blockCount == _allocatedBlocks) { if (! _allocatedBlocks) @@ -106,7 +108,7 @@ private: else _allocatedBlocks *= 2; - _blocks = (char **) realloc(_blocks, sizeof(char *) * _allocatedBlocks); + _blocks = reinterpret_cast<char **>(realloc(_blocks, sizeof(char *) * size_t(_allocatedBlocks))); Q_CHECK_PTR(_blocks); for (int index = _blockCount; index < _allocatedBlocks; ++index) @@ -116,12 +118,12 @@ private: char *&block = _blocks[_blockCount]; if (! block) { - block = (char *) malloc(BLOCK_SIZE); + block = reinterpret_cast<char *>(malloc(currentBlockSize)); Q_CHECK_PTR(block); } _ptr = block; - _end = _ptr + BLOCK_SIZE; + _end = _ptr + currentBlockSize; void *addr = _ptr; _ptr += size; @@ -138,12 +140,12 @@ private: enum { - BLOCK_SIZE = 8 * 1024, + DEFAULT_BLOCK_SIZE = 8 * 1024, DEFAULT_BLOCK_COUNT = 8 }; }; -class QML_PARSER_EXPORT Managed +class Managed { Q_DISABLE_COPY(Managed) public: diff --git a/src/libs/qmljs/parser/qmljsparser.cpp b/src/libs/qmljs/parser/qmljsparser.cpp index 694ca208cc..fdc442694a 100644 --- a/src/libs/qmljs/parser/qmljsparser.cpp +++ b/src/libs/qmljs/parser/qmljsparser.cpp @@ -1,13 +1,10 @@ - -#line 131 "qmljs.g" /**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** -** This file is part of the QtQml module of the Qt Toolkit. +** This file is part of Qt Creator. ** -** $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 @@ -16,33 +13,21 @@ ** 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 +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** 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$ +** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ +#line 172 "qmljs.g" -#include "qmljsengine_p.h" -#include "qmljslexer_p.h" -#include "qmljsast_p.h" -#include "qmljsmemorypool_p.h" +#include "qmljs/parser/qmljsengine_p.h" +#include "qmljs/parser/qmljslexer_p.h" +#include "qmljs/parser/qmljsast_p.h" +#include "qmljs/parser/qmljsmemorypool_p.h" #include <QtCore/qdebug.h> #include <QtCore/qcoreapplication.h> @@ -50,7 +35,7 @@ #include <string.h> -#line 489 "qmljs.g" +#line 493 "qmljs.g" #include "qmljsparser_p.h" @@ -84,7 +69,7 @@ void Parser::reallocateStack() sym_stack = reinterpret_cast<Value*> (realloc(sym_stack, stack_size * sizeof(Value))); state_stack = reinterpret_cast<int*> (realloc(state_stack, stack_size * sizeof(int))); - location_stack = reinterpret_cast<AST::SourceLocation*> (realloc(location_stack, stack_size * sizeof(AST::SourceLocation))); + location_stack = reinterpret_cast<SourceLocation*> (realloc(location_stack, stack_size * sizeof(SourceLocation))); string_stack.resize(stack_size); rawString_stack.resize(stack_size); } @@ -104,9 +89,9 @@ Parser::~Parser() } } -static inline AST::SourceLocation location(Lexer *lexer) +static inline SourceLocation location(Lexer *lexer) { - AST::SourceLocation loc; + SourceLocation loc; loc.offset = lexer->tokenOffset(); loc.length = lexer->tokenLength(); loc.startLine = lexer->tokenStartLine(); @@ -117,7 +102,7 @@ static inline AST::SourceLocation location(Lexer *lexer) AST::UiQualifiedId *Parser::reparseAsQualifiedId(AST::ExpressionNode *expr) { QVarLengthArray<QStringRef, 4> nameIds; - QVarLengthArray<AST::SourceLocation, 4> locations; + QVarLengthArray<SourceLocation, 4> locations; AST::ExpressionNode *it = expr; while (AST::FieldMemberExpression *m = AST::cast<AST::FieldMemberExpression *>(it)) { @@ -272,85 +257,85 @@ bool Parser::parse(int startToken) switch (r) { -#line 716 "qmljs.g" +#line 720 "qmljs.g" case 0: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 724 "qmljs.g" +#line 728 "qmljs.g" case 1: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 732 "qmljs.g" +#line 736 "qmljs.g" case 2: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 740 "qmljs.g" +#line 744 "qmljs.g" case 3: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 748 "qmljs.g" +#line 752 "qmljs.g" case 4: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 756 "qmljs.g" +#line 760 "qmljs.g" case 5: { sym(1).Node = sym(2).Node; program = sym(1).Node; } break; -#line 765 "qmljs.g" +#line 769 "qmljs.g" case 6: { sym(1).UiProgram = new (pool) AST::UiProgram(sym(1).UiHeaderItemList, sym(2).UiObjectMemberList->finish()); } break; -#line 773 "qmljs.g" +#line 777 "qmljs.g" case 8: { sym(1).Node = sym(1).UiHeaderItemList->finish(); } break; -#line 780 "qmljs.g" +#line 784 "qmljs.g" case 9: { sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiPragma); } break; -#line 787 "qmljs.g" +#line 791 "qmljs.g" case 10: { sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiImport); } break; -#line 794 "qmljs.g" +#line 798 "qmljs.g" case 11: { sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiHeaderItemList, sym(2).UiPragma); } break; -#line 801 "qmljs.g" +#line 805 "qmljs.g" case 12: { sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiHeaderItemList, sym(2).UiImport); } break; -#line 813 "qmljs.g" +#line 817 "qmljs.g" case 16: { AST::UiPragma *pragma = new (pool) AST::UiPragma(stringRef(2)); @@ -359,13 +344,13 @@ bool Parser::parse(int startToken) sym(1).Node = pragma; } break; -#line 825 "qmljs.g" +#line 829 "qmljs.g" case 18: { sym(1).UiImport->semicolonToken = loc(2); } break; -#line 832 "qmljs.g" +#line 836 "qmljs.g" case 19: { auto version = new (pool) AST::UiVersionSpecifier(sym(1).dval, sym(3).dval); @@ -374,7 +359,7 @@ bool Parser::parse(int startToken) sym(1).UiVersionSpecifier = version; } break; -#line 843 "qmljs.g" +#line 847 "qmljs.g" case 20: { auto version = new (pool) AST::UiVersionSpecifier(sym(1).dval, 0); @@ -382,36 +367,24 @@ bool Parser::parse(int startToken) sym(1).UiVersionSpecifier = version; } break; -#line 852 "qmljs.g" +#line 856 "qmljs.g" case 21: { - auto versionToken = loc(2); - auto version = sym(2).UiVersionSpecifier; - sym(1).UiImport->version = version; - if (version->minorToken.isValid()) { - versionToken.length += version->minorToken.length + (version->minorToken.offset - versionToken.offset - versionToken.length); - } - sym(1).UiImport->versionToken = versionToken; + sym(1).UiImport->version = sym(2).UiVersionSpecifier; sym(1).UiImport->semicolonToken = loc(3); } break; -#line 866 "qmljs.g" +#line 864 "qmljs.g" case 22: { - auto versionToken = loc(2); - auto version = sym(2).UiVersionSpecifier; - sym(1).UiImport->version = version; - if (version->minorToken.isValid()) { - versionToken.length += version->minorToken.length + (version->minorToken.offset - versionToken.offset - versionToken.length); - } - sym(1).UiImport->versionToken = versionToken; + sym(1).UiImport->version = sym(2).UiVersionSpecifier; sym(1).UiImport->asToken = loc(3); sym(1).UiImport->importIdToken = loc(4); sym(1).UiImport->importId = stringRef(4); sym(1).UiImport->semicolonToken = loc(5); } break; -#line 878 "qmljs.g" +#line 875 "qmljs.g" case 23: { sym(1).UiImport->asToken = loc(2); @@ -420,7 +393,7 @@ bool Parser::parse(int startToken) sym(1).UiImport->semicolonToken = loc(4); } break; -#line 888 "qmljs.g" +#line 885 "qmljs.g" case 24: { AST::UiImport *node = 0; @@ -445,73 +418,142 @@ bool Parser::parse(int startToken) } } break; -#line 914 "qmljs.g" +#line 911 "qmljs.g" case 25: { sym(1).Node = nullptr; } break; -#line 921 "qmljs.g" +#line 918 "qmljs.g" case 26: { sym(1).Node = new (pool) AST::UiObjectMemberList(sym(1).UiObjectMember); } break; -#line 928 "qmljs.g" +#line 925 "qmljs.g" case 27: { - sym(1).Node = new (pool) AST::UiObjectMemberList(sym(1).UiObjectMember); + AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1)); + node->identifierToken = loc(1); + sym(1).Node = node; } break; -#line 935 "qmljs.g" +#line 934 "qmljs.g" case 28: { - AST::UiObjectMemberList *node = new (pool) AST:: UiObjectMemberList(sym(1).UiObjectMemberList, sym(2).UiObjectMember); + AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3)); + node->dotToken = loc(2); + node->identifierToken = loc(3); sym(1).Node = node; } break; -#line 943 "qmljs.g" +#line 944 "qmljs.g" case 29: { + if (AST::UiQualifiedId *qualifiedId = reparseAsQualifiedId(sym(1).Expression)) { + sym(1).UiQualifiedId = qualifiedId; + } else { + sym(1).UiQualifiedId = 0; + + diagnostic_messages.append(compileError(loc(1), + QLatin1String("Expected a qualified name id"))); + + return false; + } + AST::UiAnnotation *node = new (pool) AST::UiAnnotation(sym(1).UiQualifiedId, sym(2).UiObjectInitializer); + sym(1).Node = node; + } break; + +#line 962 "qmljs.g" + +case 30: { + sym(1).Node = sym(2).Node; +} break; + +#line 970 "qmljs.g" + + case 31: { + sym(1).Node = new (pool) AST::UiAnnotationList(sym(1).UiAnnotation); + } break; + +#line 977 "qmljs.g" + + case 32: { + AST::UiAnnotationList *node = new (pool) AST::UiAnnotationList(sym(1).UiAnnotationList, sym(2).UiAnnotation); + sym(1).Node = node; + } break; + +#line 985 "qmljs.g" + + case 33: { + AST::UiObjectDefinition *node = sym(2).UiObjectDefinition; + node->annotations = sym(1).UiAnnotationList->finish(); + sym(1).Node = node; + } break; + +#line 996 "qmljs.g" + + case 35: { + sym(1).Node = new (pool) AST::UiObjectMemberList(sym(1).UiObjectMember); + } break; + +#line 1003 "qmljs.g" + + case 36: { + AST::UiObjectMemberList *node = new (pool) AST:: UiObjectMemberList(sym(1).UiObjectMemberList, sym(2).UiObjectMember); + sym(1).Node = node; + } break; + +#line 1011 "qmljs.g" + + case 37: { sym(1).Node = new (pool) AST::UiArrayMemberList(sym(1).UiObjectMember); } break; -#line 950 "qmljs.g" +#line 1018 "qmljs.g" - case 30: { + case 38: { AST::UiArrayMemberList *node = new (pool) AST::UiArrayMemberList(sym(1).UiArrayMemberList, sym(3).UiObjectMember); node->commaToken = loc(2); sym(1).Node = node; } break; -#line 959 "qmljs.g" +#line 1027 "qmljs.g" - case 31: { + case 39: { AST::UiObjectInitializer *node = new (pool) AST::UiObjectInitializer((AST::UiObjectMemberList*)0); node->lbraceToken = loc(1); node->rbraceToken = loc(2); sym(1).Node = node; } break; -#line 969 "qmljs.g" +#line 1037 "qmljs.g" - case 32: { + case 40: { AST::UiObjectInitializer *node = new (pool) AST::UiObjectInitializer(sym(2).UiObjectMemberList->finish()); node->lbraceToken = loc(1); node->rbraceToken = loc(3); sym(1).Node = node; } break; -#line 979 "qmljs.g" +#line 1047 "qmljs.g" - case 33: { + case 41: { AST::UiObjectDefinition *node = new (pool) AST::UiObjectDefinition(sym(1).UiQualifiedId, sym(2).UiObjectInitializer); sym(1).Node = node; } break; -#line 989 "qmljs.g" +#line 1055 "qmljs.g" - case 35: { + case 42: { + AST::UiObjectMember *node = sym(2).UiObjectMember; + node->annotations = sym(1).UiAnnotationList->finish(); + sym(1).Node = sym(2).Node; + } break; + +#line 1068 "qmljs.g" + + case 45: { AST::UiArrayBinding *node = new (pool) AST::UiArrayBinding(sym(1).UiQualifiedId, sym(5).UiArrayMemberList->finish()); node->colonToken = loc(2); node->lbracketToken = loc(4); @@ -519,18 +561,18 @@ bool Parser::parse(int startToken) sym(1).Node = node; } break; -#line 1000 "qmljs.g" +#line 1079 "qmljs.g" - case 36: { + case 46: { AST::UiObjectBinding *node = new (pool) AST::UiObjectBinding( sym(1).UiQualifiedId, sym(4).UiQualifiedId, sym(5).UiObjectInitializer); node->colonToken = loc(2); sym(1).Node = node; } break; -#line 1010 "qmljs.g" +#line 1089 "qmljs.g" - case 37: { + case 47: { AST::UiObjectBinding *node = new (pool) AST::UiObjectBinding( sym(3).UiQualifiedId, sym(1).UiQualifiedId, sym(4).UiObjectInitializer); node->colonToken = loc(2); @@ -538,88 +580,98 @@ bool Parser::parse(int startToken) sym(1).Node = node; } break; -#line 1022 "qmljs.g" - case 38: Q_FALLTHROUGH(); -#line 1024 "qmljs.g" +#line 1101 "qmljs.g" - case 39: { + case 48: { AST::ObjectPattern *l = new (pool) AST::ObjectPattern(sym(3).PatternPropertyList->finish()); l->lbraceToken = loc(1); l->rbraceToken = loc(4); AST::ExpressionStatement *node = new (pool) AST::ExpressionStatement(l); + node->semicolonToken = loc(5); + sym(1).Node = node; + } break; + +#line 1114 "qmljs.g" + + case 49: { + AST::ObjectPattern *l = new (pool) AST::ObjectPattern(sym(3).PatternPropertyList->finish()); + l->lbraceToken = loc(1); + l->rbraceToken = loc(5); + AST::ExpressionStatement *node = new (pool) AST::ExpressionStatement(l); + node->semicolonToken = loc(6); sym(1).Node = node; } break; -#line 1036 "qmljs.g" - case 40: Q_FALLTHROUGH(); -#line 1038 "qmljs.g" - case 41: Q_FALLTHROUGH(); -#line 1040 "qmljs.g" +#line 1127 "qmljs.g" + case 50: Q_FALLTHROUGH(); +#line 1129 "qmljs.g" + case 51: Q_FALLTHROUGH(); +#line 1131 "qmljs.g" - case 42: { + case 52: { sym(1).Node = sym(3).Node; } break; -#line 1048 "qmljs.g" - case 43: Q_FALLTHROUGH(); -#line 1050 "qmljs.g" - case 44: Q_FALLTHROUGH(); -#line 1052 "qmljs.g" - case 45: Q_FALLTHROUGH(); -#line 1054 "qmljs.g" - case 46: Q_FALLTHROUGH(); -#line 1056 "qmljs.g" - case 47: Q_FALLTHROUGH(); -#line 1058 "qmljs.g" +#line 1139 "qmljs.g" + case 53: Q_FALLTHROUGH(); +#line 1141 "qmljs.g" + case 54: Q_FALLTHROUGH(); +#line 1143 "qmljs.g" + case 55: Q_FALLTHROUGH(); +#line 1145 "qmljs.g" + case 56: Q_FALLTHROUGH(); +#line 1147 "qmljs.g" + case 57: Q_FALLTHROUGH(); +#line 1149 "qmljs.g" - case 48: { + case 58: { sym(1).Node = sym(2).Node; } break; -#line 1065 "qmljs.g" +#line 1156 "qmljs.g" -case 49: +case 59: { AST::UiScriptBinding *node = new (pool) AST::UiScriptBinding(sym(1).UiQualifiedId, sym(3).Statement); node->colonToken = loc(2); sym(1).Node = node; } break; -#line 1075 "qmljs.g" - case 50: Q_FALLTHROUGH(); -#line 1077 "qmljs.g" - case 51: Q_FALLTHROUGH(); -#line 1079 "qmljs.g" +#line 1166 "qmljs.g" + case 60: Q_FALLTHROUGH(); +#line 1168 "qmljs.g" + case 61: Q_FALLTHROUGH(); +#line 1170 "qmljs.g" - case 52: { + case 62: { AST::UiQualifiedId *node = new (pool) AST::UiQualifiedId(stringRef(1)); node->identifierToken = loc(1); sym(1).Node = node; } break; -#line 1088 "qmljs.g" +#line 1179 "qmljs.g" - case 53: { + case 63: { AST::UiQualifiedId *node = new (pool) AST::UiQualifiedId(sym(1).UiQualifiedId, stringRef(3)); node->identifierToken = loc(3); sym(1).Node = node; } break; -#line 1097 "qmljs.g" +#line 1188 "qmljs.g" - case 54: { + case 64: { sym(1).Node = nullptr; } break; -#line 1104 "qmljs.g" +#line 1195 "qmljs.g" - case 55: { + case 65: { sym(1).Node = sym(1).UiParameterList->finish(); } break; -#line 1111 "qmljs.g" +#line 1202 "qmljs.g" - case 56: { + case 66: { AST::UiParameterList *node = new (pool) AST::UiParameterList(sym(3).UiQualifiedId->finish(), stringRef(1)); node->identifierToken = loc(1); node->colonToken = loc(2); @@ -627,18 +679,18 @@ case 49: sym(1).Node = node; } break; -#line 1122 "qmljs.g" +#line 1213 "qmljs.g" - case 57: { + case 67: { AST::UiParameterList *node = new (pool) AST::UiParameterList(sym(1).UiQualifiedId->finish(), stringRef(2)); node->propertyTypeToken = loc(1); node->identifierToken = loc(2); sym(1).Node = node; } break; -#line 1132 "qmljs.g" +#line 1223 "qmljs.g" - case 58: { + case 68: { AST::UiParameterList *node = new (pool) AST::UiParameterList(sym(1).UiParameterList, sym(5).UiQualifiedId->finish(), stringRef(3)); node->propertyTypeToken = loc(5); node->commaToken = loc(2); @@ -647,9 +699,9 @@ case 49: sym(1).Node = node; } break; -#line 1144 "qmljs.g" +#line 1235 "qmljs.g" - case 59: { + case 69: { AST::UiParameterList *node = new (pool) AST::UiParameterList(sym(1).UiParameterList, sym(3).UiQualifiedId->finish(), stringRef(4)); node->propertyTypeToken = loc(3); node->commaToken = loc(2); @@ -657,9 +709,9 @@ case 49: sym(1).Node = node; } break; -#line 1155 "qmljs.g" +#line 1246 "qmljs.g" - case 60: { + case 70: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(nullptr, stringRef(2)); node->type = AST::UiPublicMember::Signal; node->propertyToken = loc(1); @@ -670,9 +722,9 @@ case 49: sym(1).Node = node; } break; -#line 1169 "qmljs.g" +#line 1260 "qmljs.g" - case 61: { + case 71: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(nullptr, stringRef(2)); node->type = AST::UiPublicMember::Signal; node->propertyToken = loc(1); @@ -682,9 +734,9 @@ case 49: sym(1).Node = node; } break; -#line 1182 "qmljs.g" +#line 1273 "qmljs.g" - case 62: { + case 72: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(4).UiQualifiedId->finish(), stringRef(6)); node->typeModifier = stringRef(2); node->propertyToken = loc(1); @@ -695,18 +747,18 @@ case 49: sym(1).Node = node; } break; -#line 1198 "qmljs.g" +#line 1289 "qmljs.g" - case 64: { + case 74: { AST::UiPublicMember *node = sym(2).UiPublicMember; node->isReadonlyMember = true; node->readonlyToken = loc(1); sym(1).Node = node; } break; -#line 1208 "qmljs.g" +#line 1299 "qmljs.g" - case 65: { + case 75: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(2).UiQualifiedId->finish(), stringRef(3)); node->propertyToken = loc(1); node->typeToken = loc(2); @@ -715,41 +767,72 @@ case 49: sym(1).Node = node; } break; -#line 1223 "qmljs.g" +#line 1314 "qmljs.g" - case 67: { + case 77: { AST::UiPublicMember *node = sym(2).UiPublicMember; node->isDefaultMember = true; node->defaultToken = loc(1); sym(1).Node = node; } break; -#line 1233 "qmljs.g" +#line 1324 "qmljs.g" - case 68: { + case 78: { AST::UiPublicMember *node = sym(2).UiPublicMember; node->isDefaultMember = true; node->defaultToken = loc(1); sym(1).Node = node; } break; -#line 1243 "qmljs.g" +#line 1334 "qmljs.g" + + case 79: { + AST::UiPublicMember *node = sym(3).UiPublicMember; + node->isDefaultMember = true; + node->defaultToken = loc(1); + node->isRequired = true; + node->requiredToken = loc(2); + sym(1).Node = node; + } break; + +#line 1347 "qmljs.g" + + case 80: { + AST::UiPublicMember *node = sym(3).UiPublicMember; + node->isDefaultMember = true; + node->defaultToken = loc(2); + node->isRequired = true; + node->requiredToken = loc(1); + sym(1).Node = node; + } break; + +#line 1359 "qmljs.g" /* we need OptionalSemicolon because UiScriptStatement might already parse the last semicolon and then we would miss a semicolon (see tests/auto/quick/qquickvisualdatamodel/data/objectlist.qml)*/ + +#line 1365 "qmljs.g" -#line 1249 "qmljs.g" + case 83: { + AST::UiRequired *node = new (pool) AST::UiRequired(stringRef(2)); + node->requiredToken = loc(1); + node->semicolonToken = loc(3); + sym(1).Node = node; + } break; - case 71: { +#line 1377 "qmljs.g" + + case 85: { AST::UiPublicMember *node = sym(2).UiPublicMember; node->requiredToken = loc(1); node->isRequired = true; sym(1).Node = node; } break; -#line 1260 "qmljs.g" +#line 1387 "qmljs.g" - case 72: { + case 86: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(2).UiQualifiedId->finish(), stringRef(3), sym(5).Statement); node->propertyToken = loc(1); node->typeToken = loc(2); @@ -758,27 +841,27 @@ case 49: sym(1).Node = node; } break; -#line 1274 "qmljs.g" +#line 1401 "qmljs.g" - case 74: { + case 88: { AST::UiPublicMember *node = sym(2).UiPublicMember; node->isReadonlyMember = true; node->readonlyToken = loc(1); sym(1).Node = node; } break; -#line 1284 "qmljs.g" +#line 1411 "qmljs.g" - case 75: { + case 89: { AST::UiPublicMember *node = sym(2).UiPublicMember; node->isDefaultMember = true; node->defaultToken = loc(1); sym(1).Node = node; } break; -#line 1294 "qmljs.g" +#line 1421 "qmljs.g" - case 76: { + case 90: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(4).UiQualifiedId->finish(), stringRef(6)); node->typeModifier = stringRef(2); node->propertyToken = loc(1); @@ -801,18 +884,18 @@ case 49: sym(1).Node = node; } break; -#line 1322 "qmljs.g" +#line 1449 "qmljs.g" - case 78: { + case 92: { AST::UiPublicMember *node = sym(2).UiPublicMember; node->isReadonlyMember = true; node->readonlyToken = loc(1); sym(1).Node = node; } break; -#line 1332 "qmljs.g" +#line 1459 "qmljs.g" - case 79: { + case 93: { AST::UiPublicMember *node = new (pool) AST::UiPublicMember(sym(2).UiQualifiedId->finish(), stringRef(3)); node->propertyToken = loc(1); node->typeToken = loc(2); @@ -832,40 +915,40 @@ case 49: sym(1).Node = node; } break; -#line 1357 "qmljs.g" +#line 1484 "qmljs.g" - case 81: { + case 95: { AST::UiPublicMember *node = sym(2).UiPublicMember; node->isReadonlyMember = true; node->readonlyToken = loc(1); sym(1).Node = node; } break; -#line 1367 "qmljs.g" +#line 1494 "qmljs.g" - case 82: { + case 96: { auto node = new (pool) AST::UiSourceElement(sym(1).Node); sym(1).Node = node; } break; -#line 1375 "qmljs.g" +#line 1502 "qmljs.g" - case 83: { + case 97: { sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node); } break; -#line 1382 "qmljs.g" +#line 1509 "qmljs.g" - case 84: { + case 98: { sym(1).Node = new (pool) AST::UiSourceElement(sym(1).Node); } break; -#line 1389 "qmljs.g" +#line 1516 "qmljs.g" - case 85: { + case 99: { if (AST::ArrayMemberExpression *mem = AST::cast<AST::ArrayMemberExpression *>(sym(1).Expression)) { diagnostic_messages.append(compileError(mem->lbracketToken, - QLatin1String("Ignored annotation"), Severity::Warning)); + QLatin1String("Ignored annotation"), QtWarningMsg)); sym(1).Expression = mem->base; } @@ -882,9 +965,9 @@ case 49: } } break; -#line 1412 "qmljs.g" +#line 1539 "qmljs.g" - case 86: { + case 100: { AST::UiEnumDeclaration *enumDeclaration = new (pool) AST::UiEnumDeclaration(stringRef(2), sym(4).UiEnumMemberList->finish()); enumDeclaration->enumToken = loc(1); enumDeclaration->rbraceToken = loc(5); @@ -892,18 +975,30 @@ case 49: break; } -#line 1423 "qmljs.g" +#line 1550 "qmljs.g" - case 87: { + case 101: { + if (!stringRef(2).front().isUpper()) { + diagnostic_messages.append(compileError(loc(2), + QLatin1String("Type name must be upper case"), QtWarningMsg)); + } + auto inlineComponent = new (pool) AST::UiInlineComponent(stringRef(2), sym(4).UiObjectDefinition); + inlineComponent->componentToken = loc(1); + sym(1).Node = inlineComponent; + } break; + +#line 1563 "qmljs.g" + + case 102: { AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(stringRef(1)); node->memberToken = loc(1); sym(1).Node = node; break; } -#line 1433 "qmljs.g" +#line 1573 "qmljs.g" - case 88: { + case 103: { AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(stringRef(1), sym(3).dval); node->memberToken = loc(1); node->valueToken = loc(3); @@ -911,18 +1006,18 @@ case 49: break; } -#line 1444 "qmljs.g" +#line 1584 "qmljs.g" - case 89: { + case 104: { AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3)); node->memberToken = loc(3); sym(1).Node = node; break; } -#line 1454 "qmljs.g" +#line 1594 "qmljs.g" - case 90: { + case 105: { AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3), sym(5).dval); node->memberToken = loc(3); node->valueToken = loc(5); @@ -930,79 +1025,79 @@ case 49: break; } -#line 1496 "qmljs.g" +#line 1638 "qmljs.g" - case 115: { + case 132: { sym(1).TypeArgumentList = new (pool) AST::TypeArgumentList(sym(1).Type); } break; -#line 1503 "qmljs.g" +#line 1645 "qmljs.g" - case 116: { + case 133: { sym(1).TypeArgumentList = new (pool) AST::TypeArgumentList(sym(1).TypeArgumentList, sym(3).Type); } break; -#line 1510 "qmljs.g" +#line 1652 "qmljs.g" - case 117: { + case 134: { sym(1).Type = new (pool) AST::Type(sym(1).UiQualifiedId, sym(3).TypeArgumentList->finish()); } break; -#line 1517 "qmljs.g" +#line 1659 "qmljs.g" - case 118: { + case 135: { AST::UiQualifiedId *id = new (pool) AST::UiQualifiedId(stringRef(1)); id->identifierToken = loc(1); sym(1).Type = new (pool) AST::Type(id->finish()); } break; -#line 1526 "qmljs.g" +#line 1668 "qmljs.g" - case 119: { + case 136: { sym(1).Type = new (pool) AST::Type(sym(1).UiQualifiedId); } break; -#line 1533 "qmljs.g" +#line 1675 "qmljs.g" - case 120: { + case 137: { sym(1).TypeAnnotation = new (pool) AST::TypeAnnotation(sym(2).Type); sym(1).TypeAnnotation->colonToken = loc(1); } break; -#line 1542 "qmljs.g" +#line 1684 "qmljs.g" - case 122: { + case 139: { sym(1).TypeAnnotation = nullptr; } break; -#line 1553 "qmljs.g" +#line 1695 "qmljs.g" - case 123: { + case 140: { AST::ThisExpression *node = new (pool) AST::ThisExpression(); node->thisToken = loc(1); sym(1).Node = node; } break; -#line 1562 "qmljs.g" +#line 1704 "qmljs.g" - case 124: { + case 141: { AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1)); node->identifierToken = loc(1); sym(1).Node = node; } break; -#line 1580 "qmljs.g" +#line 1722 "qmljs.g" - case 133: { + case 150: { if (coverExpressionType != CE_ParenthesizedExpression) { syntaxError(coverExpressionErrorLocation, "Expected token ')'."); return false; } } break; -#line 1591 "qmljs.g" +#line 1733 "qmljs.g" - case 134: { + case 151: { AST::NestedExpression *node = new (pool) AST::NestedExpression(sym(2).Expression); node->lparenToken = loc(1); node->rparenToken = loc(3); @@ -1010,26 +1105,26 @@ case 49: coverExpressionType = CE_ParenthesizedExpression; } break; -#line 1602 "qmljs.g" +#line 1744 "qmljs.g" - case 135: { + case 152: { sym(1).Node = nullptr; coverExpressionErrorLocation = loc(2); coverExpressionType = CE_FormalParameterList; } break; -#line 1611 "qmljs.g" +#line 1753 "qmljs.g" - case 136: { + case 153: { AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(nullptr, sym(2).PatternElement))->finish(pool); sym(1).Node = node; coverExpressionErrorLocation = loc(2); coverExpressionType = CE_FormalParameterList; } break; -#line 1621 "qmljs.g" +#line 1763 "qmljs.g" - case 137: { + case 154: { AST::FormalParameterList *list = sym(2).Expression->reparseAsFormalParameterList(pool); if (!list) { syntaxError(loc(1), "Invalid Arrow parameter list."); @@ -1043,59 +1138,59 @@ case 49: sym(1).Node = list->finish(pool); } break; -#line 1638 "qmljs.g" +#line 1780 "qmljs.g" - case 138: { + case 155: { AST::NullExpression *node = new (pool) AST::NullExpression(); node->nullToken = loc(1); sym(1).Node = node; } break; -#line 1647 "qmljs.g" +#line 1789 "qmljs.g" - case 139: { + case 156: { AST::TrueLiteral *node = new (pool) AST::TrueLiteral(); node->trueToken = loc(1); sym(1).Node = node; } break; -#line 1656 "qmljs.g" +#line 1798 "qmljs.g" - case 140: { + case 157: { AST::FalseLiteral *node = new (pool) AST::FalseLiteral(); node->falseToken = loc(1); sym(1).Node = node; } break; -#line 1665 "qmljs.g" +#line 1807 "qmljs.g" - case 141: { + case 158: { AST::NumericLiteral *node = new (pool) AST::NumericLiteral(sym(1).dval); node->literalToken = loc(1); sym(1).Node = node; } break; -#line 1674 "qmljs.g" - case 142: Q_FALLTHROUGH(); -#line 1677 "qmljs.g" +#line 1816 "qmljs.g" + case 159: Q_FALLTHROUGH(); +#line 1819 "qmljs.g" - case 143: { + case 160: { AST::StringLiteral *node = new (pool) AST::StringLiteral(stringRef(1)); node->literalToken = loc(1); sym(1).Node = node; } break; -#line 1689 "qmljs.g" +#line 1831 "qmljs.g" { Lexer::RegExpBodyPrefix prefix; - case 144: + case 161: prefix = Lexer::NoPrefix; goto scan_regexp; -#line 1701 "qmljs.g" +#line 1843 "qmljs.g" - case 145: + case 162: prefix = Lexer::EqualPrefix; goto scan_regexp; @@ -1115,9 +1210,9 @@ case 49: } break; } -#line 1725 "qmljs.g" +#line 1867 "qmljs.g" - case 146: { + case 163: { AST::PatternElementList *list = nullptr; if (sym(2).Elision) list = (new (pool) AST::PatternElementList(sym(2).Elision, nullptr))->finish(); @@ -1127,18 +1222,18 @@ case 49: sym(1).Node = node; } break; -#line 1738 "qmljs.g" +#line 1880 "qmljs.g" - case 147: { + case 164: { AST::ArrayPattern *node = new (pool) AST::ArrayPattern(sym(2).PatternElementList->finish()); node->lbracketToken = loc(1); node->rbracketToken = loc(3); sym(1).Node = node; } break; -#line 1748 "qmljs.g" +#line 1890 "qmljs.g" - case 148: { + case 165: { auto *list = sym(2).PatternElementList; if (sym(4).Elision) { AST::PatternElementList *l = new (pool) AST::PatternElementList(sym(4).Elision, nullptr); @@ -1152,124 +1247,124 @@ case 49: Q_ASSERT(node->isValidArrayLiteral()); } break; -#line 1765 "qmljs.g" +#line 1907 "qmljs.g" - case 149: { + case 166: { AST::PatternElement *e = new (pool) AST::PatternElement(sym(1).Expression); sym(1).Node = new (pool) AST::PatternElementList(nullptr, e); } break; -#line 1773 "qmljs.g" +#line 1915 "qmljs.g" - case 150: { + case 167: { AST::PatternElement *e = new (pool) AST::PatternElement(sym(2).Expression); sym(1).Node = new (pool) AST::PatternElementList(sym(1).Elision->finish(), e); } break; -#line 1781 "qmljs.g" +#line 1923 "qmljs.g" - case 151: { + case 168: { AST::PatternElementList *node = new (pool) AST::PatternElementList(sym(1).Elision, sym(2).PatternElement); sym(1).Node = node; } break; -#line 1789 "qmljs.g" +#line 1931 "qmljs.g" - case 152: { + case 169: { AST::PatternElement *e = new (pool) AST::PatternElement(sym(4).Expression); AST::PatternElementList *node = new (pool) AST::PatternElementList(sym(3).Elision, e); sym(1).Node = sym(1).PatternElementList->append(node); } break; -#line 1798 "qmljs.g" +#line 1940 "qmljs.g" - case 153: { + case 170: { AST::PatternElementList *node = new (pool) AST::PatternElementList(sym(3).Elision, sym(4).PatternElement); sym(1).Node = sym(1).PatternElementList->append(node); } break; -#line 1806 "qmljs.g" +#line 1948 "qmljs.g" - case 154: { + case 171: { AST::Elision *node = new (pool) AST::Elision(); node->commaToken = loc(1); sym(1).Node = node; } break; -#line 1815 "qmljs.g" +#line 1957 "qmljs.g" - case 155: { + case 172: { AST::Elision *node = new (pool) AST::Elision(sym(1).Elision); node->commaToken = loc(2); sym(1).Node = node; } break; -#line 1824 "qmljs.g" +#line 1966 "qmljs.g" - case 156: { + case 173: { sym(1).Node = nullptr; } break; -#line 1831 "qmljs.g" +#line 1973 "qmljs.g" - case 157: { + case 174: { sym(1).Node = sym(1).Elision->finish(); } break; -#line 1838 "qmljs.g" +#line 1980 "qmljs.g" - case 158: { + case 175: { AST::PatternElement *node = new (pool) AST::PatternElement(sym(2).Expression, AST::PatternElement::SpreadElement); sym(1).Node = node; } break; -#line 1846 "qmljs.g" +#line 1988 "qmljs.g" - case 159: { + case 176: { AST::ObjectPattern *node = new (pool) AST::ObjectPattern(); node->lbraceToken = loc(1); node->rbraceToken = loc(2); sym(1).Node = node; } break; -#line 1856 "qmljs.g" +#line 1998 "qmljs.g" - case 160: { + case 177: { AST::ObjectPattern *node = new (pool) AST::ObjectPattern(sym(2).PatternPropertyList->finish()); node->lbraceToken = loc(1); node->rbraceToken = loc(3); sym(1).Node = node; } break; -#line 1866 "qmljs.g" +#line 2008 "qmljs.g" - case 161: { + case 178: { AST::ObjectPattern *node = new (pool) AST::ObjectPattern(sym(2).PatternPropertyList->finish()); node->lbraceToken = loc(1); node->rbraceToken = loc(4); sym(1).Node = node; } break; -#line 1877 "qmljs.g" - case 162: Q_FALLTHROUGH(); -#line 1879 "qmljs.g" +#line 2019 "qmljs.g" + case 179: Q_FALLTHROUGH(); +#line 2021 "qmljs.g" - case 163: { + case 180: { sym(1).Node = new (pool) AST::PatternPropertyList(sym(1).PatternProperty); } break; -#line 1886 "qmljs.g" - case 164: Q_FALLTHROUGH(); -#line 1888 "qmljs.g" +#line 2028 "qmljs.g" + case 181: Q_FALLTHROUGH(); +#line 2030 "qmljs.g" - case 165: { + case 182: { AST::PatternPropertyList *node = new (pool) AST::PatternPropertyList(sym(1).PatternPropertyList, sym(3).PatternProperty); sym(1).Node = node; } break; -#line 1896 "qmljs.g" +#line 2038 "qmljs.g" - case 166: { + case 183: { AST::IdentifierPropertyName *name = new (pool) AST::IdentifierPropertyName(stringRef(1)); name->propertyNameToken = loc(1); AST::IdentifierExpression *expr = new (pool) AST::IdentifierExpression(stringRef(1)); @@ -1279,9 +1374,9 @@ case 49: sym(1).Node = node; } break; -#line 1912 "qmljs.g" +#line 2054 "qmljs.g" - case 168: { + case 185: { AST::IdentifierPropertyName *name = new (pool) AST::IdentifierPropertyName(stringRef(1)); name->propertyNameToken = loc(1); AST::IdentifierExpression *left = new (pool) AST::IdentifierExpression(stringRef(1)); @@ -1298,11 +1393,11 @@ case 49: } break; -#line 1932 "qmljs.g" - case 169: Q_FALLTHROUGH(); -#line 1934 "qmljs.g" +#line 2074 "qmljs.g" + case 186: Q_FALLTHROUGH(); +#line 2076 "qmljs.g" - case 170: { + case 187: { AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, sym(3).Expression); if (auto *c = asAnonymousClassDefinition(sym(3).Expression)) { if (!AST::cast<AST::ComputedPropertyName *>(sym(1).PropertyName)) @@ -1312,120 +1407,120 @@ case 49: sym(1).Node = node; } break; -#line 1952 "qmljs.g" +#line 2094 "qmljs.g" - case 174: { + case 191: { AST::IdentifierPropertyName *node = new (pool) AST::IdentifierPropertyName(stringRef(1)); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -#line 1961 "qmljs.g" - case 175: Q_FALLTHROUGH(); -#line 1963 "qmljs.g" +#line 2103 "qmljs.g" + case 192: Q_FALLTHROUGH(); +#line 2105 "qmljs.g" - case 176: { + case 193: { AST::StringLiteralPropertyName *node = new (pool) AST::StringLiteralPropertyName(stringRef(1)); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -#line 1972 "qmljs.g" - case 177: Q_FALLTHROUGH(); -#line 1974 "qmljs.g" +#line 2114 "qmljs.g" + case 194: Q_FALLTHROUGH(); +#line 2116 "qmljs.g" - case 178: { + case 195: { AST::NumericLiteralPropertyName *node = new (pool) AST::NumericLiteralPropertyName(sym(1).dval); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -#line 2025 "qmljs.g" +#line 2167 "qmljs.g" - case 219: { + case 236: { AST::ComputedPropertyName *node = new (pool) AST::ComputedPropertyName(sym(2).Expression); node->propertyNameToken = loc(1); sym(1).Node = node; } break; -#line 2034 "qmljs.g" - case 220: Q_FALLTHROUGH(); -#line 2036 "qmljs.g" +#line 2176 "qmljs.g" + case 237: Q_FALLTHROUGH(); +#line 2178 "qmljs.g" -case 221: { +case 238: { sym(1) = sym(2); } break; -#line 2044 "qmljs.g" - case 222: Q_FALLTHROUGH(); -#line 2046 "qmljs.g" +#line 2186 "qmljs.g" + case 239: Q_FALLTHROUGH(); +#line 2188 "qmljs.g" - case 223: { + case 240: { sym(1).Node = nullptr; } break; -#line 2056 "qmljs.g" - case 226: Q_FALLTHROUGH(); -#line 2059 "qmljs.g" +#line 2198 "qmljs.g" + case 243: Q_FALLTHROUGH(); +#line 2201 "qmljs.g" - case 227: { + case 244: { AST::TemplateLiteral *node = new (pool) AST::TemplateLiteral(stringRef(1), rawStringRef(1), nullptr); node->literalToken = loc(1); sym(1).Node = node; } break; -#line 2068 "qmljs.g" - case 228: Q_FALLTHROUGH(); -#line 2071 "qmljs.g" +#line 2210 "qmljs.g" + case 245: Q_FALLTHROUGH(); +#line 2213 "qmljs.g" - case 229: { + case 246: { AST::TemplateLiteral *node = new (pool) AST::TemplateLiteral(stringRef(1), rawStringRef(1), sym(2).Expression); node->next = sym(3).Template; node->literalToken = loc(1); sym(1).Node = node; } break; -#line 2084 "qmljs.g" +#line 2226 "qmljs.g" - case 231: { + case 248: { AST::SuperLiteral *node = new (pool) AST::SuperLiteral(); node->superToken = loc(1); sym(1).Node = node; } break; -#line 2094 "qmljs.g" - case 232: Q_FALLTHROUGH(); -#line 2096 "qmljs.g" +#line 2236 "qmljs.g" + case 249: Q_FALLTHROUGH(); +#line 2238 "qmljs.g" - case 233: { + case 250: { AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression); node->lbracketToken = loc(2); node->rbracketToken = loc(4); sym(1).Node = node; } break; -#line 2108 "qmljs.g" - case 234: +#line 2250 "qmljs.g" + case 251: { AST::IdentifierExpression *node = new (pool) AST::IdentifierExpression(stringRef(1)); node->identifierToken= loc(1); sym(1).Node = node; } Q_FALLTHROUGH(); -#line 2116 "qmljs.g" - case 235: Q_FALLTHROUGH(); -#line 2118 "qmljs.g" +#line 2258 "qmljs.g" + case 252: Q_FALLTHROUGH(); +#line 2260 "qmljs.g" - case 236: { + case 253: { AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3)); node->dotToken = loc(2); node->identifierToken = loc(3); sym(1).Node = node; } break; -#line 2130 "qmljs.g" +#line 2272 "qmljs.g" - case 238: { + case 255: { AST::NewMemberExpression *node = new (pool) AST::NewMemberExpression(sym(2).Expression, sym(4).ArgumentList); node->newToken = loc(1); node->lparenToken = loc(3); @@ -1433,419 +1528,461 @@ case 221: { sym(1).Node = node; } break; -#line 2146 "qmljs.g" +#line 2288 "qmljs.g" - case 241: { + case 258: { AST::NewExpression *node = new (pool) AST::NewExpression(sym(2).Expression); node->newToken = loc(1); sym(1).Node = node; } break; -#line 2156 "qmljs.g" - case 242: Q_FALLTHROUGH(); -#line 2158 "qmljs.g" +#line 2298 "qmljs.g" + case 259: Q_FALLTHROUGH(); +#line 2300 "qmljs.g" - case 243: { + case 260: { AST::TaggedTemplate *node = new (pool) AST::TaggedTemplate(sym(1).Expression, sym(2).Template); sym(1).Node = node; } break; -#line 2166 "qmljs.g" +#line 2308 "qmljs.g" - case 244: { + case 261: { AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList); node->lparenToken = loc(2); node->rparenToken = loc(4); sym(1).Node = node; } break; -#line 2176 "qmljs.g" - case 245: Q_FALLTHROUGH(); -#line 2178 "qmljs.g" +#line 2318 "qmljs.g" + case 262: Q_FALLTHROUGH(); +#line 2320 "qmljs.g" - case 246: { + case 263: { AST::CallExpression *node = new (pool) AST::CallExpression(sym(1).Expression, sym(3).ArgumentList); node->lparenToken = loc(2); node->rparenToken = loc(4); sym(1).Node = node; } break; -#line 2188 "qmljs.g" +#line 2330 "qmljs.g" - case 247: { + case 264: { AST::ArrayMemberExpression *node = new (pool) AST::ArrayMemberExpression(sym(1).Expression, sym(3).Expression); node->lbracketToken = loc(2); node->rbracketToken = loc(4); sym(1).Node = node; } break; -#line 2198 "qmljs.g" +#line 2340 "qmljs.g" - case 248: { + case 265: { AST::FieldMemberExpression *node = new (pool) AST::FieldMemberExpression(sym(1).Expression, stringRef(3)); node->dotToken = loc(2); node->identifierToken = loc(3); sym(1).Node = node; } break; -#line 2208 "qmljs.g" +#line 2350 "qmljs.g" - case 249: { + case 266: { sym(1).Node = nullptr; } break; -#line 2215 "qmljs.g" - case 250: Q_FALLTHROUGH(); -#line 2217 "qmljs.g" +#line 2357 "qmljs.g" + case 267: Q_FALLTHROUGH(); +#line 2359 "qmljs.g" - case 251: { + case 268: { sym(1).Node = sym(1).ArgumentList->finish(); } break; -#line 2224 "qmljs.g" +#line 2366 "qmljs.g" - case 252: { + case 269: { sym(1).Node = new (pool) AST::ArgumentList(sym(1).Expression); } break; -#line 2231 "qmljs.g" +#line 2373 "qmljs.g" - case 253: { + case 270: { AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(2).Expression); node->isSpreadElement = true; sym(1).Node = node; } break; -#line 2240 "qmljs.g" +#line 2382 "qmljs.g" - case 254: { + case 271: { AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(1).ArgumentList, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -#line 2249 "qmljs.g" +#line 2391 "qmljs.g" - case 255: { + case 272: { AST::ArgumentList *node = new (pool) AST::ArgumentList(sym(1).ArgumentList, sym(4).Expression); node->commaToken = loc(2); node->isSpreadElement = true; sym(1).Node = node; } break; -#line 2264 "qmljs.g" +#line 2406 "qmljs.g" - case 259: { + case 276: { AST::PostIncrementExpression *node = new (pool) AST::PostIncrementExpression(sym(1).Expression); node->incrementToken = loc(2); sym(1).Node = node; } break; -#line 2273 "qmljs.g" +#line 2415 "qmljs.g" - case 260: { + case 277: { AST::PostDecrementExpression *node = new (pool) AST::PostDecrementExpression(sym(1).Expression); node->decrementToken = loc(2); sym(1).Node = node; } break; -#line 2282 "qmljs.g" +#line 2424 "qmljs.g" - case 261: { + case 278: { AST::PreIncrementExpression *node = new (pool) AST::PreIncrementExpression(sym(2).Expression); node->incrementToken = loc(1); sym(1).Node = node; } break; -#line 2291 "qmljs.g" +#line 2433 "qmljs.g" - case 262: { + case 279: { AST::PreDecrementExpression *node = new (pool) AST::PreDecrementExpression(sym(2).Expression); node->decrementToken = loc(1); sym(1).Node = node; } break; -#line 2302 "qmljs.g" +#line 2444 "qmljs.g" - case 264: { + case 281: { AST::DeleteExpression *node = new (pool) AST::DeleteExpression(sym(2).Expression); node->deleteToken = loc(1); sym(1).Node = node; } break; -#line 2311 "qmljs.g" +#line 2453 "qmljs.g" - case 265: { + case 282: { AST::VoidExpression *node = new (pool) AST::VoidExpression(sym(2).Expression); node->voidToken = loc(1); sym(1).Node = node; } break; -#line 2320 "qmljs.g" +#line 2462 "qmljs.g" - case 266: { + case 283: { AST::TypeOfExpression *node = new (pool) AST::TypeOfExpression(sym(2).Expression); node->typeofToken = loc(1); sym(1).Node = node; } break; -#line 2329 "qmljs.g" +#line 2471 "qmljs.g" - case 267: { + case 284: { AST::UnaryPlusExpression *node = new (pool) AST::UnaryPlusExpression(sym(2).Expression); node->plusToken = loc(1); sym(1).Node = node; } break; -#line 2338 "qmljs.g" +#line 2480 "qmljs.g" - case 268: { + case 285: { AST::UnaryMinusExpression *node = new (pool) AST::UnaryMinusExpression(sym(2).Expression); node->minusToken = loc(1); sym(1).Node = node; } break; -#line 2347 "qmljs.g" +#line 2489 "qmljs.g" - case 269: { + case 286: { AST::TildeExpression *node = new (pool) AST::TildeExpression(sym(2).Expression); node->tildeToken = loc(1); sym(1).Node = node; } break; -#line 2356 "qmljs.g" +#line 2498 "qmljs.g" - case 270: { + case 287: { AST::NotExpression *node = new (pool) AST::NotExpression(sym(2).Expression); node->notToken = loc(1); sym(1).Node = node; } break; -#line 2367 "qmljs.g" +#line 2509 "qmljs.g" - case 272: { + case 289: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Exp, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2378 "qmljs.g" +#line 2520 "qmljs.g" - case 274: { + case 291: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2387 "qmljs.g" +#line 2529 "qmljs.g" - case 275: { + case 292: { sym(1).ival = QSOperator::Mul; } break; -#line 2394 "qmljs.g" +#line 2536 "qmljs.g" - case 276: { + case 293: { sym(1).ival = QSOperator::Div; } break; -#line 2401 "qmljs.g" +#line 2543 "qmljs.g" - case 277: { + case 294: { sym(1).ival = QSOperator::Mod; } break; -#line 2410 "qmljs.g" +#line 2552 "qmljs.g" - case 279: { + case 296: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Add, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2419 "qmljs.g" +#line 2561 "qmljs.g" - case 280: { + case 297: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Sub, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2430 "qmljs.g" +#line 2572 "qmljs.g" - case 282: { + case 299: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::LShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2439 "qmljs.g" +#line 2581 "qmljs.g" - case 283: { + case 300: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::RShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2448 "qmljs.g" +#line 2590 "qmljs.g" - case 284: { + case 301: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::URShift, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2460 "qmljs.g" - case 287: Q_FALLTHROUGH(); -#line 2462 "qmljs.g" +#line 2602 "qmljs.g" + case 304: Q_FALLTHROUGH(); +#line 2604 "qmljs.g" - case 288: { + case 305: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2471 "qmljs.g" +#line 2613 "qmljs.g" - case 289: { + case 306: { sym(1).ival = QSOperator::Lt; } break; -#line 2477 "qmljs.g" +#line 2619 "qmljs.g" - case 290: { + case 307: { sym(1).ival = QSOperator::Gt; } break; -#line 2483 "qmljs.g" +#line 2625 "qmljs.g" - case 291: { + case 308: { sym(1).ival = QSOperator::Le; } break; -#line 2489 "qmljs.g" +#line 2631 "qmljs.g" - case 292: { + case 309: { sym(1).ival = QSOperator::Ge; } break; -#line 2495 "qmljs.g" +#line 2637 "qmljs.g" - case 293: { + case 310: { sym(1).ival = QSOperator::InstanceOf; } break; -#line 2502 "qmljs.g" +#line 2644 "qmljs.g" - case 294: { + case 311: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::In, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2514 "qmljs.g" - case 297: Q_FALLTHROUGH(); -#line 2516 "qmljs.g" +#line 2653 "qmljs.g" + case 312: Q_FALLTHROUGH(); +#line 2655 "qmljs.g" + + case 313: { + AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::As, sym(3).Expression); + node->operatorToken = loc(2); + sym(1).Node = node; + } break; + +#line 2670 "qmljs.g" + case 318: Q_FALLTHROUGH(); +#line 2672 "qmljs.g" - case 298: { + case 319: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2525 "qmljs.g" +#line 2681 "qmljs.g" - case 299: { + case 320: { sym(1).ival = QSOperator::Equal; } break; -#line 2531 "qmljs.g" +#line 2687 "qmljs.g" - case 300: { + case 321: { sym(1).ival = QSOperator::NotEqual; } break; -#line 2537 "qmljs.g" +#line 2693 "qmljs.g" - case 301: { + case 322: { sym(1).ival = QSOperator::StrictEqual; } break; -#line 2543 "qmljs.g" +#line 2699 "qmljs.g" - case 302: { + case 323: { sym(1).ival = QSOperator::StrictNotEqual; } break; -#line 2554 "qmljs.g" - case 305: Q_FALLTHROUGH(); -#line 2556 "qmljs.g" +#line 2710 "qmljs.g" + case 326: Q_FALLTHROUGH(); +#line 2712 "qmljs.g" - case 306: { + case 327: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitAnd, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2569 "qmljs.g" - case 309: Q_FALLTHROUGH(); -#line 2571 "qmljs.g" +#line 2725 "qmljs.g" + case 330: Q_FALLTHROUGH(); +#line 2727 "qmljs.g" - case 310: { + case 331: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitXor, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2583 "qmljs.g" - case 313: Q_FALLTHROUGH(); -#line 2585 "qmljs.g" +#line 2739 "qmljs.g" + case 334: Q_FALLTHROUGH(); +#line 2741 "qmljs.g" - case 314: { + case 335: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::BitOr, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2597 "qmljs.g" - case 317: Q_FALLTHROUGH(); -#line 2599 "qmljs.g" +#line 2753 "qmljs.g" + case 338: Q_FALLTHROUGH(); +#line 2755 "qmljs.g" - case 318: { + case 339: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::And, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2611 "qmljs.g" - case 321: Q_FALLTHROUGH(); -#line 2613 "qmljs.g" +#line 2767 "qmljs.g" + case 342: Q_FALLTHROUGH(); +#line 2769 "qmljs.g" - case 322: { + case 343: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, QSOperator::Or, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2626 "qmljs.g" - case 325: Q_FALLTHROUGH(); -#line 2628 "qmljs.g" +#line 2781 "qmljs.g" + case 346: Q_FALLTHROUGH(); +#line 2783 "qmljs.g" + + case 347: { + + auto *lhs = sym(1).Expression; + auto *rhs = sym(3).Expression; + + // Check if lhs or rhs contain || or && + + if (lhs->binaryExpressionCast() != nullptr) { + auto *binaryExpr = lhs->binaryExpressionCast(); + if (binaryExpr->op == QSOperator::And || binaryExpr->op == QSOperator::Or) { + syntaxError(binaryExpr->operatorToken, "Left-hand side may not contain || or &&"); + return false; + } + } - case 326: { + if (rhs->binaryExpressionCast() != nullptr) { + auto *binaryExpr = rhs->binaryExpressionCast(); + if (binaryExpr->op == QSOperator::And || binaryExpr->op == QSOperator::Or) { + syntaxError(binaryExpr->operatorToken, "Right-hand side may not contain || or &&"); + return false; + } + } + + AST::BinaryExpression *node = new (pool) AST::BinaryExpression(lhs, QSOperator::Coalesce, rhs); + node->operatorToken = loc(2); + sym(1).Node = node; + } break; + +#line 2817 "qmljs.g" + case 350: Q_FALLTHROUGH(); +#line 2819 "qmljs.g" + + case 351: { AST::ConditionalExpression *node = new (pool) AST::ConditionalExpression(sym(1).Expression, sym(3).Expression, sym(5).Expression); node->questionToken = loc(2); node->colonToken = loc(4); sym(1).Node = node; } break; -#line 2647 "qmljs.g" - case 333: Q_FALLTHROUGH(); -#line 2649 "qmljs.g" +#line 2838 "qmljs.g" + case 358: Q_FALLTHROUGH(); +#line 2840 "qmljs.g" - case 334: { + case 359: { // need to convert the LHS to an AssignmentPattern if it was an Array/ObjectLiteral if (AST::Pattern *p = sym(1).Expression->patternCast()) { - AST::SourceLocation errorLoc; + SourceLocation errorLoc; QString errorMsg; if (!p->convertLiteralToAssignmentPattern(pool, &errorLoc, &errorMsg)) { syntaxError(errorLoc, errorMsg); @@ -1867,208 +2004,208 @@ case 221: { sym(1).Node = node; } break; -#line 2677 "qmljs.g" - case 335: Q_FALLTHROUGH(); -#line 2679 "qmljs.g" +#line 2868 "qmljs.g" + case 360: Q_FALLTHROUGH(); +#line 2870 "qmljs.g" - case 336: { + case 361: { AST::BinaryExpression *node = new (pool) AST::BinaryExpression(sym(1).Expression, sym(2).ival, sym(3).Expression); node->operatorToken = loc(2); sym(1).Node = node; } break; -#line 2688 "qmljs.g" +#line 2879 "qmljs.g" - case 337: { + case 362: { sym(1).ival = QSOperator::InplaceMul; } break; -#line 2695 "qmljs.g" +#line 2886 "qmljs.g" - case 338: { + case 363: { sym(1).ival = QSOperator::InplaceExp; } break; -#line 2702 "qmljs.g" +#line 2893 "qmljs.g" - case 339: { + case 364: { sym(1).ival = QSOperator::InplaceDiv; } break; -#line 2709 "qmljs.g" +#line 2900 "qmljs.g" - case 340: { + case 365: { sym(1).ival = QSOperator::InplaceMod; } break; -#line 2716 "qmljs.g" +#line 2907 "qmljs.g" - case 341: { + case 366: { sym(1).ival = QSOperator::InplaceAdd; } break; -#line 2723 "qmljs.g" +#line 2914 "qmljs.g" - case 342: { + case 367: { sym(1).ival = QSOperator::InplaceSub; } break; -#line 2730 "qmljs.g" +#line 2921 "qmljs.g" - case 343: { + case 368: { sym(1).ival = QSOperator::InplaceLeftShift; } break; -#line 2737 "qmljs.g" +#line 2928 "qmljs.g" - case 344: { + case 369: { sym(1).ival = QSOperator::InplaceRightShift; } break; -#line 2744 "qmljs.g" +#line 2935 "qmljs.g" - case 345: { + case 370: { sym(1).ival = QSOperator::InplaceURightShift; } break; -#line 2751 "qmljs.g" +#line 2942 "qmljs.g" - case 346: { + case 371: { sym(1).ival = QSOperator::InplaceAnd; } break; -#line 2758 "qmljs.g" +#line 2949 "qmljs.g" - case 347: { + case 372: { sym(1).ival = QSOperator::InplaceXor; } break; -#line 2765 "qmljs.g" +#line 2956 "qmljs.g" - case 348: { + case 373: { sym(1).ival = QSOperator::InplaceOr; } break; -#line 2775 "qmljs.g" - case 351: Q_FALLTHROUGH(); -#line 2777 "qmljs.g" +#line 2966 "qmljs.g" + case 376: Q_FALLTHROUGH(); +#line 2968 "qmljs.g" - case 352: { + case 377: { AST::Expression *node = new (pool) AST::Expression(sym(1).Expression, sym(3).Expression); node->commaToken = loc(2); sym(1).Node = node; } break; -#line 2786 "qmljs.g" - case 353: Q_FALLTHROUGH(); -#line 2788 "qmljs.g" +#line 2977 "qmljs.g" + case 378: Q_FALLTHROUGH(); +#line 2979 "qmljs.g" - case 354: { + case 379: { sym(1).Node = nullptr; } break; -#line 2800 "qmljs.g" +#line 2991 "qmljs.g" - case 357: { + case 382: { sym(1).Node = sym(3).Node; } break; -#line 2807 "qmljs.g" - case 358: Q_FALLTHROUGH(); -#line 2809 "qmljs.g" - case 359: Q_FALLTHROUGH(); -#line 2811 "qmljs.g" - case 360: Q_FALLTHROUGH(); -#line 2813 "qmljs.g" - case 361: Q_FALLTHROUGH(); -#line 2815 "qmljs.g" - case 362: Q_FALLTHROUGH(); -#line 2817 "qmljs.g" - case 363: Q_FALLTHROUGH(); -#line 2819 "qmljs.g" - case 364: Q_FALLTHROUGH(); -#line 2821 "qmljs.g" - case 365: Q_FALLTHROUGH(); -#line 2823 "qmljs.g" - case 366: Q_FALLTHROUGH(); -#line 2825 "qmljs.g" - case 367: Q_FALLTHROUGH(); -#line 2827 "qmljs.g" - case 368: Q_FALLTHROUGH(); -#line 2829 "qmljs.g" - case 369: Q_FALLTHROUGH(); -#line 2831 "qmljs.g" +#line 2998 "qmljs.g" + case 383: Q_FALLTHROUGH(); +#line 3000 "qmljs.g" + case 384: Q_FALLTHROUGH(); +#line 3002 "qmljs.g" + case 385: Q_FALLTHROUGH(); +#line 3004 "qmljs.g" + case 386: Q_FALLTHROUGH(); +#line 3006 "qmljs.g" + case 387: Q_FALLTHROUGH(); +#line 3008 "qmljs.g" + case 388: Q_FALLTHROUGH(); +#line 3010 "qmljs.g" + case 389: Q_FALLTHROUGH(); +#line 3012 "qmljs.g" + case 390: Q_FALLTHROUGH(); +#line 3014 "qmljs.g" + case 391: Q_FALLTHROUGH(); +#line 3016 "qmljs.g" + case 392: Q_FALLTHROUGH(); +#line 3018 "qmljs.g" + case 393: Q_FALLTHROUGH(); +#line 3020 "qmljs.g" + case 394: Q_FALLTHROUGH(); +#line 3022 "qmljs.g" - case 370: { + case 395: { sym(1).Node = sym(2).Node; } break; -#line 2853 "qmljs.g" +#line 3044 "qmljs.g" - case 381: { + case 406: { AST::Block *node = new (pool) AST::Block(sym(2).StatementList); node->lbraceToken = loc(1); node->rbraceToken = loc(3); sym(1).Node = node; } break; -#line 2865 "qmljs.g" +#line 3056 "qmljs.g" - case 383: { + case 408: { sym(1).StatementList = sym(1).StatementList->append(sym(2).StatementList); } break; -#line 2872 "qmljs.g" +#line 3063 "qmljs.g" - case 384: { + case 409: { sym(1).StatementList = new (pool) AST::StatementList(sym(1).Statement); } break; -#line 2879 "qmljs.g" +#line 3070 "qmljs.g" - case 385: { + case 410: { sym(1).Node = new (pool) AST::StatementList(sym(3).FunctionDeclaration); } break; -#line 2886 "qmljs.g" +#line 3077 "qmljs.g" - case 386: { + case 411: { sym(1).Node = nullptr; } break; -#line 2893 "qmljs.g" +#line 3084 "qmljs.g" - case 387: { + case 412: { sym(1).Node = sym(1).StatementList->finish(); } break; -#line 2900 "qmljs.g" +#line 3091 "qmljs.g" - case 388: { + case 413: { sym(1).scope = AST::VariableScope::Let; } break; -#line 2906 "qmljs.g" +#line 3097 "qmljs.g" - case 389: { + case 414: { sym(1).scope = AST::VariableScope::Const; } break; -#line 2913 "qmljs.g" +#line 3104 "qmljs.g" - case 390: { + case 415: { sym(1).scope = AST::VariableScope::Var; } break; -#line 2920 "qmljs.g" - case 391: Q_FALLTHROUGH(); -#line 2922 "qmljs.g" - case 392: Q_FALLTHROUGH(); -#line 2924 "qmljs.g" - case 393: Q_FALLTHROUGH(); -#line 2926 "qmljs.g" +#line 3111 "qmljs.g" + case 416: Q_FALLTHROUGH(); +#line 3113 "qmljs.g" + case 417: Q_FALLTHROUGH(); +#line 3115 "qmljs.g" + case 418: Q_FALLTHROUGH(); +#line 3117 "qmljs.g" - case 394: { + case 419: { AST::VariableDeclarationList *declarations = sym(2).VariableDeclarationList->finish(sym(1).scope); for (auto it = declarations; it; it = it->next) { if (it->declaration && it->declaration->typeAnnotation) { @@ -2081,41 +2218,41 @@ case 221: { sym(1).Node = node; } break; -#line 2944 "qmljs.g" - case 396: Q_FALLTHROUGH(); -#line 2946 "qmljs.g" - case 397: Q_FALLTHROUGH(); -#line 2948 "qmljs.g" - case 398: Q_FALLTHROUGH(); -#line 2950 "qmljs.g" +#line 3135 "qmljs.g" + case 421: Q_FALLTHROUGH(); +#line 3137 "qmljs.g" + case 422: Q_FALLTHROUGH(); +#line 3139 "qmljs.g" + case 423: Q_FALLTHROUGH(); +#line 3141 "qmljs.g" - case 399: { + case 424: { sym(1).Node = new (pool) AST::VariableDeclarationList(sym(1).PatternElement); } break; -#line 2957 "qmljs.g" - case 400: Q_FALLTHROUGH(); -#line 2959 "qmljs.g" - case 401: Q_FALLTHROUGH(); -#line 2961 "qmljs.g" - case 402: Q_FALLTHROUGH(); -#line 2963 "qmljs.g" +#line 3148 "qmljs.g" + case 425: Q_FALLTHROUGH(); +#line 3150 "qmljs.g" + case 426: Q_FALLTHROUGH(); +#line 3152 "qmljs.g" + case 427: Q_FALLTHROUGH(); +#line 3154 "qmljs.g" - case 403: { + case 428: { AST::VariableDeclarationList *node = new (pool) AST::VariableDeclarationList(sym(1).VariableDeclarationList, sym(3).PatternElement); node->commaToken = loc(2); sym(1).Node = node; } break; -#line 2972 "qmljs.g" - case 404: Q_FALLTHROUGH(); -#line 2974 "qmljs.g" - case 405: Q_FALLTHROUGH(); -#line 2976 "qmljs.g" - case 406: Q_FALLTHROUGH(); -#line 2978 "qmljs.g" +#line 3163 "qmljs.g" + case 429: Q_FALLTHROUGH(); +#line 3165 "qmljs.g" + case 430: Q_FALLTHROUGH(); +#line 3167 "qmljs.g" + case 431: Q_FALLTHROUGH(); +#line 3169 "qmljs.g" - case 407: { + case 432: { auto *node = new (pool) AST::PatternElement(stringRef(1), sym(2).TypeAnnotation, sym(3).Expression); node->identifierToken = loc(1); sym(1).Node = node; @@ -2126,23 +2263,23 @@ case 221: { c->name = stringRef(1); } break; -#line 2992 "qmljs.g" - case 408: Q_FALLTHROUGH(); -#line 2994 "qmljs.g" - case 409: Q_FALLTHROUGH(); -#line 2996 "qmljs.g" - case 410: Q_FALLTHROUGH(); -#line 2998 "qmljs.g" +#line 3183 "qmljs.g" + case 433: Q_FALLTHROUGH(); +#line 3185 "qmljs.g" + case 434: Q_FALLTHROUGH(); +#line 3187 "qmljs.g" + case 435: Q_FALLTHROUGH(); +#line 3189 "qmljs.g" - case 411: { + case 436: { auto *node = new (pool) AST::PatternElement(sym(1).Pattern, sym(2).Expression); node->identifierToken = loc(1); sym(1).Node = node; } break; -#line 3007 "qmljs.g" +#line 3198 "qmljs.g" - case 412: { + case 437: { auto *node = new (pool) AST::ObjectPattern(sym(2).PatternPropertyList); node->lbraceToken = loc(1); node->rbraceToken = loc(3); @@ -2150,9 +2287,9 @@ case 221: { sym(1).Node = node; } break; -#line 3018 "qmljs.g" +#line 3209 "qmljs.g" - case 413: { + case 438: { auto *node = new (pool) AST::ArrayPattern(sym(2).PatternElementList); node->lbracketToken = loc(1); node->rbracketToken = loc(3); @@ -2160,23 +2297,23 @@ case 221: { sym(1).Node = node; } break; -#line 3029 "qmljs.g" +#line 3220 "qmljs.g" - case 414: { + case 439: { sym(1).Node = nullptr; } break; -#line 3036 "qmljs.g" - case 415: -#line 3038 "qmljs.g" +#line 3227 "qmljs.g" + case 440: +#line 3229 "qmljs.g" - case 416: { + case 441: { sym(1).Node = sym(1).PatternPropertyList->finish(); } break; -#line 3045 "qmljs.g" +#line 3236 "qmljs.g" - case 417: { + case 442: { if (sym(1).Elision || sym(2).Node) { auto *l = new (pool) AST::PatternElementList(sym(1).Elision, sym(2).PatternElement); sym(1).Node = l->finish(); @@ -2185,15 +2322,15 @@ case 221: { } } break; -#line 3057 "qmljs.g" +#line 3248 "qmljs.g" - case 418: { + case 443: { sym(1).Node = sym(1).PatternElementList->finish(); } break; -#line 3064 "qmljs.g" +#line 3255 "qmljs.g" - case 419: { + case 444: { if (sym(3).Elision || sym(4).Node) { auto *l = new (pool) AST::PatternElementList(sym(3).Elision, sym(4).PatternElement); l = sym(1).PatternElementList->append(l); @@ -2202,33 +2339,33 @@ case 221: { sym(1).Node = sym(1).PatternElementList->finish(); } break; -#line 3076 "qmljs.g" +#line 3267 "qmljs.g" - case 420: { + case 445: { sym(1).Node = new (pool) AST::PatternPropertyList(sym(1).PatternProperty); } break; -#line 3083 "qmljs.g" +#line 3274 "qmljs.g" - case 421: { + case 446: { sym(1).Node = new (pool) AST::PatternPropertyList(sym(1).PatternPropertyList, sym(3).PatternProperty); } break; -#line 3092 "qmljs.g" +#line 3283 "qmljs.g" - case 423: { + case 448: { sym(1).PatternElementList = sym(1).PatternElementList->append(sym(3).PatternElementList); } break; -#line 3099 "qmljs.g" +#line 3290 "qmljs.g" - case 424: { + case 449: { sym(1).Node = new (pool) AST::PatternElementList(sym(1).Elision, sym(2).PatternElement); } break; -#line 3107 "qmljs.g" +#line 3298 "qmljs.g" - case 425: { + case 450: { AST::StringLiteralPropertyName *name = new (pool) AST::StringLiteralPropertyName(stringRef(1)); name->propertyNameToken = loc(1); // if initializer is an anonymous function expression, we need to assign identifierref as it's name @@ -2239,23 +2376,23 @@ case 221: { sym(1).Node = new (pool) AST::PatternProperty(name, stringRef(1), sym(2).Expression); } break; -#line 3121 "qmljs.g" +#line 3312 "qmljs.g" - case 426: { + case 451: { AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, stringRef(3), sym(4).Expression); sym(1).Node = node; } break; -#line 3129 "qmljs.g" +#line 3320 "qmljs.g" - case 427: { + case 452: { AST::PatternProperty *node = new (pool) AST::PatternProperty(sym(1).PropertyName, sym(3).Pattern, sym(4).Expression); sym(1).Node = node; } break; -#line 3137 "qmljs.g" +#line 3328 "qmljs.g" - case 428: { + case 453: { AST::PatternElement *node = new (pool) AST::PatternElement(stringRef(1), sym(2).TypeAnnotation, sym(3).Expression); node->identifierToken = loc(1); // if initializer is an anonymous function expression, we need to assign identifierref as it's name @@ -2266,45 +2403,45 @@ case 221: { sym(1).Node = node; } break; -#line 3151 "qmljs.g" +#line 3342 "qmljs.g" - case 429: { + case 454: { AST::PatternElement *node = new (pool) AST::PatternElement(sym(1).Pattern, sym(2).Expression); sym(1).Node = node; } break; -#line 3159 "qmljs.g" +#line 3350 "qmljs.g" - case 430: { + case 455: { AST::PatternElement *node = new (pool) AST::PatternElement(stringRef(2), /*type annotation*/nullptr, nullptr, AST::PatternElement::RestElement); node->identifierToken = loc(2); sym(1).Node = node; } break; -#line 3168 "qmljs.g" +#line 3359 "qmljs.g" - case 431: { + case 456: { AST::PatternElement *node = new (pool) AST::PatternElement(sym(2).Pattern, nullptr, AST::PatternElement::RestElement); sym(1).Node = node; } break; -#line 3176 "qmljs.g" +#line 3367 "qmljs.g" - case 432: { + case 457: { sym(1).Node = nullptr; } break; -#line 3186 "qmljs.g" +#line 3377 "qmljs.g" - case 434: { + case 459: { AST::EmptyStatement *node = new (pool) AST::EmptyStatement(); node->semicolonToken = loc(1); sym(1).Node = node; } break; -#line 3201 "qmljs.g" +#line 3392 "qmljs.g" - case 435: { + case 460: { int token = lookaheadToken(lexer); if (token == T_LBRACE) pushToken(T_FORCE_BLOCK); @@ -2312,17 +2449,17 @@ case 221: { pushToken(T_FORCE_DECLARATION); } break; -#line 3212 "qmljs.g" +#line 3403 "qmljs.g" - case 436: { + case 461: { AST::ExpressionStatement *node = new (pool) AST::ExpressionStatement(sym(1).Expression); node->semicolonToken = loc(2); sym(1).Node = node; } break; -#line 3221 "qmljs.g" +#line 3412 "qmljs.g" - case 437: { + case 462: { AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement, sym(7).Statement); node->ifToken = loc(1); node->lparenToken = loc(2); @@ -2331,9 +2468,9 @@ case 221: { sym(1).Node = node; } break; -#line 3233 "qmljs.g" +#line 3424 "qmljs.g" - case 438: { + case 463: { AST::IfStatement *node = new (pool) AST::IfStatement(sym(3).Expression, sym(5).Statement); node->ifToken = loc(1); node->lparenToken = loc(2); @@ -2341,9 +2478,9 @@ case 221: { sym(1).Node = node; } break; -#line 3246 "qmljs.g" +#line 3437 "qmljs.g" - case 440: { + case 465: { AST::DoWhileStatement *node = new (pool) AST::DoWhileStatement(sym(2).Statement, sym(5).Expression); node->doToken = loc(1); node->whileToken = loc(3); @@ -2353,9 +2490,9 @@ case 221: { sym(1).Node = node; } break; -#line 3259 "qmljs.g" +#line 3450 "qmljs.g" - case 441: { + case 466: { AST::WhileStatement *node = new (pool) AST::WhileStatement(sym(3).Expression, sym(5).Statement); node->whileToken = loc(1); node->lparenToken = loc(2); @@ -2363,9 +2500,9 @@ case 221: { sym(1).Node = node; } break; -#line 3270 "qmljs.g" +#line 3461 "qmljs.g" - case 442: { + case 467: { AST::ForStatement *node = new (pool) AST::ForStatement(sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement); node->forToken = loc(1); node->lparenToken = loc(2); @@ -2375,11 +2512,11 @@ case 221: { sym(1).Node = node; } break; -#line 3283 "qmljs.g" - case 443: Q_FALLTHROUGH(); -#line 3285 "qmljs.g" +#line 3474 "qmljs.g" + case 468: Q_FALLTHROUGH(); +#line 3476 "qmljs.g" - case 444: { + case 469: { // ### get rid of the static_cast! AST::ForStatement *node = new (pool) AST::ForStatement( static_cast<AST::VariableStatement *>(sym(3).Node)->declarations, sym(5).Expression, @@ -2392,24 +2529,24 @@ case 221: { sym(1).Node = node; } break; -#line 3301 "qmljs.g" +#line 3492 "qmljs.g" - case 445: { + case 470: { sym(1).forEachType = AST::ForEachType::In; } break; -#line 3308 "qmljs.g" +#line 3499 "qmljs.g" - case 446: { + case 471: { sym(1).forEachType = AST::ForEachType::Of; } break; -#line 3315 "qmljs.g" +#line 3506 "qmljs.g" - case 447: { + case 472: { // need to convert the LHS to an AssignmentPattern if it was an Array/ObjectLiteral if (AST::Pattern *p = sym(3).Expression->patternCast()) { - AST::SourceLocation errorLoc; + SourceLocation errorLoc; QString errorMsg; if (!p->convertLiteralToAssignmentPattern(pool, &errorLoc, &errorMsg)) { syntaxError(errorLoc, errorMsg); @@ -2425,9 +2562,9 @@ case 221: { sym(1).Node = node; } break; -#line 3337 "qmljs.g" +#line 3528 "qmljs.g" - case 448: { + case 473: { AST::ForEachStatement *node = new (pool) AST::ForEachStatement(sym(3).PatternElement, sym(5).Expression, sym(7).Statement); node->forToken = loc(1); node->lparenToken = loc(2); @@ -2437,11 +2574,11 @@ case 221: { sym(1).Node = node; } break; -#line 3350 "qmljs.g" - case 449: Q_FALLTHROUGH(); -#line 3352 "qmljs.g" +#line 3541 "qmljs.g" + case 474: Q_FALLTHROUGH(); +#line 3543 "qmljs.g" - case 450: { + case 475: { if (auto typeAnnotation = sym(3).TypeAnnotation) { syntaxError(typeAnnotation->firstSourceLocation(), "Type annotations are not permitted in variable declarations"); return false; @@ -2453,29 +2590,29 @@ case 221: { sym(1).Node = node; } break; -#line 3367 "qmljs.g" - case 451: Q_FALLTHROUGH(); -#line 3369 "qmljs.g" +#line 3558 "qmljs.g" + case 476: Q_FALLTHROUGH(); +#line 3560 "qmljs.g" - case 452: { + case 477: { auto *node = new (pool) AST::PatternElement(sym(2).Pattern, nullptr); node->scope = sym(1).scope; node->isForDeclaration = true; sym(1).Node = node; } break; -#line 3379 "qmljs.g" +#line 3570 "qmljs.g" - case 453: { + case 478: { AST::ContinueStatement *node = new (pool) AST::ContinueStatement(); node->continueToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -#line 3389 "qmljs.g" +#line 3580 "qmljs.g" - case 454: { + case 479: { AST::ContinueStatement *node = new (pool) AST::ContinueStatement(stringRef(2)); node->continueToken = loc(1); node->identifierToken = loc(2); @@ -2483,18 +2620,18 @@ case 221: { sym(1).Node = node; } break; -#line 3400 "qmljs.g" +#line 3591 "qmljs.g" - case 455: { + case 480: { AST::BreakStatement *node = new (pool) AST::BreakStatement(QStringRef()); node->breakToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -#line 3410 "qmljs.g" +#line 3601 "qmljs.g" - case 456: { + case 481: { AST::BreakStatement *node = new (pool) AST::BreakStatement(stringRef(2)); node->breakToken = loc(1); node->identifierToken = loc(2); @@ -2502,9 +2639,9 @@ case 221: { sym(1).Node = node; } break; -#line 3421 "qmljs.g" +#line 3612 "qmljs.g" - case 457: { + case 482: { if (!functionNestingLevel) { syntaxError(loc(1), "Return statement not allowed outside of Function declaration."); return false; @@ -2515,9 +2652,9 @@ case 221: { sym(1).Node = node; } break; -#line 3435 "qmljs.g" +#line 3626 "qmljs.g" - case 458: { + case 483: { AST::WithStatement *node = new (pool) AST::WithStatement(sym(3).Expression, sym(5).Statement); node->withToken = loc(1); node->lparenToken = loc(2); @@ -2525,9 +2662,9 @@ case 221: { sym(1).Node = node; } break; -#line 3446 "qmljs.g" +#line 3637 "qmljs.g" - case 459: { + case 484: { AST::SwitchStatement *node = new (pool) AST::SwitchStatement(sym(3).Expression, sym(5).CaseBlock); node->switchToken = loc(1); node->lparenToken = loc(2); @@ -2535,118 +2672,118 @@ case 221: { sym(1).Node = node; } break; -#line 3457 "qmljs.g" +#line 3648 "qmljs.g" - case 460: { + case 485: { AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses); node->lbraceToken = loc(1); node->rbraceToken = loc(3); sym(1).Node = node; } break; -#line 3467 "qmljs.g" +#line 3658 "qmljs.g" - case 461: { + case 486: { AST::CaseBlock *node = new (pool) AST::CaseBlock(sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses); node->lbraceToken = loc(1); node->rbraceToken = loc(5); sym(1).Node = node; } break; -#line 3477 "qmljs.g" +#line 3668 "qmljs.g" - case 462: { + case 487: { sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClause); } break; -#line 3484 "qmljs.g" +#line 3675 "qmljs.g" - case 463: { + case 488: { sym(1).Node = new (pool) AST::CaseClauses(sym(1).CaseClauses, sym(2).CaseClause); } break; -#line 3491 "qmljs.g" +#line 3682 "qmljs.g" - case 464: { + case 489: { sym(1).Node = nullptr; } break; -#line 3498 "qmljs.g" +#line 3689 "qmljs.g" - case 465: { + case 490: { sym(1).Node = sym(1).CaseClauses->finish(); } break; -#line 3505 "qmljs.g" +#line 3696 "qmljs.g" - case 466: { + case 491: { AST::CaseClause *node = new (pool) AST::CaseClause(sym(2).Expression, sym(4).StatementList); node->caseToken = loc(1); node->colonToken = loc(3); sym(1).Node = node; } break; -#line 3515 "qmljs.g" +#line 3706 "qmljs.g" - case 467: { + case 492: { AST::DefaultClause *node = new (pool) AST::DefaultClause(sym(3).StatementList); node->defaultToken = loc(1); node->colonToken = loc(2); sym(1).Node = node; } break; -#line 3525 "qmljs.g" +#line 3716 "qmljs.g" - case 468: { + case 493: { AST::LabelledStatement *node = new (pool) AST::LabelledStatement(stringRef(1), sym(3).Statement); node->identifierToken = loc(1); node->colonToken = loc(2); sym(1).Node = node; } break; -#line 3537 "qmljs.g" +#line 3728 "qmljs.g" - case 470: { + case 495: { syntaxError(loc(3), "FunctionDeclarations are not allowed after a label."); return false; } break; -#line 3545 "qmljs.g" +#line 3736 "qmljs.g" - case 471: { + case 496: { AST::ThrowStatement *node = new (pool) AST::ThrowStatement(sym(2).Expression); node->throwToken = loc(1); node->semicolonToken = loc(3); sym(1).Node = node; } break; -#line 3555 "qmljs.g" +#line 3746 "qmljs.g" - case 472: { + case 497: { AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch); node->tryToken = loc(1); sym(1).Node = node; } break; -#line 3564 "qmljs.g" +#line 3755 "qmljs.g" - case 473: { + case 498: { AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Finally); node->tryToken = loc(1); sym(1).Node = node; } break; -#line 3573 "qmljs.g" +#line 3764 "qmljs.g" - case 474: { + case 499: { AST::TryStatement *node = new (pool) AST::TryStatement(sym(2).Statement, sym(3).Catch, sym(4).Finally); node->tryToken = loc(1); sym(1).Node = node; } break; -#line 3582 "qmljs.g" +#line 3773 "qmljs.g" - case 475: { + case 500: { AST::Catch *node = new (pool) AST::Catch(sym(3).PatternElement, sym(5).Block); node->catchToken = loc(1); node->lparenToken = loc(2); @@ -2655,43 +2792,43 @@ case 221: { sym(1).Node = node; } break; -#line 3594 "qmljs.g" +#line 3785 "qmljs.g" - case 476: { + case 501: { AST::Finally *node = new (pool) AST::Finally(sym(2).Block); node->finallyToken = loc(1); sym(1).Node = node; } break; -#line 3603 "qmljs.g" +#line 3794 "qmljs.g" - case 477: { + case 502: { AST::PatternElement *node = new (pool) AST::PatternElement(stringRef(1)); node->identifierToken = loc(1); node->scope = AST::VariableScope::Let; sym(1).Node = node; } break; -#line 3613 "qmljs.g" +#line 3804 "qmljs.g" - case 478: { + case 503: { AST::PatternElement *node = new (pool) AST::PatternElement(sym(1).Pattern); node->scope = AST::VariableScope::Let; sym(1).Node = node; } break; -#line 3622 "qmljs.g" +#line 3813 "qmljs.g" - case 479: { + case 504: { AST::DebuggerStatement *node = new (pool) AST::DebuggerStatement(); node->debuggerToken = loc(1); node->semicolonToken = loc(2); sym(1).Node = node; } break; -#line 3639 "qmljs.g" +#line 3830 "qmljs.g" - case 481: { + case 506: { if (!ensureNoFunctionTypeAnnotations(sym(6).TypeAnnotation, sym(4).FormalParameterList)) return false; AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(2), sym(4).FormalParameterList, sym(8).StatementList, @@ -2705,9 +2842,9 @@ case 221: { sym(1).Node = node; } break; -#line 3656 "qmljs.g" +#line 3847 "qmljs.g" - case 482: { + case 507: { AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(2), sym(4).FormalParameterList, sym(8).StatementList, sym(6).TypeAnnotation); node->functionToken = loc(1); @@ -2719,9 +2856,9 @@ case 221: { sym(1).Node = node; } break; -#line 3672 "qmljs.g" +#line 3863 "qmljs.g" - case 484: { + case 509: { if (!ensureNoFunctionTypeAnnotations(sym(5).TypeAnnotation, sym(3).FormalParameterList)) return false; AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(QStringRef(), sym(3).FormalParameterList, sym(7).StatementList, @@ -2734,9 +2871,9 @@ case 221: { sym(1).Node = node; } break; -#line 3688 "qmljs.g" +#line 3879 "qmljs.g" - case 485: { + case 510: { if (!ensureNoFunctionTypeAnnotations(sym(6).TypeAnnotation, sym(4).FormalParameterList)) return false; AST::FunctionExpression *node = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(8).StatementList, @@ -2751,9 +2888,9 @@ case 221: { sym(1).Node = node; } break; -#line 3706 "qmljs.g" +#line 3897 "qmljs.g" - case 486: { + case 511: { if (!ensureNoFunctionTypeAnnotations(sym(5).TypeAnnotation, sym(3).FormalParameterList)) return false; AST::FunctionExpression *node = new (pool) AST::FunctionExpression(QStringRef(), sym(3).FormalParameterList, sym(7).StatementList, @@ -2766,65 +2903,65 @@ case 221: { sym(1).Node = node; } break; -#line 3724 "qmljs.g" +#line 3915 "qmljs.g" - case 488: { + case 513: { sym(1).Node = nullptr; } break; -#line 3731 "qmljs.g" +#line 3922 "qmljs.g" - case 489: { + case 514: { AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(nullptr, sym(1).PatternElement))->finish(pool); sym(1).Node = node; } break; -#line 3739 "qmljs.g" - case 490: -#line 3741 "qmljs.g" +#line 3930 "qmljs.g" + case 515: +#line 3932 "qmljs.g" - case 491: { + case 516: { sym(1).Node = sym(1).FormalParameterList->finish(pool); } break; -#line 3748 "qmljs.g" +#line 3939 "qmljs.g" - case 492: { + case 517: { AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(sym(1).FormalParameterList, sym(3).PatternElement))->finish(pool); sym(1).Node = node; } break; -#line 3756 "qmljs.g" +#line 3947 "qmljs.g" - case 493: { + case 518: { AST::FormalParameterList *node = new (pool) AST::FormalParameterList(nullptr, sym(1).PatternElement); sym(1).Node = node; } break; -#line 3765 "qmljs.g" +#line 3956 "qmljs.g" - case 494: { + case 519: { AST::FormalParameterList *node = new (pool) AST::FormalParameterList(sym(1).FormalParameterList, sym(3).PatternElement); sym(1).Node = node; } break; -#line 3775 "qmljs.g" +#line 3966 "qmljs.g" - case 496: { + case 521: { ++functionNestingLevel; } break; -#line 3782 "qmljs.g" +#line 3973 "qmljs.g" - case 497: { + case 522: { --functionNestingLevel; } break; -#line 3792 "qmljs.g" - case 499: Q_FALLTHROUGH(); -#line 3794 "qmljs.g" +#line 3983 "qmljs.g" + case 524: Q_FALLTHROUGH(); +#line 3985 "qmljs.g" - case 500: { + case 525: { AST::ReturnStatement *ret = new (pool) AST::ReturnStatement(sym(4).Expression); ret->returnToken = sym(4).Node->firstSourceLocation(); ret->semicolonToken = sym(4).Node->lastSourceLocation(); @@ -2837,11 +2974,11 @@ case 221: { sym(1).Node = f; } break; -#line 3810 "qmljs.g" - case 501: Q_FALLTHROUGH(); -#line 3812 "qmljs.g" +#line 4001 "qmljs.g" + case 526: Q_FALLTHROUGH(); +#line 4003 "qmljs.g" - case 502: { + case 527: { AST::FunctionExpression *f = new (pool) AST::FunctionExpression(QStringRef(), sym(1).FormalParameterList, sym(6).StatementList); f->isArrowFunction = true; f->functionToken = sym(1).Node ? sym(1).Node->firstSourceLocation() : loc(1); @@ -2850,17 +2987,17 @@ case 221: { sym(1).Node = f; } break; -#line 3824 "qmljs.g" +#line 4015 "qmljs.g" - case 503: { + case 528: { AST::PatternElement *e = new (pool) AST::PatternElement(stringRef(1), /*type annotation*/nullptr, nullptr, AST::PatternElement::Binding); e->identifierToken = loc(1); sym(1).FormalParameterList = (new (pool) AST::FormalParameterList(nullptr, e))->finish(pool); } break; -#line 3835 "qmljs.g" +#line 4026 "qmljs.g" - case 504: { + case 529: { if (coverExpressionType != CE_FormalParameterList) { AST::NestedExpression *ne = static_cast<AST::NestedExpression *>(sym(1).Node); AST::FormalParameterList *list = ne->expression->reparseAsFormalParameterList(pool); @@ -2872,16 +3009,16 @@ case 221: { } } break; -#line 3853 "qmljs.g" +#line 4044 "qmljs.g" - case 505: { + case 530: { if (lookaheadToken(lexer) == T_LBRACE) pushToken(T_FORCE_BLOCK); } break; -#line 3861 "qmljs.g" +#line 4052 "qmljs.g" - case 506: { + case 531: { if (!ensureNoFunctionTypeAnnotations(sym(5).TypeAnnotation, sym(3).FormalParameterList)) return false; AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(1), sym(3).FormalParameterList, sym(7).StatementList); @@ -2895,9 +3032,9 @@ case 221: { sym(1).Node = node; } break; -#line 3878 "qmljs.g" +#line 4069 "qmljs.g" - case 507: { + case 532: { if (!ensureNoFunctionTypeAnnotations(sym(6).TypeAnnotation, sym(4).FormalParameterList)) return false; AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(8).StatementList); @@ -2912,9 +3049,9 @@ case 221: { sym(1).Node = node; } break; -#line 3897 "qmljs.g" +#line 4088 "qmljs.g" - case 508: { + case 533: { if (!ensureNoFunctionTypeAnnotations(sym(5).TypeAnnotation, /*formals*/nullptr)) return false; AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(2), nullptr, sym(7).StatementList); @@ -2928,9 +3065,9 @@ case 221: { sym(1).Node = node; } break; -#line 3914 "qmljs.g" +#line 4105 "qmljs.g" - case 509: { + case 534: { if (!ensureNoFunctionTypeAnnotations(sym(6).TypeAnnotation, sym(4).FormalParameterList)) return false; AST::FunctionExpression *f = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(8).StatementList); @@ -2944,29 +3081,29 @@ case 221: { sym(1).Node = node; } break; -#line 3932 "qmljs.g" +#line 4123 "qmljs.g" - case 510: { + case 535: { AST::FormalParameterList *node = (new (pool) AST::FormalParameterList(nullptr, sym(1).PatternElement))->finish(pool); sym(1).Node = node; } break; -#line 3940 "qmljs.g" +#line 4131 "qmljs.g" - case 511: { + case 536: { lexer->enterGeneratorBody(); } break; -#line 3947 "qmljs.g" +#line 4138 "qmljs.g" - case 512: { + case 537: { --functionNestingLevel; lexer->leaveGeneratorBody(); } break; -#line 3957 "qmljs.g" +#line 4148 "qmljs.g" - case 514: { + case 539: { AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(stringRef(2), sym(4).FormalParameterList, sym(7).StatementList); node->functionToken = loc(1); node->identifierToken = loc(2); @@ -2978,9 +3115,9 @@ case 221: { sym(1).Node = node; } break; -#line 3973 "qmljs.g" +#line 4164 "qmljs.g" - case 516: { + case 541: { AST::FunctionDeclaration *node = new (pool) AST::FunctionDeclaration(QStringRef(), sym(3).FormalParameterList, sym(6).StatementList); node->functionToken = loc(1); node->lparenToken = loc(2); @@ -2991,9 +3128,9 @@ case 221: { sym(1).Node = node; } break; -#line 3987 "qmljs.g" +#line 4178 "qmljs.g" - case 517: { + case 542: { AST::FunctionExpression *node = new (pool) AST::FunctionExpression(stringRef(2), sym(4).FormalParameterList, sym(7).StatementList); node->functionToken = loc(1); if (!stringRef(2).isNull()) @@ -3006,9 +3143,9 @@ case 221: { sym(1).Node = node; } break; -#line 4003 "qmljs.g" +#line 4194 "qmljs.g" - case 518: { + case 543: { AST::FunctionExpression *node = new (pool) AST::FunctionExpression(QStringRef(), sym(3).FormalParameterList, sym(6).StatementList); node->functionToken = loc(1); node->lparenToken = loc(2); @@ -3019,40 +3156,40 @@ case 221: { sym(1).Node = node; } break; -#line 4019 "qmljs.g" - case 520: Q_FALLTHROUGH(); -#line 4021 "qmljs.g" +#line 4210 "qmljs.g" + case 545: Q_FALLTHROUGH(); +#line 4212 "qmljs.g" - case 521: { + case 546: { AST::YieldExpression *node = new (pool) AST::YieldExpression(); node->yieldToken = loc(1); sym(1).Node = node; } break; -#line 4030 "qmljs.g" - case 522: Q_FALLTHROUGH(); -#line 4032 "qmljs.g" +#line 4221 "qmljs.g" + case 547: Q_FALLTHROUGH(); +#line 4223 "qmljs.g" - case 523: { + case 548: { AST::YieldExpression *node = new (pool) AST::YieldExpression(sym(3).Expression); node->yieldToken = loc(1); node->isYieldStar = true; sym(1).Node = node; } break; -#line 4042 "qmljs.g" - case 524: Q_FALLTHROUGH(); -#line 4044 "qmljs.g" +#line 4233 "qmljs.g" + case 549: Q_FALLTHROUGH(); +#line 4235 "qmljs.g" - case 525: { + case 550: { AST::YieldExpression *node = new (pool) AST::YieldExpression(sym(2).Expression); node->yieldToken = loc(1); sym(1).Node = node; } break; -#line 4054 "qmljs.g" +#line 4245 "qmljs.g" - case 526: { + case 551: { AST::ClassDeclaration *node = new (pool) AST::ClassDeclaration(stringRef(2), sym(3).Expression, sym(5).ClassElementList); node->classToken = loc(1); node->identifierToken = loc(2); @@ -3061,9 +3198,9 @@ case 221: { sym(1).Node = node; } break; -#line 4066 "qmljs.g" +#line 4257 "qmljs.g" - case 527: { + case 552: { AST::ClassExpression *node = new (pool) AST::ClassExpression(stringRef(2), sym(3).Expression, sym(5).ClassElementList); node->classToken = loc(1); node->identifierToken = loc(2); @@ -3072,9 +3209,9 @@ case 221: { sym(1).Node = node; } break; -#line 4078 "qmljs.g" +#line 4269 "qmljs.g" - case 528: { + case 553: { AST::ClassDeclaration *node = new (pool) AST::ClassDeclaration(QStringRef(), sym(2).Expression, sym(4).ClassElementList); node->classToken = loc(1); node->lbraceToken = loc(3); @@ -3082,9 +3219,9 @@ case 221: { sym(1).Node = node; } break; -#line 4089 "qmljs.g" +#line 4280 "qmljs.g" - case 529: { + case 554: { AST::ClassExpression *node = new (pool) AST::ClassExpression(QStringRef(), sym(2).Expression, sym(4).ClassElementList); node->classToken = loc(1); node->lbraceToken = loc(3); @@ -3092,48 +3229,48 @@ case 221: { sym(1).Node = node; } break; -#line 4102 "qmljs.g" +#line 4293 "qmljs.g" - case 531: { + case 556: { lexer->setStaticIsKeyword(true); } break; -#line 4109 "qmljs.g" - case 532: -#line 4111 "qmljs.g" +#line 4300 "qmljs.g" + case 557: +#line 4302 "qmljs.g" - case 533: { + case 558: { lexer->setStaticIsKeyword(false); } break; -#line 4118 "qmljs.g" +#line 4309 "qmljs.g" - case 534: { + case 559: { sym(1).Node = nullptr; } break; -#line 4125 "qmljs.g" +#line 4316 "qmljs.g" - case 535: { + case 560: { sym(1).Node = sym(2).Node; } break; -#line 4132 "qmljs.g" +#line 4323 "qmljs.g" - case 536: { + case 561: { sym(1).Node = nullptr; } break; -#line 4139 "qmljs.g" +#line 4330 "qmljs.g" - case 537: { + case 562: { if (sym(1).Node) sym(1).Node = sym(1).ClassElementList->finish(); } break; -#line 4149 "qmljs.g" +#line 4340 "qmljs.g" - case 539: { + case 564: { if (sym(1).Node) { if (sym(2).Node) sym(1).ClassElementList = sym(1).ClassElementList->append(sym(2).ClassElementList); @@ -3142,246 +3279,246 @@ case 221: { } } break; -#line 4161 "qmljs.g" +#line 4352 "qmljs.g" - case 540: { + case 565: { AST::ClassElementList *node = new (pool) AST::ClassElementList(sym(1).PatternProperty, false); sym(1).Node = node; } break; -#line 4169 "qmljs.g" +#line 4360 "qmljs.g" - case 541: { + case 566: { lexer->setStaticIsKeyword(true); AST::ClassElementList *node = new (pool) AST::ClassElementList(sym(2).PatternProperty, true); sym(1).Node = node; } break; -#line 4178 "qmljs.g" +#line 4369 "qmljs.g" - case 542: { + case 567: { sym(1).Node = nullptr; } break; -#line 4187 "qmljs.g" +#line 4378 "qmljs.g" - case 543: { + case 568: { sym(1).Node = nullptr; } break; -#line 4196 "qmljs.g" +#line 4387 "qmljs.g" - case 545: { + case 570: { sym(1).Node = new (pool) AST::Program(sym(1).StatementList->finish()); } break; -#line 4203 "qmljs.g" - case 546: { +#line 4394 "qmljs.g" + case 571: { sym(1).Node = new (pool) AST::ESModule(sym(1).StatementList); } break; -#line 4209 "qmljs.g" +#line 4400 "qmljs.g" - case 547: { + case 572: { sym(1).StatementList = sym(1).StatementList->finish(); } break; -#line 4216 "qmljs.g" +#line 4407 "qmljs.g" - case 548: { + case 573: { sym(1).StatementList = nullptr; } break; -#line 4226 "qmljs.g" +#line 4417 "qmljs.g" - case 551: { + case 576: { sym(1).StatementList = sym(1).StatementList->append(sym(2).StatementList); } break; -#line 4234 "qmljs.g" - case 552: Q_FALLTHROUGH(); -#line 4236 "qmljs.g" +#line 4425 "qmljs.g" + case 577: Q_FALLTHROUGH(); +#line 4427 "qmljs.g" - case 553: { + case 578: { sym(1).StatementList = new (pool) AST::StatementList(sym(1).Node); } break; -#line 4245 "qmljs.g" +#line 4436 "qmljs.g" - case 555: { + case 580: { auto decl = new (pool) AST::ImportDeclaration(sym(2).ImportClause, sym(3).FromClause); decl->importToken = loc(1); sym(1).Node = decl; } break; -#line 4253 "qmljs.g" +#line 4444 "qmljs.g" - case 556: { + case 581: { auto decl = new (pool) AST::ImportDeclaration(stringRef(2)); decl->importToken = loc(1); decl->moduleSpecifierToken = loc(2); sym(1).Node = decl; } break; -#line 4263 "qmljs.g" +#line 4454 "qmljs.g" - case 557: { + case 582: { auto clause = new (pool) AST::ImportClause(stringRef(1)); clause->importedDefaultBindingToken = loc(1); sym(1).ImportClause = clause; } break; -#line 4271 "qmljs.g" +#line 4462 "qmljs.g" - case 558: { + case 583: { sym(1).ImportClause = new (pool) AST::ImportClause(sym(1).NameSpaceImport); } break; -#line 4277 "qmljs.g" +#line 4468 "qmljs.g" - case 559: { + case 584: { sym(1).ImportClause = new (pool) AST::ImportClause(sym(1).NamedImports); } break; -#line 4283 "qmljs.g" +#line 4474 "qmljs.g" - case 560: { + case 585: { auto importClause = new (pool) AST::ImportClause(stringRef(1), sym(3).NameSpaceImport); importClause->importedDefaultBindingToken = loc(1); sym(1).ImportClause = importClause; } break; -#line 4291 "qmljs.g" +#line 4482 "qmljs.g" - case 561: { + case 586: { auto importClause = new (pool) AST::ImportClause(stringRef(1), sym(3).NamedImports); importClause->importedDefaultBindingToken = loc(1); sym(1).ImportClause = importClause; } break; -#line 4302 "qmljs.g" +#line 4493 "qmljs.g" - case 563: { + case 588: { auto import = new (pool) AST::NameSpaceImport(stringRef(3)); import->starToken = loc(1); import->importedBindingToken = loc(3); sym(1).NameSpaceImport = import; } break; -#line 4312 "qmljs.g" +#line 4503 "qmljs.g" - case 564: { + case 589: { auto namedImports = new (pool) AST::NamedImports(); namedImports->leftBraceToken = loc(1); namedImports->rightBraceToken = loc(2); sym(1).NamedImports = namedImports; } break; -#line 4321 "qmljs.g" +#line 4512 "qmljs.g" - case 565: { + case 590: { auto namedImports = new (pool) AST::NamedImports(sym(2).ImportsList->finish()); namedImports->leftBraceToken = loc(1); namedImports->rightBraceToken = loc(3); sym(1).NamedImports = namedImports; } break; -#line 4330 "qmljs.g" +#line 4521 "qmljs.g" - case 566: { + case 591: { auto namedImports = new (pool) AST::NamedImports(sym(2).ImportsList->finish()); namedImports->leftBraceToken = loc(1); namedImports->rightBraceToken = loc(4); sym(1).NamedImports = namedImports; } break; -#line 4340 "qmljs.g" +#line 4531 "qmljs.g" - case 567: { + case 592: { auto clause = new (pool) AST::FromClause(stringRef(2)); clause->fromToken = loc(1); clause->moduleSpecifierToken = loc(2); sym(1).FromClause = clause; } break; -#line 4350 "qmljs.g" +#line 4541 "qmljs.g" - case 568: { + case 593: { auto importsList = new (pool) AST::ImportsList(sym(1).ImportSpecifier); importsList->importSpecifierToken = loc(1); sym(1).ImportsList = importsList; } break; -#line 4358 "qmljs.g" +#line 4549 "qmljs.g" - case 569: { + case 594: { auto importsList = new (pool) AST::ImportsList(sym(1).ImportsList, sym(3).ImportSpecifier); importsList->importSpecifierToken = loc(3); sym(1).ImportsList = importsList; } break; -#line 4367 "qmljs.g" +#line 4561 "qmljs.g" - case 570: { + case 595: { auto importSpecifier = new (pool) AST::ImportSpecifier(stringRef(1)); importSpecifier->importedBindingToken = loc(1); sym(1).ImportSpecifier = importSpecifier; } break; -#line 4375 "qmljs.g" +#line 4569 "qmljs.g" - case 571: { + case 596: { auto importSpecifier = new (pool) AST::ImportSpecifier(stringRef(1), stringRef(3)); importSpecifier->identifierToken = loc(1); importSpecifier->importedBindingToken = loc(3); sym(1).ImportSpecifier = importSpecifier; } break; -#line 4392 "qmljs.g" +#line 4586 "qmljs.g" - case 574: { + case 599: { int token = lookaheadToken(lexer); if (token == T_FUNCTION || token == T_FUNCTION_STAR || token == T_CLASS) pushToken(T_FORCE_DECLARATION); } break; -#line 4401 "qmljs.g" +#line 4595 "qmljs.g" - case 575: { + case 600: { auto exportDeclaration = new (pool) AST::ExportDeclaration(sym(3).FromClause); exportDeclaration->exportToken = loc(1); sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4409 "qmljs.g" +#line 4603 "qmljs.g" - case 576: { + case 601: { auto exportDeclaration = new (pool) AST::ExportDeclaration(sym(2).ExportClause, sym(3).FromClause); exportDeclaration->exportToken = loc(1); sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4417 "qmljs.g" +#line 4611 "qmljs.g" - case 577: { + case 602: { auto exportDeclaration = new (pool) AST::ExportDeclaration(sym(2).ExportClause); exportDeclaration->exportToken = loc(1); sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4425 "qmljs.g" - case 578: Q_FALLTHROUGH(); -#line 4427 "qmljs.g" +#line 4619 "qmljs.g" + case 603: Q_FALLTHROUGH(); +#line 4621 "qmljs.g" - case 579: { + case 604: { auto exportDeclaration = new (pool) AST::ExportDeclaration(/*exportDefault=*/false, sym(2).Node); exportDeclaration->exportToken = loc(1); sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4435 "qmljs.g" +#line 4629 "qmljs.g" - case 580: { + case 605: { if (auto *f = AST::cast<AST::FunctionDeclaration*>(sym(5).Node)) { if (f->name.isEmpty()) { f->name = stringRef(2); @@ -3390,9 +3527,9 @@ case 221: { } } Q_FALLTHROUGH(); -#line 4446 "qmljs.g" +#line 4640 "qmljs.g" - case 581: { + case 606: { // Emulate 15.2.3.11 if (auto *cls = AST::cast<AST::ClassDeclaration*>(sym(5).Node)) { if (cls->name.isEmpty()) { @@ -3406,9 +3543,9 @@ case 221: { sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4462 "qmljs.g" +#line 4656 "qmljs.g" - case 582: { + case 607: { // if lhs is an identifier expression and rhs is an anonymous function expression, we need to assign the name of lhs to the function if (auto *f = asAnonymousFunctionDefinition(sym(4).Node)) { f->name = stringRef(2); @@ -3422,63 +3559,63 @@ case 221: { sym(1).ExportDeclaration = exportDeclaration; } break; -#line 4479 "qmljs.g" +#line 4673 "qmljs.g" - case 583: { + case 608: { auto exportClause = new (pool) AST::ExportClause(); exportClause->leftBraceToken = loc(1); exportClause->rightBraceToken = loc(2); sym(1).ExportClause = exportClause; } break; -#line 4488 "qmljs.g" +#line 4682 "qmljs.g" - case 584: { + case 609: { auto exportClause = new (pool) AST::ExportClause(sym(2).ExportsList->finish()); exportClause->leftBraceToken = loc(1); exportClause->rightBraceToken = loc(3); sym(1).ExportClause = exportClause; } break; -#line 4497 "qmljs.g" +#line 4691 "qmljs.g" - case 585: { + case 610: { auto exportClause = new (pool) AST::ExportClause(sym(2).ExportsList->finish()); exportClause->leftBraceToken = loc(1); exportClause->rightBraceToken = loc(4); sym(1).ExportClause = exportClause; } break; -#line 4507 "qmljs.g" +#line 4701 "qmljs.g" - case 586: { + case 611: { sym(1).ExportsList = new (pool) AST::ExportsList(sym(1).ExportSpecifier); } break; -#line 4513 "qmljs.g" +#line 4707 "qmljs.g" - case 587: { + case 612: { sym(1).ExportsList = new (pool) AST::ExportsList(sym(1).ExportsList, sym(3).ExportSpecifier); } break; -#line 4520 "qmljs.g" +#line 4714 "qmljs.g" - case 588: { + case 613: { auto exportSpecifier = new (pool) AST::ExportSpecifier(stringRef(1)); exportSpecifier->identifierToken = loc(1); sym(1).ExportSpecifier = exportSpecifier; } break; -#line 4528 "qmljs.g" +#line 4722 "qmljs.g" - case 589: { + case 614: { auto exportSpecifier = new (pool) AST::ExportSpecifier(stringRef(1), stringRef(3)); exportSpecifier->identifierToken = loc(1); exportSpecifier->exportedIdentifierToken = loc(3); sym(1).ExportSpecifier = exportSpecifier; } break; -#line 4539 "qmljs.g" +#line 4733 "qmljs.g" // ------------ end of switch statement } // switch @@ -3511,8 +3648,8 @@ case 221: { yylloc.startColumn += yylloc.length; yylloc.length = 0; - //const QString msg = QCoreApplication::translate("QQmlParser", "Missing `;'"); - //diagnostic_messages.append(compileError(yyloc, msg, Severity::Warning)); + //const QString msg = QCoreApplication::translate("QmlParser", "Missing `;'"); + //diagnostic_messages.append(compileError(yyloc, msg, QtWarningMsg)); first_token = &token_buffer[0]; last_token = &token_buffer[1]; @@ -3546,9 +3683,9 @@ case 221: { QString msg; int token = token_buffer[0].token; if (token < 0 || token >= TERMINAL_COUNT) - msg = QCoreApplication::translate("QQmlParser", "Syntax error"); + msg = QCoreApplication::translate("QmlParser", "Syntax error"); else - msg = QCoreApplication::translate("QQmlParser", "Unexpected token `%1'").arg(QLatin1String(spell[token])); + msg = QCoreApplication::translate("QmlParser", "Unexpected token `%1'").arg(QLatin1String(spell[token])); diagnostic_messages.append(compileError(token_buffer[0].loc, msg)); action = errorState; @@ -3579,7 +3716,7 @@ case 221: { #ifdef PARSER_DEBUG qDebug() << "Parse error, trying to recover (2)."; #endif - const QString msg = QCoreApplication::translate("QQmlParser", "Expected token `%1'").arg(QLatin1String(spell[*tk])); + const QString msg = QCoreApplication::translate("QmlParser", "Expected token `%1'").arg(QLatin1String(spell[*tk])); diagnostic_messages.append(compileError(token_buffer[0].loc, msg)); pushToken(*tk); @@ -3594,7 +3731,7 @@ case 221: { int a = t_action(errorState, tk); if (a > 0 && t_action(a, yytoken)) { - const QString msg = QCoreApplication::translate("QQmlParser", "Expected token `%1'").arg(QLatin1String(spell[tk])); + const QString msg = QCoreApplication::translate("QmlParser", "Expected token `%1'").arg(QLatin1String(spell[tk])); diagnostic_messages.append(compileError(token_buffer[0].loc, msg)); pushToken(tk); @@ -3602,7 +3739,7 @@ case 221: { } } - const QString msg = QCoreApplication::translate("QQmlParser", "Syntax error"); + const QString msg = QCoreApplication::translate("QmlParser", "Syntax error"); diagnostic_messages.append(compileError(token_buffer[0].loc, msg)); } diff --git a/src/libs/qmljs/parser/qmljsparser_p.h b/src/libs/qmljs/parser/qmljsparser_p.h index 5dfa141d73..9d9a0f2fc9 100644 --- a/src/libs/qmljs/parser/qmljsparser_p.h +++ b/src/libs/qmljs/parser/qmljsparser_p.h @@ -1,13 +1,10 @@ - -#line 182 "qmljs.g" /**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** -** This file is part of the QtQml module of the Qt Toolkit. +** This file is part of Qt Creator. ** -** $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 @@ -16,28 +13,16 @@ ** 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 +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** 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$ +** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ +#line 223 "qmljs.g" // @@ -66,10 +51,11 @@ #ifndef QMLJSPARSER_P_H #define QMLJSPARSER_P_H -#include "qmljsglobal_p.h" -#include "qmljsgrammar_p.h" -#include "qmljsast_p.h" -#include "qmljsengine_p.h" +#include "qmljs/parser/qmljsglobal_p.h" +#include "qmljs/parser/qmljsgrammar_p.h" +#include "qmljs/parser/qmljsast_p.h" +#include "qmljs/parser/qmljsengine_p.h" +#include "qmljs/parser/qmljsdiagnosticmessage_p.h" #include <QtCore/qlist.h> #include <QtCore/qstring.h> @@ -143,6 +129,8 @@ public: AST::UiQualifiedId *UiQualifiedId; AST::UiEnumMemberList *UiEnumMemberList; AST::UiVersionSpecifier *UiVersionSpecifier; + AST::UiAnnotation *UiAnnotation; + AST::UiAnnotationList *UiAnnotationList; }; public: @@ -224,7 +212,7 @@ protected: inline QStringRef &rawStringRef(int index) { return rawString_stack [tos + index - 1]; } - inline AST::SourceLocation &loc(int index) + inline SourceLocation &loc(int index) { return location_stack [tos + index - 1]; } AST::UiQualifiedId *reparseAsQualifiedId(AST::ExpressionNode *expr); @@ -232,20 +220,20 @@ protected: void pushToken(int token); int lookaheadToken(Lexer *lexer); - static DiagnosticMessage compileError(const AST::SourceLocation &location, - const QString &message, Severity::Enum kind = Severity::Error) + static DiagnosticMessage compileError(const SourceLocation &location, + const QString &message, QtMsgType kind = QtCriticalMsg) { DiagnosticMessage error; error.loc = location; error.message = message; - error.kind = kind; + error.kind = DiagnosticMessage::qtMsgTypeToKind(kind); return error; } - void syntaxError(const AST::SourceLocation &location, const char *message) { + void syntaxError(const SourceLocation &location, const char *message) { diagnostic_messages.append(compileError(location, QLatin1String(message))); } - void syntaxError(const AST::SourceLocation &location, const QString &message) { + void syntaxError(const SourceLocation &location, const QString &message) { diagnostic_messages.append(compileError(location, message)); } @@ -258,7 +246,7 @@ protected: int stack_size = 0; Value *sym_stack = nullptr; int *state_stack = nullptr; - AST::SourceLocation *location_stack = nullptr; + SourceLocation *location_stack = nullptr; QVector<QStringRef> string_stack; QVector<QStringRef> rawString_stack; @@ -270,7 +258,7 @@ protected: struct SavedToken { int token; double dval; - AST::SourceLocation loc; + SourceLocation loc; QStringRef spell; QStringRef raw; }; @@ -279,8 +267,8 @@ protected: double yylval = 0.; QStringRef yytokenspell; QStringRef yytokenraw; - AST::SourceLocation yylloc; - AST::SourceLocation yyprevlloc; + SourceLocation yylloc; + SourceLocation yyprevlloc; SavedToken token_buffer[TOKEN_BUFFER_SIZE]; SavedToken *first_token = nullptr; @@ -293,7 +281,7 @@ protected: CE_ParenthesizedExpression, CE_FormalParameterList }; - AST::SourceLocation coverExpressionErrorLocation; + SourceLocation coverExpressionErrorLocation; CoverExpressionType coverExpressionType = CE_Invalid; QList<DiagnosticMessage> diagnostic_messages; @@ -303,27 +291,27 @@ protected: -#line 1686 "qmljs.g" +#line 1828 "qmljs.g" -#define J_SCRIPT_REGEXPLITERAL_RULE1 144 +#define J_SCRIPT_REGEXPLITERAL_RULE1 161 -#line 1698 "qmljs.g" +#line 1840 "qmljs.g" -#define J_SCRIPT_REGEXPLITERAL_RULE2 145 +#define J_SCRIPT_REGEXPLITERAL_RULE2 162 -#line 3198 "qmljs.g" +#line 3389 "qmljs.g" -#define J_SCRIPT_EXPRESSIONSTATEMENTLOOKAHEAD_RULE 435 +#define J_SCRIPT_EXPRESSIONSTATEMENTLOOKAHEAD_RULE 460 -#line 3850 "qmljs.g" +#line 4041 "qmljs.g" -#define J_SCRIPT_CONCISEBODYLOOKAHEAD_RULE 505 +#define J_SCRIPT_CONCISEBODYLOOKAHEAD_RULE 530 -#line 4389 "qmljs.g" +#line 4583 "qmljs.g" -#define J_SCRIPT_EXPORTDECLARATIONLOOKAHEAD_RULE 574 +#define J_SCRIPT_EXPORTDECLARATIONLOOKAHEAD_RULE 599 -#line 4673 "qmljs.g" +#line 4867 "qmljs.g" QT_QML_END_NAMESPACE diff --git a/src/libs/qmljs/parser/qmlerror.h b/src/libs/qmljs/parser/qmljssourcelocation_p.h index 69fd20153f..dee7584fb1 100644 --- a/src/libs/qmljs/parser/qmlerror.h +++ b/src/libs/qmljs/parser/qmljssourcelocation_p.h @@ -25,45 +25,45 @@ #pragma once -#include <QtCore/qurl.h> -#include <QtCore/qstring.h> +#include "qmljsglobal_p.h" -QT_BEGIN_NAMESPACE +// +// 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 6: should this be called QmlMessage, since it can have a message type? -class QDebug; -class QmlErrorPrivate; -class QmlError +QT_QML_BEGIN_NAMESPACE + +namespace QmlJS { + +class SourceLocation { public: - QmlError(); - QmlError(const QmlError &); - QmlError &operator=(const QmlError &); - ~QmlError(); + 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; + bool isValid() const { return length != 0; } - QUrl url() const; - void setUrl(const QUrl &); - QString description() const; - void setDescription(const QString &); - int line() const; - void setLine(int); - int column() const; - void setColumn(int); - QObject *object() const; - void setObject(QObject *); - QtMsgType messageType() const; - void setMessageType(QtMsgType messageType); + quint32 begin() const { return offset; } + quint32 end() const { return offset + length; } - QString toString() const; -private: - QmlErrorPrivate *d; +// attributes + // ### encode + quint32 offset; + quint32 length; + quint32 startLine; + quint32 startColumn; }; -QDebug operator<<(QDebug debug, const QmlError &error); - -Q_DECLARE_TYPEINFO(QmlError, Q_MOVABLE_TYPE); +} // namespace QmlJS -QT_END_NAMESPACE +QT_QML_END_NAMESPACE diff --git a/src/libs/qmljs/qmljs.qbs b/src/libs/qmljs/qmljs.qbs index d75bfcef7b..a0095af798 100644 --- a/src/libs/qmljs/qmljs.qbs +++ b/src/libs/qmljs/qmljs.qbs @@ -62,7 +62,6 @@ Project { prefix: "parser/" files: [ "qmldirparser.cpp", "qmldirparser_p.h", - "qmlerror.cpp", "qmlerror.h", "qmljsast.cpp", "qmljsast_p.h", "qmljsastfwd_p.h", "qmljsastvisitor.cpp", "qmljsastvisitor_p.h", @@ -73,6 +72,7 @@ Project { "qmljslexer.cpp", "qmljslexer_p.h", "qmljsmemorypool_p.h", "qmljsparser.cpp", "qmljsparser_p.h", + "qmljssourcelocation.cpp", "qmljssourcelocation_p.h", ] } diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp index 70912cdf21..5e47353dd8 100644 --- a/src/libs/qmljs/qmljsbind.cpp +++ b/src/libs/qmljs/qmljsbind.cpp @@ -162,6 +162,11 @@ ObjectValue *Bind::bindObject(UiQualifiedId *qualifiedTypeNameId, UiObjectInitia return switchObjectValue(parentObjectValue); } +void Bind::throwRecursionDepthError() +{ + _diagnosticMessages->append(DiagnosticMessage(Severity::Error, SourceLocation(), tr("Hit maximal recursion depth in AST visit"))); +} + void Bind::accept(Node *node) { Node::accept(node, this); @@ -194,14 +199,8 @@ void Bind::endVisit(UiProgram *) bool Bind::visit(UiImport *ast) { ComponentVersion version; - if (ast->versionToken.isValid()) { - const QString versionString = _doc->source().mid(ast->versionToken.offset, ast->versionToken.length); - version = ComponentVersion(versionString); - if (!version.isValid()) { - _diagnosticMessages->append( - errorMessage(ast->versionToken, tr("expected two numbers separated by a dot"))); - } - } + if (ast->version) + version = ComponentVersion(ast->version->majorVersion, ast->version->minorVersion); if (ast->importUri) { if (!version.isValid()) { diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h index 575c52db8d..95b09cf839 100644 --- a/src/libs/qmljs/qmljsbind.h +++ b/src/libs/qmljs/qmljsbind.h @@ -84,6 +84,8 @@ protected: ObjectValue *switchObjectValue(ObjectValue *newObjectValue); ObjectValue *bindObject(AST::UiQualifiedId *qualifiedTypeNameId, AST::UiObjectInitializer *initializer); + void throwRecursionDepthError() override; + private: Document *_doc; ValueOwner _valueOwner; diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index 64cb19f2ed..a54371603c 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -313,6 +313,12 @@ protected: _state = ReachesEnd; return false; } + + void throwRecursionDepthError() override + { + // handle differently? ReturnOrThrow declares unreachable code, but probably leads to bogus warnings + _state = ReachesEnd; + } }; class MarkUnreachableCode : protected ReachesEndCheck @@ -352,6 +358,11 @@ protected: if (message.isValid()) _messages += message; } + + void throwRecursionDepthError() override + { + _messages.append(Message(ErrHitMaximumRecursion, SourceLocation())); + } }; class DeclarationsCheck : protected Visitor @@ -510,6 +521,11 @@ protected: --_block; } + void throwRecursionDepthError() override + { + addMessage(ErrHitMaximumRecursion, SourceLocation()); + } + private: void addMessage(StaticAnalysis::Type type, const SourceLocation &loc, const QString &arg1 = QString()) { @@ -808,6 +824,11 @@ void Check::endVisit(UiObjectInitializer *) m_idStack.pop(); } +void Check::throwRecursionDepthError() +{ + addMessage(ErrHitMaximumRecursion, SourceLocation()); +} + void Check::checkProperty(UiQualifiedId *qualifiedId) { const QString id = toString(qualifiedId); diff --git a/src/libs/qmljs/qmljscheck.h b/src/libs/qmljs/qmljscheck.h index e2bb303bcc..37704d801b 100644 --- a/src/libs/qmljs/qmljscheck.h +++ b/src/libs/qmljs/qmljscheck.h @@ -99,12 +99,13 @@ protected: void endVisit(QmlJS::AST::UiObjectInitializer *) override; + void throwRecursionDepthError() override; private: void visitQmlObject(AST::Node *ast, AST::UiQualifiedId *typeId, AST::UiObjectInitializer *initializer); const Value *checkScopeObjectMember(const AST::UiQualifiedId *id); void checkAssignInCondition(AST::ExpressionNode *condition); - void checkCaseFallthrough(AST::StatementList *statements, AST::SourceLocation errorLoc, AST::SourceLocation nextLoc); + void checkCaseFallthrough(AST::StatementList *statements, SourceLocation errorLoc, SourceLocation nextLoc); void checkProperty(QmlJS::AST::UiQualifiedId *); void checkNewExpression(AST::ExpressionNode *node); void checkBindingRhs(AST::Statement *statement); @@ -112,7 +113,7 @@ private: void addMessages(const QList<StaticAnalysis::Message> &messages); void addMessage(const StaticAnalysis::Message &message); - void addMessage(StaticAnalysis::Type type, const AST::SourceLocation &location, + void addMessage(StaticAnalysis::Type type, const SourceLocation &location, const QString &arg1 = QString(), const QString &arg2 = QString()); void scanCommentsForAnnotations(); @@ -143,7 +144,7 @@ private: class MessageTypeAndSuppression { public: - AST::SourceLocation suppressionSource; + SourceLocation suppressionSource; StaticAnalysis::Type type; bool wasSuppressed; }; diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h index 7e3b499f5a..7565ab5fab 100644 --- a/src/libs/qmljs/qmljsdocument.h +++ b/src/libs/qmljs/qmljsdocument.h @@ -97,7 +97,7 @@ public: QString path() const; QString componentName() const; - QList<AST::SourceLocation> jsDirectives() const; + QList<SourceLocation> jsDirectives() const; private: bool parse_helper(int kind); @@ -111,7 +111,7 @@ private: QString _path; QString _componentName; QString _source; - QList<AST::SourceLocation> _jsdirectives; + QList<SourceLocation> _jsdirectives; QWeakPointer<Document> _ptr; QByteArray _fingerprint; int _editorRevision; diff --git a/src/libs/qmljs/qmljsevaluate.cpp b/src/libs/qmljs/qmljsevaluate.cpp index 4a408dac93..d2bb3c3460 100644 --- a/src/libs/qmljs/qmljsevaluate.cpp +++ b/src/libs/qmljs/qmljsevaluate.cpp @@ -29,6 +29,8 @@ #include "qmljsvalueowner.h" #include "parser/qmljsast_p.h" +#include <QDebug> + using namespace QmlJS; /*! @@ -668,3 +670,8 @@ bool Evaluate::visit(AST::DebuggerStatement *) { return false; } + +void Evaluate::throwRecursionDepthError() +{ + qWarning("Evaluate hit maximum recursion error when visiting AST"); +} diff --git a/src/libs/qmljs/qmljsevaluate.h b/src/libs/qmljs/qmljsevaluate.h index 45ffc2ece8..4cd37f56fe 100644 --- a/src/libs/qmljs/qmljsevaluate.h +++ b/src/libs/qmljs/qmljsevaluate.h @@ -145,6 +145,8 @@ protected: bool visit(AST::StatementList *ast) override; bool visit(AST::DebuggerStatement *ast) override; + void throwRecursionDepthError() override; + private: QmlJS::Document::Ptr _doc; ValueOwner *_valueOwner; diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index 695cad1600..df6d59c461 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -38,6 +38,7 @@ #include <utils/qtcassert.h> #include <QApplication> +#include <QDebug> #include <QDir> #include <QFile> #include <QString> @@ -1992,7 +1993,7 @@ public: } protected: - bool visit(ArrayMemberExpression *ast) + bool visit(ArrayMemberExpression *ast) override { if (IdentifierExpression *idExp = cast<IdentifierExpression *>(ast->base)) { if (idExp->name == QLatin1String("arguments")) @@ -2002,8 +2003,12 @@ protected: } // don't go into nested functions - bool visit(Program *) { return false; } - bool visit(StatementList *) { return false; } + bool visit(Program *) override { return false; } + bool visit(StatementList *) override { return false; } + + void throwRecursionDepthError() override { + qWarning("Warning: Hit maximum recursion error visiting AST in UsesArgumentsArray"); + } }; } // anonymous namespace diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index 1f62cf1343..6c723bba44 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -101,8 +101,8 @@ public: void loadImplicitDirectoryImports(Imports *imports, const Document::Ptr &doc); void loadImplicitDefaultImports(Imports *imports); - void error(const Document::Ptr &doc, const AST::SourceLocation &loc, const QString &message); - void warning(const Document::Ptr &doc, const AST::SourceLocation &loc, const QString &message); + void error(const Document::Ptr &doc, const SourceLocation &loc, const QString &message); + void warning(const Document::Ptr &doc, const SourceLocation &loc, const QString &message); void appendDiagnostic(const Document::Ptr &doc, const DiagnosticMessage &message); private: @@ -516,13 +516,13 @@ bool LinkPrivate::importLibrary(const Document::Ptr &doc, return true; } -void LinkPrivate::error(const Document::Ptr &doc, const AST::SourceLocation &loc, +void LinkPrivate::error(const Document::Ptr &doc, const SourceLocation &loc, const QString &message) { appendDiagnostic(doc, DiagnosticMessage(Severity::Error, loc, message)); } -void LinkPrivate::warning(const Document::Ptr &doc, const AST::SourceLocation &loc, +void LinkPrivate::warning(const Document::Ptr &doc, const SourceLocation &loc, const QString &message) { appendDiagnostic(doc, DiagnosticMessage(Severity::Warning, loc, message)); diff --git a/src/libs/qmljs/qmljsreformatter.cpp b/src/libs/qmljs/qmljsreformatter.cpp index 6fdb6b034f..4027c7a073 100644 --- a/src/libs/qmljs/qmljsreformatter.cpp +++ b/src/libs/qmljs/qmljsreformatter.cpp @@ -585,9 +585,11 @@ protected: out(QString::fromLatin1("\"%1\"").arg(ast->fileName.toString())); else accept(ast->importUri); - if (ast->versionToken.isValid()) { + if (ast->version) { out(" "); - out(ast->versionToken); + out(QString::number(ast->version->majorVersion).toUtf8()); + out("."); + out(QString::number(ast->version->minorVersion).toUtf8()); } if (!ast->importId.isNull()) { out(" as ", ast->asToken); @@ -1339,6 +1341,10 @@ protected: } return false; } + + void throwRecursionDepthError() override { + out("/* ERROR: Hit recursion limit visiting AST, rewrite failed */"); + } }; } // anonymous namespace diff --git a/src/libs/qmljs/qmljsscopeastpath.cpp b/src/libs/qmljs/qmljsscopeastpath.cpp index 6e7fd27583..953f4761e8 100644 --- a/src/libs/qmljs/qmljsscopeastpath.cpp +++ b/src/libs/qmljs/qmljsscopeastpath.cpp @@ -26,6 +26,7 @@ #include "qmljsscopeastpath.h" #include "parser/qmljsast_p.h" +#include <QDebug> using namespace QmlJS; using namespace AST; @@ -112,6 +113,11 @@ bool ScopeAstPath::visit(FunctionExpression *node) return false; } +void ScopeAstPath::throwRecursionDepthError() +{ + qWarning("ScopeAstPath hit the maximum recursion limit while visiting the AST."); +} + bool ScopeAstPath::containsOffset(SourceLocation start, SourceLocation end) { return _offset >= start.begin() && _offset <= end.end(); diff --git a/src/libs/qmljs/qmljsscopeastpath.h b/src/libs/qmljs/qmljsscopeastpath.h index 44b4eacf7c..61ffb5a0f6 100644 --- a/src/libs/qmljs/qmljsscopeastpath.h +++ b/src/libs/qmljs/qmljsscopeastpath.h @@ -51,8 +51,9 @@ protected: bool visit(AST::FunctionDeclaration *node) override; bool visit(AST::FunctionExpression *node) override; + void throwRecursionDepthError() override; private: - bool containsOffset(AST::SourceLocation start, AST::SourceLocation end); + bool containsOffset(SourceLocation start, SourceLocation end); QList<AST::Node *> _result; Document::Ptr _doc; diff --git a/src/libs/qmljs/qmljsscopechain.cpp b/src/libs/qmljs/qmljsscopechain.cpp index c9fadb91e9..bbddcbfd04 100644 --- a/src/libs/qmljs/qmljsscopechain.cpp +++ b/src/libs/qmljs/qmljsscopechain.cpp @@ -287,7 +287,7 @@ void ScopeChain::update() const static void addInstantiatingComponents(ContextPtr context, QmlComponentChain *chain) { const QRegExp importCommentPattern(QLatin1String("@scope\\s+(.*)")); - foreach (const AST::SourceLocation &commentLoc, chain->document()->engine()->comments()) { + foreach (const SourceLocation &commentLoc, chain->document()->engine()->comments()) { const QString &comment = chain->document()->source().mid(commentLoc.begin(), commentLoc.length); // find all @scope annotations diff --git a/src/libs/qmljs/qmljssimplereader.cpp b/src/libs/qmljs/qmljssimplereader.cpp index f97770ade9..b0269594aa 100644 --- a/src/libs/qmljs/qmljssimplereader.cpp +++ b/src/libs/qmljs/qmljssimplereader.cpp @@ -125,7 +125,7 @@ bool SimpleAbstractStreamReader::readFile(const QString &fileName) bool SimpleAbstractStreamReader::readFromSource(const QString &source) { m_errors.clear(); - m_currentSourceLocation = AST::SourceLocation(); + m_currentSourceLocation = SourceLocation(); m_source = source; @@ -151,7 +151,7 @@ QStringList SimpleAbstractStreamReader::errors() const return m_errors; } -void SimpleAbstractStreamReader::addError(const QString &error, const AST::SourceLocation &sourceLocation) +void SimpleAbstractStreamReader::addError(const QString &error, const SourceLocation &sourceLocation) { m_errors << QString::fromLatin1("%1:%2: %3\n").arg( QString::number(sourceLocation.startLine), @@ -159,7 +159,7 @@ void SimpleAbstractStreamReader::addError(const QString &error, const AST::Sourc error); } -AST::SourceLocation SimpleAbstractStreamReader::currentSourceLocation() const +SourceLocation SimpleAbstractStreamReader::currentSourceLocation() const { return m_currentSourceLocation; } @@ -278,13 +278,13 @@ QVariant SimpleAbstractStreamReader::parsePropertyExpression(AST::ExpressionNode return textAt(expressionNode->firstSourceLocation(), expressionNode->lastSourceLocation()); } -void SimpleAbstractStreamReader::setSourceLocation(const AST::SourceLocation &sourceLocation) +void SimpleAbstractStreamReader::setSourceLocation(const SourceLocation &sourceLocation) { m_currentSourceLocation = sourceLocation; } -QString SimpleAbstractStreamReader::textAt(const AST::SourceLocation &from, - const AST::SourceLocation &to) +QString SimpleAbstractStreamReader::textAt(const SourceLocation &from, + const SourceLocation &to) { return m_source.mid(from.offset, to.end() - from.begin()); } diff --git a/src/libs/qmljs/qmljssimplereader.h b/src/libs/qmljs/qmljssimplereader.h index f2fe168a25..2d5bad3e09 100644 --- a/src/libs/qmljs/qmljssimplereader.h +++ b/src/libs/qmljs/qmljssimplereader.h @@ -85,8 +85,8 @@ public: QStringList errors() const; protected: - void addError(const QString &error, const AST::SourceLocation &sourceLocation = AST::SourceLocation()); - AST::SourceLocation currentSourceLocation() const; + void addError(const QString &error, const SourceLocation &sourceLocation = SourceLocation()); + SourceLocation currentSourceLocation() const; virtual void elementStart(const QString &name) = 0; virtual void elementEnd() = 0; @@ -100,11 +100,11 @@ private: void readProperty(AST::UiScriptBinding *uiScriptBinding); QVariant parsePropertyScriptBinding(AST::UiScriptBinding *ExpressionNode); QVariant parsePropertyExpression(AST::ExpressionNode *expressionNode); - void setSourceLocation(const AST::SourceLocation &sourceLocation); - QString textAt(const AST::SourceLocation &from, const AST::SourceLocation &to); + void setSourceLocation(const SourceLocation &sourceLocation); + QString textAt(const SourceLocation &from, const SourceLocation &to); QStringList m_errors; - AST::SourceLocation m_currentSourceLocation; + SourceLocation m_currentSourceLocation; QString m_source; }; diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.cpp b/src/libs/qmljs/qmljsstaticanalysismessage.cpp index 1d0e165935..f991b85c3c 100644 --- a/src/libs/qmljs/qmljsstaticanalysismessage.cpp +++ b/src/libs/qmljs/qmljsstaticanalysismessage.cpp @@ -26,6 +26,7 @@ #include "qmljsstaticanalysismessage.h" #include "qmljsconstants.h" #include "parser/qmljsengine_p.h" +#include "parser/qmljsdiagnosticmessage_p.h" #include <utils/qtcassert.h> @@ -242,6 +243,8 @@ StaticAnalysisMessages::StaticAnalysisMessages() tr("A State cannot have a child item (%1)."), 1); newMsg(WarnDuplicateImport, Warning, tr("Duplicate import (%1)."), 1); + newMsg(ErrHitMaximumRecursion, Error, + tr("Hit Maximum recursion limit when visiting AST")); } } // anonymous namespace @@ -258,7 +261,7 @@ Message::Message() {} Message::Message(Type type, - AST::SourceLocation location, + SourceLocation location, const QString &arg1, const QString &arg2, bool appendTypeId) diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.h b/src/libs/qmljs/qmljsstaticanalysismessage.h index d0f349fef9..50a70ab209 100644 --- a/src/libs/qmljs/qmljsstaticanalysismessage.h +++ b/src/libs/qmljs/qmljsstaticanalysismessage.h @@ -129,6 +129,7 @@ enum Type ErrLongerStringValueExpected = 321, ErrShorterStringValueExpected = 322, ErrInvalidArrayValueLength = 323, + ErrHitMaximumRecursion = 324, WarnDuplicateImport = 400 }; @@ -144,7 +145,7 @@ class QMLJS_EXPORT Message { public: Message(); - Message(Type type, AST::SourceLocation location, + Message(Type type, SourceLocation location, const QString &arg1 = QString(), const QString &arg2 = QString(), bool appendTypeId = true); @@ -157,7 +158,7 @@ public: QString suppressionString() const; static QRegExp suppressionPattern(); - AST::SourceLocation location; + SourceLocation location; QString message; Type type; Severity::Enum severity = Severity::Enum::Hint; diff --git a/src/libs/qmljs/qmljstypedescriptionreader.cpp b/src/libs/qmljs/qmljstypedescriptionreader.cpp index 152432ca7b..c5a5954774 100644 --- a/src/libs/qmljs/qmljstypedescriptionreader.cpp +++ b/src/libs/qmljs/qmljstypedescriptionreader.cpp @@ -107,15 +107,12 @@ void TypeDescriptionReader::readDocument(UiProgram *ast) } ComponentVersion version; - const QString versionString = _source.mid(import->versionToken.offset, import->versionToken.length); - const int dotIdx = versionString.indexOf(QLatin1Char('.')); - if (dotIdx != -1) { - version = ComponentVersion(versionString.leftRef(dotIdx).toInt(), - versionString.midRef(dotIdx + 1).toInt()); - } - if (version.majorVersion() != 1) { - addError(import->versionToken, tr("Major version different from 1 not supported.")); - return; + if (UiVersionSpecifier *uiVersion = import->version) { + version = ComponentVersion(import->version->majorVersion, import->version->minorVersion); + if (version.majorVersion() != 1) { + addError(uiVersion->majorToken, tr("Major version different from 1 not supported.")); + return; + } } if (!ast->members || !ast->members->member || ast->members->next) { diff --git a/src/libs/qmljs/qmljstypedescriptionreader.h b/src/libs/qmljs/qmljstypedescriptionreader.h index 69eec45b17..fb5b2f4430 100644 --- a/src/libs/qmljs/qmljstypedescriptionreader.h +++ b/src/libs/qmljs/qmljstypedescriptionreader.h @@ -39,13 +39,13 @@ class QBuffer; QT_END_NAMESPACE namespace QmlJS { +class SourceLocation; class ModuleApiInfo; namespace AST { class UiProgram; class UiObjectDefinition; class UiScriptBinding; -class SourceLocation; } class QMLJS_EXPORT TypeDescriptionReader @@ -83,8 +83,8 @@ private: void readMetaObjectRevisions(AST::UiScriptBinding *ast, LanguageUtils::FakeMetaObject::Ptr fmo); void readEnumValues(AST::UiScriptBinding *ast, LanguageUtils::FakeMetaEnum *fme); - void addError(const AST::SourceLocation &loc, const QString &message); - void addWarning(const AST::SourceLocation &loc, const QString &message); + void addError(const SourceLocation &loc, const QString &message); + void addWarning(const SourceLocation &loc, const QString &message); QString _fileName; QString _source; diff --git a/src/libs/qmljs/qmljsutils.cpp b/src/libs/qmljs/qmljsutils.cpp index 4872a0bae7..ba48ef1f07 100644 --- a/src/libs/qmljs/qmljsutils.cpp +++ b/src/libs/qmljs/qmljsutils.cpp @@ -191,7 +191,7 @@ UiQualifiedId *QmlJS::qualifiedTypeNameId(Node *node) return nullptr; } -DiagnosticMessage QmlJS::errorMessage(const AST::SourceLocation &loc, const QString &message) +DiagnosticMessage QmlJS::errorMessage(const SourceLocation &loc, const QString &message) { return DiagnosticMessage(Severity::Error, loc, message); } diff --git a/src/libs/qmljs/qmljsutils.h b/src/libs/qmljs/qmljsutils.h index 103548ade3..ce85a94986 100644 --- a/src/libs/qmljs/qmljsutils.h +++ b/src/libs/qmljs/qmljsutils.h @@ -29,6 +29,7 @@ #include "qmljsconstants.h" #include "parser/qmljsastfwd_p.h" #include "parser/qmljsengine_p.h" +#include "parser/qmljsdiagnosticmessage_p.h" QT_FORWARD_DECLARE_CLASS(QColor) @@ -38,10 +39,10 @@ QMLJS_EXPORT QColor toQColor(const QString &qmlColorString); QMLJS_EXPORT QString toString(AST::UiQualifiedId *qualifiedId, const QChar delimiter = QLatin1Char('.')); -QMLJS_EXPORT AST::SourceLocation locationFromRange(const AST::SourceLocation &start, - const AST::SourceLocation &end); +QMLJS_EXPORT SourceLocation locationFromRange(const SourceLocation &start, + const SourceLocation &end); -QMLJS_EXPORT AST::SourceLocation fullLocationForQualifiedId(AST::UiQualifiedId *); +QMLJS_EXPORT SourceLocation fullLocationForQualifiedId(AST::UiQualifiedId *); QMLJS_EXPORT QString idOfObject(AST::Node *object, AST::UiScriptBinding **idBinding = nullptr); @@ -51,7 +52,7 @@ QMLJS_EXPORT AST::UiQualifiedId *qualifiedTypeNameId(AST::Node *node); QMLJS_EXPORT bool isValidBuiltinPropertyType(const QString &name); -QMLJS_EXPORT DiagnosticMessage errorMessage(const AST::SourceLocation &loc, +QMLJS_EXPORT DiagnosticMessage errorMessage(const SourceLocation &loc, const QString &message); QMLJS_EXPORT bool maybeModuleVersion(const QString &version); @@ -60,7 +61,7 @@ QMLJS_EXPORT QString modulePath(const QString &moduleImportName, const QString & const QStringList &importPaths); template <class T> -AST::SourceLocation locationFromRange(const T *node) +SourceLocation locationFromRange(const T *node) { return locationFromRange(node->firstSourceLocation(), node->lastSourceLocation()); } diff --git a/src/plugins/autotest/quick/quicktestvisitors.cpp b/src/plugins/autotest/quick/quicktestvisitors.cpp index 486356f13b..598b16afec 100644 --- a/src/plugins/autotest/quick/quicktestvisitors.cpp +++ b/src/plugins/autotest/quick/quicktestvisitors.cpp @@ -33,6 +33,8 @@ #include <utils/algorithm.h> #include <utils/qtcassert.h> +#include <QDebug> + namespace Autotest { namespace Internal { @@ -177,6 +179,11 @@ bool TestQmlVisitor::visit(QmlJS::AST::StringLiteral *ast) return false; } +void TestQmlVisitor::throwRecursionDepthError() +{ + qWarning("Warning: Hit maximum recursion depth while visiting AST in TestQmlVisitor"); +} + /************************************** QuickTestAstVisitor *************************************/ QuickTestAstVisitor::QuickTestAstVisitor(CPlusPlus::Document::Ptr doc, diff --git a/src/plugins/autotest/quick/quicktestvisitors.h b/src/plugins/autotest/quick/quicktestvisitors.h index e4af8661c2..5aff62f458 100644 --- a/src/plugins/autotest/quick/quicktestvisitors.h +++ b/src/plugins/autotest/quick/quicktestvisitors.h @@ -65,6 +65,8 @@ public: bool visit(QmlJS::AST::FunctionDeclaration *ast) override; bool visit(QmlJS::AST::StringLiteral *ast) override; + void throwRecursionDepthError() override; + QVector<QuickTestCaseSpec> testCases() const { return m_testCases; } bool isValid() const { return !m_testCases.isEmpty(); } diff --git a/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp b/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp index 7cc1d9d712..a1d7b5fad4 100644 --- a/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp +++ b/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp @@ -35,6 +35,8 @@ #include <qmljs/qmljsscopebuilder.h> #include <qmljs/qmljsmodelmanagerinterface.h> +#include <QDebug> + namespace { using namespace QmlJS; @@ -42,7 +44,7 @@ using namespace QmlJS; class FindImplementationVisitor: protected AST::Visitor { public: - using Results = QList<AST::SourceLocation>; + using Results = QList<SourceLocation>; FindImplementationVisitor(const Document::Ptr &doc, const ContextPtr &context) : m_document(doc) @@ -66,13 +68,13 @@ public: } protected: - QString textAt(const AST::SourceLocation &location) + QString textAt(const SourceLocation &location) { return m_document->source().mid(location.offset, location.length); } - QString textAt(const AST::SourceLocation &from, - const AST::SourceLocation &to) + QString textAt(const SourceLocation &from, + const SourceLocation &to) { return m_document->source().mid(from.offset, to.end() - from.begin()); } @@ -206,7 +208,10 @@ protected: return false; } - + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion depth while visiting AST in FindImplementationVisitor"); + } private: bool checkTypeName(AST::UiQualifiedId *id) { @@ -223,7 +228,7 @@ private: } Results m_implemenations; - AST::SourceLocation m_formLocation; + SourceLocation m_formLocation; Document::Ptr m_document; ContextPtr m_context; @@ -281,7 +286,7 @@ QList<QmlJSEditor::FindReferences::Usage> FindImplementation::run(const QString FindImplementationVisitor visitor(document, context); FindImplementationVisitor::Results results = visitor(typeName, itemName, targetValue); - foreach (const AST::SourceLocation &location, results) { + foreach (const SourceLocation &location, results) { usages.append(QmlJSEditor::FindReferences::Usage(fileName, matchingLine(location.offset, document->source()), location.startLine, location.startColumn - 1, location.length)); diff --git a/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp index 7c0688ba9a..3c04d341bb 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp +++ b/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp @@ -79,8 +79,8 @@ bool AddPropertyVisitor::visit(QmlJS::AST::UiObjectBinding *ast) void AddPropertyVisitor::addInMembers(QmlJS::AST::UiObjectInitializer *initializer) { QmlJS::AST::UiObjectMemberList *insertAfter = searchMemberToInsertAfter(initializer->members, m_name, m_propertyOrder); - QmlJS::AST::SourceLocation endOfPreviousMember; - QmlJS::AST::SourceLocation startOfNextMember; + QmlJS::SourceLocation endOfPreviousMember; + QmlJS::SourceLocation startOfNextMember; bool previousMemberSemicolon = false; unsigned depth; diff --git a/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.cpp b/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.cpp index d29ac90cde..8633e270e4 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.cpp +++ b/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.cpp @@ -27,6 +27,8 @@ #include <qmljs/parser/qmljsast_p.h> +#include <QDebug> + using namespace QmlDesigner; ASTObjectTextExtractor::ASTObjectTextExtractor(const QString &text): @@ -69,3 +71,8 @@ bool ASTObjectTextExtractor::visit(QmlJS::AST::UiObjectDefinition *ast) return m_text.isEmpty(); } + +void ASTObjectTextExtractor::throwRecursionDepthError() +{ + qWarning("Warning: Hit maximum recursion depth while visiting the AST in ASTObjectTextExtractor"); +} diff --git a/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.h b/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.h index 385d8c1c97..ecc00bde18 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.h +++ b/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.h @@ -43,6 +43,8 @@ protected: bool visit(QmlJS::AST::UiObjectBinding *ast) override; bool visit(QmlJS::AST::UiObjectDefinition *ast) override; + void throwRecursionDepthError() override; + private: QmlJS::Document::MutablePtr m_document; quint32 m_location = 0; diff --git a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp index 76ecb59f30..7fe59053da 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp +++ b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp @@ -98,3 +98,8 @@ bool FirstDefinitionFinder::visit(QmlJS::AST::UiObjectDefinition *ast) } return true; } + +void FirstDefinitionFinder::throwRecursionDepthError() +{ + qWarning("Warning: Hit maximum recursion depth while visiting the AST in FirstDefinitionFinder"); +} diff --git a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.h b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.h index b4e9826f52..2a963ae2fb 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.h +++ b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.h @@ -43,6 +43,8 @@ protected: bool visit(QmlJS::AST::UiObjectBinding *ast) override; bool visit(QmlJS::AST::UiObjectDefinition *ast) override; + void throwRecursionDepthError() override; + void extractFirstObjectDefinition(QmlJS::AST::UiObjectInitializer* ast); private: diff --git a/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.cpp index 3be5de5bc9..a4931be538 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.cpp +++ b/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.cpp @@ -147,7 +147,7 @@ void MoveObjectBeforeObjectVisitor::doMove() moveInfo.prefixToInsert = QString(moveInfo.leadingCharsToRemove, QLatin1Char(' ')); moveInfo.suffixToInsert = separator + QStringLiteral("\n\n"); } else { - const QmlJS::AST::SourceLocation insertionPoint = lastParentLocation(); + const QmlJS::SourceLocation insertionPoint = lastParentLocation(); Q_ASSERT(insertionPoint.isValid()); moveInfo.destination = insertionPoint.offset; int dummy = -1; @@ -169,7 +169,7 @@ QmlJS::AST::Node *MoveObjectBeforeObjectVisitor::movingObjectParent() const return nullptr; } -QmlJS::AST::SourceLocation MoveObjectBeforeObjectVisitor::lastParentLocation() const +QmlJS::SourceLocation MoveObjectBeforeObjectVisitor::lastParentLocation() const { dump(movingObjectParents); @@ -179,5 +179,5 @@ QmlJS::AST::SourceLocation MoveObjectBeforeObjectVisitor::lastParentLocation() c else if (auto initializer = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(parent)) return initializer->rbracketToken; else - return QmlJS::AST::SourceLocation(); + return QmlJS::SourceLocation(); } diff --git a/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.h b/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.h index 922d9fe40a..c47caf56e2 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.h +++ b/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.h @@ -58,7 +58,7 @@ private: void doMove(); QmlJS::AST::Node *movingObjectParent() const; - QmlJS::AST::SourceLocation lastParentLocation() const; + QmlJS::SourceLocation lastParentLocation() const; private: QStack<QmlJS::AST::Node *> parents; diff --git a/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.cpp b/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.cpp index e0908f2f27..f54167c2d8 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.cpp +++ b/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.cpp @@ -88,3 +88,8 @@ bool ObjectLengthCalculator::visit(QmlJS::AST::UiObjectDefinition *ast) return m_offset < end; } + +void ObjectLengthCalculator::throwRecursionDepthError() +{ + qWarning("Warning: Hit maximum recursion depth while visiting the AST in ObjectLengthCalculator"); +} diff --git a/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.h b/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.h index af745d2acd..f9bce822e3 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.h +++ b/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.h @@ -43,6 +43,8 @@ protected: bool visit(QmlJS::AST::UiObjectBinding *ast) override; bool visit(QmlJS::AST::UiObjectDefinition *ast) override; + void throwRecursionDepthError() override; + private: QmlJS::Document::MutablePtr m_doc; quint32 m_offset = 0; diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp index 94b89efcd9..25a72134b2 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp +++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp @@ -68,12 +68,12 @@ QString QMLRewriter::textBetween(int startPosition, int endPosition) const return m_textModifier->text().mid(startPosition, endPosition - startPosition); } -QString QMLRewriter::textAt(const QmlJS::AST::SourceLocation &location) const +QString QMLRewriter::textAt(const QmlJS::SourceLocation &location) const { return m_textModifier->text().mid(location.offset, location.length); } -unsigned QMLRewriter::calculateIndentDepth(const QmlJS::AST::SourceLocation &position) const +unsigned QMLRewriter::calculateIndentDepth(const QmlJS::SourceLocation &position) const { QTextDocument *doc = m_textModifier->textDocument(); QTextCursor tc(doc); @@ -151,20 +151,20 @@ QString QMLRewriter::removeIndentation(const QString &text, unsigned depth) return result; } -QmlJS::AST::SourceLocation QMLRewriter::calculateLocation(QmlJS::AST::UiQualifiedId *id) +QmlJS::SourceLocation QMLRewriter::calculateLocation(QmlJS::AST::UiQualifiedId *id) { Q_ASSERT(id != nullptr); - const QmlJS::AST::SourceLocation startLocation = id->identifierToken; + const QmlJS::SourceLocation startLocation = id->identifierToken; QmlJS::AST::UiQualifiedId *nextId = id; while (nextId->next) { nextId = nextId->next; } - const QmlJS::AST::SourceLocation endLocation = nextId->identifierToken; + const QmlJS::SourceLocation endLocation = nextId->identifierToken; - return QmlJS::AST::SourceLocation(startLocation.offset, endLocation.end() - startLocation.offset); + return QmlJS::SourceLocation(startLocation.offset, endLocation.end() - startLocation.offset); } bool QMLRewriter::isMissingSemicolon(QmlJS::AST::UiObjectMember *member) @@ -340,3 +340,8 @@ void QMLRewriter::dump(const ASTPath &path) qCDebug(qmlRewriter).noquote() << QString(i + 1, QLatin1Char('-')) << typeid(*node).name(); } } + +void QMLRewriter::throwRecursionDepthError() +{ + qCWarning(qmlRewriter) << "Warning: Hit maximum recursion level while visiting AST in QMLRewriter"; +} diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h index 062710ef4c..c773de35be 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h +++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h @@ -51,20 +51,22 @@ public: protected: using QmlJS::AST::Visitor::visit; + void throwRecursionDepthError() override; + virtual void replace(int offset, int length, const QString &text); virtual void move(const QmlDesigner::TextModifier::MoveInfo &moveInfo); QString textBetween(int startPosition, int endPosition) const; - QString textAt(const QmlJS::AST::SourceLocation &location) const; + QString textAt(const QmlJS::SourceLocation &location) const; int indentDepth() const { return textModifier()->indentDepth(); } - unsigned calculateIndentDepth(const QmlJS::AST::SourceLocation &position) const; + unsigned calculateIndentDepth(const QmlJS::SourceLocation &position) const; static QString addIndentation(const QString &text, unsigned depth); static QString removeIndentation(const QString &text, unsigned depth); static QString removeIndentationFromLine(const QString &text, int depth); - static QmlJS::AST::SourceLocation calculateLocation(QmlJS::AST::UiQualifiedId *id); + static QmlJS::SourceLocation calculateLocation(QmlJS::AST::UiQualifiedId *id); static bool isMissingSemicolon(QmlJS::AST::UiObjectMember *member); static bool isMissingSemicolon(QmlJS::AST::Statement *stmt); diff --git a/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp b/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp index a5fddccba9..c1298aa92e 100644 --- a/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp +++ b/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp @@ -93,7 +93,7 @@ bool BaseTextEditModifier::renameId(const QString &oldId, const QString &newId) if (auto bte = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit())) { if (auto document = qobject_cast<QmlJSEditor::QmlJSEditorDocument *>(bte->textDocument())) { Utils::ChangeSet changeSet; - foreach (const QmlJS::AST::SourceLocation &loc, + foreach (const QmlJS::SourceLocation &loc, document->semanticInfo().idLocations.value(oldId)) { changeSet.replace(loc.begin(), loc.end(), newId); } diff --git a/src/plugins/qmldesigner/designercore/model/documentmessage.cpp b/src/plugins/qmldesigner/designercore/model/documentmessage.cpp index cbf5843dac..1d0c124b52 100644 --- a/src/plugins/qmldesigner/designercore/model/documentmessage.cpp +++ b/src/plugins/qmldesigner/designercore/model/documentmessage.cpp @@ -26,6 +26,7 @@ #include <documentmessage.h> #include <qmljs/parser/qmljsengine_p.h> +#include <qmljs/parser/qmljsdiagnosticmessage_p.h> namespace QmlDesigner { diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index de07ef230f..a82792b1e8 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -772,8 +772,8 @@ void TextToModelMerger::setupImports(const Document::Ptr &doc, continue; QString version; - if (import->versionToken.isValid()) - version = textAt(doc, import->versionToken); + if (import->version != nullptr) + version = QLatin1String("%1.%2").arg(import->version->majorVersion).arg(import->version->minorVersion); const QString &as = import->importId.toString(); if (!import->fileName.isEmpty()) { @@ -2036,7 +2036,7 @@ void TextToModelMerger::collectLinkErrors(QList<DocumentMessage> *errors, const void TextToModelMerger::collectImportErrors(QList<DocumentMessage> *errors) { if (m_rewriterView->model()->imports().isEmpty()) { - const QmlJS::DiagnosticMessage diagnosticMessage(QmlJS::Severity::Error, AST::SourceLocation(0, 0, 0, 0), QCoreApplication::translate("QmlDesigner::TextToModelMerger", "No import statements found")); + const QmlJS::DiagnosticMessage diagnosticMessage(QmlJS::Severity::Error, SourceLocation(0, 0, 0, 0), QCoreApplication::translate("QmlDesigner::TextToModelMerger", "No import statements found")); errors->append(DocumentMessage(diagnosticMessage, QUrl::fromLocalFile(m_document->fileName()))); } @@ -2047,7 +2047,7 @@ void TextToModelMerger::collectImportErrors(QList<DocumentMessage> *errors) if (supportedQtQuickVersion(import.version())) { hasQtQuick = true; } else { - const QmlJS::DiagnosticMessage diagnosticMessage(QmlJS::Severity::Error, AST::SourceLocation(0, 0, 0, 0), + const QmlJS::DiagnosticMessage diagnosticMessage(QmlJS::Severity::Error, SourceLocation(0, 0, 0, 0), QCoreApplication::translate("QmlDesigner::TextToModelMerger", "Unsupported QtQuick version")); errors->append(DocumentMessage(diagnosticMessage, QUrl::fromLocalFile(m_document->fileName()))); } @@ -2172,14 +2172,14 @@ QSet<QPair<QString, QString> > TextToModelMerger::qrcMapping() const } QString TextToModelMerger::textAt(const Document::Ptr &doc, - const AST::SourceLocation &location) + const SourceLocation &location) { return doc->source().mid(location.offset, location.length); } QString TextToModelMerger::textAt(const Document::Ptr &doc, - const AST::SourceLocation &from, - const AST::SourceLocation &to) + const SourceLocation &from, + const SourceLocation &to) { return doc->source().mid(from.offset, to.end() - from.begin()); } diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h index 82def3927f..2884453f8c 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h @@ -144,10 +144,10 @@ private: void addIsoIconQrcMapping(const QUrl &fileUrl); static QString textAt(const QmlJS::Document::Ptr &doc, - const QmlJS::AST::SourceLocation &location); + const QmlJS::SourceLocation &location); static QString textAt(const QmlJS::Document::Ptr &doc, - const QmlJS::AST::SourceLocation &from, - const QmlJS::AST::SourceLocation &to); + const QmlJS::SourceLocation &from, + const QmlJS::SourceLocation &to); private: RewriterView *m_rewriterView; diff --git a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp index 3afca0b036..9ed886246b 100644 --- a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp +++ b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp @@ -51,6 +51,7 @@ #include <QMessageBox> using namespace QmlJS::AST; +using QmlJS::SourceLocation; using namespace QmlJSTools; namespace QmlJSEditor { diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index 13eab82ce4..c260c2f708 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -86,6 +86,7 @@ #include <QTextCodec> #include <QTimer> #include <QTreeView> +#include <QDebug> enum { UPDATE_USES_DEFAULT_INTERVAL = 150, @@ -230,7 +231,7 @@ bool QmlJSEditorWidget::isOutlineCursorChangesBlocked() void QmlJSEditorWidget::jumpToOutlineElement(int /*index*/) { QModelIndex index = m_outlineCombo->view()->currentIndex(); - AST::SourceLocation location = m_qmlJsEditorDocument->outlineModel()->sourceLocation(index); + SourceLocation location = m_qmlJsEditorDocument->outlineModel()->sourceLocation(index); if (!location.isValid()) return; @@ -332,7 +333,7 @@ void QmlJSEditorWidget::updateUses() return; QList<QTextEdit::ExtraSelection> selections; - foreach (const AST::SourceLocation &loc, + foreach (const SourceLocation &loc, m_qmlJsEditorDocument->semanticInfo().idLocations.value(wordUnderCursor())) { if (! loc.isValid()) continue; @@ -432,6 +433,11 @@ protected: } } } + + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion depth visiting AST in SelectedElement"); + } }; void QmlJSEditorWidget::setSelectedElements() @@ -941,7 +947,7 @@ QModelIndex QmlJSEditorWidget::indexForPosition(unsigned cursorPosition, const Q const int rowCount = model->rowCount(rootIndex); for (int i = 0; i < rowCount; ++i) { QModelIndex childIndex = model->index(i, 0, rootIndex); - AST::SourceLocation location = model->sourceLocation(childIndex); + SourceLocation location = model->sourceLocation(childIndex); if ((cursorPosition >= location.offset) && (cursorPosition <= location.offset + location.length)) { diff --git a/src/plugins/qmljseditor/qmljseditordocument.cpp b/src/plugins/qmljseditor/qmljseditordocument.cpp index bb487202c0..b600af61c0 100644 --- a/src/plugins/qmljseditor/qmljseditordocument.cpp +++ b/src/plugins/qmljseditor/qmljseditordocument.cpp @@ -43,6 +43,8 @@ #include <qmljstools/qmljsmodelmanager.h> #include <qmljstools/qmljsqtstylecodeformatter.h> +#include <QDebug> + const char QML_UI_FILE_WARNING[] = "QmlJSEditor.QmlUiFileWarning"; using namespace QmlJSEditor; @@ -69,7 +71,7 @@ struct Declaration class FindIdDeclarations: protected Visitor { public: - using Result = QHash<QString, QList<AST::SourceLocation> >; + using Result = QHash<QString, QList<SourceLocation> >; Result operator()(Document::Ptr doc) { @@ -110,7 +112,7 @@ protected: if (auto idExpr = AST::cast<const AST::IdentifierExpression *>(stmt->expression)) { if (!idExpr->name.isEmpty()) { const QString &id = idExpr->name.toString(); - QList<AST::SourceLocation> *locs = &_ids[id]; + QList<SourceLocation> *locs = &_ids[id]; locs->append(idExpr->firstSourceLocation()); locs->append(_maybeIds.value(id)); _maybeIds.remove(id); @@ -138,6 +140,11 @@ protected: return false; } + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion depth while visiting AST in FindIdDeclarations"); + } + private: Result _ids; Result _maybeIds; @@ -414,6 +421,11 @@ protected: return true; } + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion depth while visiting AST in CreateRanges"); + } + Range createRange(AST::UiObjectMember *member, AST::UiObjectInitializer *ast) { return createRange(member, member->firstSourceLocation(), ast->rbraceToken); @@ -429,7 +441,7 @@ protected: return createRange(ast, block->lbraceToken, block->rbraceToken); } - Range createRange(AST::Node *ast, AST::SourceLocation start, AST::SourceLocation end) + Range createRange(AST::Node *ast, SourceLocation start, SourceLocation end) { Range range; diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp index 670fc69282..d6f85ef26c 100644 --- a/src/plugins/qmljseditor/qmljsfindreferences.cpp +++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp @@ -51,6 +51,7 @@ #include <QTimer> #include <QtConcurrentRun> #include <QtConcurrentMap> +#include <QDebug> #include <QDir> #include <QApplication> #include <QLabel> @@ -70,7 +71,7 @@ namespace { class FindUsages: protected Visitor { public: - using Result = QList<AST::SourceLocation>; + using Result = QList<SourceLocation>; FindUsages(Document::Ptr doc, const ContextPtr &context) : _doc(doc) @@ -236,6 +237,11 @@ protected: return true; } + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion depth while visitin AST in FindUsages"); + } + private: bool contains(const QmlComponentChain *chain) { @@ -294,7 +300,7 @@ private: class FindTypeUsages: protected Visitor { public: - using Result = QList<AST::SourceLocation>; + using Result = QList<SourceLocation>; FindTypeUsages(Document::Ptr doc, const ContextPtr &context) : _doc(doc) @@ -427,6 +433,10 @@ protected: return false; } + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion depth while visitin AST in FindTypeUsages"); + } private: bool checkTypeName(UiQualifiedId *id) @@ -624,6 +634,11 @@ protected: return true; } + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion depth visiting AST in FindUsages"); + } + private: bool containsOffset(SourceLocation start, SourceLocation end) { @@ -720,7 +735,7 @@ public: // find all idenfifier expressions, try to resolve them and check if the result is in scope FindUsages findUsages(doc, context); FindUsages::Result results = findUsages(name, scope); - foreach (const AST::SourceLocation &loc, results) + foreach (const SourceLocation &loc, results) usages.append(Usage(fileName, matchingLine(loc.offset, doc->source()), loc.startLine, loc.startColumn - 1, loc.length)); if (future->isPaused()) future->waitForResume(); @@ -762,7 +777,7 @@ public: // find all idenfifier expressions, try to resolve them and check if the result is in scope FindTypeUsages findUsages(doc, context); FindTypeUsages::Result results = findUsages(name, scope); - foreach (const AST::SourceLocation &loc, results) + foreach (const SourceLocation &loc, results) usages.append(Usage(fileName, matchingLine(loc.offset, doc->source()), loc.startLine, loc.startColumn - 1, loc.length)); if (future->isPaused()) future->waitForResume(); @@ -944,7 +959,7 @@ QList<FindReferences::Usage> FindReferences::findUsageOfType(const QString &file foreach (const QmlJS::Document::Ptr &doc, snapshot) { FindTypeUsages findUsages(doc, context); FindTypeUsages::Result results = findUsages(typeName, targetValue); - foreach (const AST::SourceLocation &loc, results) { + foreach (const SourceLocation &loc, results) { usages.append(Usage(doc->fileName(), matchingLine(loc.offset, doc->source()), loc.startLine, loc.startColumn - 1, loc.length)); } } diff --git a/src/plugins/qmljseditor/qmljshoverhandler.cpp b/src/plugins/qmljseditor/qmljshoverhandler.cpp index cf73d63d7c..1009a7f543 100644 --- a/src/plugins/qmljseditor/qmljshoverhandler.cpp +++ b/src/plugins/qmljseditor/qmljshoverhandler.cpp @@ -63,8 +63,8 @@ namespace QmlJSEditor { namespace { QString textAt(const Document::Ptr doc, - const AST::SourceLocation &from, - const AST::SourceLocation &to) + const SourceLocation &from, + const SourceLocation &to) { return doc->source().mid(from.offset, to.end() - from.begin()); } diff --git a/src/plugins/qmljseditor/qmljsoutline.cpp b/src/plugins/qmljseditor/qmljsoutline.cpp index abd333f468..0fcac6e60a 100644 --- a/src/plugins/qmljseditor/qmljsoutline.cpp +++ b/src/plugins/qmljseditor/qmljsoutline.cpp @@ -206,7 +206,7 @@ void QmlJSOutlineWidget::updateTextCursor(const QModelIndex &index) if (!m_editor->isOutlineCursorChangesBlocked()) { QModelIndex sourceIndex = m_filterModel->mapToSource(index); - AST::SourceLocation location + SourceLocation location = m_editor->qmlJsEditorDocument()->outlineModel()->sourceLocation(sourceIndex); if (!location.isValid()) diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp index e3b169f46d..65e9b0ca2e 100644 --- a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp +++ b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp @@ -46,6 +46,7 @@ #include <utils/qtcassert.h> #include <utils/runextensions.h> +#include <QDebug> #include <QTextDocument> #include <QThreadPool> @@ -163,6 +164,11 @@ protected: return false; } + + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion depth while visitin AST in CollectStateNames"); + } }; class CollectionTask : protected Visitor @@ -453,6 +459,11 @@ protected: } } + void throwRecursionDepthError() override + { + qWarning("Warning: Hit Maximum recursion depth when visiting AST in CollectionTask"); + } + private: void addUse(const SourceLocation &location, SemanticHighlighter::UseType type) { diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.h b/src/plugins/qmljseditor/qmljssemantichighlighter.h index 7fa25b588f..77ea2a7c12 100644 --- a/src/plugins/qmljseditor/qmljssemantichighlighter.h +++ b/src/plugins/qmljseditor/qmljssemantichighlighter.h @@ -32,7 +32,7 @@ #include <QVector> namespace QmlJS { -namespace AST { class SourceLocation; } +class SourceLocation; } namespace TextEditor { class FontSettings; } diff --git a/src/plugins/qmljseditor/qmljswrapinloader.cpp b/src/plugins/qmljseditor/qmljswrapinloader.cpp index d83d34e23e..5f0ef4bb05 100644 --- a/src/plugins/qmljseditor/qmljswrapinloader.cpp +++ b/src/plugins/qmljseditor/qmljswrapinloader.cpp @@ -35,6 +35,7 @@ #include <qmljs/qmljsbind.h> #include <qmljstools/qmljsrefactoringchanges.h> +#include <QDebug> #include <QDir> #include <QFileInfo> #include <QCoreApplication> @@ -71,6 +72,11 @@ protected: return true; } + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion depth while visitin AST in FindIds"); + } + Result result; }; diff --git a/src/plugins/qmljseditor/qmloutlinemodel.cpp b/src/plugins/qmljseditor/qmloutlinemodel.cpp index 50162fb1fc..0cda207b51 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.cpp +++ b/src/plugins/qmljseditor/qmloutlinemodel.cpp @@ -64,7 +64,7 @@ QmlOutlineItem::QmlOutlineItem(QmlOutlineModel *model) : QVariant QmlOutlineItem::data(int role) const { if (role == Qt::ToolTipRole) { - AST::SourceLocation location = m_outlineModel->sourceLocation(index()); + SourceLocation location = m_outlineModel->sourceLocation(index()); AST::UiQualifiedId *uiQualifiedId = m_outlineModel->idNode(index()); if (!uiQualifiedId || !location.isValid() || !m_outlineModel->m_semanticInfo.isValid()) return QVariant(); @@ -146,6 +146,11 @@ private: parent.insert(objMember, stack.last()); } } + + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion depth while visiting AST in ObjectMemberParentVisitor"); + } }; @@ -304,6 +309,11 @@ private: } } + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion limit visiting AST in QmlOutlineModelSync"); + } + QmlOutlineModel *m_model; QHash<AST::Node*, QModelIndex> m_nodeToIndex; @@ -341,7 +351,7 @@ QMimeData *QmlOutlineModel::mimeData(const QModelIndexList &indexes) const stream << indexes.size(); for (const auto &index : indexes) { - AST::SourceLocation location = sourceLocation(index); + SourceLocation location = sourceLocation(index); data->addFile(m_editorDocument->filePath().toString(), location.startLine, location.startColumn - 1 /*editors have 0-based column*/); @@ -719,9 +729,9 @@ AST::Node *QmlOutlineModel::nodeForIndex(const QModelIndex &index) const return nullptr; } -AST::SourceLocation QmlOutlineModel::sourceLocation(const QModelIndex &index) const +SourceLocation QmlOutlineModel::sourceLocation(const QModelIndex &index) const { - AST::SourceLocation location; + SourceLocation location; QTC_ASSERT(index.isValid() && (index.model() == this), return location); AST::Node *node = nodeForIndex(index); if (node) { @@ -981,8 +991,8 @@ QString QmlOutlineModel::asString(AST::UiQualifiedId *id) return text; } -AST::SourceLocation QmlOutlineModel::getLocation(AST::UiObjectMember *objMember) { - AST::SourceLocation location; +SourceLocation QmlOutlineModel::getLocation(AST::UiObjectMember *objMember) { + SourceLocation location; location = objMember->firstSourceLocation(); location.length = objMember->lastSourceLocation().offset - objMember->firstSourceLocation().offset @@ -990,8 +1000,8 @@ AST::SourceLocation QmlOutlineModel::getLocation(AST::UiObjectMember *objMember) return location; } -AST::SourceLocation QmlOutlineModel::getLocation(AST::ExpressionNode *exprNode) { - AST::SourceLocation location; +SourceLocation QmlOutlineModel::getLocation(AST::ExpressionNode *exprNode) { + SourceLocation location; location = exprNode->firstSourceLocation(); location.length = exprNode->lastSourceLocation().offset - exprNode->firstSourceLocation().offset @@ -999,14 +1009,14 @@ AST::SourceLocation QmlOutlineModel::getLocation(AST::ExpressionNode *exprNode) return location; } -AST::SourceLocation QmlOutlineModel::getLocation(AST::PatternPropertyList *propertyNode) { +SourceLocation QmlOutlineModel::getLocation(AST::PatternPropertyList *propertyNode) { if (auto assignment = AST::cast<AST::PatternProperty *>(propertyNode->property)) return getLocation(assignment); return propertyNode->firstSourceLocation(); // should never happen } -AST::SourceLocation QmlOutlineModel::getLocation(AST::PatternProperty *propertyNode) { - AST::SourceLocation location; +SourceLocation QmlOutlineModel::getLocation(AST::PatternProperty *propertyNode) { + SourceLocation location; location = propertyNode->name->propertyNameToken; location.length = propertyNode->initializer->lastSourceLocation().end() - location.offset; diff --git a/src/plugins/qmljseditor/qmloutlinemodel.h b/src/plugins/qmljseditor/qmloutlinemodel.h index 17dd08abd8..626b5f3be4 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.h +++ b/src/plugins/qmljseditor/qmloutlinemodel.h @@ -90,7 +90,7 @@ public: void update(const QmlJSTools::SemanticInfo &semanticInfo); QmlJS::AST::Node *nodeForIndex(const QModelIndex &index) const; - QmlJS::AST::SourceLocation sourceLocation(const QModelIndex &index) const; + QmlJS::SourceLocation sourceLocation(const QModelIndex &index) const; QmlJS::AST::UiQualifiedId *idNode(const QModelIndex &index) const; QIcon icon(const QModelIndex &index) const; @@ -138,10 +138,10 @@ private: QStandardItem *parentItem(); static QString asString(QmlJS::AST::UiQualifiedId *id); - static QmlJS::AST::SourceLocation getLocation(QmlJS::AST::UiObjectMember *objMember); - static QmlJS::AST::SourceLocation getLocation(QmlJS::AST::ExpressionNode *exprNode); - static QmlJS::AST::SourceLocation getLocation(QmlJS::AST::PatternProperty *propertyNode); - static QmlJS::AST::SourceLocation getLocation(QmlJS::AST::PatternPropertyList *propertyNode); + static QmlJS::SourceLocation getLocation(QmlJS::AST::UiObjectMember *objMember); + static QmlJS::SourceLocation getLocation(QmlJS::AST::ExpressionNode *exprNode); + static QmlJS::SourceLocation getLocation(QmlJS::AST::PatternProperty *propertyNode); + static QmlJS::SourceLocation getLocation(QmlJS::AST::PatternPropertyList *propertyNode); QIcon getIcon(QmlJS::AST::UiQualifiedId *objDef); QString getAnnotation(QmlJS::AST::UiObjectInitializer *objInitializer); diff --git a/src/plugins/qmljstools/qmljslocatordata.cpp b/src/plugins/qmljstools/qmljslocatordata.cpp index 3b68bf6521..39ef4f4de5 100644 --- a/src/plugins/qmljstools/qmljslocatordata.cpp +++ b/src/plugins/qmljstools/qmljslocatordata.cpp @@ -33,6 +33,7 @@ //#include <qmljs/qmljsinterpreter.h> #include <qmljs/parser/qmljsast_p.h> +#include <QDebug> #include <QMutexLocker> using namespace QmlJSTools::Internal; @@ -224,6 +225,11 @@ protected: return true; } + + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion limit visiting AST in FunctionFinder."); + } }; } // anonymous namespace diff --git a/src/plugins/qmljstools/qmljsrefactoringchanges.cpp b/src/plugins/qmljstools/qmljsrefactoringchanges.cpp index 3fda024e4e..2cb21f4f55 100644 --- a/src/plugins/qmljstools/qmljsrefactoringchanges.cpp +++ b/src/plugins/qmljstools/qmljsrefactoringchanges.cpp @@ -149,7 +149,7 @@ Document::Ptr QmlJSRefactoringFile::qmljsDocument() const return m_qmljsDocument; } -unsigned QmlJSRefactoringFile::startOf(const AST::SourceLocation &loc) const +unsigned QmlJSRefactoringFile::startOf(const SourceLocation &loc) const { return position(loc.startLine, loc.startColumn); } @@ -176,7 +176,7 @@ bool QmlJSRefactoringFile::isCursorOn(AST::UiQualifiedId *ast) const return pos <= ast->identifierToken.end(); } -bool QmlJSRefactoringFile::isCursorOn(AST::SourceLocation loc) const +bool QmlJSRefactoringFile::isCursorOn(SourceLocation loc) const { const unsigned pos = cursor().position(); return pos >= loc.begin() && pos <= loc.end(); diff --git a/src/plugins/qmljstools/qmljsrefactoringchanges.h b/src/plugins/qmljstools/qmljsrefactoringchanges.h index 2d6f5788d4..7d4bf37546 100644 --- a/src/plugins/qmljstools/qmljsrefactoringchanges.h +++ b/src/plugins/qmljstools/qmljsrefactoringchanges.h @@ -49,11 +49,11 @@ public: \returns the offset in the document for the start position of the given source location. */ - unsigned startOf(const QmlJS::AST::SourceLocation &loc) const; + unsigned startOf(const QmlJS::SourceLocation &loc) const; bool isCursorOn(QmlJS::AST::UiObjectMember *ast) const; bool isCursorOn(QmlJS::AST::UiQualifiedId *ast) const; - bool isCursorOn(QmlJS::AST::SourceLocation loc) const; + bool isCursorOn(QmlJS::SourceLocation loc) const; protected: QmlJSRefactoringFile(const QString &fileName, const QSharedPointer<TextEditor::RefactoringChangesData> &data); diff --git a/src/plugins/qmljstools/qmljssemanticinfo.cpp b/src/plugins/qmljstools/qmljssemanticinfo.cpp index 1e9eae248a..ce490cd445 100644 --- a/src/plugins/qmljstools/qmljssemanticinfo.cpp +++ b/src/plugins/qmljstools/qmljssemanticinfo.cpp @@ -30,6 +30,8 @@ #include <qmljs/qmljsscopechain.h> #include <qmljs/parser/qmljsengine_p.h> +#include <QDebug> + using namespace QmlJS; using namespace QmlJS::AST; @@ -63,13 +65,13 @@ protected: node->accept(this); } - bool containsOffset(AST::SourceLocation start, AST::SourceLocation end) + bool containsOffset(SourceLocation start, SourceLocation end) { return _offset >= start.begin() && _offset <= end.end(); } bool handle(AST::Node *ast, - AST::SourceLocation start, AST::SourceLocation end, + SourceLocation start, SourceLocation end, bool addToPath = true) { if (containsOffset(start, end)) { @@ -99,8 +101,8 @@ protected: bool visit(AST::UiQualifiedId *ast) override { - AST::SourceLocation first = ast->identifierToken; - AST::SourceLocation last; + SourceLocation first = ast->identifierToken; + SourceLocation last; for (AST::UiQualifiedId *it = ast; it; it = it->next) last = it->identifierToken; if (containsOffset(first, last)) @@ -125,6 +127,10 @@ protected: return handleLocationAst(ast); } + void throwRecursionDepthError() override + { + qWarning("Warning: Hit maximum recursion depth when visiting the AST in AstPath"); + } }; } // anonmymous diff --git a/src/plugins/qmljstools/qmljssemanticinfo.h b/src/plugins/qmljstools/qmljssemanticinfo.h index 8d7d1438dc..50bed9a483 100644 --- a/src/plugins/qmljstools/qmljssemanticinfo.h +++ b/src/plugins/qmljstools/qmljssemanticinfo.h @@ -85,7 +85,7 @@ public: // attributes QmlJS::Snapshot snapshot; QmlJS::ContextPtr context; QList<Range> ranges; - QHash<QString, QList<QmlJS::AST::SourceLocation> > idLocations; + QHash<QString, QList<QmlJS::SourceLocation> > idLocations; // these are in addition to the parser messages in the document QList<QmlJS::DiagnosticMessage> semanticMessages; diff --git a/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp b/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp index cc97f7eb6a..3be8aff25b 100644 --- a/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp @@ -38,6 +38,8 @@ #include <utils/qtcassert.h> +#include <QDebug> + namespace QmlProfiler { namespace Internal { @@ -78,12 +80,16 @@ protected: return true; } + void throwRecursionDepthError() override + { + qWarning("Warning: Hit mximum recursion depth while visiting AST in PropertyVisitor"); + } private: QmlJS::AST::Node *m_lastValidNode = nullptr; quint32 m_line = 0; quint32 m_column = 0; - bool containsLocation(QmlJS::AST::SourceLocation start, QmlJS::AST::SourceLocation end) + bool containsLocation(QmlJS::SourceLocation start, QmlJS::SourceLocation end) { return (m_line > start.startLine || (m_line == start.startLine && m_column >= start.startColumn)) diff --git a/src/plugins/todo/qmljstodoitemsscanner.cpp b/src/plugins/todo/qmljstodoitemsscanner.cpp index df6ea53ea8..c3ec33e9cc 100644 --- a/src/plugins/todo/qmljstodoitemsscanner.cpp +++ b/src/plugins/todo/qmljstodoitemsscanner.cpp @@ -78,7 +78,7 @@ void QmlJsTodoItemsScanner::processDocument(QmlJS::Document::Ptr doc) { QList<TodoItem> itemList; - foreach (const QmlJS::AST::SourceLocation &sourceLocation, doc->engine()->comments()) { + foreach (const QmlJS::SourceLocation &sourceLocation, doc->engine()->comments()) { QString source = doc->source().mid(sourceLocation.begin(), sourceLocation.length).trimmed(); // Process every line |