aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2018-01-23 17:06:59 +0100
committerEike Ziller <eike.ziller@qt.io>2018-01-23 17:06:59 +0100
commit437590a99905fecb7efa9b3b51fa9bfff1a4138c (patch)
treefe9fcff462bb79cedde2fccabd50b0688f0e8144
parenta5935cb27a0609764586302bf109796d74060f3d (diff)
parenta40f11e071d78eca267edb75f8808025fcd26a9c (diff)
Merge remote-tracking branch 'origin/4.6'
-rw-r--r--doc/src/editors/creator-clang-codemodel.qdoc1
-rw-r--r--doc/src/editors/creator-editors.qdoc85
-rw-r--r--doc/src/howto/creator-cli.qdoc12
-rw-r--r--qbs/imports/QtcProduct.qbs14
-rw-r--r--qbs/modules/libclang/functions.js6
-rw-r--r--qbs/modules/libclang/libclang.qbs9
-rw-r--r--qbs/modules/qbsbuildconfig/qbsbuildconfig.qbs2
-rw-r--r--qbs/modules/qtc/qtc.qbs1
-rw-r--r--qtcreator.pri2
-rw-r--r--qtcreator.pro8
-rw-r--r--scripts/common.py14
-rwxr-xr-xscripts/createDistPackage.py17
-rwxr-xr-xscripts/makedmg.py60
-rwxr-xr-xscripts/makedmg.sh45
-rw-r--r--share/qtcreator/debugger/gdbbridge.py11
-rw-r--r--share/qtcreator/qml/qmlpuppet/types/enumeration.cpp2
-rw-r--r--share/qtcreator/templates/wizards/projects/qtquickuiprototype/wizard.json2
-rw-r--r--share/qtcreator/translations/qtcreator_de.ts4
-rw-r--r--src/libs/glsl/glsl.g2
-rw-r--r--src/libs/glsl/glslparser.cpp636
-rw-r--r--src/libs/glsl/glslparsertable.cpp2507
-rw-r--r--src/libs/glsl/glslparsertable_p.h441
-rw-r--r--src/plugins/android/androidbuildapkstep.cpp2
-rw-r--r--src/plugins/clangcodemodel/clangbackendreceiver.cpp7
-rw-r--r--src/plugins/clangcodemodel/clangcompletionassistprocessor.h2
-rw-r--r--src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp30
-rw-r--r--src/plugins/clangcodemodel/clangeditordocumentprocessor.h5
-rw-r--r--src/plugins/clangcodemodel/clanghoverhandler.cpp15
-rw-r--r--src/plugins/clangcodemodel/clanghoverhandler.h8
-rw-r--r--src/plugins/clangcodemodel/clangmodelmanagersupport.cpp2
-rw-r--r--src/plugins/clangcodemodel/clangmodelmanagersupport.h2
-rw-r--r--src/plugins/clangrefactoring/clangqueryhoverhandler.cpp7
-rw-r--r--src/plugins/clangrefactoring/clangqueryhoverhandler.h4
-rw-r--r--src/plugins/cmakeprojectmanager/servermodereader.cpp2
-rw-r--r--src/plugins/coreplugin/locator/javascriptfilter.cpp34
-rw-r--r--src/plugins/coreplugin/locator/javascriptfilter.h4
-rw-r--r--src/plugins/cppeditor/resourcepreviewhoverhandler.cpp7
-rw-r--r--src/plugins/cppeditor/resourcepreviewhoverhandler.h4
-rw-r--r--src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp4
-rw-r--r--src/plugins/cpptools/cppcodemodelsettings.cpp5
-rw-r--r--src/plugins/cpptools/cppcodemodelsettings.h4
-rw-r--r--src/plugins/cpptools/cppelementevaluator.cpp493
-rw-r--r--src/plugins/cpptools/cppelementevaluator.h63
-rw-r--r--src/plugins/cpptools/cpphoverhandler.cpp5
-rw-r--r--src/plugins/cpptools/cpphoverhandler.h4
-rw-r--r--src/plugins/debugger/cdb/cdbengine.cpp17
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp2
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp2
-rw-r--r--src/plugins/fakevim/fakevimplugin.cpp180
-rw-r--r--src/plugins/ios/iosrunner.cpp2
-rw-r--r--src/plugins/ios/iossettingswidget.cpp12
-rw-r--r--src/plugins/projectexplorer/project.cpp34
-rw-r--r--src/plugins/projectexplorer/project.h3
-rw-r--r--src/plugins/projectexplorer/projectexplorersettingspage.ui2
-rw-r--r--src/plugins/projectexplorer/projectnodes.cpp13
-rw-r--r--src/plugins/projectexplorer/projectnodes.h4
-rw-r--r--src/plugins/projectexplorer/targetsettingspanel.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp30
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.h8
-rw-r--r--src/plugins/qmakeprojectmanager/profilehoverhandler.cpp7
-rw-r--r--src/plugins/qmakeprojectmanager/profilehoverhandler.h4
-rw-r--r--src/plugins/qmldesigner/components/componentcore/componentcore_constants.h2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/findimplementation.cpp2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp8
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp16
-rw-r--r--src/plugins/qmldesigner/components/debugview/debugview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/anchorindicator.cpp2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/bindingindicator.cpp2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp6
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp10
-rw-r--r--src/plugins/qmldesigner/components/formeditor/movetool.cpp8
-rw-r--r--src/plugins/qmldesigner/components/formeditor/onedimensionalcluster.cpp8
-rw-r--r--src/plugins/qmldesigner/components/formeditor/onedimensionalcluster.h2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/resizetool.cpp4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp8
-rw-r--r--src/plugins/qmldesigner/components/formeditor/selectiontool.cpp2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/snapper.cpp8
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocument.cpp4
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocumentview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp4
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp4
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h3
-rw-r--r--src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.cpp2
-rw-r--r--src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.h2
-rw-r--r--src/plugins/qmldesigner/components/texteditor/texteditorview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/include/abstractproperty.h1
-rw-r--r--src/plugins/qmldesigner/designercore/include/forwardview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/model.h11
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/metainforeader.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp28
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/abstractproperty.cpp5
-rw-r--r--src/plugins/qmldesigner/designercore/model/abstractview.cpp8
-rw-r--r--src/plugins/qmldesigner/designercore/model/bindingproperty.cpp10
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnode_p.h2
-rw-r--r--src/plugins/qmldesigner/designercore/model/model.cpp8
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelnode.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/nodeproperty.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp18
-rw-r--r--src/plugins/qmldesigner/designercore/model/variantproperty.cpp8
-rw-r--r--src/plugins/qmldesigner/designmodewidget.cpp2
-rw-r--r--src/plugins/qmldesigner/documentmanager.cpp2
-rw-r--r--src/plugins/qmldesigner/documentwarningwidget.cpp3
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/colortool/colortool.cpp4
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/backendmodel.cpp2
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp6
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp4
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionviewwidget.cpp26
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp6
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.cpp32
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/pathtool/pathselectionmanipulator.cpp2
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtool.cpp4
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/sourcetool/sourcetool.cpp2
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp2
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp4
-rw-r--r--src/plugins/qmljseditor/qmljseditor.cpp60
-rw-r--r--src/plugins/qmljseditor/qmljseditor.h10
-rw-r--r--src/plugins/qmljseditor/qmljseditordocument.cpp62
-rw-r--r--src/plugins/qmljseditor/qmljseditordocument_p.h9
-rw-r--r--src/plugins/qmljseditor/qmljshoverhandler.cpp5
-rw-r--r--src/plugins/qmljseditor/qmljshoverhandler.h4
-rw-r--r--src/plugins/scxmleditor/plugin_interface/idwarningitem.cpp2
-rw-r--r--src/plugins/scxmleditor/plugin_interface/stateitem.cpp2
-rw-r--r--src/plugins/texteditor/basehoverhandler.cpp53
-rw-r--r--src/plugins/texteditor/basehoverhandler.h22
-rw-r--r--src/plugins/texteditor/colorpreviewhoverhandler.cpp7
-rw-r--r--src/plugins/texteditor/colorpreviewhoverhandler.h2
-rw-r--r--src/plugins/texteditor/texteditor.cpp21
-rw-r--r--src/plugins/valgrind/memchecktool.cpp22
m---------src/shared/qbs0
-rw-r--r--src/src.qbs1
-rw-r--r--src/tools/clangbackend/source/clangbackend_global.h2
-rw-r--r--src/tools/clangbackend/source/clangcodemodelserver.cpp78
-rw-r--r--src/tools/clangbackend/source/clangcodemodelserver.h11
-rw-r--r--src/tools/clangbackend/source/clangdocument.cpp6
-rw-r--r--src/tools/clangbackend/source/clangdocument.h1
-rw-r--r--src/tools/clangbackend/source/clangdocumentprocessor.cpp6
-rw-r--r--src/tools/clangbackend/source/clangdocumentprocessor.h1
-rw-r--r--src/tools/clangbackend/source/clangdocumentprocessors.cpp33
-rw-r--r--src/tools/clangbackend/source/clangdocumentprocessors.h1
-rw-r--r--src/tools/clangbackend/source/clangjobrequest.cpp37
-rw-r--r--src/tools/clangbackend/source/clangjobrequest.h1
-rw-r--r--src/tools/clangbackend/source/clangjobs.cpp19
-rw-r--r--src/tools/clangbackend/source/clangjobs.h2
-rw-r--r--src/tools/clangbackend/source/clangsupportivetranslationunitinitializer.cpp27
-rw-r--r--src/tools/clangbackend/source/clangsupportivetranslationunitinitializer.h3
-rw-r--r--src/tools/clangbackend/source/clangtooltipinfocollector.cpp10
-rw-r--r--src/tools/sdktool/README.md204
-rw-r--r--tests/system/settings/mac/QtProject/qtcreator/profiles.xml6
-rw-r--r--tests/system/settings/unix/QtProject/qtcreator/profiles.xml8
-rw-r--r--tests/system/settings/windows/QtProject/qtcreator/profiles.xml8
-rw-r--r--tests/system/shared/classes.py52
-rw-r--r--tests/system/shared/project.py45
-rw-r--r--tests/system/suite_APTW/tst_APTW03/test.py2
-rwxr-xr-xtests/system/suite_CCOM/tst_CCOM01/test.py4
-rwxr-xr-xtests/system/suite_CCOM/tst_CCOM02/test.py2
-rw-r--r--tests/system/suite_CSUP/tst_CSUP06/test.py2
-rw-r--r--tests/system/suite_QMLS/tst_QMLS03/test.py4
-rw-r--r--tests/system/suite_WELP/tst_WELP02/test.py2
-rw-r--r--tests/system/suite_debugger/tst_cli_output_console/test.py4
-rw-r--r--tests/system/suite_debugger/tst_debug_empty_main/test.py3
-rw-r--r--tests/system/suite_editors/tst_qml_editor/test.py2
-rw-r--r--tests/system/suite_general/tst_build_speedcrunch/test.py2
-rw-r--r--tests/system/suite_general/tst_opencreator_qbs/test.py4
-rw-r--r--tests/system/suite_general/tst_openqt_creator/test.py4
-rw-r--r--tests/system/suite_general/tst_remove_kits/test.py2
-rw-r--r--tests/system/suite_general/tst_rename_file/test.py2
-rw-r--r--tests/system/suite_general/tst_session_handling/test.py6
-rw-r--r--tests/system/suite_qtquick/tst_qml_outline/test.py4
-rw-r--r--tests/system/suite_qtquick/tst_qtquick_creation/test.py2
-rw-r--r--tests/system/suite_qtquick/tst_qtquick_creation3/test.py4
-rw-r--r--tests/system/suite_qtquick/tst_qtquick_creation4/test.py2
-rw-r--r--tests/unit/unittest/clangcodemodelserver-test.cpp40
-rw-r--r--tests/unit/unittest/clangdocumentprocessors-test.cpp13
-rw-r--r--tests/unit/unittest/clangsupportivetranslationunitinitializer-test.cpp12
-rw-r--r--tests/unit/unittest/clangtooltipinfo-test.cpp42
-rw-r--r--tests/unit/unittest/data/tooltipinfo.cpp16
195 files changed, 3473 insertions, 2849 deletions
diff --git a/doc/src/editors/creator-clang-codemodel.qdoc b/doc/src/editors/creator-clang-codemodel.qdoc
index 4b29842e96..c3e52e6a9b 100644
--- a/doc/src/editors/creator-clang-codemodel.qdoc
+++ b/doc/src/editors/creator-clang-codemodel.qdoc
@@ -93,6 +93,7 @@
\li Code completion
\li Syntactic and semantic highlighting
\li Diagnostics
+ \li Tooltips
\endlist
diff --git a/doc/src/editors/creator-editors.qdoc b/doc/src/editors/creator-editors.qdoc
index 79742e736f..72023523c3 100644
--- a/doc/src/editors/creator-editors.qdoc
+++ b/doc/src/editors/creator-editors.qdoc
@@ -2866,6 +2866,9 @@
\li Running text editing macros that you record and save (\c {rm}). For
more information, see \l{Using Text Editing Macros}
+ \li Executing JavaScript (\c {=}), especially useful for calculations.
+ For more information, see \l{Executing JavaScript}.
+
\li Executing shell commands (\c {!})
\li Executing version control system commands (\c {git}). For more
@@ -3048,4 +3051,86 @@
\endlist
+ \section1 Executing JavaScript
+
+ The locator provides access to a JavaScript interpreter, that can be used to
+ perform calculations.
+
+ Beside simple mathematical operations, like ((1 + 2) * 3), the following
+ built-in functions exist:
+
+ \table
+ \header
+ \li Function
+ \li Purpose
+ \row
+ \li abs(x)
+ \li Returns the absolute value of x
+ \row
+ \li acos(x)
+ \li Returns the arccosine of x, in radians
+ \row
+ \li asin(x)
+ \li Returns the arcsine of x, in radians
+ \row
+ \li atan(x)
+ \li Returns the arctangent of x, in radians
+ \row
+ \li atan2(x, y)
+ \li Returns the arctangent of the quotient of its arguments
+ \row
+ \li bin(x)
+ \li Returns the binary representation of x
+ \row
+ \li ceil(x)
+ \li Returns the value of x rounded up to the next integer
+ \row
+ \li cos(x)
+ \li Returns the cosine of x (x is in radians)
+ \row
+ \li exp(x)
+ \li Returns the value of E to the power of x
+ \row
+ \li e()
+ \li Returns Euler's number E (2.71828...)
+ \row
+ \li floor(x)
+ \li Returns the value of x rounded down to the next integer
+ \row
+ \li hex(x)
+ \li Returns the hexadecimal representation of x
+ \row
+ \li log(x)
+ \li Returns the natural logarithm (base E) of x
+ \row
+ \li max(x, y)
+ \li Returns the higher value of x and y
+ \row
+ \li min(x, y)
+ \li Returns the lower value of x and y
+ \row
+ \li oct(x)
+ \li Returns the octal representation of x
+ \row
+ \li pi()
+ \li Returns PI (3.14159...)
+ \row
+ \li pow(x, y)
+ \li Returns the value of x to the power of y
+ \row
+ \li random()
+ \li Returns a random number between 0 and 1
+ \row
+ \li round(x)
+ \li Returns the value of x rounded to the next integer
+ \row
+ \li sin(x)
+ \li Returns the sine of x (x is in radians)
+ \row
+ \li sqrt(x)
+ \li Returns the square root of x
+ \row
+ \li tan(x)
+ \li Returns the tangent of x (x is in radians)
+ \endtable
*/
diff --git a/doc/src/howto/creator-cli.qdoc b/doc/src/howto/creator-cli.qdoc
index c64d693687..8cfb2b7dc5 100644
--- a/doc/src/howto/creator-cli.qdoc
+++ b/doc/src/howto/creator-cli.qdoc
@@ -174,8 +174,8 @@
\li -debug <executable>[,kit=<kit>]
\li Debugger plugin: launch and debug the executable with the name
\c{executable}.
- A \c{kit} can be specified to point to non-default debuggers
- and sysroots.
+ A \c{kit} can be specified by ID or name to point to non-default
+ debuggers and sysroots.
\row
\li -debug [executable,]core=<corefile>[,kit=<kit>]
@@ -186,8 +186,8 @@
it from the core file itself. This will fail for paths with more
than about 80 characters.
In such cases the \c{executable} parameter is mandatory.
- A \c{kit} can be specified to point to non-default debuggers
- and sysroots.
+ A \c{kit} can be specified by ID or name to point to non-default
+ debuggers and sysroots.
\row
\li -debug <executable>,server=<server:port>[,kit=<kit>]
@@ -195,8 +195,8 @@
\c{port} on the server \c{server}. The parameter \c{executable}
specifies a local copy of the executable the remote debug server
is manipulating.
- A \c{kit} can be specified to point to non-default debuggers and
- sysroots.
+ A \c{kit} can be specified by ID or name to point to non-default
+ debuggers and sysroots.
\row
\li -wincrashevent <event-handle:pid>
diff --git a/qbs/imports/QtcProduct.qbs b/qbs/imports/QtcProduct.qbs
index ef19ce4987..fc6c2502e4 100644
--- a/qbs/imports/QtcProduct.qbs
+++ b/qbs/imports/QtcProduct.qbs
@@ -22,18 +22,22 @@ Product {
Depends { name: product.name + " dev headers"; required: false }
Depends { name: "Qt.core"; versionAtLeast: "5.6.2" }
- Properties {
- condition: Utilities.versionCompare(Qt.core.version, "5.7") < 0
- cpp.minimumMacosVersion: project.minimumMacosVersion
- }
+ // TODO: Should fall back to what came from Qt.core for Qt < 5.7, but we cannot express that
+ // atm. Conditionally pulling in a module that sets the property is also not possible,
+ // because conflicting scalar values would be reported (QBS-1225 would fix that).
+ cpp.minimumMacosVersion: project.minimumMacosVersion
Properties {
condition: qbs.toolchain.contains("gcc") && !qbs.toolchain.contains("clang")
cpp.cxxFlags: base.concat(["-Wno-noexcept-type"])
}
+ Properties {
+ condition: qbs.toolchain.contains("msvc")
+ cpp.cxxFlags: base.concat(["/w44996"])
+ }
cpp.cxxLanguageVersion: "c++14"
cpp.defines: qtc.generalDefines
- cpp.minimumWindowsVersion: qbs.architecture === "x86" ? "5.1" : "5.2"
+ cpp.minimumWindowsVersion: "6.1"
cpp.useCxxPrecompiledHeader: useNonGuiPchFile || useGuiPchFile
cpp.visibility: "minimal"
diff --git a/qbs/modules/libclang/functions.js b/qbs/modules/libclang/functions.js
index 3b74066562..29d093dcad 100644
--- a/qbs/modules/libclang/functions.js
+++ b/qbs/modules/libclang/functions.js
@@ -29,7 +29,7 @@ function isSuitableLLVMConfig(llvmConfigCandidate, qtcFunctions)
return false;
}
-function llvmConfig(qbs, qtcFunctions)
+function llvmConfig(hostOS, qtcFunctions)
{
var llvmInstallDirFromEnv = Environment.getEnv("LLVM_INSTALL_DIR")
var llvmConfigVariants = [
@@ -37,7 +37,7 @@ function llvmConfig(qbs, qtcFunctions)
];
// Prefer llvm-config* from LLVM_INSTALL_DIR
- var suffix = qbs.hostOS.contains("windows") ? ".exe" : "";
+ var suffix = hostOS.contains("windows") ? ".exe" : "";
if (llvmInstallDirFromEnv) {
for (var i = 0; i < llvmConfigVariants.length; ++i) {
var variant = llvmInstallDirFromEnv + "/bin/" + llvmConfigVariants[i] + suffix;
@@ -48,7 +48,7 @@ function llvmConfig(qbs, qtcFunctions)
// Find llvm-config* in PATH
var pathListString = Environment.getEnv("PATH");
- var separator = qbs.hostOS.contains("windows") ? ";" : ":";
+ var separator = hostOS.contains("windows") ? ";" : ":";
var pathList = pathListString.split(separator);
for (var i = 0; i < llvmConfigVariants.length; ++i) {
for (var j = 0; j < pathList.length; ++j) {
diff --git a/qbs/modules/libclang/libclang.qbs b/qbs/modules/libclang/libclang.qbs
index e4253cc105..3b68faa0bb 100644
--- a/qbs/modules/libclang/libclang.qbs
+++ b/qbs/modules/libclang/libclang.qbs
@@ -9,6 +9,9 @@ Module {
Probe {
id: clangProbe
+ property stringList hostOS: qbs.hostOS
+ property stringList targetOS: qbs.targetOS
+
property string llvmConfig
property string llvmVersion
property string llvmIncludeDir
@@ -21,12 +24,12 @@ Module {
property string llvmBuildMode
configure: {
- llvmConfig = ClangFunctions.llvmConfig(qbs, QtcFunctions);
+ llvmConfig = ClangFunctions.llvmConfig(hostOS, QtcFunctions);
llvmVersion = ClangFunctions.version(llvmConfig);
llvmIncludeDir = ClangFunctions.includeDir(llvmConfig);
llvmLibDir = ClangFunctions.libDir(llvmConfig);
- llvmLibs = ClangFunctions.libraries(qbs.targetOS);
- llvmToolingLibs = ClangFunctions.toolingLibs(llvmConfig, qbs.targetOS);
+ llvmLibs = ClangFunctions.libraries(targetOS);
+ llvmToolingLibs = ClangFunctions.toolingLibs(llvmConfig, targetOS);
llvmBuildMode = ClangFunctions.buildMode(llvmConfig);
var toolingParams = ClangFunctions.toolingParameters(llvmConfig);
llvmToolingDefines = toolingParams.defines;
diff --git a/qbs/modules/qbsbuildconfig/qbsbuildconfig.qbs b/qbs/modules/qbsbuildconfig/qbsbuildconfig.qbs
index 492a6fe457..6c77099906 100644
--- a/qbs/modules/qbsbuildconfig/qbsbuildconfig.qbs
+++ b/qbs/modules/qbsbuildconfig/qbsbuildconfig.qbs
@@ -14,7 +14,7 @@ Module {
? ["@loader_path/" + FileInfo.relativePath('/' + appInstallDir, '/' + libInstallDir)]
: ["$ORIGIN/..", "$ORIGIN/../" + qtc.ide_library_path]
property string resourcesInstallDir: qtc.ide_data_path + "/qbs"
- property string pluginsInstallDir: qtc.ide_plugin_path
+ property string pluginsInstallDir: qtc.ide_plugin_path + "/qbs/plugins"
property string appInstallDir: qtc.ide_bin_path
property string libexecInstallDir: qtc.ide_libexec_path
property bool installHtml: false
diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs
index 416e27e4e8..f3f3bf7827 100644
--- a/qbs/modules/qtc/qtc.qbs
+++ b/qbs/modules/qtc/qtc.qbs
@@ -85,6 +85,7 @@ Module {
"QT_USE_FAST_OPERATOR_PLUS",
"QT_USE_FAST_CONCATENATION",
].concat(testsEnabled ? ["WITH_TESTS"] : [])
+ .concat(qbs.toolchain.contains("msvc") ? ["_CRT_SECURE_NO_WARNINGS"] : [])
Rule {
condition: make_dev_package
diff --git a/qtcreator.pri b/qtcreator.pri
index a53b1fe9ed..de815b131e 100644
--- a/qtcreator.pri
+++ b/qtcreator.pri
@@ -106,7 +106,7 @@ osx {
# check if IDE_BUILD_TREE is actually an existing Qt Creator.app,
# for building against a binary package
- exists($$IDE_BUILD_TREE/Contents/MacOS/Qt Creator): IDE_APP_BUNDLE = $$IDE_BUILD_TREE
+ exists($$IDE_BUILD_TREE/Contents/MacOS/$$IDE_APP_TARGET): IDE_APP_BUNDLE = $$IDE_BUILD_TREE
else: IDE_APP_BUNDLE = $$IDE_APP_PATH/$${IDE_APP_TARGET}.app
# set output path if not set manually
diff --git a/qtcreator.pro b/qtcreator.pro
index d8a95fc222..c8ea8ddd37 100644
--- a/qtcreator.pro
+++ b/qtcreator.pro
@@ -2,7 +2,7 @@ include(qtcreator.pri)
#version check qt
!minQtVersion(5, 6, 2) {
- message("Cannot build Qt Creator with Qt version $${QT_VERSION}.")
+ message("Cannot build $$IDE_DISPLAY_NAME with Qt version $${QT_VERSION}.")
error("Use at least Qt 5.6.2.")
}
@@ -108,11 +108,11 @@ linux {
}
macx {
- APPBUNDLE = "$$OUT_PWD/bin/Qt Creator.app"
- BINDIST_SOURCE = "$$OUT_PWD/bin/Qt Creator.app"
+ APPBUNDLE = "$$OUT_PWD/bin/$${IDE_APP_TARGET}.app"
+ BINDIST_SOURCE = "$$OUT_PWD/bin/$${IDE_APP_TARGET}.app"
deployqt.commands = $$PWD/scripts/deployqtHelper_mac.sh \"$${APPBUNDLE}\" \"$$[QT_INSTALL_BINS]\" \"$$[QT_INSTALL_TRANSLATIONS]\" \"$$[QT_INSTALL_PLUGINS]\" \"$$[QT_INSTALL_IMPORTS]\" \"$$[QT_INSTALL_QML]\"
codesign.commands = codesign --deep -s \"$(SIGNING_IDENTITY)\" $(SIGNING_FLAGS) \"$${APPBUNDLE}\"
- dmg.commands = $$PWD/scripts/makedmg.sh $$OUT_PWD/bin $${BASENAME}.dmg
+ dmg.commands = python -u \"$$PWD/scripts/makedmg.py\" \"$${BASENAME}.dmg\" \"Qt Creator\" \"$$IDE_SOURCE_TREE\" \"$$OUT_PWD/bin\"
#dmg.depends = deployqt
QMAKE_EXTRA_TARGETS += codesign dmg
} else {
diff --git a/scripts/common.py b/scripts/common.py
index 388ce487fd..b8f640377e 100644
--- a/scripts/common.py
+++ b/scripts/common.py
@@ -163,3 +163,17 @@ def fix_rpaths(path, qt_deploy_path, qt_install_info, chrpath=None):
if is_unix_executable(filepath) or is_unix_library(filepath):
fix_rpaths_helper(filepath)
+def is_debug_file(filepath):
+ if is_mac_platform():
+ return filepath.endswith('.dSYM') or '.dSYM/' in filepath
+ elif is_linux_platform():
+ return filepath.endswith('.debug')
+ else:
+ return filepath.endswith('.pdb')
+
+def is_debug(path, filenames):
+ return [fn for fn in filenames if is_debug_file(os.path.join(path, fn))]
+
+def is_not_debug(path, filenames):
+ files = [fn for fn in filenames if os.path.isfile(os.path.join(path, fn))]
+ return [fn for fn in files if not is_debug_file(os.path.join(path, fn))]
diff --git a/scripts/createDistPackage.py b/scripts/createDistPackage.py
index fc6e7b7aaa..2b0c38ea5f 100755
--- a/scripts/createDistPackage.py
+++ b/scripts/createDistPackage.py
@@ -45,28 +45,13 @@ def parse_arguments():
parser.add_argument('source_directory', help='source directory with the Qt Creator installation')
return parser.parse_args()
-def is_debug_file(filepath):
- if common.is_mac_platform():
- return filepath.endswith('.dSYM') or '.dSYM/' in filepath
- elif common.is_linux_platform():
- return filepath.endswith('.debug')
- else:
- return filepath.endswith('.pdb')
-
-def is_debug(path, filenames):
- return [fn for fn in filenames if is_debug_file(os.path.join(path, fn))]
-
-def is_not_debug(path, filenames):
- files = [fn for fn in filenames if os.path.isfile(os.path.join(path, fn))]
- return [fn for fn in files if not is_debug_file(os.path.join(path, fn))]
-
def main():
arguments = parse_arguments()
tempdir_base = tempfile.mkdtemp()
tempdir = os.path.join(tempdir_base, os.path.basename(arguments.source_directory))
try:
common.copytree(arguments.source_directory, tempdir, symlinks=True,
- ignore=(is_not_debug if arguments.debug else is_debug))
+ ignore=(common.is_not_debug if arguments.debug else common.is_debug))
zip_source = os.path.join(tempdir, '*') if arguments.exclude_toplevel else tempdir
subprocess.check_call([arguments.sevenzip, 'a', '-mx9',
arguments.target_archive, zip_source])
diff --git a/scripts/makedmg.py b/scripts/makedmg.py
new file mode 100755
index 0000000000..33721f90a7
--- /dev/null
+++ b/scripts/makedmg.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+############################################################################
+#
+# Copyright (C) 2018 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.
+#
+############################################################################
+
+import argparse
+import os
+import shutil
+import subprocess
+import tempfile
+import time
+
+import common
+
+def parse_arguments():
+ parser = argparse.ArgumentParser(description='Create Qt Creator disk image, filtering out debug information files.')
+ parser.add_argument('target_diskimage', help='output .dmg file to create')
+ parser.add_argument('dmg_volumename', help='volume name to use for the disk image')
+ parser.add_argument('source_directory', help='directory with the Qt Creator sources')
+ parser.add_argument('binary_directory', help='directory that contains the Qt Creator.app')
+ return parser.parse_args()
+
+def main():
+ arguments = parse_arguments()
+ tempdir_base = tempfile.mkdtemp()
+ tempdir = os.path.join(tempdir_base, os.path.basename(arguments.binary_directory))
+ try:
+ common.copytree(arguments.binary_directory, tempdir, symlinks=True, ignore=common.is_debug)
+ os.symlink('/Applications', os.path.join(tempdir, 'Applications'))
+ shutil.copy(os.path.join(arguments.source_directory, 'LICENSE.GPL3-EXCEPT'), tempdir)
+ dmg_cmd = ['hdiutil', 'create', '-srcfolder', tempdir, '-volname', arguments.dmg_volumename,
+ '-format', 'UDBZ', arguments.target_diskimage, '-ov', '-scrub', '-size', '1g', '-verbose']
+ subprocess.check_call(dmg_cmd)
+ # sleep a few seconds to make sure disk image is fully unmounted etc
+ time.sleep(5)
+ finally:
+ shutil.rmtree(tempdir_base)
+if __name__ == "__main__":
+ main()
diff --git a/scripts/makedmg.sh b/scripts/makedmg.sh
deleted file mode 100755
index befdf42e88..0000000000
--- a/scripts/makedmg.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/bash
-
-############################################################################
-#
-# 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.
-#
-############################################################################
-
-[ $# -lt 2 ] && echo "Usage: $(basename $0) <folder> <name.dmg>" && exit 2
-[ $(uname -s) != "Darwin" ] && echo "Run this script on Mac OS X" && exit 2;
-sourceFolder="$1"
-intermediateFolder=$(mktemp -d "/tmp/packagedir.XXXXX")
-finalDMGName="$2"
-title="Qt Creator"
-
-echo Preparing image artifacts...
-cp -a "${sourceFolder}/" "${intermediateFolder}"
-ln -s /Applications "${intermediateFolder}"
-cp "$(dirname "${BASH_SOURCE[0]}")/../LICENSE.GPL3-EXCEPT" "${intermediateFolder}/LICENSE.GPL3-EXCEPT.txt"
-echo Creating image...
-hdiutil create -srcfolder "${intermediateFolder}" -volname "${title}" -format UDBZ "${finalDMGName}" -ov -scrub -size 1g -verbose
-# make sure that the image is umounted etc
-sleep 4
-
-# clean up
-rm -rf "${intermediateFolder}"
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py
index 0425641c6d..320695a750 100644
--- a/share/qtcreator/debugger/gdbbridge.py
+++ b/share/qtcreator/debugger/gdbbridge.py
@@ -31,6 +31,7 @@ except:
import gdb
import os
import os.path
+import re
import sys
import struct
import tempfile
@@ -995,15 +996,11 @@ class Dumper(DumperBase):
def handleNewObjectFile(self, objfile):
name = objfile.filename
if self.isWindowsTarget():
- isQtCoreObjFile = name.find('Qt5Cored.dll') >= 0 or name.find('Qt5Core.dll') >= 0
- if not isQtCoreObjFile:
- isQtCoreObjFile = name.find('QtCored.dll') >= 0 or name.find('QtCore.dll') >= 0
+ qtCoreMatch = re.match('.*Qt5?Core[^/.]*d?\.dll', name)
else:
- isQtCoreObjFile = name.find('/libQt5Core') >= 0
- if not isQtCoreObjFile:
- isQtCoreObjFile = name.find('/libQtCore') >= 0
+ qtCoreMatch = re.match('.*/libQt5?Core[^/.]\.so', name)
- if isQtCoreObjFile:
+ if qtCoreMatch is not None:
self.handleQtCoreLoaded(objfile)
def handleQtCoreLoaded(self, objfile):
diff --git a/share/qtcreator/qml/qmlpuppet/types/enumeration.cpp b/share/qtcreator/qml/qmlpuppet/types/enumeration.cpp
index 094eb5ffc0..a77f460f4f 100644
--- a/share/qtcreator/qml/qmlpuppet/types/enumeration.cpp
+++ b/share/qtcreator/qml/qmlpuppet/types/enumeration.cpp
@@ -54,7 +54,7 @@ Enumeration::Enumeration(const QString &scope, const QString &name)
QmlDesigner::EnumerationName QmlDesigner::Enumeration::scope() const
{
- return m_enumerationName.split('.').first();
+ return m_enumerationName.split('.').constFirst();
}
EnumerationName Enumeration::name() const
diff --git a/share/qtcreator/templates/wizards/projects/qtquickuiprototype/wizard.json b/share/qtcreator/templates/wizards/projects/qtquickuiprototype/wizard.json
index 285631c96e..62305835df 100644
--- a/share/qtcreator/templates/wizards/projects/qtquickuiprototype/wizard.json
+++ b/share/qtcreator/templates/wizards/projects/qtquickuiprototype/wizard.json
@@ -93,7 +93,7 @@
},
{
"name": "UseVirtualKeyboard",
- "trDisplayName": "Use Qt Virtual Keyboard.",
+ "trDisplayName": "Use Qt Virtual Keyboard",
"type": "CheckBox",
"data":
{
diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts
index 56727a69ec..3ff19d57ae 100644
--- a/share/qtcreator/translations/qtcreator_de.ts
+++ b/share/qtcreator/translations/qtcreator_de.ts
@@ -10840,7 +10840,7 @@ Dies ist unabhängig vom Wert der Eigenschaft &quot;visible&quot; in QML.</trans
<name>TextEditor</name>
<message>
<source>Text Editor</source>
- <translation>Text Editor</translation>
+ <translation>Texteditor</translation>
</message>
</context>
<context>
@@ -43079,7 +43079,7 @@ Bitte aktualisieren Sie Ihr Kit oder wählen Sie eine mkspec für qmake, die bes
</message>
<message>
<source>Text Editor</source>
- <translation>Text Editor</translation>
+ <translation>Texteditor</translation>
</message>
</context>
<context>
diff --git a/src/libs/glsl/glsl.g b/src/libs/glsl/glsl.g
index ccd80ae8f1..314cef0bb7 100644
--- a/src/libs/glsl/glsl.g
+++ b/src/libs/glsl/glsl.g
@@ -569,6 +569,8 @@ AST *Parser::parse(int startToken)
action = nt_action(_stateStack[_tos], lhs[ruleno] - TERMINAL_COUNT);
} else if (action == 0) {
++recoveryAttempts;
+ if (recoveryAttempts > 10)
+ break;
const int line = _tokens[yyloc].line + 1;
QString message = QLatin1String("Syntax error");
if (yytoken != -1) {
diff --git a/src/libs/glsl/glslparser.cpp b/src/libs/glsl/glslparser.cpp
index a746a6050b..f435032999 100644
--- a/src/libs/glsl/glslparser.cpp
+++ b/src/libs/glsl/glslparser.cpp
@@ -159,6 +159,8 @@ AST *Parser::parse(int startToken)
action = nt_action(_stateStack[_tos], lhs[ruleno] - TERMINAL_COUNT);
} else if (action == 0) {
++recoveryAttempts;
+ if (recoveryAttempts > 10)
+ break;
const int line = _tokens[yyloc].line + 1;
QString message = QLatin1String("Syntax error");
if (yytoken != -1) {
@@ -225,137 +227,137 @@ AST *Parser::parse(int startToken)
return 0;
}
-#line 641 "./glsl.g"
+#line 643 "./glsl.g"
void Parser::reduce(int ruleno)
{
switch(ruleno) {
-#line 650 "./glsl.g"
+#line 652 "./glsl.g"
case 0: {
ast(1) = makeAstNode<IdentifierExpressionAST>(string(1));
} break;
-#line 657 "./glsl.g"
+#line 659 "./glsl.g"
case 1: {
ast(1) = makeAstNode<LiteralExpressionAST>(string(1));
} break;
-#line 664 "./glsl.g"
+#line 666 "./glsl.g"
case 2: {
ast(1) = makeAstNode<LiteralExpressionAST>(_engine->identifier("true", 4));
} break;
-#line 671 "./glsl.g"
+#line 673 "./glsl.g"
case 3: {
ast(1) = makeAstNode<LiteralExpressionAST>(_engine->identifier("false", 5));
} break;
-#line 678 "./glsl.g"
+#line 680 "./glsl.g"
case 4: {
// nothing to do.
} break;
-#line 685 "./glsl.g"
+#line 687 "./glsl.g"
case 5: {
ast(1) = ast(2);
} break;
-#line 692 "./glsl.g"
+#line 694 "./glsl.g"
case 6: {
// nothing to do.
} break;
-#line 699 "./glsl.g"
+#line 701 "./glsl.g"
case 7: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_ArrayAccess, expression(1), expression(3));
} break;
-#line 706 "./glsl.g"
+#line 708 "./glsl.g"
case 8: {
// nothing to do.
} break;
-#line 713 "./glsl.g"
+#line 715 "./glsl.g"
case 9: {
ast(1) = makeAstNode<MemberAccessExpressionAST>(expression(1), string(3));
} break;
-#line 720 "./glsl.g"
+#line 722 "./glsl.g"
case 10: {
ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PostIncrement, expression(1));
} break;
-#line 727 "./glsl.g"
+#line 729 "./glsl.g"
case 11: {
ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PostDecrement, expression(1));
} break;
-#line 734 "./glsl.g"
+#line 736 "./glsl.g"
case 12: {
// nothing to do.
} break;
-#line 741 "./glsl.g"
+#line 743 "./glsl.g"
case 13: {
// nothing to do.
} break;
-#line 748 "./glsl.g"
+#line 750 "./glsl.g"
case 14: {
ast(1) = makeAstNode<FunctionCallExpressionAST>
(sym(1).function.id, sym(1).function.arguments);
} break;
-#line 756 "./glsl.g"
+#line 758 "./glsl.g"
case 15: {
ast(1) = makeAstNode<FunctionCallExpressionAST>
(expression(1), sym(3).function.id, sym(3).function.arguments);
} break;
-#line 764 "./glsl.g"
+#line 766 "./glsl.g"
case 16: {
// nothing to do.
} break;
-#line 771 "./glsl.g"
+#line 773 "./glsl.g"
case 17: {
// nothing to do.
} break;
-#line 778 "./glsl.g"
+#line 780 "./glsl.g"
case 18: {
sym(1).function.id = sym(1).function_identifier;
sym(1).function.arguments = 0;
} break;
-#line 786 "./glsl.g"
+#line 788 "./glsl.g"
case 19: {
sym(1).function.id = sym(1).function_identifier;
sym(1).function.arguments = 0;
} break;
-#line 794 "./glsl.g"
+#line 796 "./glsl.g"
case 20: {
sym(1).function.id = sym(1).function_identifier;
@@ -363,7 +365,7 @@ case 20: {
makeAstNode< List<ExpressionAST *> >(expression(2));
} break;
-#line 803 "./glsl.g"
+#line 805 "./glsl.g"
case 21: {
sym(1).function.arguments =
@@ -371,379 +373,379 @@ case 21: {
(sym(1).function.arguments, expression(3));
} break;
-#line 812 "./glsl.g"
+#line 814 "./glsl.g"
case 22: {
// nothing to do.
} break;
-#line 819 "./glsl.g"
+#line 821 "./glsl.g"
case 23: {
ast(1) = makeAstNode<FunctionIdentifierAST>(type(1));
} break;
-#line 826 "./glsl.g"
+#line 828 "./glsl.g"
case 24: {
ast(1) = makeAstNode<FunctionIdentifierAST>(string(1));
} break;
-#line 833 "./glsl.g"
+#line 835 "./glsl.g"
case 25: {
// nothing to do.
} break;
-#line 840 "./glsl.g"
+#line 842 "./glsl.g"
case 26: {
ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PreIncrement, expression(2));
} break;
-#line 847 "./glsl.g"
+#line 849 "./glsl.g"
case 27: {
ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PreDecrement, expression(2));
} break;
-#line 854 "./glsl.g"
+#line 856 "./glsl.g"
case 28: {
ast(1) = makeAstNode<UnaryExpressionAST>(sym(1).kind, expression(2));
} break;
-#line 861 "./glsl.g"
+#line 863 "./glsl.g"
case 29: {
sym(1).kind = AST::Kind_UnaryPlus;
} break;
-#line 868 "./glsl.g"
+#line 870 "./glsl.g"
case 30: {
sym(1).kind = AST::Kind_UnaryMinus;
} break;
-#line 875 "./glsl.g"
+#line 877 "./glsl.g"
case 31: {
sym(1).kind = AST::Kind_LogicalNot;
} break;
-#line 882 "./glsl.g"
+#line 884 "./glsl.g"
case 32: {
sym(1).kind = AST::Kind_BitwiseNot;
} break;
-#line 889 "./glsl.g"
+#line 891 "./glsl.g"
case 33: {
// nothing to do.
} break;
-#line 896 "./glsl.g"
+#line 898 "./glsl.g"
case 34: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Multiply, expression(1), expression(3));
} break;
-#line 903 "./glsl.g"
+#line 905 "./glsl.g"
case 35: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Divide, expression(1), expression(3));
} break;
-#line 910 "./glsl.g"
+#line 912 "./glsl.g"
case 36: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Modulus, expression(1), expression(3));
} break;
-#line 917 "./glsl.g"
+#line 919 "./glsl.g"
case 37: {
// nothing to do.
} break;
-#line 924 "./glsl.g"
+#line 926 "./glsl.g"
case 38: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Plus, expression(1), expression(3));
} break;
-#line 931 "./glsl.g"
+#line 933 "./glsl.g"
case 39: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Minus, expression(1), expression(3));
} break;
-#line 938 "./glsl.g"
+#line 940 "./glsl.g"
case 40: {
// nothing to do.
} break;
-#line 945 "./glsl.g"
+#line 947 "./glsl.g"
case 41: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_ShiftLeft, expression(1), expression(3));
} break;
-#line 952 "./glsl.g"
+#line 954 "./glsl.g"
case 42: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_ShiftRight, expression(1), expression(3));
} break;
-#line 959 "./glsl.g"
+#line 961 "./glsl.g"
case 43: {
// nothing to do.
} break;
-#line 966 "./glsl.g"
+#line 968 "./glsl.g"
case 44: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LessThan, expression(1), expression(3));
} break;
-#line 973 "./glsl.g"
+#line 975 "./glsl.g"
case 45: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_GreaterThan, expression(1), expression(3));
} break;
-#line 980 "./glsl.g"
+#line 982 "./glsl.g"
case 46: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LessEqual, expression(1), expression(3));
} break;
-#line 987 "./glsl.g"
+#line 989 "./glsl.g"
case 47: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_GreaterEqual, expression(1), expression(3));
} break;
-#line 994 "./glsl.g"
+#line 996 "./glsl.g"
case 48: {
// nothing to do.
} break;
-#line 1001 "./glsl.g"
+#line 1003 "./glsl.g"
case 49: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Equal, expression(1), expression(3));
} break;
-#line 1008 "./glsl.g"
+#line 1010 "./glsl.g"
case 50: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_NotEqual, expression(1), expression(3));
} break;
-#line 1015 "./glsl.g"
+#line 1017 "./glsl.g"
case 51: {
// nothing to do.
} break;
-#line 1022 "./glsl.g"
+#line 1024 "./glsl.g"
case 52: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_BitwiseAnd, expression(1), expression(3));
} break;
-#line 1029 "./glsl.g"
+#line 1031 "./glsl.g"
case 53: {
// nothing to do.
} break;
-#line 1036 "./glsl.g"
+#line 1038 "./glsl.g"
case 54: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_BitwiseXor, expression(1), expression(3));
} break;
-#line 1043 "./glsl.g"
+#line 1045 "./glsl.g"
case 55: {
// nothing to do.
} break;
-#line 1050 "./glsl.g"
+#line 1052 "./glsl.g"
case 56: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_BitwiseOr, expression(1), expression(3));
} break;
-#line 1057 "./glsl.g"
+#line 1059 "./glsl.g"
case 57: {
// nothing to do.
} break;
-#line 1064 "./glsl.g"
+#line 1066 "./glsl.g"
case 58: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LogicalAnd, expression(1), expression(3));
} break;
-#line 1071 "./glsl.g"
+#line 1073 "./glsl.g"
case 59: {
// nothing to do.
} break;
-#line 1078 "./glsl.g"
+#line 1080 "./glsl.g"
case 60: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LogicalXor, expression(1), expression(3));
} break;
-#line 1085 "./glsl.g"
+#line 1087 "./glsl.g"
case 61: {
// nothing to do.
} break;
-#line 1092 "./glsl.g"
+#line 1094 "./glsl.g"
case 62: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LogicalOr, expression(1), expression(3));
} break;
-#line 1099 "./glsl.g"
+#line 1101 "./glsl.g"
case 63: {
// nothing to do.
} break;
-#line 1106 "./glsl.g"
+#line 1108 "./glsl.g"
case 64: {
ast(1) = makeAstNode<TernaryExpressionAST>(AST::Kind_Conditional, expression(1), expression(3), expression(5));
} break;
-#line 1113 "./glsl.g"
+#line 1115 "./glsl.g"
case 65: {
// nothing to do.
} break;
-#line 1120 "./glsl.g"
+#line 1122 "./glsl.g"
case 66: {
ast(1) = makeAstNode<AssignmentExpressionAST>(sym(2).kind, expression(1), expression(3));
} break;
-#line 1127 "./glsl.g"
+#line 1129 "./glsl.g"
case 67: {
sym(1).kind = AST::Kind_Assign;
} break;
-#line 1134 "./glsl.g"
+#line 1136 "./glsl.g"
case 68: {
sym(1).kind = AST::Kind_AssignMultiply;
} break;
-#line 1141 "./glsl.g"
+#line 1143 "./glsl.g"
case 69: {
sym(1).kind = AST::Kind_AssignDivide;
} break;
-#line 1148 "./glsl.g"
+#line 1150 "./glsl.g"
case 70: {
sym(1).kind = AST::Kind_AssignModulus;
} break;
-#line 1155 "./glsl.g"
+#line 1157 "./glsl.g"
case 71: {
sym(1).kind = AST::Kind_AssignPlus;
} break;
-#line 1162 "./glsl.g"
+#line 1164 "./glsl.g"
case 72: {
sym(1).kind = AST::Kind_AssignMinus;
} break;
-#line 1169 "./glsl.g"
+#line 1171 "./glsl.g"
case 73: {
sym(1).kind = AST::Kind_AssignShiftLeft;
} break;
-#line 1176 "./glsl.g"
+#line 1178 "./glsl.g"
case 74: {
sym(1).kind = AST::Kind_AssignShiftRight;
} break;
-#line 1183 "./glsl.g"
+#line 1185 "./glsl.g"
case 75: {
sym(1).kind = AST::Kind_AssignAnd;
} break;
-#line 1190 "./glsl.g"
+#line 1192 "./glsl.g"
case 76: {
sym(1).kind = AST::Kind_AssignXor;
} break;
-#line 1197 "./glsl.g"
+#line 1199 "./glsl.g"
case 77: {
sym(1).kind = AST::Kind_AssignOr;
} break;
-#line 1204 "./glsl.g"
+#line 1206 "./glsl.g"
case 78: {
// nothing to do.
} break;
-#line 1211 "./glsl.g"
+#line 1213 "./glsl.g"
case 79: {
ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Comma, expression(1), expression(3));
} break;
-#line 1218 "./glsl.g"
+#line 1220 "./glsl.g"
case 80: {
// nothing to do.
} break;
-#line 1225 "./glsl.g"
+#line 1227 "./glsl.g"
case 81: {
// nothing to do.
} break;
-#line 1232 "./glsl.g"
+#line 1234 "./glsl.g"
case 82: {
ast(1) = makeAstNode<InitDeclarationAST>(sym(1).declaration_list);
} break;
-#line 1239 "./glsl.g"
+#line 1241 "./glsl.g"
case 83: {
ast(1) = makeAstNode<PrecisionDeclarationAST>(sym(2).precision, type(3));
} break;
-#line 1246 "./glsl.g"
+#line 1248 "./glsl.g"
case 84: {
if (sym(1).type_qualifier.qualifier != QualifiedTypeAST::Struct) {
@@ -753,7 +755,7 @@ case 84: {
ast(1) = makeAstNode<TypeDeclarationAST>(type);
} break;
-#line 1257 "./glsl.g"
+#line 1259 "./glsl.g"
case 85: {
if ((sym(1).type_qualifier.qualifier & QualifiedTypeAST::Struct) == 0) {
@@ -771,7 +773,7 @@ case 85: {
makeAstNode<VariableDeclarationAST>(qualtype, string(6)));
} break;
-#line 1276 "./glsl.g"
+#line 1278 "./glsl.g"
case 86: {
if ((sym(1).type_qualifier.qualifier & QualifiedTypeAST::Struct) == 0) {
@@ -790,7 +792,7 @@ case 86: {
(makeAstNode<ArrayTypeAST>(qualtype), string(6)));
} break;
-#line 1296 "./glsl.g"
+#line 1298 "./glsl.g"
case 87: {
if ((sym(1).type_qualifier.qualifier & QualifiedTypeAST::Struct) == 0) {
@@ -809,7 +811,7 @@ case 87: {
(makeAstNode<ArrayTypeAST>(qualtype, expression(8)), string(6)));
} break;
-#line 1316 "./glsl.g"
+#line 1318 "./glsl.g"
case 88: {
TypeAST *type = makeAstNode<QualifiedTypeAST>
@@ -818,59 +820,59 @@ case 88: {
ast(1) = makeAstNode<TypeDeclarationAST>(type);
} break;
-#line 1326 "./glsl.g"
+#line 1328 "./glsl.g"
case 89: {
function(1)->finishParams();
} break;
-#line 1333 "./glsl.g"
+#line 1335 "./glsl.g"
case 90: {
// nothing to do.
} break;
-#line 1340 "./glsl.g"
+#line 1342 "./glsl.g"
case 91: {
// nothing to do.
} break;
-#line 1347 "./glsl.g"
+#line 1349 "./glsl.g"
case 92: {
function(1)->params = makeAstNode< List<ParameterDeclarationAST *> >
(sym(2).param_declaration);
} break;
-#line 1355 "./glsl.g"
+#line 1357 "./glsl.g"
case 93: {
function(1)->params = makeAstNode< List<ParameterDeclarationAST *> >
(function(1)->params, sym(3).param_declaration);
} break;
-#line 1363 "./glsl.g"
+#line 1365 "./glsl.g"
case 94: {
function(1) = makeAstNode<FunctionDeclarationAST>(type(1), string(2));
} break;
-#line 1370 "./glsl.g"
+#line 1372 "./glsl.g"
case 95: {
sym(1).param_declarator.type = type(1);
sym(1).param_declarator.name = string(2);
} break;
-#line 1378 "./glsl.g"
+#line 1380 "./glsl.g"
case 96: {
sym(1).param_declarator.type = makeAstNode<ArrayTypeAST>(type(1), expression(4));
sym(1).param_declarator.name = string(2);
} break;
-#line 1386 "./glsl.g"
+#line 1388 "./glsl.g"
case 97: {
ast(1) = makeAstNode<ParameterDeclarationAST>
@@ -881,7 +883,7 @@ case 97: {
sym(3).param_declarator.name);
} break;
-#line 1398 "./glsl.g"
+#line 1400 "./glsl.g"
case 98: {
ast(1) = makeAstNode<ParameterDeclarationAST>
@@ -890,7 +892,7 @@ case 98: {
sym(2).param_declarator.name);
} break;
-#line 1408 "./glsl.g"
+#line 1410 "./glsl.g"
case 99: {
ast(1) = makeAstNode<ParameterDeclarationAST>
@@ -900,7 +902,7 @@ case 99: {
(const QString *)0);
} break;
-#line 1419 "./glsl.g"
+#line 1421 "./glsl.g"
case 100: {
ast(1) = makeAstNode<ParameterDeclarationAST>
@@ -908,44 +910,44 @@ case 100: {
(const QString *)0);
} break;
-#line 1428 "./glsl.g"
+#line 1430 "./glsl.g"
case 101: {
sym(1).qualifier = ParameterDeclarationAST::In;
} break;
-#line 1435 "./glsl.g"
+#line 1437 "./glsl.g"
case 102: {
sym(1).qualifier = ParameterDeclarationAST::In;
} break;
-#line 1442 "./glsl.g"
+#line 1444 "./glsl.g"
case 103: {
sym(1).qualifier = ParameterDeclarationAST::Out;
} break;
-#line 1449 "./glsl.g"
+#line 1451 "./glsl.g"
case 104: {
sym(1).qualifier = ParameterDeclarationAST::InOut;
} break;
-#line 1456 "./glsl.g"
+#line 1458 "./glsl.g"
case 105: {
// nothing to do.
} break;
-#line 1463 "./glsl.g"
+#line 1465 "./glsl.g"
case 106: {
sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
(sym(1).declaration);
} break;
-#line 1471 "./glsl.g"
+#line 1473 "./glsl.g"
case 107: {
TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
@@ -954,7 +956,7 @@ case 107: {
(sym(1).declaration_list, decl);
} break;
-#line 1481 "./glsl.g"
+#line 1483 "./glsl.g"
case 108: {
TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
@@ -964,7 +966,7 @@ case 108: {
(sym(1).declaration_list, decl);
} break;
-#line 1492 "./glsl.g"
+#line 1494 "./glsl.g"
case 109: {
TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
@@ -974,7 +976,7 @@ case 109: {
(sym(1).declaration_list, decl);
} break;
-#line 1503 "./glsl.g"
+#line 1505 "./glsl.g"
case 110: {
TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
@@ -985,7 +987,7 @@ case 110: {
(sym(1).declaration_list, decl);
} break;
-#line 1515 "./glsl.g"
+#line 1517 "./glsl.g"
case 111: {
TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
@@ -996,7 +998,7 @@ case 111: {
(sym(1).declaration_list, decl);
} break;
-#line 1527 "./glsl.g"
+#line 1529 "./glsl.g"
case 112: {
TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
@@ -1006,40 +1008,40 @@ case 112: {
(sym(1).declaration_list, decl);
} break;
-#line 1538 "./glsl.g"
+#line 1540 "./glsl.g"
case 113: {
ast(1) = makeAstNode<TypeDeclarationAST>(type(1));
} break;
-#line 1545 "./glsl.g"
+#line 1547 "./glsl.g"
case 114: {
ast(1) = makeAstNode<VariableDeclarationAST>(type(1), string(2));
} break;
-#line 1552 "./glsl.g"
+#line 1554 "./glsl.g"
case 115: {
ast(1) = makeAstNode<VariableDeclarationAST>
(makeAstNode<ArrayTypeAST>(type(1)), string(2));
} break;
-#line 1560 "./glsl.g"
+#line 1562 "./glsl.g"
case 116: {
ast(1) = makeAstNode<VariableDeclarationAST>
(makeAstNode<ArrayTypeAST>(type(1), expression(4)), string(2));
} break;
-#line 1568 "./glsl.g"
+#line 1570 "./glsl.g"
case 117: {
ast(1) = makeAstNode<VariableDeclarationAST>
(makeAstNode<ArrayTypeAST>(type(1)), string(2), expression(6));
} break;
-#line 1576 "./glsl.g"
+#line 1578 "./glsl.g"
case 118: {
ast(1) = makeAstNode<VariableDeclarationAST>
@@ -1047,26 +1049,26 @@ case 118: {
string(2), expression(7));
} break;
-#line 1585 "./glsl.g"
+#line 1587 "./glsl.g"
case 119: {
ast(1) = makeAstNode<VariableDeclarationAST>
(type(1), string(2), expression(4));
} break;
-#line 1593 "./glsl.g"
+#line 1595 "./glsl.g"
case 120: {
ast(1) = makeAstNode<InvariantDeclarationAST>(string(2));
} break;
-#line 1600 "./glsl.g"
+#line 1602 "./glsl.g"
case 121: {
ast(1) = makeAstNode<QualifiedTypeAST>(0, type(1), (List<LayoutQualifierAST *> *)0);
} break;
-#line 1607 "./glsl.g"
+#line 1609 "./glsl.g"
case 122: {
ast(1) = makeAstNode<QualifiedTypeAST>
@@ -1074,207 +1076,207 @@ case 122: {
sym(1).type_qualifier.layout_list);
} break;
-#line 1616 "./glsl.g"
+#line 1618 "./glsl.g"
case 123: {
sym(1).qualifier = QualifiedTypeAST::Invariant;
} break;
-#line 1623 "./glsl.g"
+#line 1625 "./glsl.g"
case 124: {
sym(1).qualifier = QualifiedTypeAST::Smooth;
} break;
-#line 1630 "./glsl.g"
+#line 1632 "./glsl.g"
case 125: {
sym(1).qualifier = QualifiedTypeAST::Flat;
} break;
-#line 1637 "./glsl.g"
+#line 1639 "./glsl.g"
case 126: {
sym(1).qualifier = QualifiedTypeAST::NoPerspective;
} break;
-#line 1644 "./glsl.g"
+#line 1646 "./glsl.g"
case 127: {
sym(1) = sym(3);
} break;
-#line 1651 "./glsl.g"
+#line 1653 "./glsl.g"
case 128: {
sym(1).layout_list = makeAstNode< List<LayoutQualifierAST *> >(sym(1).layout);
} break;
-#line 1658 "./glsl.g"
+#line 1660 "./glsl.g"
case 129: {
sym(1).layout_list = makeAstNode< List<LayoutQualifierAST *> >(sym(1).layout_list, sym(3).layout);
} break;
-#line 1665 "./glsl.g"
+#line 1667 "./glsl.g"
case 130: {
sym(1).layout = makeAstNode<LayoutQualifierAST>(string(1), (const QString *)0);
} break;
-#line 1672 "./glsl.g"
+#line 1674 "./glsl.g"
case 131: {
sym(1).layout = makeAstNode<LayoutQualifierAST>(string(1), string(3));
} break;
-#line 1679 "./glsl.g"
+#line 1681 "./glsl.g"
case 132: {
sym(1).qualifier = QualifiedTypeAST::Const;
} break;
-#line 1686 "./glsl.g"
+#line 1688 "./glsl.g"
case 133: {
sym(1).type_qualifier.qualifier = sym(1).qualifier;
sym(1).type_qualifier.layout_list = 0;
} break;
-#line 1694 "./glsl.g"
+#line 1696 "./glsl.g"
case 134: {
sym(1).type_qualifier.layout_list = sym(1).layout_list;
sym(1).type_qualifier.qualifier = 0;
} break;
-#line 1702 "./glsl.g"
+#line 1704 "./glsl.g"
case 135: {
sym(1).type_qualifier.layout_list = sym(1).layout_list;
sym(1).type_qualifier.qualifier = sym(2).qualifier;
} break;
-#line 1710 "./glsl.g"
+#line 1712 "./glsl.g"
case 136: {
sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier;
sym(1).type_qualifier.layout_list = 0;
} break;
-#line 1718 "./glsl.g"
+#line 1720 "./glsl.g"
case 137: {
sym(1).type_qualifier.qualifier = sym(1).qualifier;
sym(1).type_qualifier.layout_list = 0;
} break;
-#line 1726 "./glsl.g"
+#line 1728 "./glsl.g"
case 138: {
sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier;
sym(1).type_qualifier.layout_list = 0;
} break;
-#line 1734 "./glsl.g"
+#line 1736 "./glsl.g"
case 139: {
sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier | sym(3).qualifier;
sym(1).type_qualifier.layout_list = 0;
} break;
-#line 1742 "./glsl.g"
+#line 1744 "./glsl.g"
case 140: {
sym(1).type_qualifier.qualifier = QualifiedTypeAST::Invariant;
sym(1).type_qualifier.layout_list = 0;
} break;
-#line 1750 "./glsl.g"
+#line 1752 "./glsl.g"
case 141: {
sym(1).qualifier = QualifiedTypeAST::Const;
} break;
-#line 1757 "./glsl.g"
+#line 1759 "./glsl.g"
case 142: {
sym(1).qualifier = QualifiedTypeAST::Attribute;
} break;
-#line 1764 "./glsl.g"
+#line 1766 "./glsl.g"
case 143: {
sym(1).qualifier = QualifiedTypeAST::Varying;
} break;
-#line 1771 "./glsl.g"
+#line 1773 "./glsl.g"
case 144: {
sym(1).qualifier = QualifiedTypeAST::CentroidVarying;
} break;
-#line 1778 "./glsl.g"
+#line 1780 "./glsl.g"
case 145: {
sym(1).qualifier = QualifiedTypeAST::In;
} break;
-#line 1785 "./glsl.g"
+#line 1787 "./glsl.g"
case 146: {
sym(1).qualifier = QualifiedTypeAST::Out;
} break;
-#line 1792 "./glsl.g"
+#line 1794 "./glsl.g"
case 147: {
sym(1).qualifier = QualifiedTypeAST::CentroidIn;
} break;
-#line 1799 "./glsl.g"
+#line 1801 "./glsl.g"
case 148: {
sym(1).qualifier = QualifiedTypeAST::CentroidOut;
} break;
-#line 1806 "./glsl.g"
+#line 1808 "./glsl.g"
case 149: {
sym(1).qualifier = QualifiedTypeAST::PatchIn;
} break;
-#line 1813 "./glsl.g"
+#line 1815 "./glsl.g"
case 150: {
sym(1).qualifier = QualifiedTypeAST::PatchOut;
} break;
-#line 1820 "./glsl.g"
+#line 1822 "./glsl.g"
case 151: {
sym(1).qualifier = QualifiedTypeAST::SampleIn;
} break;
-#line 1827 "./glsl.g"
+#line 1829 "./glsl.g"
case 152: {
sym(1).qualifier = QualifiedTypeAST::SampleOut;
} break;
-#line 1834 "./glsl.g"
+#line 1836 "./glsl.g"
case 153: {
sym(1).qualifier = QualifiedTypeAST::Uniform;
} break;
-#line 1841 "./glsl.g"
+#line 1843 "./glsl.g"
case 154: {
// nothing to do.
} break;
-#line 1848 "./glsl.g"
+#line 1850 "./glsl.g"
case 155: {
if (!type(2)->setPrecision(sym(1).precision)) {
@@ -1283,595 +1285,595 @@ case 155: {
ast(1) = type(2);
} break;
-#line 1858 "./glsl.g"
+#line 1860 "./glsl.g"
case 156: {
// nothing to do.
} break;
-#line 1865 "./glsl.g"
+#line 1867 "./glsl.g"
case 157: {
ast(1) = makeAstNode<ArrayTypeAST>(type(1));
} break;
-#line 1872 "./glsl.g"
+#line 1874 "./glsl.g"
case 158: {
ast(1) = makeAstNode<ArrayTypeAST>(type(1), expression(3));
} break;
-#line 1879 "./glsl.g"
+#line 1881 "./glsl.g"
case 159: {
ast(1) = makeBasicType(T_VOID);
} break;
-#line 1886 "./glsl.g"
+#line 1888 "./glsl.g"
case 160: {
ast(1) = makeBasicType(T_FLOAT);
} break;
-#line 1893 "./glsl.g"
+#line 1895 "./glsl.g"
case 161: {
ast(1) = makeBasicType(T_DOUBLE);
} break;
-#line 1900 "./glsl.g"
+#line 1902 "./glsl.g"
case 162: {
ast(1) = makeBasicType(T_INT);
} break;
-#line 1907 "./glsl.g"
+#line 1909 "./glsl.g"
case 163: {
ast(1) = makeBasicType(T_UINT);
} break;
-#line 1914 "./glsl.g"
+#line 1916 "./glsl.g"
case 164: {
ast(1) = makeBasicType(T_BOOL);
} break;
-#line 1921 "./glsl.g"
+#line 1923 "./glsl.g"
case 165: {
ast(1) = makeBasicType(T_VEC2);
} break;
-#line 1928 "./glsl.g"
+#line 1930 "./glsl.g"
case 166: {
ast(1) = makeBasicType(T_VEC3);
} break;
-#line 1935 "./glsl.g"
+#line 1937 "./glsl.g"
case 167: {
ast(1) = makeBasicType(T_VEC4);
} break;
-#line 1942 "./glsl.g"
+#line 1944 "./glsl.g"
case 168: {
ast(1) = makeBasicType(T_DVEC2);
} break;
-#line 1949 "./glsl.g"
+#line 1951 "./glsl.g"
case 169: {
ast(1) = makeBasicType(T_DVEC3);
} break;
-#line 1956 "./glsl.g"
+#line 1958 "./glsl.g"
case 170: {
ast(1) = makeBasicType(T_DVEC4);
} break;
-#line 1963 "./glsl.g"
+#line 1965 "./glsl.g"
case 171: {
ast(1) = makeBasicType(T_BVEC2);
} break;
-#line 1970 "./glsl.g"
+#line 1972 "./glsl.g"
case 172: {
ast(1) = makeBasicType(T_BVEC3);
} break;
-#line 1977 "./glsl.g"
+#line 1979 "./glsl.g"
case 173: {
ast(1) = makeBasicType(T_BVEC4);
} break;
-#line 1984 "./glsl.g"
+#line 1986 "./glsl.g"
case 174: {
ast(1) = makeBasicType(T_IVEC2);
} break;
-#line 1991 "./glsl.g"
+#line 1993 "./glsl.g"
case 175: {
ast(1) = makeBasicType(T_IVEC3);
} break;
-#line 1998 "./glsl.g"
+#line 2000 "./glsl.g"
case 176: {
ast(1) = makeBasicType(T_IVEC4);
} break;
-#line 2005 "./glsl.g"
+#line 2007 "./glsl.g"
case 177: {
ast(1) = makeBasicType(T_UVEC2);
} break;
-#line 2012 "./glsl.g"
+#line 2014 "./glsl.g"
case 178: {
ast(1) = makeBasicType(T_UVEC3);
} break;
-#line 2019 "./glsl.g"
+#line 2021 "./glsl.g"
case 179: {
ast(1) = makeBasicType(T_UVEC4);
} break;
-#line 2026 "./glsl.g"
+#line 2028 "./glsl.g"
case 180: {
ast(1) = makeBasicType(T_MAT2);
} break;
-#line 2033 "./glsl.g"
+#line 2035 "./glsl.g"
case 181: {
ast(1) = makeBasicType(T_MAT3);
} break;
-#line 2040 "./glsl.g"
+#line 2042 "./glsl.g"
case 182: {
ast(1) = makeBasicType(T_MAT4);
} break;
-#line 2047 "./glsl.g"
+#line 2049 "./glsl.g"
case 183: {
ast(1) = makeBasicType(T_MAT2);
} break;
-#line 2054 "./glsl.g"
+#line 2056 "./glsl.g"
case 184: {
ast(1) = makeBasicType(T_MAT2X3);
} break;
-#line 2061 "./glsl.g"
+#line 2063 "./glsl.g"
case 185: {
ast(1) = makeBasicType(T_MAT2X4);
} break;
-#line 2068 "./glsl.g"
+#line 2070 "./glsl.g"
case 186: {
ast(1) = makeBasicType(T_MAT3X2);
} break;
-#line 2075 "./glsl.g"
+#line 2077 "./glsl.g"
case 187: {
ast(1) = makeBasicType(T_MAT3);
} break;
-#line 2082 "./glsl.g"
+#line 2084 "./glsl.g"
case 188: {
ast(1) = makeBasicType(T_MAT3X4);
} break;
-#line 2089 "./glsl.g"
+#line 2091 "./glsl.g"
case 189: {
ast(1) = makeBasicType(T_MAT4X2);
} break;
-#line 2096 "./glsl.g"
+#line 2098 "./glsl.g"
case 190: {
ast(1) = makeBasicType(T_MAT4X3);
} break;
-#line 2103 "./glsl.g"
+#line 2105 "./glsl.g"
case 191: {
ast(1) = makeBasicType(T_MAT4);
} break;
-#line 2110 "./glsl.g"
+#line 2112 "./glsl.g"
case 192: {
ast(1) = makeBasicType(T_DMAT2);
} break;
-#line 2117 "./glsl.g"
+#line 2119 "./glsl.g"
case 193: {
ast(1) = makeBasicType(T_DMAT3);
} break;
-#line 2124 "./glsl.g"
+#line 2126 "./glsl.g"
case 194: {
ast(1) = makeBasicType(T_DMAT4);
} break;
-#line 2131 "./glsl.g"
+#line 2133 "./glsl.g"
case 195: {
ast(1) = makeBasicType(T_DMAT2);
} break;
-#line 2138 "./glsl.g"
+#line 2140 "./glsl.g"
case 196: {
ast(1) = makeBasicType(T_DMAT2X3);
} break;
-#line 2145 "./glsl.g"
+#line 2147 "./glsl.g"
case 197: {
ast(1) = makeBasicType(T_DMAT2X4);
} break;
-#line 2152 "./glsl.g"
+#line 2154 "./glsl.g"
case 198: {
ast(1) = makeBasicType(T_DMAT3X2);
} break;
-#line 2159 "./glsl.g"
+#line 2161 "./glsl.g"
case 199: {
ast(1) = makeBasicType(T_DMAT3);
} break;
-#line 2166 "./glsl.g"
+#line 2168 "./glsl.g"
case 200: {
ast(1) = makeBasicType(T_DMAT3X4);
} break;
-#line 2173 "./glsl.g"
+#line 2175 "./glsl.g"
case 201: {
ast(1) = makeBasicType(T_DMAT4X2);
} break;
-#line 2180 "./glsl.g"
+#line 2182 "./glsl.g"
case 202: {
ast(1) = makeBasicType(T_DMAT4X3);
} break;
-#line 2187 "./glsl.g"
+#line 2189 "./glsl.g"
case 203: {
ast(1) = makeBasicType(T_DMAT4);
} break;
-#line 2194 "./glsl.g"
+#line 2196 "./glsl.g"
case 204: {
ast(1) = makeBasicType(T_SAMPLER1D);
} break;
-#line 2201 "./glsl.g"
+#line 2203 "./glsl.g"
case 205: {
ast(1) = makeBasicType(T_SAMPLER2D);
} break;
-#line 2208 "./glsl.g"
+#line 2210 "./glsl.g"
case 206: {
ast(1) = makeBasicType(T_SAMPLER3D);
} break;
-#line 2215 "./glsl.g"
+#line 2217 "./glsl.g"
case 207: {
ast(1) = makeBasicType(T_SAMPLERCUBE);
} break;
-#line 2222 "./glsl.g"
+#line 2224 "./glsl.g"
case 208: {
ast(1) = makeBasicType(T_SAMPLER1DSHADOW);
} break;
-#line 2229 "./glsl.g"
+#line 2231 "./glsl.g"
case 209: {
ast(1) = makeBasicType(T_SAMPLER2DSHADOW);
} break;
-#line 2236 "./glsl.g"
+#line 2238 "./glsl.g"
case 210: {
ast(1) = makeBasicType(T_SAMPLERCUBESHADOW);
} break;
-#line 2243 "./glsl.g"
+#line 2245 "./glsl.g"
case 211: {
ast(1) = makeBasicType(T_SAMPLER1DARRAY);
} break;
-#line 2250 "./glsl.g"
+#line 2252 "./glsl.g"
case 212: {
ast(1) = makeBasicType(T_SAMPLER2DARRAY);
} break;
-#line 2257 "./glsl.g"
+#line 2259 "./glsl.g"
case 213: {
ast(1) = makeBasicType(T_SAMPLER1DARRAYSHADOW);
} break;
-#line 2264 "./glsl.g"
+#line 2266 "./glsl.g"
case 214: {
ast(1) = makeBasicType(T_SAMPLER2DARRAYSHADOW);
} break;
-#line 2271 "./glsl.g"
+#line 2273 "./glsl.g"
case 215: {
ast(1) = makeBasicType(T_SAMPLERCUBEARRAY);
} break;
-#line 2278 "./glsl.g"
+#line 2280 "./glsl.g"
case 216: {
ast(1) = makeBasicType(T_SAMPLERCUBEARRAYSHADOW);
} break;
-#line 2285 "./glsl.g"
+#line 2287 "./glsl.g"
case 217: {
ast(1) = makeBasicType(T_ISAMPLER1D);
} break;
-#line 2292 "./glsl.g"
+#line 2294 "./glsl.g"
case 218: {
ast(1) = makeBasicType(T_ISAMPLER2D);
} break;
-#line 2299 "./glsl.g"
+#line 2301 "./glsl.g"
case 219: {
ast(1) = makeBasicType(T_ISAMPLER3D);
} break;
-#line 2306 "./glsl.g"
+#line 2308 "./glsl.g"
case 220: {
ast(1) = makeBasicType(T_ISAMPLERCUBE);
} break;
-#line 2313 "./glsl.g"
+#line 2315 "./glsl.g"
case 221: {
ast(1) = makeBasicType(T_ISAMPLER1DARRAY);
} break;
-#line 2320 "./glsl.g"
+#line 2322 "./glsl.g"
case 222: {
ast(1) = makeBasicType(T_ISAMPLER2DARRAY);
} break;
-#line 2327 "./glsl.g"
+#line 2329 "./glsl.g"
case 223: {
ast(1) = makeBasicType(T_ISAMPLERCUBEARRAY);
} break;
-#line 2334 "./glsl.g"
+#line 2336 "./glsl.g"
case 224: {
ast(1) = makeBasicType(T_USAMPLER1D);
} break;
-#line 2341 "./glsl.g"
+#line 2343 "./glsl.g"
case 225: {
ast(1) = makeBasicType(T_USAMPLER2D);
} break;
-#line 2348 "./glsl.g"
+#line 2350 "./glsl.g"
case 226: {
ast(1) = makeBasicType(T_USAMPLER3D);
} break;
-#line 2355 "./glsl.g"
+#line 2357 "./glsl.g"
case 227: {
ast(1) = makeBasicType(T_USAMPLERCUBE);
} break;
-#line 2362 "./glsl.g"
+#line 2364 "./glsl.g"
case 228: {
ast(1) = makeBasicType(T_USAMPLER1DARRAY);
} break;
-#line 2369 "./glsl.g"
+#line 2371 "./glsl.g"
case 229: {
ast(1) = makeBasicType(T_USAMPLER2DARRAY);
} break;
-#line 2376 "./glsl.g"
+#line 2378 "./glsl.g"
case 230: {
ast(1) = makeBasicType(T_USAMPLERCUBEARRAY);
} break;
-#line 2383 "./glsl.g"
+#line 2385 "./glsl.g"
case 231: {
ast(1) = makeBasicType(T_SAMPLER2DRECT);
} break;
-#line 2390 "./glsl.g"
+#line 2392 "./glsl.g"
case 232: {
ast(1) = makeBasicType(T_SAMPLER2DRECTSHADOW);
} break;
-#line 2397 "./glsl.g"
+#line 2399 "./glsl.g"
case 233: {
ast(1) = makeBasicType(T_ISAMPLER2DRECT);
} break;
-#line 2404 "./glsl.g"
+#line 2406 "./glsl.g"
case 234: {
ast(1) = makeBasicType(T_USAMPLER2DRECT);
} break;
-#line 2411 "./glsl.g"
+#line 2413 "./glsl.g"
case 235: {
ast(1) = makeBasicType(T_SAMPLERBUFFER);
} break;
-#line 2418 "./glsl.g"
+#line 2420 "./glsl.g"
case 236: {
ast(1) = makeBasicType(T_ISAMPLERBUFFER);
} break;
-#line 2425 "./glsl.g"
+#line 2427 "./glsl.g"
case 237: {
ast(1) = makeBasicType(T_USAMPLERBUFFER);
} break;
-#line 2432 "./glsl.g"
+#line 2434 "./glsl.g"
case 238: {
ast(1) = makeBasicType(T_SAMPLER2DMS);
} break;
-#line 2439 "./glsl.g"
+#line 2441 "./glsl.g"
case 239: {
ast(1) = makeBasicType(T_ISAMPLER2DMS);
} break;
-#line 2446 "./glsl.g"
+#line 2448 "./glsl.g"
case 240: {
ast(1) = makeBasicType(T_USAMPLER2DMS);
} break;
-#line 2453 "./glsl.g"
+#line 2455 "./glsl.g"
case 241: {
ast(1) = makeBasicType(T_SAMPLER2DMSARRAY);
} break;
-#line 2460 "./glsl.g"
+#line 2462 "./glsl.g"
case 242: {
ast(1) = makeBasicType(T_ISAMPLER2DMSARRAY);
} break;
-#line 2467 "./glsl.g"
+#line 2469 "./glsl.g"
case 243: {
ast(1) = makeBasicType(T_USAMPLER2DMSARRAY);
} break;
-#line 2474 "./glsl.g"
+#line 2476 "./glsl.g"
case 244: {
// nothing to do.
} break;
-#line 2481 "./glsl.g"
+#line 2483 "./glsl.g"
case 245: {
ast(1) = makeAstNode<NamedTypeAST>(string(1));
} break;
-#line 2488 "./glsl.g"
+#line 2490 "./glsl.g"
case 246: {
sym(1).precision = TypeAST::Highp;
} break;
-#line 2495 "./glsl.g"
+#line 2497 "./glsl.g"
case 247: {
sym(1).precision = TypeAST::Mediump;
} break;
-#line 2502 "./glsl.g"
+#line 2504 "./glsl.g"
case 248: {
sym(1).precision = TypeAST::Lowp;
} break;
-#line 2509 "./glsl.g"
+#line 2511 "./glsl.g"
case 249: {
ast(1) = makeAstNode<StructTypeAST>(string(2), sym(4).field_list);
} break;
-#line 2516 "./glsl.g"
+#line 2518 "./glsl.g"
case 250: {
ast(1) = makeAstNode<StructTypeAST>(sym(3).field_list);
} break;
-#line 2523 "./glsl.g"
+#line 2525 "./glsl.g"
case 251: {
// nothing to do.
} break;
-#line 2530 "./glsl.g"
+#line 2532 "./glsl.g"
case 252: {
sym(1).field_list = appendLists(sym(1).field_list, sym(2).field_list);
} break;
-#line 2537 "./glsl.g"
+#line 2539 "./glsl.g"
case 253: {
sym(1).field_list = StructTypeAST::fixInnerTypes(type(1), sym(2).field_list);
} break;
-#line 2544 "./glsl.g"
+#line 2546 "./glsl.g"
case 254: {
sym(1).field_list = StructTypeAST::fixInnerTypes
@@ -1880,106 +1882,106 @@ case 254: {
sym(1).type_qualifier.layout_list), sym(3).field_list);
} break;
-#line 2554 "./glsl.g"
+#line 2556 "./glsl.g"
case 255: {
// nothing to do.
sym(1).field_list = makeAstNode< List<StructTypeAST::Field *> >(sym(1).field);
} break;
-#line 2562 "./glsl.g"
+#line 2564 "./glsl.g"
case 256: {
sym(1).field_list = makeAstNode< List<StructTypeAST::Field *> >(sym(1).field_list, sym(3).field);
} break;
-#line 2569 "./glsl.g"
+#line 2571 "./glsl.g"
case 257: {
sym(1).field = makeAstNode<StructTypeAST::Field>(string(1));
} break;
-#line 2576 "./glsl.g"
+#line 2578 "./glsl.g"
case 258: {
sym(1).field = makeAstNode<StructTypeAST::Field>
(string(1), makeAstNode<ArrayTypeAST>((TypeAST *)0));
} break;
-#line 2584 "./glsl.g"
+#line 2586 "./glsl.g"
case 259: {
sym(1).field = makeAstNode<StructTypeAST::Field>
(string(1), makeAstNode<ArrayTypeAST>((TypeAST *)0, expression(3)));
} break;
-#line 2592 "./glsl.g"
+#line 2594 "./glsl.g"
case 260: {
// nothing to do.
} break;
-#line 2599 "./glsl.g"
+#line 2601 "./glsl.g"
case 261: {
ast(1) = makeAstNode<DeclarationStatementAST>(sym(1).declaration);
} break;
-#line 2606 "./glsl.g"
+#line 2608 "./glsl.g"
case 262: {
// nothing to do.
} break;
-#line 2613 "./glsl.g"
+#line 2615 "./glsl.g"
case 263: {
// nothing to do.
} break;
-#line 2620 "./glsl.g"
+#line 2622 "./glsl.g"
case 264: {
// nothing to do.
} break;
-#line 2627 "./glsl.g"
+#line 2629 "./glsl.g"
case 265: {
// nothing to do.
} break;
-#line 2634 "./glsl.g"
+#line 2636 "./glsl.g"
case 266: {
// nothing to do.
} break;
-#line 2641 "./glsl.g"
+#line 2643 "./glsl.g"
case 267: {
// nothing to do.
} break;
-#line 2648 "./glsl.g"
+#line 2650 "./glsl.g"
case 268: {
// nothing to do.
} break;
-#line 2655 "./glsl.g"
+#line 2657 "./glsl.g"
case 269: {
// nothing to do.
} break;
-#line 2662 "./glsl.g"
+#line 2664 "./glsl.g"
case 270: {
// nothing to do.
} break;
-#line 2669 "./glsl.g"
+#line 2671 "./glsl.g"
case 271: {
CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>();
@@ -1988,7 +1990,7 @@ case 271: {
ast(1) = stmt;
} break;
-#line 2679 "./glsl.g"
+#line 2681 "./glsl.g"
case 272: {
CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>(sym(2).statement_list);
@@ -1997,19 +1999,19 @@ case 272: {
ast(1) = stmt;
} break;
-#line 2689 "./glsl.g"
+#line 2691 "./glsl.g"
case 273: {
// nothing to do.
} break;
-#line 2696 "./glsl.g"
+#line 2698 "./glsl.g"
case 274: {
// nothing to do.
} break;
-#line 2703 "./glsl.g"
+#line 2705 "./glsl.g"
case 275: {
CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>();
@@ -2018,7 +2020,7 @@ case 275: {
ast(1) = stmt;
} break;
-#line 2713 "./glsl.g"
+#line 2715 "./glsl.g"
case 276: {
CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>(sym(2).statement_list);
@@ -2027,186 +2029,186 @@ case 276: {
ast(1) = stmt;
} break;
-#line 2723 "./glsl.g"
+#line 2725 "./glsl.g"
case 277: {
sym(1).statement_list = makeAstNode< List<StatementAST *> >(sym(1).statement);
} break;
-#line 2730 "./glsl.g"
+#line 2732 "./glsl.g"
case 278: {
sym(1).statement_list = makeAstNode< List<StatementAST *> >(sym(1).statement_list, sym(2).statement);
} break;
-#line 2737 "./glsl.g"
+#line 2739 "./glsl.g"
case 279: {
ast(1) = makeAstNode<CompoundStatementAST>(); // Empty statement
} break;
-#line 2744 "./glsl.g"
+#line 2746 "./glsl.g"
case 280: {
ast(1) = makeAstNode<ExpressionStatementAST>(expression(1));
} break;
-#line 2751 "./glsl.g"
+#line 2753 "./glsl.g"
case 281: {
ast(1) = makeAstNode<IfStatementAST>(expression(3), sym(5).ifstmt.thenClause, sym(5).ifstmt.elseClause);
} break;
-#line 2758 "./glsl.g"
+#line 2760 "./glsl.g"
case 282: {
sym(1).ifstmt.thenClause = statement(1);
sym(1).ifstmt.elseClause = statement(3);
} break;
-#line 2766 "./glsl.g"
+#line 2768 "./glsl.g"
case 283: {
sym(1).ifstmt.thenClause = statement(1);
sym(1).ifstmt.elseClause = 0;
} break;
-#line 2774 "./glsl.g"
+#line 2776 "./glsl.g"
case 284: {
// nothing to do.
} break;
-#line 2781 "./glsl.g"
+#line 2783 "./glsl.g"
case 285: {
ast(1) = makeAstNode<DeclarationExpressionAST>
(type(1), string(2), expression(4));
} break;
-#line 2789 "./glsl.g"
+#line 2791 "./glsl.g"
case 286: {
ast(1) = makeAstNode<SwitchStatementAST>(expression(3), statement(6));
} break;
-#line 2796 "./glsl.g"
+#line 2798 "./glsl.g"
case 287: {
ast(1) = makeAstNode<CompoundStatementAST>();
} break;
-#line 2803 "./glsl.g"
+#line 2805 "./glsl.g"
case 288: {
ast(1) = makeAstNode<CompoundStatementAST>(sym(1).statement_list);
} break;
-#line 2810 "./glsl.g"
+#line 2812 "./glsl.g"
case 289: {
ast(1) = makeAstNode<CaseLabelStatementAST>(expression(2));
} break;
-#line 2817 "./glsl.g"
+#line 2819 "./glsl.g"
case 290: {
ast(1) = makeAstNode<CaseLabelStatementAST>();
} break;
-#line 2824 "./glsl.g"
+#line 2826 "./glsl.g"
case 291: {
ast(1) = makeAstNode<WhileStatementAST>(expression(3), statement(5));
} break;
-#line 2831 "./glsl.g"
+#line 2833 "./glsl.g"
case 292: {
ast(1) = makeAstNode<DoStatementAST>(statement(2), expression(5));
} break;
-#line 2838 "./glsl.g"
+#line 2840 "./glsl.g"
case 293: {
ast(1) = makeAstNode<ForStatementAST>(statement(3), sym(4).forstmt.condition, sym(4).forstmt.increment, statement(6));
} break;
-#line 2845 "./glsl.g"
+#line 2847 "./glsl.g"
case 294: {
// nothing to do.
} break;
-#line 2852 "./glsl.g"
+#line 2854 "./glsl.g"
case 295: {
// nothing to do.
} break;
-#line 2859 "./glsl.g"
+#line 2861 "./glsl.g"
case 296: {
// nothing to do.
} break;
-#line 2866 "./glsl.g"
+#line 2868 "./glsl.g"
case 297: {
// nothing to do.
} break;
-#line 2873 "./glsl.g"
+#line 2875 "./glsl.g"
case 298: {
sym(1).forstmt.condition = expression(1);
sym(1).forstmt.increment = 0;
} break;
-#line 2881 "./glsl.g"
+#line 2883 "./glsl.g"
case 299: {
sym(1).forstmt.condition = expression(1);
sym(1).forstmt.increment = expression(3);
} break;
-#line 2889 "./glsl.g"
+#line 2891 "./glsl.g"
case 300: {
ast(1) = makeAstNode<JumpStatementAST>(AST::Kind_Continue);
} break;
-#line 2896 "./glsl.g"
+#line 2898 "./glsl.g"
case 301: {
ast(1) = makeAstNode<JumpStatementAST>(AST::Kind_Break);
} break;
-#line 2903 "./glsl.g"
+#line 2905 "./glsl.g"
case 302: {
ast(1) = makeAstNode<ReturnStatementAST>();
} break;
-#line 2910 "./glsl.g"
+#line 2912 "./glsl.g"
case 303: {
ast(1) = makeAstNode<ReturnStatementAST>(expression(2));
} break;
-#line 2917 "./glsl.g"
+#line 2919 "./glsl.g"
case 304: {
ast(1) = makeAstNode<JumpStatementAST>(AST::Kind_Discard);
} break;
-#line 2924 "./glsl.g"
+#line 2926 "./glsl.g"
case 305: {
ast(1) = makeAstNode<TranslationUnitAST>(sym(1).declaration_list);
} break;
-#line 2931 "./glsl.g"
+#line 2933 "./glsl.g"
case 306: {
if (sym(1).declaration) {
@@ -2217,7 +2219,7 @@ case 306: {
}
} break;
-#line 2943 "./glsl.g"
+#line 2945 "./glsl.g"
case 307: {
if (sym(1).declaration_list && sym(2).declaration) {
@@ -2233,49 +2235,49 @@ case 307: {
}
} break;
-#line 2960 "./glsl.g"
+#line 2962 "./glsl.g"
case 308: {
// nothing to do.
} break;
-#line 2967 "./glsl.g"
+#line 2969 "./glsl.g"
case 309: {
// nothing to do.
} break;
-#line 2974 "./glsl.g"
+#line 2976 "./glsl.g"
case 310: {
ast(1) = 0;
} break;
-#line 2981 "./glsl.g"
+#line 2983 "./glsl.g"
case 311: {
function(1)->body = statement(2);
} break;
-#line 2988 "./glsl.g"
+#line 2990 "./glsl.g"
case 312: {
ast(1) = 0;
} break;
-#line 2996 "./glsl.g"
+#line 2998 "./glsl.g"
case 313: {
ast(1) = ast(2);
} break;
-#line 3003 "./glsl.g"
+#line 3005 "./glsl.g"
case 314: {
ast(1) = ast(2);
} break;
-#line 3009 "./glsl.g"
+#line 3011 "./glsl.g"
} // end switch
} // end Parser::reduce()
diff --git a/src/libs/glsl/glslparsertable.cpp b/src/libs/glsl/glslparsertable.cpp
index 67666dba7e..55c39d1f99 100644
--- a/src/libs/glsl/glslparsertable.cpp
+++ b/src/libs/glsl/glslparsertable.cpp
@@ -1,26 +1,31 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
+** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** $QT_END_LICENSE$
**
@@ -32,1266 +37,1258 @@
QT_BEGIN_NAMESPACE
const char *const GLSLParserTable::spell [] = {
- "end of file", "feed GLSL", "feed expression", "+=", "&", "&=", "&&", "attribute", "!", "bool",
- "break", "bvec2", "bvec3", "bvec4", "^", "case", "centroid", ":", ",", "const",
- "continue", "-", "--", "default", "discard", "/=", "dmat2", "dmat2x2", "dmat2x3", "dmat2x4",
- "dmat3", "dmat3x2", "dmat3x3", "dmat3x4", "dmat4", "dmat4x2", "dmat4x3", "dmat4x4", "do", ".",
- "double", "dvec2", "dvec3", "dvec4", "else", "=", "==", "flat", "float", "for",
- ">=", "highp", "identifier", "if", "in", "++", "inout", "int", "invariant", "isampler1D",
- "isampler1DArray", "isampler2D", "isampler2DArray", "isampler2DMS", "isampler2DMSArray", "isampler2DRect", "isampler3D", "isamplerBuffer", "isamplerCube", "isamplerCubeArray",
- "ivec2", "ivec3", "ivec4", "layout", "<", "<<=", "{", "[", "<<", "(",
- "<=", "lowp", "mat2", "mat2x2", "mat2x3", "mat2x4", "mat3", "mat3x2", "mat3x3", "mat3x4",
- "mat4", "mat4x2", "mat4x3", "mat4x4", "mediump", "%=", "*=", "!=", "noperspective", "number constant",
- "|=", "||", "out", "patch", "%", "plus", "precision", "?", "return", ">",
- ">>=", "}", "]", ">>", ")", "sample", "sampler1D", "sampler1DArray", "sampler1DArrayShadow", "sampler1DShadow",
- "sampler2D", "sampler2DArray", "sampler2DArrayShadow", "sampler2DMS", "sampler2DMSArray", "sampler2DRect", "sampler2DRectShadow", "sampler2DShadow", "sampler3D", "samplerBuffer",
- "samplerCube", "samplerCubeArray", "samplerCubeArrayShadow", "samplerCubeShadow", ";", "/", "smooth", "*", "struct", "subroutine",
- "-=", "switch", "~", "type_name", "uint", "uniform", "usampler1D", "usampler1DArray", "usampler2D", "usampler2DArray",
- "usampler2DMS", "usampler2DMSarray", "usampler2DRect", "usampler3D", "usamplerBuffer", "usamplerCube", "usamplerCubeArray", "uvec2", "uvec3", "uvec4",
- "varying", "vec2", "vec3", "vec4", "|", "void", "while", "^=", "^^", "true",
- "false", "preprocessor directive", "comment", "error", "reserved word"
-};
+ "end of file", "feed GLSL", "feed expression", "+=", "&", "&=", "&&", "attribute", "!", "bool",
+ "break", "bvec2", "bvec3", "bvec4", "^", "case", "centroid", ":", ",", "const",
+ "continue", "-", "--", "default", "discard", "/=", "dmat2", "dmat2x2", "dmat2x3", "dmat2x4",
+ "dmat3", "dmat3x2", "dmat3x3", "dmat3x4", "dmat4", "dmat4x2", "dmat4x3", "dmat4x4", "do", ".",
+ "double", "dvec2", "dvec3", "dvec4", "else", "=", "==", "flat", "float", "for",
+ ">=", "highp", "identifier", "if", "in", "++", "inout", "int", "invariant", "isampler1D",
+ "isampler1DArray", "isampler2D", "isampler2DArray", "isampler2DMS", "isampler2DMSArray", "isampler2DRect", "isampler3D", "isamplerBuffer", "isamplerCube", "isamplerCubeArray",
+ "ivec2", "ivec3", "ivec4", "layout", "<", "<<=", "{", "[", "<<", "(",
+ "<=", "lowp", "mat2", "mat2x2", "mat2x3", "mat2x4", "mat3", "mat3x2", "mat3x3", "mat3x4",
+ "mat4", "mat4x2", "mat4x3", "mat4x4", "mediump", "%=", "*=", "!=", "noperspective", "number constant",
+ "|=", "||", "out", "patch", "%", "plus", "precision", "?", "return", ">",
+ ">>=", "}", "]", ">>", ")", "sample", "sampler1D", "sampler1DArray", "sampler1DArrayShadow", "sampler1DShadow",
+ "sampler2D", "sampler2DArray", "sampler2DArrayShadow", "sampler2DMS", "sampler2DMSArray", "sampler2DRect", "sampler2DRectShadow", "sampler2DShadow", "sampler3D", "samplerBuffer",
+ "samplerCube", "samplerCubeArray", "samplerCubeArrayShadow", "samplerCubeShadow", ";", "/", "smooth", "*", "struct", "subroutine",
+ "-=", "switch", "~", "type_name", "uint", "uniform", "usampler1D", "usampler1DArray", "usampler2D", "usampler2DArray",
+ "usampler2DMS", "usampler2DMSarray", "usampler2DRect", "usampler3D", "usamplerBuffer", "usamplerCube", "usamplerCubeArray", "uvec2", "uvec3", "uvec4",
+ "varying", "vec2", "vec3", "vec4", "|", "void", "while", "^=", "^^", "true",
+ "false", "preprocessor directive", "comment", "error", "reserved word"};
const short GLSLParserTable::lhs [] = {
- 176, 177, 177, 177, 177, 177, 179, 179, 179, 179,
- 179, 179, 180, 181, 182, 182, 183, 183, 185, 185,
- 184, 184, 186, 188, 188, 190, 190, 190, 190, 191,
- 191, 191, 191, 192, 192, 192, 192, 193, 193, 193,
- 194, 194, 194, 195, 195, 195, 195, 195, 196, 196,
- 196, 197, 197, 198, 198, 199, 199, 200, 200, 201,
- 201, 202, 202, 203, 203, 187, 187, 204, 204, 204,
- 204, 204, 204, 204, 204, 204, 204, 204, 178, 178,
- 205, 206, 206, 206, 206, 206, 206, 206, 206, 207,
- 213, 213, 215, 215, 214, 218, 218, 216, 216, 216,
- 216, 220, 220, 220, 220, 221, 208, 208, 208, 208,
- 208, 208, 208, 223, 223, 223, 223, 223, 223, 223,
- 223, 217, 217, 225, 226, 226, 226, 227, 228, 228,
- 229, 229, 219, 211, 211, 211, 211, 211, 211, 211,
- 211, 230, 230, 230, 230, 230, 230, 230, 230, 230,
- 230, 230, 230, 230, 189, 189, 210, 210, 210, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 231, 231, 231, 231, 209, 209, 209, 232,
- 232, 212, 212, 233, 233, 234, 234, 235, 235, 235,
- 224, 236, 237, 237, 239, 239, 239, 239, 239, 239,
- 239, 238, 238, 247, 247, 248, 248, 246, 246, 240,
- 240, 241, 249, 249, 250, 250, 242, 251, 251, 243,
- 243, 244, 244, 244, 252, 252, 254, 254, 253, 253,
- 245, 245, 245, 245, 245, 255, 256, 256, 257, 257,
- 257, 258, 222, 175, 175, 259
-};
+ 176, 177, 177, 177, 177, 177, 179, 179, 179, 179,
+ 179, 179, 180, 181, 182, 182, 183, 183, 185, 185,
+ 184, 184, 186, 188, 188, 190, 190, 190, 190, 191,
+ 191, 191, 191, 192, 192, 192, 192, 193, 193, 193,
+ 194, 194, 194, 195, 195, 195, 195, 195, 196, 196,
+ 196, 197, 197, 198, 198, 199, 199, 200, 200, 201,
+ 201, 202, 202, 203, 203, 187, 187, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204, 178, 178,
+ 205, 206, 206, 206, 206, 206, 206, 206, 206, 207,
+ 213, 213, 215, 215, 214, 218, 218, 216, 216, 216,
+ 216, 220, 220, 220, 220, 221, 208, 208, 208, 208,
+ 208, 208, 208, 223, 223, 223, 223, 223, 223, 223,
+ 223, 217, 217, 225, 226, 226, 226, 227, 228, 228,
+ 229, 229, 219, 211, 211, 211, 211, 211, 211, 211,
+ 211, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+ 230, 230, 230, 230, 189, 189, 210, 210, 210, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
+ 231, 231, 231, 231, 231, 231, 209, 209, 209, 232,
+ 232, 212, 212, 233, 233, 234, 234, 235, 235, 235,
+ 224, 236, 237, 237, 239, 239, 239, 239, 239, 239,
+ 239, 238, 238, 247, 247, 248, 248, 246, 246, 240,
+ 240, 241, 249, 249, 250, 250, 242, 251, 251, 243,
+ 243, 244, 244, 244, 252, 252, 254, 254, 253, 253,
+ 245, 245, 245, 245, 245, 255, 256, 256, 257, 257,
+ 257, 258, 222, 175, 175, 259};
const short GLSLParserTable::rhs [] = {
- 1, 1, 1, 1, 1, 3, 1, 4, 1, 3,
- 2, 2, 1, 1, 1, 3, 2, 2, 2, 1,
- 2, 3, 2, 1, 1, 1, 2, 2, 2, 1,
- 1, 1, 1, 1, 3, 3, 3, 1, 3, 3,
- 1, 3, 3, 1, 3, 3, 3, 3, 1, 3,
- 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
- 3, 1, 3, 1, 5, 1, 3, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
- 1, 2, 2, 4, 6, 7, 9, 10, 2, 2,
- 1, 1, 2, 3, 3, 2, 5, 3, 2, 3,
- 2, 1, 1, 1, 1, 1, 1, 3, 5, 6,
- 7, 8, 5, 1, 2, 4, 5, 6, 7, 4,
- 2, 1, 2, 1, 1, 1, 1, 4, 1, 3,
- 1, 3, 1, 1, 1, 2, 2, 1, 2, 3,
- 1, 1, 1, 1, 2, 1, 1, 2, 2, 2,
- 2, 2, 2, 1, 1, 2, 1, 3, 4, 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, 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, 5,
- 4, 1, 2, 3, 4, 1, 3, 1, 3, 4,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 3, 1, 1, 2, 3, 1, 2, 1,
- 2, 5, 3, 1, 1, 4, 7, 1, 1, 3,
- 2, 5, 7, 6, 1, 1, 1, 1, 2, 3,
- 2, 2, 2, 3, 2, 1, 1, 2, 1, 1,
- 1, 2, 0, 2, 2, 2
-};
+ 1, 1, 1, 1, 1, 3, 1, 4, 1, 3,
+ 2, 2, 1, 1, 1, 3, 2, 2, 2, 1,
+ 2, 3, 2, 1, 1, 1, 2, 2, 2, 1,
+ 1, 1, 1, 1, 3, 3, 3, 1, 3, 3,
+ 1, 3, 3, 1, 3, 3, 3, 3, 1, 3,
+ 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
+ 3, 1, 3, 1, 5, 1, 3, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
+ 1, 2, 2, 4, 6, 7, 9, 10, 2, 2,
+ 1, 1, 2, 3, 3, 2, 5, 3, 2, 3,
+ 2, 1, 1, 1, 1, 1, 1, 3, 5, 6,
+ 7, 8, 5, 1, 2, 4, 5, 6, 7, 4,
+ 2, 1, 2, 1, 1, 1, 1, 4, 1, 3,
+ 1, 3, 1, 1, 1, 2, 2, 1, 2, 3,
+ 1, 1, 1, 1, 2, 1, 1, 2, 2, 2,
+ 2, 2, 2, 1, 1, 2, 1, 3, 4, 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, 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, 5,
+ 4, 1, 2, 3, 4, 1, 3, 1, 3, 4,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 3, 1, 1, 2, 3, 1, 2, 1,
+ 2, 5, 3, 1, 1, 4, 7, 1, 1, 3,
+ 2, 5, 7, 6, 1, 1, 1, 1, 2, 3,
+ 2, 2, 2, 3, 2, 1, 1, 2, 1, 1,
+ 1, 2, 0, 2, 2, 2};
const short GLSLParserTable::action_default [] = {
- 0, 0, 0, 0, 32, 165, 172, 173, 174, 31,
- 0, 193, 196, 197, 198, 194, 199, 200, 201, 195,
- 202, 203, 204, 162, 169, 170, 171, 4, 161, 247,
- 1, 0, 163, 218, 222, 219, 223, 240, 243, 234,
- 220, 237, 221, 224, 175, 176, 177, 0, 249, 181,
- 184, 185, 186, 182, 187, 188, 189, 183, 190, 191,
- 192, 248, 2, 30, 205, 212, 214, 209, 206, 213,
- 215, 239, 242, 232, 233, 210, 207, 236, 208, 216,
- 217, 211, 0, 33, 3, 246, 164, 225, 229, 226,
- 230, 241, 244, 235, 227, 238, 228, 231, 178, 179,
- 180, 166, 167, 168, 160, 41, 54, 79, 66, 52,
- 56, 315, 9, 15, 20, 0, 0, 14, 0, 58,
- 60, 64, 62, 38, 26, 0, 7, 49, 44, 245,
- 24, 155, 157, 34, 0, 5, 28, 27, 0, 0,
- 6, 80, 0, 0, 0, 143, 0, 142, 126, 146,
- 141, 0, 127, 147, 0, 0, 125, 154, 144, 138,
- 0, 135, 134, 252, 0, 0, 0, 148, 149, 145,
- 0, 131, 129, 0, 0, 132, 0, 128, 130, 150,
- 151, 152, 153, 137, 0, 139, 140, 136, 250, 253,
- 0, 258, 256, 0, 0, 259, 81, 0, 34, 260,
- 0, 255, 257, 0, 254, 0, 251, 0, 0, 40,
- 0, 0, 0, 37, 36, 35, 39, 0, 53, 0,
- 0, 50, 0, 0, 0, 0, 48, 0, 0, 42,
- 43, 45, 47, 46, 51, 0, 55, 160, 21, 18,
- 0, 17, 22, 23, 0, 57, 0, 59, 0, 0,
- 63, 0, 61, 0, 0, 65, 12, 0, 11, 0,
- 10, 16, 13, 0, 8, 156, 0, 158, 0, 159,
- 72, 76, 70, 68, 74, 71, 69, 78, 75, 73,
- 77, 0, 67, 29, 141, 0, 311, 310, 307, 306,
- 114, 0, 309, 313, 92, 0, 0, 107, 314, 0,
- 122, 121, 0, 0, 84, 308, 115, 0, 0, 95,
- 261, 120, 116, 0, 0, 118, 117, 0, 119, 90,
- 133, 103, 105, 104, 102, 93, 0, 313, 99, 101,
- 106, 96, 0, 0, 97, 0, 98, 100, 106, 313,
- 94, 0, 82, 312, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 276, 280, 0, 0, 269, 263,
- 262, 265, 0, 266, 0, 270, 271, 267, 264, 278,
- 0, 268, 122, 302, 0, 290, 301, 291, 305, 0,
- 0, 0, 0, 0, 293, 0, 296, 295, 313, 122,
- 298, 0, 297, 285, 0, 0, 0, 299, 300, 0,
- 274, 275, 294, 0, 0, 286, 123, 0, 0, 0,
- 282, 284, 0, 283, 272, 0, 273, 279, 303, 0,
- 304, 0, 0, 0, 313, 288, 289, 0, 287, 0,
- 0, 0, 292, 281, 277, 0, 83, 108, 0, 0,
- 113, 109, 0, 0, 111, 110, 0, 112, 0, 89,
- 0, 0, 0, 0, 85, 0, 86, 0, 0, 87,
- 0, 88, 316
-};
+ 0, 0, 0, 0, 32, 165, 172, 173, 174, 31,
+ 0, 193, 196, 197, 198, 194, 199, 200, 201, 195,
+ 202, 203, 204, 162, 169, 170, 171, 4, 161, 247,
+ 1, 0, 163, 218, 222, 219, 223, 240, 243, 234,
+ 220, 237, 221, 224, 175, 176, 177, 0, 249, 181,
+ 184, 185, 186, 182, 187, 188, 189, 183, 190, 191,
+ 192, 248, 2, 30, 205, 212, 214, 209, 206, 213,
+ 215, 239, 242, 232, 233, 210, 207, 236, 208, 216,
+ 217, 211, 0, 33, 3, 246, 164, 225, 229, 226,
+ 230, 241, 244, 235, 227, 238, 228, 231, 178, 179,
+ 180, 166, 167, 168, 160, 41, 54, 79, 66, 52,
+ 56, 315, 9, 15, 20, 0, 0, 14, 0, 58,
+ 60, 64, 62, 38, 26, 0, 7, 49, 44, 245,
+ 24, 155, 157, 34, 0, 5, 28, 27, 0, 0,
+ 6, 80, 0, 0, 0, 143, 0, 142, 126, 146,
+ 141, 0, 127, 147, 0, 0, 125, 154, 144, 138,
+ 0, 135, 134, 252, 0, 0, 0, 148, 149, 145,
+ 0, 131, 129, 0, 0, 132, 0, 128, 130, 150,
+ 151, 152, 153, 137, 0, 139, 140, 136, 250, 253,
+ 0, 258, 256, 0, 0, 259, 81, 0, 34, 260,
+ 0, 255, 257, 0, 254, 0, 251, 0, 0, 40,
+ 0, 0, 0, 37, 36, 35, 39, 0, 53, 0,
+ 0, 50, 0, 0, 0, 0, 48, 0, 0, 42,
+ 43, 45, 47, 46, 51, 0, 55, 160, 21, 18,
+ 0, 17, 22, 23, 0, 57, 0, 59, 0, 0,
+ 63, 0, 61, 0, 0, 65, 12, 0, 11, 0,
+ 10, 16, 13, 0, 8, 156, 0, 158, 0, 159,
+ 72, 76, 70, 68, 74, 71, 69, 78, 75, 73,
+ 77, 0, 67, 29, 141, 0, 311, 310, 307, 306,
+ 114, 0, 309, 313, 92, 0, 0, 107, 314, 0,
+ 122, 121, 0, 0, 84, 308, 115, 0, 0, 95,
+ 261, 120, 116, 0, 0, 118, 117, 0, 119, 90,
+ 133, 103, 105, 104, 102, 93, 0, 313, 99, 101,
+ 106, 96, 0, 0, 97, 0, 98, 100, 106, 313,
+ 94, 0, 82, 312, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 276, 280, 0, 0, 269, 263,
+ 262, 265, 0, 266, 0, 270, 271, 267, 264, 278,
+ 0, 268, 122, 302, 0, 290, 301, 291, 305, 0,
+ 0, 0, 0, 0, 293, 0, 296, 295, 313, 122,
+ 298, 0, 297, 285, 0, 0, 0, 299, 300, 0,
+ 274, 275, 294, 0, 0, 286, 123, 0, 0, 0,
+ 282, 284, 0, 283, 272, 0, 273, 279, 303, 0,
+ 304, 0, 0, 0, 313, 288, 289, 0, 287, 0,
+ 0, 0, 292, 281, 277, 0, 83, 108, 0, 0,
+ 113, 109, 0, 0, 111, 110, 0, 112, 0, 89,
+ 0, 0, 0, 0, 85, 0, 86, 0, 0, 87,
+ 0, 88, 316};
const short GLSLParserTable::goto_default [] = {
- 3, 135, 126, 362, 124, 263, 112, 117, 113, 116,
- 115, 114, 107, 118, 130, 133, 134, 123, 105, 128,
- 127, 109, 106, 110, 119, 120, 122, 121, 108, 281,
- 197, 360, 364, 296, 125, 131, 299, 205, 291, 293,
- 294, 325, 290, 328, 327, 326, 329, 324, 297, 311,
- 160, 159, 161, 173, 172, 162, 132, 129, 163, 203,
- 192, 361, 369, 359, 368, 363, 367, 371, 358, 365,
- 366, 370, 402, 400, 410, 390, 427, 388, 394, 391,
- 298, 289, 288, 292, 0
-};
+ 3, 135, 126, 362, 124, 263, 112, 117, 113, 116,
+ 115, 114, 107, 118, 130, 133, 134, 123, 105, 128,
+ 127, 109, 106, 110, 119, 120, 122, 121, 108, 281,
+ 197, 360, 364, 296, 125, 131, 299, 205, 291, 293,
+ 294, 325, 290, 328, 327, 326, 329, 324, 297, 311,
+ 160, 159, 161, 173, 172, 162, 132, 129, 163, 203,
+ 192, 361, 369, 359, 368, 363, 367, 371, 358, 365,
+ 366, 370, 402, 400, 410, 390, 427, 388, 394, 391,
+ 298, 289, 288, 292, 0};
const short GLSLParserTable::action_index [] = {
- 86, 1180, 3189, 58, -175, -175, -175, -175, -175, -175,
- 1180, -175, -175, -175, -175, -175, -175, -175, -175, -175,
- -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
- -79, 1180, -175, -175, -175, -175, -175, -175, -175, -175,
- -175, -175, -175, -175, -175, -175, -175, 1180, -175, -175,
- -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
- -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
- -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
- -175, -175, 32, -175, -175, -175, -175, -175, -175, -175,
- -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
- -175, -175, -175, -175, -175, 82, 61, -175, -175, 60,
- 181, 45, -175, -175, 1347, -55, 87, -175, -25, -113,
- -3, 6, -159, 40, 128, 515, -175, 112, 26, -175,
- -175, -175, -58, 197, 1180, -175, -175, -175, 84, 1180,
- -175, -175, -62, 2517, 2517, -175, 56, -175, -175, -175,
- 187, -54, -175, -175, 46, 25, -175, -175, -175, 349,
- 207, 349, -175, -175, 2685, 681, 10, -175, -175, -175,
- 3, 11, -175, 83, -38, -175, 0, -175, -175, -175,
- -175, -175, -175, -175, 349, -175, -175, -175, -175, -175,
- 18, -6, -175, 79, 1514, -175, -175, -77, -175, -175,
- -16, -175, -175, 76, -175, 3021, -175, 1180, 1180, 12,
- 1180, 1180, 1180, -175, -175, -175, 37, 1180, 49, 1180,
- 1180, 90, 1180, 1180, 1180, 1180, 15, 1180, 1180, 71,
- 68, -4, 8, 7, 80, 1180, 33, -75, -175, -175,
- 1180, -175, -175, -175, 1180, 181, 1180, -132, 1180, 1180,
- -137, 1180, 34, 73, 1180, -175, -175, 847, -175, 1180,
- -10, -175, 48, -44, -175, -175, 2349, -175, -45, -175,
- -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
- -175, 1180, -175, -175, 217, 72, -175, -175, -175, 3189,
- -47, -107, -175, 163, -14, 22, 81, -175, -175, 1013,
- -175, -175, 515, -105, -175, -175, 66, 1180, 2015, -175,
- -175, -175, -21, -91, 1180, -175, -34, 1180, -175, -175,
- -175, -175, -175, -175, -175, -175, 681, 63, -175, -175,
- -40, -76, 1180, -78, -175, 681, -175, -175, 5, 105,
- -175, 4365, -175, -175, -81, 1180, -121, -2, -114, 3861,
- -56, -53, 4533, 2182, -175, -175, -57, -69, -175, -175,
- -175, -175, 54, -175, -74, -175, -175, -175, -175, -175,
- 4029, -175, -46, -175, 59, -175, -175, -175, -175, -128,
- -49, 1180, 55, -93, -175, 3525, -175, -175, 3357, -37,
- -175, -90, -175, 27, -68, -5, 681, 1180, 30, 3693,
- -175, -175, -175, 4, 1180, -175, -175, 1180, 57, 3861,
- -175, -1, 3861, -175, -175, 4197, -175, -175, -175, 62,
- -175, 1180, 64, 20, 3861, -175, 3861, -103, -175, 3357,
- -86, 3693, -175, -175, -175, -35, -175, 38, 1180, 1848,
- -175, -27, -85, 1180, -175, -43, 1180, -175, -70, -175,
- 2517, 2853, 29, 1, -175, 1681, -175, -84, -48, -175,
- -118, -175, -175,
+ 86, 1180, 3189, 58, -175, -175, -175, -175, -175, -175,
+ 1180, -175, -175, -175, -175, -175, -175, -175, -175, -175,
+ -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
+ -79, 1180, -175, -175, -175, -175, -175, -175, -175, -175,
+ -175, -175, -175, -175, -175, -175, -175, 1180, -175, -175,
+ -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
+ -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
+ -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
+ -175, -175, 32, -175, -175, -175, -175, -175, -175, -175,
+ -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
+ -175, -175, -175, -175, -175, 82, 61, -175, -175, 60,
+ 181, 45, -175, -175, 1347, -55, 87, -175, -25, -113,
+ -3, 6, -159, 40, 128, 515, -175, 112, 26, -175,
+ -175, -175, -58, 197, 1180, -175, -175, -175, 84, 1180,
+ -175, -175, -62, 2517, 2517, -175, 56, -175, -175, -175,
+ 187, -54, -175, -175, 46, 25, -175, -175, -175, 349,
+ 207, 349, -175, -175, 2685, 681, 10, -175, -175, -175,
+ 3, 11, -175, 83, -38, -175, 0, -175, -175, -175,
+ -175, -175, -175, -175, 349, -175, -175, -175, -175, -175,
+ 18, -6, -175, 79, 1514, -175, -175, -77, -175, -175,
+ -16, -175, -175, 76, -175, 3021, -175, 1180, 1180, 12,
+ 1180, 1180, 1180, -175, -175, -175, 37, 1180, 49, 1180,
+ 1180, 90, 1180, 1180, 1180, 1180, 15, 1180, 1180, 71,
+ 68, -4, 8, 7, 80, 1180, 33, -75, -175, -175,
+ 1180, -175, -175, -175, 1180, 181, 1180, -132, 1180, 1180,
+ -137, 1180, 34, 73, 1180, -175, -175, 847, -175, 1180,
+ -10, -175, 48, -44, -175, -175, 2349, -175, -45, -175,
+ -175, -175, -175, -175, -175, -175, -175, -175, -175, -175,
+ -175, 1180, -175, -175, 217, 72, -175, -175, -175, 3189,
+ -47, -107, -175, 163, -14, 22, 81, -175, -175, 1013,
+ -175, -175, 515, -105, -175, -175, 66, 1180, 2015, -175,
+ -175, -175, -21, -91, 1180, -175, -34, 1180, -175, -175,
+ -175, -175, -175, -175, -175, -175, 681, 63, -175, -175,
+ -40, -76, 1180, -78, -175, 681, -175, -175, 5, 105,
+ -175, 4365, -175, -175, -81, 1180, -121, -2, -114, 3861,
+ -56, -53, 4533, 2182, -175, -175, -57, -69, -175, -175,
+ -175, -175, 54, -175, -74, -175, -175, -175, -175, -175,
+ 4029, -175, -46, -175, 59, -175, -175, -175, -175, -128,
+ -49, 1180, 55, -93, -175, 3525, -175, -175, 3357, -37,
+ -175, -90, -175, 27, -68, -5, 681, 1180, 30, 3693,
+ -175, -175, -175, 4, 1180, -175, -175, 1180, 57, 3861,
+ -175, -1, 3861, -175, -175, 4197, -175, -175, -175, 62,
+ -175, 1180, 64, 20, 3861, -175, 3861, -103, -175, 3357,
+ -86, 3693, -175, -175, -175, -35, -175, 38, 1180, 1848,
+ -175, -27, -85, 1180, -175, -43, 1180, -175, -70, -175,
+ 2517, 2853, 29, 1, -175, 1681, -175, -84, -48, -175,
+ -118, -175, -175,
- -85, 11, 90, -85, -85, -85, -85, -85, -85, -85,
- -3, -85, -85, -85, -85, -85, -85, -85, -85, -85,
- -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
- -85, -9, -85, -85, -85, -85, -85, -85, -85, -85,
- -85, -85, -85, -85, -85, -85, -85, 70, -85, -85,
- -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
- -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
- -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
- -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
- -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
- -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
- -85, -85, -85, -85, 20, -85, -85, -85, -85, -85,
- -85, -85, -85, -85, -85, 3, -85, -85, -85, -85,
- -85, -85, -85, -85, 9, -85, -85, -85, -85, 5,
- -85, -85, -85, 56, 110, -85, -85, -85, -85, -85,
- -85, -85, -85, -85, -85, -85, -85, -85, -85, -39,
- 21, -21, -85, -85, 96, -7, -85, -85, -85, -85,
- -85, -85, -85, -85, -85, -85, -49, -85, -85, -85,
- -85, -85, -85, -85, -47, -85, -85, -85, -85, -85,
- -46, -85, -85, -85, 35, -85, -85, -85, -85, -85,
- -45, -85, -85, -85, -85, 109, -85, 29, 30, -85,
- -4, -5, -6, -85, -85, -85, -85, 38, -85, 40,
- 41, -85, 43, 78, 84, 81, -85, 80, 66, -85,
- -85, -85, -85, -85, -85, 67, -85, -85, -85, -85,
- -12, -85, -85, -85, 42, -85, 51, -85, 52, 27,
- -85, 49, -85, -85, 24, -85, -85, 18, -85, 22,
- -85, -85, -85, -85, -85, -85, 114, -85, -85, -85,
- -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
- -85, 6, -85, -85, -85, -11, -85, -85, -85, 129,
- -85, -85, -85, -85, -85, -38, -85, -85, -85, 23,
- -85, -85, -2, -85, -85, -85, -85, 19, 79, -85,
- -85, -85, -85, -85, 39, -85, -85, 37, -85, -85,
- -85, -85, -85, -85, -85, -85, 14, -18, -85, -85,
- -85, -85, 121, -85, -85, 94, -85, -85, -85, -19,
- -85, 7, -85, -85, -85, 16, -85, -85, -85, 77,
- -85, -85, 87, 17, -85, -85, -85, -85, -85, -85,
- -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
- 65, -85, -85, -85, -85, -85, -85, -85, -85, -85,
- -85, 26, -85, -85, -85, 91, -85, -85, 159, -85,
- -85, -85, -85, -85, -85, -85, -13, -1, -85, 54,
- -85, -85, -85, -85, 57, -85, -85, 1, -85, 69,
- -85, -85, 141, -85, -85, 76, -85, -85, -85, -85,
- -85, 0, -85, -85, 88, -85, 25, -85, -85, 223,
- -85, 100, -85, -85, -85, -85, -85, -85, 36, 138,
- -85, -85, -85, 31, -85, -85, 28, -85, -85, -85,
- 97, 105, -85, -85, -85, 98, -85, -85, -85, -85,
- -85, -85, -85
-};
+ -85, 11, 90, -85, -85, -85, -85, -85, -85, -85,
+ -3, -85, -85, -85, -85, -85, -85, -85, -85, -85,
+ -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
+ -85, -9, -85, -85, -85, -85, -85, -85, -85, -85,
+ -85, -85, -85, -85, -85, -85, -85, 70, -85, -85,
+ -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
+ -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
+ -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
+ -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
+ -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
+ -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
+ -85, -85, -85, -85, 20, -85, -85, -85, -85, -85,
+ -85, -85, -85, -85, -85, 3, -85, -85, -85, -85,
+ -85, -85, -85, -85, 9, -85, -85, -85, -85, 5,
+ -85, -85, -85, 56, 110, -85, -85, -85, -85, -85,
+ -85, -85, -85, -85, -85, -85, -85, -85, -85, -39,
+ 21, -21, -85, -85, 96, -7, -85, -85, -85, -85,
+ -85, -85, -85, -85, -85, -85, -49, -85, -85, -85,
+ -85, -85, -85, -85, -47, -85, -85, -85, -85, -85,
+ -46, -85, -85, -85, 35, -85, -85, -85, -85, -85,
+ -45, -85, -85, -85, -85, 109, -85, 29, 30, -85,
+ -4, -5, -6, -85, -85, -85, -85, 38, -85, 40,
+ 41, -85, 43, 78, 84, 81, -85, 80, 66, -85,
+ -85, -85, -85, -85, -85, 67, -85, -85, -85, -85,
+ -12, -85, -85, -85, 42, -85, 51, -85, 52, 27,
+ -85, 49, -85, -85, 24, -85, -85, 18, -85, 22,
+ -85, -85, -85, -85, -85, -85, 114, -85, -85, -85,
+ -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
+ -85, 6, -85, -85, -85, -11, -85, -85, -85, 129,
+ -85, -85, -85, -85, -85, -38, -85, -85, -85, 23,
+ -85, -85, -2, -85, -85, -85, -85, 19, 79, -85,
+ -85, -85, -85, -85, 39, -85, -85, 37, -85, -85,
+ -85, -85, -85, -85, -85, -85, 14, -18, -85, -85,
+ -85, -85, 121, -85, -85, 94, -85, -85, -85, -19,
+ -85, 7, -85, -85, -85, 16, -85, -85, -85, 77,
+ -85, -85, 87, 17, -85, -85, -85, -85, -85, -85,
+ -85, -85, -85, -85, -85, -85, -85, -85, -85, -85,
+ 65, -85, -85, -85, -85, -85, -85, -85, -85, -85,
+ -85, 26, -85, -85, -85, 91, -85, -85, 159, -85,
+ -85, -85, -85, -85, -85, -85, -13, -1, -85, 54,
+ -85, -85, -85, -85, 57, -85, -85, 1, -85, 69,
+ -85, -85, 141, -85, -85, 76, -85, -85, -85, -85,
+ -85, 0, -85, -85, 88, -85, 25, -85, -85, 223,
+ -85, 100, -85, -85, -85, -85, -85, -85, 36, 138,
+ -85, -85, -85, 31, -85, -85, 28, -85, -85, -85,
+ 97, 105, -85, -85, -85, 98, -85, -85, -85, -85,
+ -85, -85, -85};
const short GLSLParserTable::action_info [] = {
- -25, 332, 446, 246, 339, 306, 450, 319, 428, 251,
- 429, 317, 331, 376, 144, 377, 461, 437, 443, 266,
- 378, 316, 421, 385, 314, 170, 407, 445, 431, 304,
- 381, 251, 244, -24, 334, 199, 191, 217, 380, -19,
- 246, 384, -24, 412, 397, 139, 399, 403, 139, 404,
- 459, 244, 171, 373, 243, 171, 174, 331, 462, 239,
- 342, 175, 191, 139, 460, 217, 139, 269, 264, -25,
- 191, 194, 139, 139, 227, 139, 375, 139, 455, 181,
- 139, 453, 139, 438, 142, 227, 227, 2, 1, 207,
- 254, 139, 207, 227, 200, 219, 424, 200, 341, 435,
- 179, 176, 139, 207, 227, 240, 219, 248, 143, 228,
- 167, 307, 0, 249, 0, 439, 210, 321, 0, 322,
- 228, 228, 0, 29, 320, 0, 0, 182, 228, 0,
- 222, 0, 0, 0, 0, 456, 0, 0, 0, 228,
- 222, 210, 0, 308, 210, 309, 220, 211, 180, 212,
- 256, 0, 0, 48, 223, 0, 342, 220, 168, 321,
- 224, 322, 222, 454, 223, 323, 61, 257, 0, 383,
- 224, 409, 211, 208, 212, 211, 208, 212, 423, 0,
- 0, 0, 320, 258, 0, 0, 223, 208, 433, 225,
- 0, 0, 224, 0, -124, 235, 420, 177, 140, 225,
- 270, 241, 271, -124, 0, 259, -124, 323, 0, 0,
- 204, 0, 0, 201, 145, 436, 169, 321, 0, 322,
- 0, 225, 272, 146, -124, 0, 147, 0, 0, 0,
- 0, 0, 0, -124, -124, 0, -124, 0, 0, 0,
- 0, -124, 273, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 148, 0, 0, 0, 0, 0,
- 0, 149, 0, 0, -124, 323, 0, 0, 0, 301,
- 0, -124, 274, 0, 0, 0, 0, -91, 0, 0,
- 0, 0, 0, 0, 0, -124, 0, 0, 0, -124,
- -124, 0, 275, 276, 0, 0, 0, 277, 0, 0,
- 0, 0, -124, 0, 0, 152, 0, 278, 0, 153,
- 154, 0, 0, 0, 0, -124, 0, 0, 0, -124,
- -124, 0, 155, -124, 0, 0, 0, 0, 0, 0,
- 0, 0, -124, 0, 0, 0, 0, 279, 0, 0,
- 0, 0, 0, 156, 0, 0, 0, -124, 0, 0,
- 0, 0, 157, -124, 0, 0, 145, 0, 0, 0,
- 0, 0, -124, 0, 280, 146, 0, 158, 147, 0,
- 0, 0, 0, 0, 0, 0, 0, -124, 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, 149, 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, 153, 154, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 155, 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, 157, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 158,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 6, 7, 8, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 0, 0, 23, 24, 25, 26, 0,
- 0, 0, 0, 28, 0, 0, 0, 0, 0, 0,
- 0, 0, 32, 0, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 0,
- 0, 0, 0, 82, 0, 0, 0, 0, 85, 86,
- 0, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, 100, 0, 101, 102, 103, 0,
- 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 5, 0, 6, 7, 8, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 0,
- 0, 23, 24, 25, 26, 0, 0, 0, 0, 28,
- 0, 0, 29, 0, 0, 0, 0, 0, 32, 0,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 0, 0, 0, 0, 0, 0,
- 0, 0, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 0, 0, 0, 0, 82,
- 0, 0, 0, 0, 85, 86, 0, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
- 100, 0, 101, 102, 103, 0, 104, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 5, 0, 6, 7,
- 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 0, 0, 23, 24, 25,
- 26, 0, 0, 0, 0, 28, 0, 0, 29, 260,
- 0, 0, 0, 0, 32, 0, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 0, 0, 0, 0, 0, 0, 0, 0, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 0, 0, 0, 0, 82, 0, 0, 0, 0,
- 85, 86, 0, 87, 88, 89, 90, 91, 92, 93,
- 94, 95, 96, 97, 98, 99, 100, 0, 101, 102,
- 103, 0, 104, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 0, 6, 7, 8, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 0, 0, 23, 24, 25, 26, 0, 0, 0,
- 0, 28, 0, 0, 29, 448, 0, 0, 0, 0,
- 32, 0, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 0, 0, 0, 0,
- 0, 0, 0, 0, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 449, 0, 0,
- 0, 82, 0, 0, 0, 0, 85, 86, 0, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
- 98, 99, 100, 0, 101, 102, 103, 0, 104, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 5,
- 0, 6, 7, 8, 0, 0, 0, 0, 0, 0,
- 0, 9, 10, 0, 0, 0, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 0, 0,
- 23, 24, 25, 26, 0, 0, 0, 0, 28, 0,
- 0, 29, 30, 0, 0, 31, 0, 32, 0, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 0, 0, 0, 0, 0, 0, 47,
- 0, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 0, 0, 0, 0, 62,
- 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- 78, 79, 80, 81, 0, 0, 0, 0, 82, 0,
- 0, 0, 83, 85, 86, 0, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 0, 101, 102, 103, 0, 104, 0, 0, 0, 84,
- 27, 0, 0, 0, 0, 4, 5, 0, 6, 7,
- 8, 0, 0, 0, 0, 0, 0, 0, 9, 10,
- 0, 0, 0, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 0, 0, 23, 24, 25,
- 26, 0, 0, 0, 0, 28, 0, 0, 29, 30,
- 0, 0, 31, 0, 32, 0, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 0, 0, 0, 0, 0, 0, 47, 0, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 0, 0, 0, 0, 62, 0, 0, 0,
- 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 0, 0, 0, 0, 82, 0, 0, 0, 83,
- 85, 86, 0, 87, 88, 89, 90, 91, 92, 93,
- 94, 95, 96, 97, 98, 99, 100, 0, 101, 102,
- 103, 0, 237, 0, 0, 0, 84, 27, 0, 0,
- 0, 0, 4, 5, 0, 6, 7, 8, 0, 0,
- 0, 0, 0, 0, 0, 9, 10, 0, 0, 0,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 0, 0, 23, 24, 25, 26, 0, 0,
- 0, 0, 28, 0, 0, 29, 30, 0, 0, 31,
- 0, 32, 0, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 0, 0, 0,
- 0, 0, 0, 47, 0, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 0,
- 0, 0, 0, 62, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 195, 0, 0, 0,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 76, 77, 78, 79, 80, 81, 0, 0,
- 0, 0, 82, 0, 0, 0, 83, 85, 86, 0,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 0, 101, 102, 103, 0, 104,
- 0, 0, 0, 84, 27, 0, 0, 0, 0, 4,
- 5, 0, 6, 7, 8, 0, 0, 0, 0, 0,
- 0, 0, 9, 10, 0, 0, 0, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 0,
- 0, 23, 24, 25, 26, 0, 0, 0, 0, 28,
- 0, 0, 29, 30, 0, 0, 31, 0, 32, 0,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 0, 0, 0, 0, 0, 0,
- 47, 0, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 0, 0, 0, 0,
- 62, 0, 0, 0, 0, 0, 63, 0, 0, 0,
- 0, 0, 0, 457, 0, 0, 0, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 0, 0, 0, 0, 82,
- 0, 0, 0, 83, 85, 86, 0, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
- 100, 0, 101, 102, 103, 0, 104, 0, 0, 0,
- 84, 27, 0, 0, 0, 0, 4, 5, 0, 6,
- 7, 8, 0, 0, 0, 0, 0, 0, 0, 9,
- 10, 0, 0, 0, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 0, 0, 23, 24,
- 25, 26, 0, 0, 0, 0, 28, 0, 0, 29,
- 30, 0, 0, 31, 0, 32, 0, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 0, 0, 0, 0, 0, 0, 47, 0, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 0, 0, 0, 0, 62, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,
- 441, 0, 0, 0, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 0, 0, 0, 0, 82, 0, 0, 0,
- 83, 85, 86, 0, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 0, 101,
- 102, 103, 0, 104, 0, 0, 0, 84, 27, 0,
- 0, 0, 0, 4, 5, 0, 6, 7, 8, 0,
- 0, 0, 0, 0, 0, 0, 9, 10, 0, 0,
- 0, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 0, 0, 23, 24, 25, 26, 0,
- 0, 0, 0, 28, 0, 0, 29, 30, 0, 0,
- 31, 0, 32, 0, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 0, 0,
- 0, 0, 0, 0, 47, 0, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 0, 0, 0, 0, 62, 0, 0, 0, 0, 0,
- 63, 0, 0, 0, 0, 0, 0, 312, 0, 0,
- 0, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 0,
- 0, 0, 0, 82, 0, 0, 0, 83, 85, 86,
- 0, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, 100, 0, 101, 102, 103, 0,
- 104, 0, 0, 0, 84, 27, 0, 0, 0, 0,
- 4, 5, 0, 6, 7, 8, 0, 0, 0, 0,
- 0, 0, 0, 9, 10, 0, 0, 0, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 0, 0, 23, 24, 25, 26, 0, 0, 0, 0,
- 28, 0, 0, 29, 30, 0, 0, 31, 0, 32,
- 0, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 0, 0, 0, 0, 0,
- 0, 47, 0, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 0, 0, 0,
- 0, 62, 0, 0, 0, 0, 0, 63, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- 76, 77, 78, 79, 80, 81, 418, 0, 0, 0,
- 82, 0, 0, 0, 83, 85, 86, 0, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 0, 101, 102, 103, 0, 104, 0, 0,
- 0, 84, 27, 0, 0, 0, 0, 4, 5, 0,
- 6, 7, 8, 0, 0, 0, 0, 0, 0, 0,
- 9, 10, 0, 0, 0, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 0, 0, 23,
- 24, 25, 26, 0, 0, 0, 0, 28, 0, 0,
- 29, 30, 0, 0, 31, 0, 32, 0, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 0, 0, 0, 0, 0, 0, 47, 0,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 0, 0, 0, 0, 62, 0,
- 0, 0, 0, 0, 63, 0, 0, 0, 0, 0,
- 0, 267, 0, 0, 0, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 0, 0, 0, 0, 82, 0, 0,
- 0, 83, 85, 86, 0, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 0,
- 101, 102, 103, 0, 104, 0, 0, 0, 84, 27,
- 0, 0, 0, 0, 145, 0, 5, 0, 6, 7,
- 8, 0, 0, 146, 0, 0, 147, 0, 0, 0,
- 0, 0, 0, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 0, 0, 23, 24, 25,
- 26, 0, 0, 0, 148, 28, 0, 0, 29, 0,
- 0, 149, 0, 0, 32, 150, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 151, 0, 0, 0, 0, 0, 0, 0, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 0, 0, 0, 152, 0, 0, 0, 153,
- 154, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 155, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 0, 0, 156, 0, 82, 0, 0, 0, 0,
- 85, 86, 157, 87, 88, 89, 90, 91, 92, 93,
- 94, 95, 96, 97, 98, 99, 100, 158, 101, 102,
- 103, 0, 104, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 145, 0, 5, 0, 6, 7, 8, 0,
- 0, 146, 0, 0, 147, 0, 0, 0, 0, 0,
- 0, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 0, 0, 23, 24, 25, 26, 0,
- 0, 0, 148, 28, 0, 0, 29, 0, 0, 149,
- 0, 0, 32, 150, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 151, 0,
- 0, 0, 0, 0, 0, 0, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 0, 0, 0, 152, 0, 0, 0, 153, 154, 0,
- 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
- 155, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 0,
- 0, 156, 0, 82, 0, 0, 0, 0, 85, 86,
- 157, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, 100, 158, 101, 102, 103, 0,
- 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 145, 0, 5, 0, 6, 7, 8, 0, 0, 146,
- 0, 0, 147, 0, 0, 0, 0, 0, 0, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 0, 0, 23, 24, 25, 26, 0, 0, 0,
- 148, 28, 0, 0, 29, 0, 0, 149, 0, 0,
- 32, 150, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 151, 0, 0, 0,
- 0, 0, 0, 0, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 0, 0,
- 0, 152, 0, 0, 0, 153, 154, 0, 0, 0,
- 0, 0, 0, 0, 452, 0, 0, 0, 155, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 0, 0, 156,
- 0, 82, 0, 0, 0, 0, 85, 86, 157, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
- 98, 99, 100, 158, 101, 102, 103, 0, 104, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 145, 0,
- 5, 0, 6, 7, 8, 0, 0, 146, 0, 0,
- 147, 0, 0, 0, 0, 0, 0, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 0,
- 0, 23, 24, 25, 26, 0, 0, 0, 148, 28,
- 0, 0, 29, 0, 0, 149, 0, 0, 32, 150,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 151, 0, 0, 0, 0, 0,
- 0, 0, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 0, 0, 0, 152,
- 0, 0, 0, 153, 154, 0, 0, 0, 0, 0,
- 0, 0, 206, 0, 0, 0, 155, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 0, 0, 156, 0, 82,
- 0, 0, 0, 0, 85, 86, 157, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
- 100, 158, 101, 102, 103, 0, 104, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 145, 0, 5, 0,
- 6, 7, 8, 0, 0, 146, 0, 0, 147, 0,
- 0, 0, 0, 0, 0, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 0, 0, 23,
- 24, 25, 26, 0, 0, 0, 148, 28, 0, 0,
- 29, 0, 0, 149, 0, 0, 32, 284, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 151, 0, 0, 0, 0, 0, 0, 0,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 0, 0, 0, 152, 0, 0,
- 0, 153, 154, 0, 0, 285, 0, 0, 0, 0,
- 0, 0, 0, 0, 155, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 286, 0, 156, 0, 82, 0, 0,
- 0, 0, 85, 86, 157, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 158,
- 101, 102, 103, 0, 104, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 145, 4, 5, 0, 6, 7,
- 8, 0, 0, 146, 0, 0, 147, 0, 9, 10,
- 0, 0, 0, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 0, 0, 23, 24, 25,
- 26, 0, 0, 0, 148, 28, 0, 0, 29, 30,
- 0, 149, 31, 0, 32, 150, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 151, 0, 0, 0, 0, 0, 47, 0, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 0, 0, 0, 152, 62, 0, 0, 153,
- 154, 0, 63, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 155, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 0, 0, 156, 0, 82, 0, 0, 0, 83,
- 85, 86, 157, 87, 88, 89, 90, 91, 92, 93,
- 94, 95, 96, 97, 98, 99, 100, 158, 101, 102,
- 103, 0, 104, 0, 0, 0, 84, 27, 0, 0,
- 0, 0, 145, 4, 5, 0, 6, 7, 8, 0,
- 0, 146, 0, 0, 147, 0, 9, 10, 0, 0,
- 0, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 0, 0, 23, 24, 25, 26, 0,
- 0, 0, 148, 28, 0, 0, 29, 30, 0, 149,
- 31, 0, 32, 284, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 151, 0,
- 0, 0, 0, 0, 47, 0, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 0, 0, 0, 152, 62, 0, 0, 153, 154, 0,
- 63, 285, 0, 0, 0, 0, 0, 0, 0, 0,
- 155, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 355,
- 0, 156, 0, 82, 0, 0, 0, 83, 85, 86,
- 157, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, 100, 158, 101, 102, 103, 0,
- 104, 0, 0, 0, 84, 27, 0, 0, 0, 0,
- 145, 4, 5, 344, 6, 7, 8, 0, 345, 146,
- 0, 0, 147, 346, 9, 10, 347, 348, 0, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 349, 0, 23, 24, 25, 26, 0, 0, 0,
- 148, 28, 350, 0, 29, 30, 351, 149, 31, 0,
- 32, 284, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 151, 0, 0, 341,
- 0, 0, 47, 0, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 0, 0,
- 0, 152, 62, 0, 0, 153, 154, 0, 63, 285,
- 0, 353, 0, 0, 0, 0, 0, 0, 155, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 355, 0, 156,
- 0, 82, 0, 0, 356, 83, 85, 86, 157, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
- 98, 99, 100, 158, 101, 102, 103, 0, 104, 357,
- 0, 0, 84, 27, 0, 0, 0, 0, 145, 4,
- 5, 344, 6, 7, 8, 0, 345, 146, 0, 0,
- 147, 346, 9, 10, 347, 348, 0, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 349,
- 0, 23, 24, 25, 26, 0, 0, 0, 148, 28,
- 350, 0, 29, 30, 351, 149, 31, 0, 32, 284,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 151, 0, 0, 352, 0, 0,
- 47, 0, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 0, 0, 0, 152,
- 62, 0, 0, 153, 154, 0, 63, 285, 0, 353,
- 0, 0, 0, 0, 0, 0, 155, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 355, 0, 156, 0, 82,
- 0, 0, 356, 83, 85, 86, 157, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
- 100, 158, 101, 102, 103, 0, 104, 357, 0, 0,
- 84, 27, 0, 0, 0, 0, 145, 4, 5, 344,
- 6, 7, 8, 0, 345, 146, 0, 0, 147, 346,
- 9, 10, 347, 348, 0, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 349, 0, 23,
- 24, 25, 26, 0, 0, 0, 148, 28, 350, 0,
- 29, 30, 351, 149, 31, 0, 32, 284, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 151, 0, 0, 352, 0, 0, 47, 0,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 0, 0, 0, 152, 62, 0,
- 0, 153, 154, 0, 63, 285, 0, 353, 0, 0,
- 434, 0, 0, 0, 155, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 355, 0, 156, 0, 82, 0, 0,
- 356, 83, 85, 86, 157, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 158,
- 101, 102, 103, 0, 104, 357, 0, 0, 84, 27,
- 0, 0, 0, 0, 145, 4, 5, 344, 6, 7,
- 8, 0, 345, 146, 0, 0, 147, 346, 9, 10,
- 347, 348, 0, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 349, 0, 23, 24, 25,
- 26, 0, 0, 0, 148, 28, 350, 0, 29, 30,
- 351, 149, 31, 0, 32, 284, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 151, 0, 0, 352, 0, 0, 47, 0, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 0, 0, 0, 152, 62, 0, 0, 153,
- 154, 0, 63, 285, 0, 353, 0, 0, 416, 0,
- 0, 0, 155, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 355, 0, 156, 0, 82, 0, 0, 356, 83,
- 85, 86, 157, 87, 88, 89, 90, 91, 92, 93,
- 94, 95, 96, 97, 98, 99, 100, 158, 101, 102,
- 103, 0, 104, 357, 0, 0, 84, 27, 0, 0,
- 0, 0, 145, 4, 5, 344, 6, 7, 8, 0,
- 345, 146, 0, 0, 147, 346, 9, 10, 347, 348,
- 0, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 349, 0, 23, 24, 25, 26, 0,
- 0, 0, 148, 28, 350, 0, 29, 30, 351, 149,
- 31, 0, 32, 284, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 151, 0,
- 0, 352, 0, 0, 47, 0, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 0, 0, 0, 152, 62, 0, 0, 153, 154, 0,
- 63, 285, 0, 353, 0, 0, 354, 0, 0, 0,
- 155, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 355,
- 0, 156, 0, 82, 0, 0, 356, 83, 85, 86,
- 157, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, 100, 158, 101, 102, 103, 0,
- 104, 357, 0, 0, 84, 27, 0, 0, 0, 0,
- 145, 4, 5, 344, 6, 7, 8, 0, 345, 146,
- 0, 0, 147, 346, 9, 10, 347, 348, 0, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 349, 0, 23, 24, 25, 26, 0, 0, 0,
- 148, 28, 350, 0, 29, 30, 351, 149, 31, 0,
- 32, 284, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 151, 0, 0, 352,
- 0, 0, 47, 0, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 0, 0,
- 0, 152, 62, 0, 0, 153, 154, 0, 63, 285,
- 0, 353, 0, 0, 414, 0, 0, 0, 155, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 355, 0, 156,
- 0, 82, 0, 0, 356, 83, 85, 86, 157, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
- 98, 99, 100, 158, 101, 102, 103, 0, 104, 357,
- 0, 0, 84, 27, 0, 0, 0, 0,
+ -25, 332, 446, 246, 339, 306, 450, 319, 428, 251,
+ 429, 317, 331, 376, 144, 377, 461, 437, 443, 266,
+ 378, 316, 421, 385, 314, 170, 407, 445, 431, 304,
+ 381, 251, 244, -24, 334, 199, 191, 217, 380, -19,
+ 246, 384, -24, 412, 397, 139, 399, 403, 139, 404,
+ 459, 244, 171, 373, 243, 171, 174, 331, 462, 239,
+ 342, 175, 191, 139, 460, 217, 139, 269, 264, -25,
+ 191, 194, 139, 139, 227, 139, 375, 139, 455, 181,
+ 139, 453, 139, 438, 142, 227, 227, 2, 1, 207,
+ 254, 139, 207, 227, 200, 219, 424, 200, 341, 435,
+ 179, 176, 139, 207, 227, 240, 219, 248, 143, 228,
+ 167, 307, 0, 249, 0, 439, 210, 321, 0, 322,
+ 228, 228, 0, 29, 320, 0, 0, 182, 228, 0,
+ 222, 0, 0, 0, 0, 456, 0, 0, 0, 228,
+ 222, 210, 0, 308, 210, 309, 220, 211, 180, 212,
+ 256, 0, 0, 48, 223, 0, 342, 220, 168, 321,
+ 224, 322, 222, 454, 223, 323, 61, 257, 0, 383,
+ 224, 409, 211, 208, 212, 211, 208, 212, 423, 0,
+ 0, 0, 320, 258, 0, 0, 223, 208, 433, 225,
+ 0, 0, 224, 0, -124, 235, 420, 177, 140, 225,
+ 270, 241, 271, -124, 0, 259, -124, 323, 0, 0,
+ 204, 0, 0, 201, 145, 436, 169, 321, 0, 322,
+ 0, 225, 272, 146, -124, 0, 147, 0, 0, 0,
+ 0, 0, 0, -124, -124, 0, -124, 0, 0, 0,
+ 0, -124, 273, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 148, 0, 0, 0, 0, 0,
+ 0, 149, 0, 0, -124, 323, 0, 0, 0, 301,
+ 0, -124, 274, 0, 0, 0, 0, -91, 0, 0,
+ 0, 0, 0, 0, 0, -124, 0, 0, 0, -124,
+ -124, 0, 275, 276, 0, 0, 0, 277, 0, 0,
+ 0, 0, -124, 0, 0, 152, 0, 278, 0, 153,
+ 154, 0, 0, 0, 0, -124, 0, 0, 0, -124,
+ -124, 0, 155, -124, 0, 0, 0, 0, 0, 0,
+ 0, 0, -124, 0, 0, 0, 0, 279, 0, 0,
+ 0, 0, 0, 156, 0, 0, 0, -124, 0, 0,
+ 0, 0, 157, -124, 0, 0, 145, 0, 0, 0,
+ 0, 0, -124, 0, 280, 146, 0, 158, 147, 0,
+ 0, 0, 0, 0, 0, 0, 0, -124, 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, 149, 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, 153, 154, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 155, 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, 157, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 158,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 6, 7, 8, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 0, 0, 23, 24, 25, 26, 0,
+ 0, 0, 0, 28, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32, 0, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 0,
+ 0, 0, 0, 82, 0, 0, 0, 0, 85, 86,
+ 0, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 0, 101, 102, 103, 0,
+ 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 6, 7, 8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 0,
+ 0, 23, 24, 25, 26, 0, 0, 0, 0, 28,
+ 0, 0, 29, 0, 0, 0, 0, 0, 32, 0,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 0, 0, 0, 0, 0, 0,
+ 0, 0, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 0, 0, 0, 0, 82,
+ 0, 0, 0, 0, 85, 86, 0, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 0, 101, 102, 103, 0, 104, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0, 6, 7,
+ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 0, 0, 23, 24, 25,
+ 26, 0, 0, 0, 0, 28, 0, 0, 29, 260,
+ 0, 0, 0, 0, 32, 0, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 0, 0, 0, 0, 0, 0, 0, 0, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 0, 0, 0, 0, 82, 0, 0, 0, 0,
+ 85, 86, 0, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 0, 101, 102,
+ 103, 0, 104, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 0, 6, 7, 8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 0, 0, 23, 24, 25, 26, 0, 0, 0,
+ 0, 28, 0, 0, 29, 448, 0, 0, 0, 0,
+ 32, 0, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 0, 0, 0, 0,
+ 0, 0, 0, 0, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 449, 0, 0,
+ 0, 82, 0, 0, 0, 0, 85, 86, 0, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 0, 101, 102, 103, 0, 104, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 5,
+ 0, 6, 7, 8, 0, 0, 0, 0, 0, 0,
+ 0, 9, 10, 0, 0, 0, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 0, 0,
+ 23, 24, 25, 26, 0, 0, 0, 0, 28, 0,
+ 0, 29, 30, 0, 0, 31, 0, 32, 0, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 0, 0, 0, 0, 0, 0, 47,
+ 0, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 57, 58, 59, 60, 61, 0, 0, 0, 0, 62,
+ 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 0, 0, 0, 0, 82, 0,
+ 0, 0, 83, 85, 86, 0, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
+ 0, 101, 102, 103, 0, 104, 0, 0, 0, 84,
+ 27, 0, 0, 0, 0, 4, 5, 0, 6, 7,
+ 8, 0, 0, 0, 0, 0, 0, 0, 9, 10,
+ 0, 0, 0, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 0, 0, 23, 24, 25,
+ 26, 0, 0, 0, 0, 28, 0, 0, 29, 30,
+ 0, 0, 31, 0, 32, 0, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 0, 0, 0, 0, 0, 0, 47, 0, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 0, 0, 0, 0, 62, 0, 0, 0,
+ 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 0, 0, 0, 0, 82, 0, 0, 0, 83,
+ 85, 86, 0, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 0, 101, 102,
+ 103, 0, 237, 0, 0, 0, 84, 27, 0, 0,
+ 0, 0, 4, 5, 0, 6, 7, 8, 0, 0,
+ 0, 0, 0, 0, 0, 9, 10, 0, 0, 0,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 0, 0, 23, 24, 25, 26, 0, 0,
+ 0, 0, 28, 0, 0, 29, 30, 0, 0, 31,
+ 0, 32, 0, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 0, 0, 0,
+ 0, 0, 0, 47, 0, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 0,
+ 0, 0, 0, 62, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 195, 0, 0, 0,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 0, 0,
+ 0, 0, 82, 0, 0, 0, 83, 85, 86, 0,
+ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ 97, 98, 99, 100, 0, 101, 102, 103, 0, 104,
+ 0, 0, 0, 84, 27, 0, 0, 0, 0, 4,
+ 5, 0, 6, 7, 8, 0, 0, 0, 0, 0,
+ 0, 0, 9, 10, 0, 0, 0, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 0,
+ 0, 23, 24, 25, 26, 0, 0, 0, 0, 28,
+ 0, 0, 29, 30, 0, 0, 31, 0, 32, 0,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 0, 0, 0, 0, 0, 0,
+ 47, 0, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 0, 0, 0, 0,
+ 62, 0, 0, 0, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 457, 0, 0, 0, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 0, 0, 0, 0, 82,
+ 0, 0, 0, 83, 85, 86, 0, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 0, 101, 102, 103, 0, 104, 0, 0, 0,
+ 84, 27, 0, 0, 0, 0, 4, 5, 0, 6,
+ 7, 8, 0, 0, 0, 0, 0, 0, 0, 9,
+ 10, 0, 0, 0, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 0, 0, 23, 24,
+ 25, 26, 0, 0, 0, 0, 28, 0, 0, 29,
+ 30, 0, 0, 31, 0, 32, 0, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 0, 0, 0, 0, 0, 0, 47, 0, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
+ 59, 60, 61, 0, 0, 0, 0, 62, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,
+ 441, 0, 0, 0, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 0, 0, 0, 0, 82, 0, 0, 0,
+ 83, 85, 86, 0, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 98, 99, 100, 0, 101,
+ 102, 103, 0, 104, 0, 0, 0, 84, 27, 0,
+ 0, 0, 0, 4, 5, 0, 6, 7, 8, 0,
+ 0, 0, 0, 0, 0, 0, 9, 10, 0, 0,
+ 0, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 0, 0, 23, 24, 25, 26, 0,
+ 0, 0, 0, 28, 0, 0, 29, 30, 0, 0,
+ 31, 0, 32, 0, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 0, 0,
+ 0, 0, 0, 0, 47, 0, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 0, 0, 0, 0, 62, 0, 0, 0, 0, 0,
+ 63, 0, 0, 0, 0, 0, 0, 312, 0, 0,
+ 0, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 0,
+ 0, 0, 0, 82, 0, 0, 0, 83, 85, 86,
+ 0, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 0, 101, 102, 103, 0,
+ 104, 0, 0, 0, 84, 27, 0, 0, 0, 0,
+ 4, 5, 0, 6, 7, 8, 0, 0, 0, 0,
+ 0, 0, 0, 9, 10, 0, 0, 0, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 0, 0, 23, 24, 25, 26, 0, 0, 0, 0,
+ 28, 0, 0, 29, 30, 0, 0, 31, 0, 32,
+ 0, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 0, 0, 0, 0, 0,
+ 0, 47, 0, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 0, 0, 0,
+ 0, 62, 0, 0, 0, 0, 0, 63, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 418, 0, 0, 0,
+ 82, 0, 0, 0, 83, 85, 86, 0, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ 99, 100, 0, 101, 102, 103, 0, 104, 0, 0,
+ 0, 84, 27, 0, 0, 0, 0, 4, 5, 0,
+ 6, 7, 8, 0, 0, 0, 0, 0, 0, 0,
+ 9, 10, 0, 0, 0, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 0, 0, 23,
+ 24, 25, 26, 0, 0, 0, 0, 28, 0, 0,
+ 29, 30, 0, 0, 31, 0, 32, 0, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 0, 0, 0, 0, 0, 0, 47, 0,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 0, 0, 0, 0, 62, 0,
+ 0, 0, 0, 0, 63, 0, 0, 0, 0, 0,
+ 0, 267, 0, 0, 0, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 0, 0, 0, 0, 82, 0, 0,
+ 0, 83, 85, 86, 0, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 0,
+ 101, 102, 103, 0, 104, 0, 0, 0, 84, 27,
+ 0, 0, 0, 0, 145, 0, 5, 0, 6, 7,
+ 8, 0, 0, 146, 0, 0, 147, 0, 0, 0,
+ 0, 0, 0, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 0, 0, 23, 24, 25,
+ 26, 0, 0, 0, 148, 28, 0, 0, 29, 0,
+ 0, 149, 0, 0, 32, 150, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 151, 0, 0, 0, 0, 0, 0, 0, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 0, 0, 0, 152, 0, 0, 0, 153,
+ 154, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 155, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 0, 0, 156, 0, 82, 0, 0, 0, 0,
+ 85, 86, 157, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 158, 101, 102,
+ 103, 0, 104, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 145, 0, 5, 0, 6, 7, 8, 0,
+ 0, 146, 0, 0, 147, 0, 0, 0, 0, 0,
+ 0, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 0, 0, 23, 24, 25, 26, 0,
+ 0, 0, 148, 28, 0, 0, 29, 0, 0, 149,
+ 0, 0, 32, 150, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 151, 0,
+ 0, 0, 0, 0, 0, 0, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 0, 0, 0, 152, 0, 0, 0, 153, 154, 0,
+ 0, 0, 0, 0, 0, 0, 188, 0, 0, 0,
+ 155, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 0,
+ 0, 156, 0, 82, 0, 0, 0, 0, 85, 86,
+ 157, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 158, 101, 102, 103, 0,
+ 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 145, 0, 5, 0, 6, 7, 8, 0, 0, 146,
+ 0, 0, 147, 0, 0, 0, 0, 0, 0, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 0, 0, 23, 24, 25, 26, 0, 0, 0,
+ 148, 28, 0, 0, 29, 0, 0, 149, 0, 0,
+ 32, 150, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 151, 0, 0, 0,
+ 0, 0, 0, 0, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 0, 0,
+ 0, 152, 0, 0, 0, 153, 154, 0, 0, 0,
+ 0, 0, 0, 0, 452, 0, 0, 0, 155, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 0, 0, 156,
+ 0, 82, 0, 0, 0, 0, 85, 86, 157, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 158, 101, 102, 103, 0, 104, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 145, 0,
+ 5, 0, 6, 7, 8, 0, 0, 146, 0, 0,
+ 147, 0, 0, 0, 0, 0, 0, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 0,
+ 0, 23, 24, 25, 26, 0, 0, 0, 148, 28,
+ 0, 0, 29, 0, 0, 149, 0, 0, 32, 150,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 151, 0, 0, 0, 0, 0,
+ 0, 0, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 0, 0, 0, 152,
+ 0, 0, 0, 153, 154, 0, 0, 0, 0, 0,
+ 0, 0, 206, 0, 0, 0, 155, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 0, 0, 156, 0, 82,
+ 0, 0, 0, 0, 85, 86, 157, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 158, 101, 102, 103, 0, 104, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 145, 0, 5, 0,
+ 6, 7, 8, 0, 0, 146, 0, 0, 147, 0,
+ 0, 0, 0, 0, 0, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 0, 0, 23,
+ 24, 25, 26, 0, 0, 0, 148, 28, 0, 0,
+ 29, 0, 0, 149, 0, 0, 32, 284, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 151, 0, 0, 0, 0, 0, 0, 0,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 0, 0, 0, 152, 0, 0,
+ 0, 153, 154, 0, 0, 285, 0, 0, 0, 0,
+ 0, 0, 0, 0, 155, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 286, 0, 156, 0, 82, 0, 0,
+ 0, 0, 85, 86, 157, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 158,
+ 101, 102, 103, 0, 104, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 145, 4, 5, 0, 6, 7,
+ 8, 0, 0, 146, 0, 0, 147, 0, 9, 10,
+ 0, 0, 0, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 0, 0, 23, 24, 25,
+ 26, 0, 0, 0, 148, 28, 0, 0, 29, 30,
+ 0, 149, 31, 0, 32, 150, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 151, 0, 0, 0, 0, 0, 47, 0, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 0, 0, 0, 152, 62, 0, 0, 153,
+ 154, 0, 63, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 155, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 0, 0, 156, 0, 82, 0, 0, 0, 83,
+ 85, 86, 157, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 158, 101, 102,
+ 103, 0, 104, 0, 0, 0, 84, 27, 0, 0,
+ 0, 0, 145, 4, 5, 0, 6, 7, 8, 0,
+ 0, 146, 0, 0, 147, 0, 9, 10, 0, 0,
+ 0, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 0, 0, 23, 24, 25, 26, 0,
+ 0, 0, 148, 28, 0, 0, 29, 30, 0, 149,
+ 31, 0, 32, 284, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 151, 0,
+ 0, 0, 0, 0, 47, 0, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 0, 0, 0, 152, 62, 0, 0, 153, 154, 0,
+ 63, 285, 0, 0, 0, 0, 0, 0, 0, 0,
+ 155, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 355,
+ 0, 156, 0, 82, 0, 0, 0, 83, 85, 86,
+ 157, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 158, 101, 102, 103, 0,
+ 104, 0, 0, 0, 84, 27, 0, 0, 0, 0,
+ 145, 4, 5, 344, 6, 7, 8, 0, 345, 146,
+ 0, 0, 147, 346, 9, 10, 347, 348, 0, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 349, 0, 23, 24, 25, 26, 0, 0, 0,
+ 148, 28, 350, 0, 29, 30, 351, 149, 31, 0,
+ 32, 284, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 151, 0, 0, 341,
+ 0, 0, 47, 0, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 0, 0,
+ 0, 152, 62, 0, 0, 153, 154, 0, 63, 285,
+ 0, 353, 0, 0, 0, 0, 0, 0, 155, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 355, 0, 156,
+ 0, 82, 0, 0, 356, 83, 85, 86, 157, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 158, 101, 102, 103, 0, 104, 357,
+ 0, 0, 84, 27, 0, 0, 0, 0, 145, 4,
+ 5, 344, 6, 7, 8, 0, 345, 146, 0, 0,
+ 147, 346, 9, 10, 347, 348, 0, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 349,
+ 0, 23, 24, 25, 26, 0, 0, 0, 148, 28,
+ 350, 0, 29, 30, 351, 149, 31, 0, 32, 284,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 151, 0, 0, 352, 0, 0,
+ 47, 0, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 0, 0, 0, 152,
+ 62, 0, 0, 153, 154, 0, 63, 285, 0, 353,
+ 0, 0, 0, 0, 0, 0, 155, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 355, 0, 156, 0, 82,
+ 0, 0, 356, 83, 85, 86, 157, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 158, 101, 102, 103, 0, 104, 357, 0, 0,
+ 84, 27, 0, 0, 0, 0, 145, 4, 5, 344,
+ 6, 7, 8, 0, 345, 146, 0, 0, 147, 346,
+ 9, 10, 347, 348, 0, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 349, 0, 23,
+ 24, 25, 26, 0, 0, 0, 148, 28, 350, 0,
+ 29, 30, 351, 149, 31, 0, 32, 284, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 151, 0, 0, 352, 0, 0, 47, 0,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 0, 0, 0, 152, 62, 0,
+ 0, 153, 154, 0, 63, 285, 0, 353, 0, 0,
+ 434, 0, 0, 0, 155, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 355, 0, 156, 0, 82, 0, 0,
+ 356, 83, 85, 86, 157, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 158,
+ 101, 102, 103, 0, 104, 357, 0, 0, 84, 27,
+ 0, 0, 0, 0, 145, 4, 5, 344, 6, 7,
+ 8, 0, 345, 146, 0, 0, 147, 346, 9, 10,
+ 347, 348, 0, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 349, 0, 23, 24, 25,
+ 26, 0, 0, 0, 148, 28, 350, 0, 29, 30,
+ 351, 149, 31, 0, 32, 284, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 151, 0, 0, 352, 0, 0, 47, 0, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 0, 0, 0, 152, 62, 0, 0, 153,
+ 154, 0, 63, 285, 0, 353, 0, 0, 416, 0,
+ 0, 0, 155, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 355, 0, 156, 0, 82, 0, 0, 356, 83,
+ 85, 86, 157, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 158, 101, 102,
+ 103, 0, 104, 357, 0, 0, 84, 27, 0, 0,
+ 0, 0, 145, 4, 5, 344, 6, 7, 8, 0,
+ 345, 146, 0, 0, 147, 346, 9, 10, 347, 348,
+ 0, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 349, 0, 23, 24, 25, 26, 0,
+ 0, 0, 148, 28, 350, 0, 29, 30, 351, 149,
+ 31, 0, 32, 284, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 151, 0,
+ 0, 352, 0, 0, 47, 0, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 0, 0, 0, 152, 62, 0, 0, 153, 154, 0,
+ 63, 285, 0, 353, 0, 0, 354, 0, 0, 0,
+ 155, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 355,
+ 0, 156, 0, 82, 0, 0, 356, 83, 85, 86,
+ 157, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 158, 101, 102, 103, 0,
+ 104, 357, 0, 0, 84, 27, 0, 0, 0, 0,
+ 145, 4, 5, 344, 6, 7, 8, 0, 345, 146,
+ 0, 0, 147, 346, 9, 10, 347, 348, 0, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 349, 0, 23, 24, 25, 26, 0, 0, 0,
+ 148, 28, 350, 0, 29, 30, 351, 149, 31, 0,
+ 32, 284, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 151, 0, 0, 352,
+ 0, 0, 47, 0, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 0, 0,
+ 0, 152, 62, 0, 0, 153, 154, 0, 63, 285,
+ 0, 353, 0, 0, 414, 0, 0, 0, 155, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 355, 0, 156,
+ 0, 82, 0, 0, 356, 83, 85, 86, 157, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 158, 101, 102, 103, 0, 104, 357,
+ 0, 0, 84, 27, 0, 0, 0, 0,
- 242, 406, 398, 422, 408, 178, 137, 190, 186, 215,
- 214, 213, 136, 193, 111, 202, 183, 141, 282, 374,
- 419, 372, 340, 302, 283, 262, 261, 335, 330, 382,
- 253, 310, 238, 303, 187, 343, 255, 406, 265, 372,
- 310, 0, 0, 310, 198, 198, 209, 216, 310, 310,
- 198, 310, 0, 198, 0, 198, 198, 198, 198, 218,
- 221, 234, 226, 196, 198, 245, 198, 198, 372, 310,
- 166, 0, 184, 138, 252, 247, 185, 447, 250, 372,
- 444, 198, 198, 372, 230, 440, 318, 417, 315, 236,
- 372, 372, 165, 198, 198, 198, 198, 231, 229, 198,
- 233, 372, 372, 232, 300, 389, 405, 196, 338, 313,
- 166, 166, 0, 198, 372, 0, 0, 0, 401, 166,
- 0, 287, 295, 166, 166, 0, 196, 417, 458, 198,
- 0, 411, 165, 165, 451, 425, 198, 336, 417, 379,
- 337, 165, 196, 300, 268, 165, 165, 164, 0, 196,
- 0, 333, 386, 198, 189, 372, 387, 0, 415, 426,
- 287, 295, 393, 189, 401, 0, 196, 189, 442, 0,
- 0, 0, 432, 389, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 396, 0, 0, 0, 0,
- 0, 395, 0, 413, 0, 0, 392, 0, 0, 0,
- 0, 305, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 393, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 389, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 396,
- 0, 0, 0, 0, 0, 395, 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, 430, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
-};
+ 242, 406, 398, 422, 408, 178, 137, 190, 186, 215,
+ 214, 213, 136, 193, 111, 202, 183, 141, 282, 374,
+ 419, 372, 340, 302, 283, 262, 261, 335, 330, 382,
+ 253, 310, 238, 303, 187, 343, 255, 406, 265, 372,
+ 310, 0, 0, 310, 198, 198, 209, 216, 310, 310,
+ 198, 310, 0, 198, 0, 198, 198, 198, 198, 218,
+ 221, 234, 226, 196, 198, 245, 198, 198, 372, 310,
+ 166, 0, 184, 138, 252, 247, 185, 447, 250, 372,
+ 444, 198, 198, 372, 230, 440, 318, 417, 315, 236,
+ 372, 372, 165, 198, 198, 198, 198, 231, 229, 198,
+ 233, 372, 372, 232, 300, 389, 405, 196, 338, 313,
+ 166, 166, 0, 198, 372, 0, 0, 0, 401, 166,
+ 0, 287, 295, 166, 166, 0, 196, 417, 458, 198,
+ 0, 411, 165, 165, 451, 425, 198, 336, 417, 379,
+ 337, 165, 196, 300, 268, 165, 165, 164, 0, 196,
+ 0, 333, 386, 198, 189, 372, 387, 0, 415, 426,
+ 287, 295, 393, 189, 401, 0, 196, 189, 442, 0,
+ 0, 0, 432, 389, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 396, 0, 0, 0, 0,
+ 0, 395, 0, 413, 0, 0, 392, 0, 0, 0,
+ 0, 305, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 393, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 389, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 396,
+ 0, 0, 0, 0, 0, 395, 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, 430, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0};
const short GLSLParserTable::action_check [] = {
- 79, 77, 45, 6, 18, 52, 76, 114, 111, 168,
- 79, 45, 52, 134, 76, 17, 134, 52, 45, 77,
- 134, 112, 79, 79, 45, 79, 79, 112, 114, 134,
- 79, 168, 164, 79, 112, 112, 52, 4, 166, 114,
- 6, 134, 79, 44, 134, 18, 114, 52, 18, 45,
- 134, 164, 52, 134, 79, 52, 45, 52, 0, 114,
- 134, 99, 52, 18, 112, 4, 18, 112, 112, 79,
- 52, 77, 18, 18, 78, 18, 17, 18, 77, 54,
- 18, 52, 18, 45, 52, 78, 78, 1, 2, 21,
- 17, 18, 21, 78, 18, 46, 76, 18, 76, 18,
- 54, 18, 18, 21, 78, 18, 46, 101, 76, 113,
- 54, 45, -1, 107, -1, 77, 104, 54, -1, 56,
- 113, 113, -1, 51, 19, -1, -1, 102, 113, -1,
- 50, -1, -1, -1, -1, 134, -1, -1, -1, 113,
- 50, 104, -1, 77, 104, 79, 97, 135, 102, 137,
- 22, -1, -1, 81, 74, -1, 134, 97, 102, 54,
- 80, 56, 50, 134, 74, 102, 94, 39, -1, 114,
- 80, 114, 135, 105, 137, 135, 105, 137, 114, -1,
- -1, -1, 19, 55, -1, -1, 74, 105, 134, 109,
- -1, -1, 80, -1, 7, 14, 134, 114, 114, 109,
- 3, 114, 5, 16, -1, 77, 19, 102, -1, -1,
- 134, -1, -1, 134, 7, 134, 160, 54, -1, 56,
- -1, 109, 25, 16, 7, -1, 19, -1, -1, -1,
- -1, -1, -1, 16, 47, -1, 19, -1, -1, -1,
- -1, 54, 45, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 47, -1, -1, -1, -1, -1,
- -1, 54, -1, -1, 47, 102, -1, -1, -1, 52,
- -1, 54, 75, -1, -1, -1, -1, 114, -1, -1,
- -1, -1, -1, -1, -1, 98, -1, -1, -1, 102,
- 103, -1, 95, 96, -1, -1, -1, 100, -1, -1,
- -1, -1, 115, -1, -1, 98, -1, 110, -1, 102,
- 103, -1, -1, -1, -1, 98, -1, -1, -1, 102,
- 103, -1, 115, 136, -1, -1, -1, -1, -1, -1,
- -1, -1, 115, -1, -1, -1, -1, 140, -1, -1,
- -1, -1, -1, 136, -1, -1, -1, 160, -1, -1,
- -1, -1, 145, 136, -1, -1, 7, -1, -1, -1,
- -1, -1, 145, -1, 167, 16, -1, 160, 19, -1,
- -1, -1, -1, -1, -1, -1, -1, 160, -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, 54, -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, 102, 103, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 115, -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, 145, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 160,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 9, -1, 11, 12, 13, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, -1, -1, 40, 41, 42, 43, -1,
- -1, -1, -1, 48, -1, -1, -1, -1, -1, -1,
- -1, -1, 57, -1, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, -1,
- -1, -1, -1, 138, -1, -1, -1, -1, 143, 144,
- -1, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, -1, 161, 162, 163, -1,
- 165, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 9, -1, 11, 12, 13, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, -1,
- -1, 40, 41, 42, 43, -1, -1, -1, -1, 48,
- -1, -1, 51, -1, -1, -1, -1, -1, 57, -1,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, -1, -1, -1, -1, -1, -1,
- -1, -1, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, -1, -1, -1, -1, 138,
- -1, -1, -1, -1, 143, 144, -1, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, -1, 161, 162, 163, -1, 165, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 9, -1, 11, 12,
- 13, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, -1, -1, 40, 41, 42,
- 43, -1, -1, -1, -1, 48, -1, -1, 51, 52,
- -1, -1, -1, -1, 57, -1, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- -1, -1, -1, -1, -1, -1, -1, -1, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, -1, -1, -1, -1, 138, -1, -1, -1, -1,
- 143, 144, -1, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, -1, 161, 162,
- 163, -1, 165, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 9, -1, 11, 12, 13, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, -1, -1, 40, 41, 42, 43, -1, -1, -1,
- -1, 48, -1, -1, 51, 52, -1, -1, -1, -1,
- 57, -1, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, -1, -1, -1, -1,
- -1, -1, -1, -1, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, -1, -1,
- -1, 138, -1, -1, -1, -1, 143, 144, -1, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, -1, 161, 162, 163, -1, 165, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 8, 9,
- -1, 11, 12, 13, -1, -1, -1, -1, -1, -1,
- -1, 21, 22, -1, -1, -1, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, -1, -1,
- 40, 41, 42, 43, -1, -1, -1, -1, 48, -1,
- -1, 51, 52, -1, -1, 55, -1, 57, -1, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, -1, -1, -1, -1, -1, -1, 79,
- -1, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, -1, -1, -1, -1, 99,
- -1, -1, -1, -1, -1, 105, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
- 130, 131, 132, 133, -1, -1, -1, -1, 138, -1,
- -1, -1, 142, 143, 144, -1, 146, 147, 148, 149,
- 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
- -1, 161, 162, 163, -1, 165, -1, -1, -1, 169,
- 170, -1, -1, -1, -1, 8, 9, -1, 11, 12,
- 13, -1, -1, -1, -1, -1, -1, -1, 21, 22,
- -1, -1, -1, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, -1, -1, 40, 41, 42,
- 43, -1, -1, -1, -1, 48, -1, -1, 51, 52,
- -1, -1, 55, -1, 57, -1, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- -1, -1, -1, -1, -1, -1, 79, -1, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, -1, -1, -1, -1, 99, -1, -1, -1,
- -1, -1, 105, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, -1, -1, -1, -1, 138, -1, -1, -1, 142,
- 143, 144, -1, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, -1, 161, 162,
- 163, -1, 165, -1, -1, -1, 169, 170, -1, -1,
- -1, -1, 8, 9, -1, 11, 12, 13, -1, -1,
- -1, -1, -1, -1, -1, 21, 22, -1, -1, -1,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, -1, -1, 40, 41, 42, 43, -1, -1,
- -1, -1, 48, -1, -1, 51, 52, -1, -1, 55,
- -1, 57, -1, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, -1, -1, -1,
- -1, -1, -1, 79, -1, 81, 82, 83, 84, 85,
- 86, 87, 88, 89, 90, 91, 92, 93, 94, -1,
- -1, -1, -1, 99, -1, -1, -1, -1, -1, 105,
- -1, -1, -1, -1, -1, -1, 112, -1, -1, -1,
- 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
- 126, 127, 128, 129, 130, 131, 132, 133, -1, -1,
- -1, -1, 138, -1, -1, -1, 142, 143, 144, -1,
- 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
- 156, 157, 158, 159, -1, 161, 162, 163, -1, 165,
- -1, -1, -1, 169, 170, -1, -1, -1, -1, 8,
- 9, -1, 11, 12, 13, -1, -1, -1, -1, -1,
- -1, -1, 21, 22, -1, -1, -1, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, -1,
- -1, 40, 41, 42, 43, -1, -1, -1, -1, 48,
- -1, -1, 51, 52, -1, -1, 55, -1, 57, -1,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, -1, -1, -1, -1, -1, -1,
- 79, -1, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, -1, -1, -1, -1,
- 99, -1, -1, -1, -1, -1, 105, -1, -1, -1,
- -1, -1, -1, 112, -1, -1, -1, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, -1, -1, -1, -1, 138,
- -1, -1, -1, 142, 143, 144, -1, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, -1, 161, 162, 163, -1, 165, -1, -1, -1,
- 169, 170, -1, -1, -1, -1, 8, 9, -1, 11,
- 12, 13, -1, -1, -1, -1, -1, -1, -1, 21,
- 22, -1, -1, -1, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, -1, -1, 40, 41,
- 42, 43, -1, -1, -1, -1, 48, -1, -1, 51,
- 52, -1, -1, 55, -1, 57, -1, 59, 60, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, -1, -1, -1, -1, -1, -1, 79, -1, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, -1, -1, -1, -1, 99, -1, -1,
- -1, -1, -1, 105, -1, -1, -1, -1, -1, -1,
- 112, -1, -1, -1, 116, 117, 118, 119, 120, 121,
- 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
- 132, 133, -1, -1, -1, -1, 138, -1, -1, -1,
- 142, 143, 144, -1, 146, 147, 148, 149, 150, 151,
- 152, 153, 154, 155, 156, 157, 158, 159, -1, 161,
- 162, 163, -1, 165, -1, -1, -1, 169, 170, -1,
- -1, -1, -1, 8, 9, -1, 11, 12, 13, -1,
- -1, -1, -1, -1, -1, -1, 21, 22, -1, -1,
- -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, -1, -1, 40, 41, 42, 43, -1,
- -1, -1, -1, 48, -1, -1, 51, 52, -1, -1,
- 55, -1, 57, -1, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, -1, -1,
- -1, -1, -1, -1, 79, -1, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- -1, -1, -1, -1, 99, -1, -1, -1, -1, -1,
- 105, -1, -1, -1, -1, -1, -1, 112, -1, -1,
- -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, -1,
- -1, -1, -1, 138, -1, -1, -1, 142, 143, 144,
- -1, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, -1, 161, 162, 163, -1,
- 165, -1, -1, -1, 169, 170, -1, -1, -1, -1,
- 8, 9, -1, 11, 12, 13, -1, -1, -1, -1,
- -1, -1, -1, 21, 22, -1, -1, -1, 26, 27,
- 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
- -1, -1, 40, 41, 42, 43, -1, -1, -1, -1,
- 48, -1, -1, 51, 52, -1, -1, 55, -1, 57,
- -1, 59, 60, 61, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, -1, -1, -1, -1, -1,
- -1, 79, -1, 81, 82, 83, 84, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, -1, -1, -1,
- -1, 99, -1, -1, -1, -1, -1, 105, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 116, 117,
- 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
- 128, 129, 130, 131, 132, 133, 134, -1, -1, -1,
- 138, -1, -1, -1, 142, 143, 144, -1, 146, 147,
- 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
- 158, 159, -1, 161, 162, 163, -1, 165, -1, -1,
- -1, 169, 170, -1, -1, -1, -1, 8, 9, -1,
- 11, 12, 13, -1, -1, -1, -1, -1, -1, -1,
- 21, 22, -1, -1, -1, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, -1, -1, 40,
- 41, 42, 43, -1, -1, -1, -1, 48, -1, -1,
- 51, 52, -1, -1, 55, -1, 57, -1, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, -1, -1, -1, -1, -1, -1, 79, -1,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, -1, -1, -1, -1, 99, -1,
- -1, -1, -1, -1, 105, -1, -1, -1, -1, -1,
- -1, 112, -1, -1, -1, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, -1, -1, -1, -1, 138, -1, -1,
- -1, 142, 143, 144, -1, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 157, 158, 159, -1,
- 161, 162, 163, -1, 165, -1, -1, -1, 169, 170,
- -1, -1, -1, -1, 7, -1, 9, -1, 11, 12,
- 13, -1, -1, 16, -1, -1, 19, -1, -1, -1,
- -1, -1, -1, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, -1, -1, 40, 41, 42,
- 43, -1, -1, -1, 47, 48, -1, -1, 51, -1,
- -1, 54, -1, -1, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, -1, -1, -1, -1, -1, -1, -1, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, -1, -1, -1, 98, -1, -1, -1, 102,
- 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, -1, -1, 136, -1, 138, -1, -1, -1, -1,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, -1, 165, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 7, -1, 9, -1, 11, 12, 13, -1,
- -1, 16, -1, -1, 19, -1, -1, -1, -1, -1,
- -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, -1, -1, 40, 41, 42, 43, -1,
- -1, -1, 47, 48, -1, -1, 51, -1, -1, 54,
- -1, -1, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, -1,
- -1, -1, -1, -1, -1, -1, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- -1, -1, -1, 98, -1, -1, -1, 102, 103, -1,
- -1, -1, -1, -1, -1, -1, 111, -1, -1, -1,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, -1,
- -1, 136, -1, 138, -1, -1, -1, -1, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, -1,
- 165, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 7, -1, 9, -1, 11, 12, 13, -1, -1, 16,
- -1, -1, 19, -1, -1, -1, -1, -1, -1, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, -1, -1, 40, 41, 42, 43, -1, -1, -1,
- 47, 48, -1, -1, 51, -1, -1, 54, -1, -1,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, -1, -1, -1,
- -1, -1, -1, -1, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, -1, -1,
- -1, 98, -1, -1, -1, 102, 103, -1, -1, -1,
- -1, -1, -1, -1, 111, -1, -1, -1, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, -1, -1, 136,
- -1, 138, -1, -1, -1, -1, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, -1, 165, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 7, -1,
- 9, -1, 11, 12, 13, -1, -1, 16, -1, -1,
- 19, -1, -1, -1, -1, -1, -1, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, -1,
- -1, 40, 41, 42, 43, -1, -1, -1, 47, 48,
- -1, -1, 51, -1, -1, 54, -1, -1, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, -1, -1, -1, -1, -1,
- -1, -1, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, -1, -1, -1, 98,
- -1, -1, -1, 102, 103, -1, -1, -1, -1, -1,
- -1, -1, 111, -1, -1, -1, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, -1, -1, 136, -1, 138,
- -1, -1, -1, -1, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, -1, 165, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 7, -1, 9, -1,
- 11, 12, 13, -1, -1, 16, -1, -1, 19, -1,
- -1, -1, -1, -1, -1, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, -1, -1, 40,
- 41, 42, 43, -1, -1, -1, 47, 48, -1, -1,
- 51, -1, -1, 54, -1, -1, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, -1, -1, -1, -1, -1, -1, -1,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, -1, -1, -1, 98, -1, -1,
- -1, 102, 103, -1, -1, 106, -1, -1, -1, -1,
- -1, -1, -1, -1, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, 134, -1, 136, -1, 138, -1, -1,
- -1, -1, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, -1, 165, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 7, 8, 9, -1, 11, 12,
- 13, -1, -1, 16, -1, -1, 19, -1, 21, 22,
- -1, -1, -1, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, -1, -1, 40, 41, 42,
- 43, -1, -1, -1, 47, 48, -1, -1, 51, 52,
- -1, 54, 55, -1, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, -1, -1, -1, -1, -1, 79, -1, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, -1, -1, -1, 98, 99, -1, -1, 102,
- 103, -1, 105, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, -1, -1, 136, -1, 138, -1, -1, -1, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, -1, 165, -1, -1, -1, 169, 170, -1, -1,
- -1, -1, 7, 8, 9, -1, 11, 12, 13, -1,
- -1, 16, -1, -1, 19, -1, 21, 22, -1, -1,
- -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, -1, -1, 40, 41, 42, 43, -1,
- -1, -1, 47, 48, -1, -1, 51, 52, -1, 54,
- 55, -1, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, -1,
- -1, -1, -1, -1, 79, -1, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- -1, -1, -1, 98, 99, -1, -1, 102, 103, -1,
- 105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- -1, 136, -1, 138, -1, -1, -1, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, -1,
- 165, -1, -1, -1, 169, 170, -1, -1, -1, -1,
- 7, 8, 9, 10, 11, 12, 13, -1, 15, 16,
- -1, -1, 19, 20, 21, 22, 23, 24, -1, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, -1, 40, 41, 42, 43, -1, -1, -1,
- 47, 48, 49, -1, 51, 52, 53, 54, 55, -1,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, -1, -1, 76,
- -1, -1, 79, -1, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, -1, -1,
- -1, 98, 99, -1, -1, 102, 103, -1, 105, 106,
- -1, 108, -1, -1, -1, -1, -1, -1, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, -1, 136,
- -1, 138, -1, -1, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, -1, 165, 166,
- -1, -1, 169, 170, -1, -1, -1, -1, 7, 8,
- 9, 10, 11, 12, 13, -1, 15, 16, -1, -1,
- 19, 20, 21, 22, 23, 24, -1, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- -1, 40, 41, 42, 43, -1, -1, -1, 47, 48,
- 49, -1, 51, 52, 53, 54, 55, -1, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, -1, -1, 76, -1, -1,
- 79, -1, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, -1, -1, -1, 98,
- 99, -1, -1, 102, 103, -1, 105, 106, -1, 108,
- -1, -1, -1, -1, -1, -1, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, -1, 136, -1, 138,
- -1, -1, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, -1, 165, 166, -1, -1,
- 169, 170, -1, -1, -1, -1, 7, 8, 9, 10,
- 11, 12, 13, -1, 15, 16, -1, -1, 19, 20,
- 21, 22, 23, 24, -1, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, 38, -1, 40,
- 41, 42, 43, -1, -1, -1, 47, 48, 49, -1,
- 51, 52, 53, 54, 55, -1, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, -1, -1, 76, -1, -1, 79, -1,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, -1, -1, -1, 98, 99, -1,
- -1, 102, 103, -1, 105, 106, -1, 108, -1, -1,
- 111, -1, -1, -1, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, 134, -1, 136, -1, 138, -1, -1,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, -1, 165, 166, -1, -1, 169, 170,
- -1, -1, -1, -1, 7, 8, 9, 10, 11, 12,
- 13, -1, 15, 16, -1, -1, 19, 20, 21, 22,
- 23, 24, -1, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, -1, 40, 41, 42,
- 43, -1, -1, -1, 47, 48, 49, -1, 51, 52,
- 53, 54, 55, -1, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, -1, -1, 76, -1, -1, 79, -1, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, -1, -1, -1, 98, 99, -1, -1, 102,
- 103, -1, 105, 106, -1, 108, -1, -1, 111, -1,
- -1, -1, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, -1, 136, -1, 138, -1, -1, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, -1, 165, 166, -1, -1, 169, 170, -1, -1,
- -1, -1, 7, 8, 9, 10, 11, 12, 13, -1,
- 15, 16, -1, -1, 19, 20, 21, 22, 23, 24,
- -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, -1, 40, 41, 42, 43, -1,
- -1, -1, 47, 48, 49, -1, 51, 52, 53, 54,
- 55, -1, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, -1,
- -1, 76, -1, -1, 79, -1, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- -1, -1, -1, 98, 99, -1, -1, 102, 103, -1,
- 105, 106, -1, 108, -1, -1, 111, -1, -1, -1,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- -1, 136, -1, 138, -1, -1, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, -1,
- 165, 166, -1, -1, 169, 170, -1, -1, -1, -1,
- 7, 8, 9, 10, 11, 12, 13, -1, 15, 16,
- -1, -1, 19, 20, 21, 22, 23, 24, -1, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, -1, 40, 41, 42, 43, -1, -1, -1,
- 47, 48, 49, -1, 51, 52, 53, 54, 55, -1,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, -1, -1, 76,
- -1, -1, 79, -1, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, -1, -1,
- -1, 98, 99, -1, -1, 102, 103, -1, 105, 106,
- -1, 108, -1, -1, 111, -1, -1, -1, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, -1, 136,
- -1, 138, -1, -1, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, -1, 165, 166,
- -1, -1, 169, 170, -1, -1, -1, -1,
+ 79, 77, 45, 6, 18, 52, 76, 114, 111, 168,
+ 79, 45, 52, 134, 76, 17, 134, 52, 45, 77,
+ 134, 112, 79, 79, 45, 79, 79, 112, 114, 134,
+ 79, 168, 164, 79, 112, 112, 52, 4, 166, 114,
+ 6, 134, 79, 44, 134, 18, 114, 52, 18, 45,
+ 134, 164, 52, 134, 79, 52, 45, 52, 0, 114,
+ 134, 99, 52, 18, 112, 4, 18, 112, 112, 79,
+ 52, 77, 18, 18, 78, 18, 17, 18, 77, 54,
+ 18, 52, 18, 45, 52, 78, 78, 1, 2, 21,
+ 17, 18, 21, 78, 18, 46, 76, 18, 76, 18,
+ 54, 18, 18, 21, 78, 18, 46, 101, 76, 113,
+ 54, 45, -1, 107, -1, 77, 104, 54, -1, 56,
+ 113, 113, -1, 51, 19, -1, -1, 102, 113, -1,
+ 50, -1, -1, -1, -1, 134, -1, -1, -1, 113,
+ 50, 104, -1, 77, 104, 79, 97, 135, 102, 137,
+ 22, -1, -1, 81, 74, -1, 134, 97, 102, 54,
+ 80, 56, 50, 134, 74, 102, 94, 39, -1, 114,
+ 80, 114, 135, 105, 137, 135, 105, 137, 114, -1,
+ -1, -1, 19, 55, -1, -1, 74, 105, 134, 109,
+ -1, -1, 80, -1, 7, 14, 134, 114, 114, 109,
+ 3, 114, 5, 16, -1, 77, 19, 102, -1, -1,
+ 134, -1, -1, 134, 7, 134, 160, 54, -1, 56,
+ -1, 109, 25, 16, 7, -1, 19, -1, -1, -1,
+ -1, -1, -1, 16, 47, -1, 19, -1, -1, -1,
+ -1, 54, 45, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 47, -1, -1, -1, -1, -1,
+ -1, 54, -1, -1, 47, 102, -1, -1, -1, 52,
+ -1, 54, 75, -1, -1, -1, -1, 114, -1, -1,
+ -1, -1, -1, -1, -1, 98, -1, -1, -1, 102,
+ 103, -1, 95, 96, -1, -1, -1, 100, -1, -1,
+ -1, -1, 115, -1, -1, 98, -1, 110, -1, 102,
+ 103, -1, -1, -1, -1, 98, -1, -1, -1, 102,
+ 103, -1, 115, 136, -1, -1, -1, -1, -1, -1,
+ -1, -1, 115, -1, -1, -1, -1, 140, -1, -1,
+ -1, -1, -1, 136, -1, -1, -1, 160, -1, -1,
+ -1, -1, 145, 136, -1, -1, 7, -1, -1, -1,
+ -1, -1, 145, -1, 167, 16, -1, 160, 19, -1,
+ -1, -1, -1, -1, -1, -1, -1, 160, -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, 54, -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, 102, 103, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 115, -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, 145, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 160,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 9, -1, 11, 12, 13, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, -1, -1, 40, 41, 42, 43, -1,
+ -1, -1, -1, 48, -1, -1, -1, -1, -1, -1,
+ -1, -1, 57, -1, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, -1,
+ -1, -1, -1, 138, -1, -1, -1, -1, 143, 144,
+ -1, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 155, 156, 157, 158, 159, -1, 161, 162, 163, -1,
+ 165, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 9, -1, 11, 12, 13, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, -1,
+ -1, 40, 41, 42, 43, -1, -1, -1, -1, 48,
+ -1, -1, 51, -1, -1, -1, -1, -1, 57, -1,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, -1, -1, -1, -1, -1, -1,
+ -1, -1, 81, 82, 83, 84, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, -1, -1, -1, -1, 138,
+ -1, -1, -1, -1, 143, 144, -1, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, -1, 161, 162, 163, -1, 165, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 9, -1, 11, 12,
+ 13, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, -1, -1, 40, 41, 42,
+ 43, -1, -1, -1, -1, 48, -1, -1, 51, 52,
+ -1, -1, -1, -1, 57, -1, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ -1, -1, -1, -1, -1, -1, -1, -1, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, -1, -1, -1, -1, 138, -1, -1, -1, -1,
+ 143, 144, -1, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, -1, 161, 162,
+ 163, -1, 165, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 9, -1, 11, 12, 13, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, -1, -1, 40, 41, 42, 43, -1, -1, -1,
+ -1, 48, -1, -1, 51, 52, -1, -1, -1, -1,
+ 57, -1, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, -1, -1, -1, -1,
+ -1, -1, -1, -1, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 116,
+ 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, 129, 130, 131, 132, 133, 134, -1, -1,
+ -1, 138, -1, -1, -1, -1, 143, 144, -1, 146,
+ 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
+ 157, 158, 159, -1, 161, 162, 163, -1, 165, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 8, 9,
+ -1, 11, 12, 13, -1, -1, -1, -1, -1, -1,
+ -1, 21, 22, -1, -1, -1, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, -1, -1,
+ 40, 41, 42, 43, -1, -1, -1, -1, 48, -1,
+ -1, 51, 52, -1, -1, 55, -1, 57, -1, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, -1, -1, -1, -1, -1, -1, 79,
+ -1, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, -1, -1, -1, -1, 99,
+ -1, -1, -1, -1, -1, 105, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, -1, -1, -1, -1, 138, -1,
+ -1, -1, 142, 143, 144, -1, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+ -1, 161, 162, 163, -1, 165, -1, -1, -1, 169,
+ 170, -1, -1, -1, -1, 8, 9, -1, 11, 12,
+ 13, -1, -1, -1, -1, -1, -1, -1, 21, 22,
+ -1, -1, -1, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, -1, -1, 40, 41, 42,
+ 43, -1, -1, -1, -1, 48, -1, -1, 51, 52,
+ -1, -1, 55, -1, 57, -1, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ -1, -1, -1, -1, -1, -1, 79, -1, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, -1, -1, -1, -1, 99, -1, -1, -1,
+ -1, -1, 105, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, -1, -1, -1, -1, 138, -1, -1, -1, 142,
+ 143, 144, -1, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, -1, 161, 162,
+ 163, -1, 165, -1, -1, -1, 169, 170, -1, -1,
+ -1, -1, 8, 9, -1, 11, 12, 13, -1, -1,
+ -1, -1, -1, -1, -1, 21, 22, -1, -1, -1,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, -1, -1, 40, 41, 42, 43, -1, -1,
+ -1, -1, 48, -1, -1, 51, 52, -1, -1, 55,
+ -1, 57, -1, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, -1, -1, -1,
+ -1, -1, -1, 79, -1, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, -1,
+ -1, -1, -1, 99, -1, -1, -1, -1, -1, 105,
+ -1, -1, -1, -1, -1, -1, 112, -1, -1, -1,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, -1, -1,
+ -1, -1, 138, -1, -1, -1, 142, 143, 144, -1,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, -1, 161, 162, 163, -1, 165,
+ -1, -1, -1, 169, 170, -1, -1, -1, -1, 8,
+ 9, -1, 11, 12, 13, -1, -1, -1, -1, -1,
+ -1, -1, 21, 22, -1, -1, -1, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, -1,
+ -1, 40, 41, 42, 43, -1, -1, -1, -1, 48,
+ -1, -1, 51, 52, -1, -1, 55, -1, 57, -1,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, -1, -1, -1, -1, -1, -1,
+ 79, -1, 81, 82, 83, 84, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, -1, -1, -1, -1,
+ 99, -1, -1, -1, -1, -1, 105, -1, -1, -1,
+ -1, -1, -1, 112, -1, -1, -1, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, -1, -1, -1, -1, 138,
+ -1, -1, -1, 142, 143, 144, -1, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, -1, 161, 162, 163, -1, 165, -1, -1, -1,
+ 169, 170, -1, -1, -1, -1, 8, 9, -1, 11,
+ 12, 13, -1, -1, -1, -1, -1, -1, -1, 21,
+ 22, -1, -1, -1, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, -1, -1, 40, 41,
+ 42, 43, -1, -1, -1, -1, 48, -1, -1, 51,
+ 52, -1, -1, 55, -1, 57, -1, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, -1, -1, -1, -1, -1, -1, 79, -1, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, -1, -1, -1, -1, 99, -1, -1,
+ -1, -1, -1, 105, -1, -1, -1, -1, -1, -1,
+ 112, -1, -1, -1, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, -1, -1, -1, -1, 138, -1, -1, -1,
+ 142, 143, 144, -1, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, -1, 161,
+ 162, 163, -1, 165, -1, -1, -1, 169, 170, -1,
+ -1, -1, -1, 8, 9, -1, 11, 12, 13, -1,
+ -1, -1, -1, -1, -1, -1, 21, 22, -1, -1,
+ -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, -1, -1, 40, 41, 42, 43, -1,
+ -1, -1, -1, 48, -1, -1, 51, 52, -1, -1,
+ 55, -1, 57, -1, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, -1, -1,
+ -1, -1, -1, -1, 79, -1, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ -1, -1, -1, -1, 99, -1, -1, -1, -1, -1,
+ 105, -1, -1, -1, -1, -1, -1, 112, -1, -1,
+ -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, -1,
+ -1, -1, -1, 138, -1, -1, -1, 142, 143, 144,
+ -1, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 155, 156, 157, 158, 159, -1, 161, 162, 163, -1,
+ 165, -1, -1, -1, 169, 170, -1, -1, -1, -1,
+ 8, 9, -1, 11, 12, 13, -1, -1, -1, -1,
+ -1, -1, -1, 21, 22, -1, -1, -1, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ -1, -1, 40, 41, 42, 43, -1, -1, -1, -1,
+ 48, -1, -1, 51, 52, -1, -1, 55, -1, 57,
+ -1, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, -1, -1, -1, -1, -1,
+ -1, 79, -1, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, -1, -1, -1,
+ -1, 99, -1, -1, -1, -1, -1, 105, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 116, 117,
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, -1, -1, -1,
+ 138, -1, -1, -1, 142, 143, 144, -1, 146, 147,
+ 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, -1, 161, 162, 163, -1, 165, -1, -1,
+ -1, 169, 170, -1, -1, -1, -1, 8, 9, -1,
+ 11, 12, 13, -1, -1, -1, -1, -1, -1, -1,
+ 21, 22, -1, -1, -1, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, -1, -1, 40,
+ 41, 42, 43, -1, -1, -1, -1, 48, -1, -1,
+ 51, 52, -1, -1, 55, -1, 57, -1, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, -1, -1, -1, -1, -1, -1, 79, -1,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, -1, -1, -1, -1, 99, -1,
+ -1, -1, -1, -1, 105, -1, -1, -1, -1, -1,
+ -1, 112, -1, -1, -1, 116, 117, 118, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
+ 131, 132, 133, -1, -1, -1, -1, 138, -1, -1,
+ -1, 142, 143, 144, -1, 146, 147, 148, 149, 150,
+ 151, 152, 153, 154, 155, 156, 157, 158, 159, -1,
+ 161, 162, 163, -1, 165, -1, -1, -1, 169, 170,
+ -1, -1, -1, -1, 7, -1, 9, -1, 11, 12,
+ 13, -1, -1, 16, -1, -1, 19, -1, -1, -1,
+ -1, -1, -1, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, -1, -1, 40, 41, 42,
+ 43, -1, -1, -1, 47, 48, -1, -1, 51, -1,
+ -1, 54, -1, -1, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, -1, -1, -1, -1, -1, -1, -1, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, -1, -1, -1, 98, -1, -1, -1, 102,
+ 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, -1, -1, 136, -1, 138, -1, -1, -1, -1,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
+ 163, -1, 165, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 7, -1, 9, -1, 11, 12, 13, -1,
+ -1, 16, -1, -1, 19, -1, -1, -1, -1, -1,
+ -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, -1, -1, 40, 41, 42, 43, -1,
+ -1, -1, 47, 48, -1, -1, 51, -1, -1, 54,
+ -1, -1, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, -1,
+ -1, -1, -1, -1, -1, -1, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ -1, -1, -1, 98, -1, -1, -1, 102, 103, -1,
+ -1, -1, -1, -1, -1, -1, 111, -1, -1, -1,
+ 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, -1,
+ -1, 136, -1, 138, -1, -1, -1, -1, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 155, 156, 157, 158, 159, 160, 161, 162, 163, -1,
+ 165, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 7, -1, 9, -1, 11, 12, 13, -1, -1, 16,
+ -1, -1, 19, -1, -1, -1, -1, -1, -1, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, -1, -1, 40, 41, 42, 43, -1, -1, -1,
+ 47, 48, -1, -1, 51, -1, -1, 54, -1, -1,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, -1, -1, -1,
+ -1, -1, -1, -1, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, -1, -1,
+ -1, 98, -1, -1, -1, 102, 103, -1, -1, -1,
+ -1, -1, -1, -1, 111, -1, -1, -1, 115, 116,
+ 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, 129, 130, 131, 132, 133, -1, -1, 136,
+ -1, 138, -1, -1, -1, -1, 143, 144, 145, 146,
+ 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
+ 157, 158, 159, 160, 161, 162, 163, -1, 165, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 7, -1,
+ 9, -1, 11, 12, 13, -1, -1, 16, -1, -1,
+ 19, -1, -1, -1, -1, -1, -1, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, -1,
+ -1, 40, 41, 42, 43, -1, -1, -1, 47, 48,
+ -1, -1, 51, -1, -1, 54, -1, -1, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, -1, -1, -1, -1, -1,
+ -1, -1, 81, 82, 83, 84, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, -1, -1, -1, 98,
+ -1, -1, -1, 102, 103, -1, -1, -1, -1, -1,
+ -1, -1, 111, -1, -1, -1, 115, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, -1, -1, 136, -1, 138,
+ -1, -1, -1, -1, 143, 144, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, -1, 165, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 7, -1, 9, -1,
+ 11, 12, 13, -1, -1, 16, -1, -1, 19, -1,
+ -1, -1, -1, -1, -1, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, -1, -1, 40,
+ 41, 42, 43, -1, -1, -1, 47, 48, -1, -1,
+ 51, -1, -1, 54, -1, -1, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, -1, -1, -1, -1, -1, -1, -1,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, -1, -1, -1, 98, -1, -1,
+ -1, 102, 103, -1, -1, 106, -1, -1, -1, -1,
+ -1, -1, -1, -1, 115, 116, 117, 118, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
+ 131, 132, 133, 134, -1, 136, -1, 138, -1, -1,
+ -1, -1, 143, 144, 145, 146, 147, 148, 149, 150,
+ 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
+ 161, 162, 163, -1, 165, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 7, 8, 9, -1, 11, 12,
+ 13, -1, -1, 16, -1, -1, 19, -1, 21, 22,
+ -1, -1, -1, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, -1, -1, 40, 41, 42,
+ 43, -1, -1, -1, 47, 48, -1, -1, 51, 52,
+ -1, 54, 55, -1, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, -1, -1, -1, -1, -1, 79, -1, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, -1, -1, -1, 98, 99, -1, -1, 102,
+ 103, -1, 105, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, -1, -1, 136, -1, 138, -1, -1, -1, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
+ 163, -1, 165, -1, -1, -1, 169, 170, -1, -1,
+ -1, -1, 7, 8, 9, -1, 11, 12, 13, -1,
+ -1, 16, -1, -1, 19, -1, 21, 22, -1, -1,
+ -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, -1, -1, 40, 41, 42, 43, -1,
+ -1, -1, 47, 48, -1, -1, 51, 52, -1, 54,
+ 55, -1, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, -1,
+ -1, -1, -1, -1, 79, -1, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ -1, -1, -1, 98, 99, -1, -1, 102, 103, -1,
+ 105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
+ 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+ -1, 136, -1, 138, -1, -1, -1, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 155, 156, 157, 158, 159, 160, 161, 162, 163, -1,
+ 165, -1, -1, -1, 169, 170, -1, -1, -1, -1,
+ 7, 8, 9, 10, 11, 12, 13, -1, 15, 16,
+ -1, -1, 19, 20, 21, 22, 23, 24, -1, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, -1, 40, 41, 42, 43, -1, -1, -1,
+ 47, 48, 49, -1, 51, 52, 53, 54, 55, -1,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, -1, -1, 76,
+ -1, -1, 79, -1, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, -1, -1,
+ -1, 98, 99, -1, -1, 102, 103, -1, 105, 106,
+ -1, 108, -1, -1, -1, -1, -1, -1, 115, 116,
+ 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, 129, 130, 131, 132, 133, 134, -1, 136,
+ -1, 138, -1, -1, 141, 142, 143, 144, 145, 146,
+ 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
+ 157, 158, 159, 160, 161, 162, 163, -1, 165, 166,
+ -1, -1, 169, 170, -1, -1, -1, -1, 7, 8,
+ 9, 10, 11, 12, 13, -1, 15, 16, -1, -1,
+ 19, 20, 21, 22, 23, 24, -1, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ -1, 40, 41, 42, 43, -1, -1, -1, 47, 48,
+ 49, -1, 51, 52, 53, 54, 55, -1, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, -1, -1, 76, -1, -1,
+ 79, -1, 81, 82, 83, 84, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, -1, -1, -1, 98,
+ 99, -1, -1, 102, 103, -1, 105, 106, -1, 108,
+ -1, -1, -1, -1, -1, -1, 115, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, 134, -1, 136, -1, 138,
+ -1, -1, 141, 142, 143, 144, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, -1, 165, 166, -1, -1,
+ 169, 170, -1, -1, -1, -1, 7, 8, 9, 10,
+ 11, 12, 13, -1, 15, 16, -1, -1, 19, 20,
+ 21, 22, 23, 24, -1, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, -1, 40,
+ 41, 42, 43, -1, -1, -1, 47, 48, 49, -1,
+ 51, 52, 53, 54, 55, -1, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, -1, -1, 76, -1, -1, 79, -1,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, -1, -1, -1, 98, 99, -1,
+ -1, 102, 103, -1, 105, 106, -1, 108, -1, -1,
+ 111, -1, -1, -1, 115, 116, 117, 118, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
+ 131, 132, 133, 134, -1, 136, -1, 138, -1, -1,
+ 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
+ 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
+ 161, 162, 163, -1, 165, 166, -1, -1, 169, 170,
+ -1, -1, -1, -1, 7, 8, 9, 10, 11, 12,
+ 13, -1, 15, 16, -1, -1, 19, 20, 21, 22,
+ 23, 24, -1, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, -1, 40, 41, 42,
+ 43, -1, -1, -1, 47, 48, 49, -1, 51, 52,
+ 53, 54, 55, -1, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, -1, -1, 76, -1, -1, 79, -1, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, -1, -1, -1, 98, 99, -1, -1, 102,
+ 103, -1, 105, 106, -1, 108, -1, -1, 111, -1,
+ -1, -1, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, -1, 136, -1, 138, -1, -1, 141, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
+ 163, -1, 165, 166, -1, -1, 169, 170, -1, -1,
+ -1, -1, 7, 8, 9, 10, 11, 12, 13, -1,
+ 15, 16, -1, -1, 19, 20, 21, 22, 23, 24,
+ -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, -1, 40, 41, 42, 43, -1,
+ -1, -1, 47, 48, 49, -1, 51, 52, 53, 54,
+ 55, -1, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, -1,
+ -1, 76, -1, -1, 79, -1, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ -1, -1, -1, 98, 99, -1, -1, 102, 103, -1,
+ 105, 106, -1, 108, -1, -1, 111, -1, -1, -1,
+ 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+ -1, 136, -1, 138, -1, -1, 141, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 155, 156, 157, 158, 159, 160, 161, 162, 163, -1,
+ 165, 166, -1, -1, 169, 170, -1, -1, -1, -1,
+ 7, 8, 9, 10, 11, 12, 13, -1, 15, 16,
+ -1, -1, 19, 20, 21, 22, 23, 24, -1, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, -1, 40, 41, 42, 43, -1, -1, -1,
+ 47, 48, 49, -1, 51, 52, 53, 54, 55, -1,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, -1, -1, 76,
+ -1, -1, 79, -1, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, -1, -1,
+ -1, 98, 99, -1, -1, 102, 103, -1, 105, 106,
+ -1, 108, -1, -1, 111, -1, -1, -1, 115, 116,
+ 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, 129, 130, 131, 132, 133, 134, -1, 136,
+ -1, 138, -1, -1, 141, 142, 143, 144, 145, 146,
+ 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
+ 157, 158, 159, 160, 161, 162, 163, -1, 165, 166,
+ -1, -1, 169, 170, -1, -1, -1, -1,
- 12, 14, 3, 3, 3, 54, 15, 14, 55, 15,
- 15, 15, 15, 59, 3, 60, 55, 12, 12, 3,
- 3, 14, 41, 34, 15, 3, 8, 45, 14, 3,
- 3, 12, 12, 35, 55, 73, 12, 14, 35, 14,
- 12, -1, -1, 12, 15, 15, 17, 17, 12, 12,
- 15, 12, -1, 15, -1, 15, 15, 15, 15, 21,
- 20, 20, 19, 28, 15, 23, 15, 15, 14, 12,
- 14, -1, 51, 3, 25, 24, 55, 49, 26, 14,
- 49, 15, 15, 14, 18, 49, 49, 62, 49, 22,
- 14, 14, 36, 15, 15, 15, 15, 19, 18, 15,
- 19, 14, 14, 19, 14, 14, 49, 28, 14, 30,
- 14, 14, -1, 15, 14, -1, -1, -1, 64, 14,
- -1, 31, 32, 14, 14, -1, 28, 62, 30, 15,
- -1, 62, 36, 36, 37, 47, 15, 43, 62, 62,
- 46, 36, 28, 14, 30, 36, 36, 37, -1, 28,
- -1, 30, 61, 15, 58, 14, 65, -1, 71, 71,
- 31, 32, 3, 58, 64, -1, 28, 58, 30, -1,
- -1, -1, 72, 14, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 36, -1, -1, -1, -1,
- -1, 42, -1, 62, -1, -1, 47, -1, -1, -1,
- -1, 82, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 3, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 14, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 36,
- -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, 75, -1,
- -1, -1, -1, -1, -1, -1, -1, -1
-};
+ 12, 14, 3, 3, 3, 54, 15, 14, 55, 15,
+ 15, 15, 15, 59, 3, 60, 55, 12, 12, 3,
+ 3, 14, 41, 34, 15, 3, 8, 45, 14, 3,
+ 3, 12, 12, 35, 55, 73, 12, 14, 35, 14,
+ 12, -1, -1, 12, 15, 15, 17, 17, 12, 12,
+ 15, 12, -1, 15, -1, 15, 15, 15, 15, 21,
+ 20, 20, 19, 28, 15, 23, 15, 15, 14, 12,
+ 14, -1, 51, 3, 25, 24, 55, 49, 26, 14,
+ 49, 15, 15, 14, 18, 49, 49, 62, 49, 22,
+ 14, 14, 36, 15, 15, 15, 15, 19, 18, 15,
+ 19, 14, 14, 19, 14, 14, 49, 28, 14, 30,
+ 14, 14, -1, 15, 14, -1, -1, -1, 64, 14,
+ -1, 31, 32, 14, 14, -1, 28, 62, 30, 15,
+ -1, 62, 36, 36, 37, 47, 15, 43, 62, 62,
+ 46, 36, 28, 14, 30, 36, 36, 37, -1, 28,
+ -1, 30, 61, 15, 58, 14, 65, -1, 71, 71,
+ 31, 32, 3, 58, 64, -1, 28, 58, 30, -1,
+ -1, -1, 72, 14, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 36, -1, -1, -1, -1,
+ -1, 42, -1, 62, -1, -1, 47, -1, -1, -1,
+ -1, 82, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 3, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 14, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 36,
+ -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, 75, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1};
QT_END_NAMESPACE
diff --git a/src/libs/glsl/glslparsertable_p.h b/src/libs/glsl/glslparsertable_p.h
index 8abd115735..7c298263cd 100644
--- a/src/libs/glsl/glslparsertable_p.h
+++ b/src/libs/glsl/glslparsertable_p.h
@@ -1,26 +1,31 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
+** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** $QT_END_LICENSE$
**
@@ -48,221 +53,221 @@ QT_BEGIN_NAMESPACE
class GLSLParserTable
{
public:
- enum VariousConstants {
- EOF_SYMBOL = 0,
- T_ADD_ASSIGN = 3,
- T_AMPERSAND = 4,
- T_AND_ASSIGN = 5,
- T_AND_OP = 6,
- T_ATTRIBUTE = 7,
- T_BANG = 8,
- T_BOOL = 9,
- T_BREAK = 10,
- T_BVEC2 = 11,
- T_BVEC3 = 12,
- T_BVEC4 = 13,
- T_CARET = 14,
- T_CASE = 15,
- T_CENTROID = 16,
- T_COLON = 17,
- T_COMMA = 18,
- T_COMMENT = 172,
- T_CONST = 19,
- T_CONTINUE = 20,
- T_DASH = 21,
- T_DEC_OP = 22,
- T_DEFAULT = 23,
- T_DISCARD = 24,
- T_DIV_ASSIGN = 25,
- T_DMAT2 = 26,
- T_DMAT2X2 = 27,
- T_DMAT2X3 = 28,
- T_DMAT2X4 = 29,
- T_DMAT3 = 30,
- T_DMAT3X2 = 31,
- T_DMAT3X3 = 32,
- T_DMAT3X4 = 33,
- T_DMAT4 = 34,
- T_DMAT4X2 = 35,
- T_DMAT4X3 = 36,
- T_DMAT4X4 = 37,
- T_DO = 38,
- T_DOT = 39,
- T_DOUBLE = 40,
- T_DVEC2 = 41,
- T_DVEC3 = 42,
- T_DVEC4 = 43,
- T_ELSE = 44,
- T_EQUAL = 45,
- T_EQ_OP = 46,
- T_ERROR = 173,
- T_FALSE = 170,
- T_FEED_EXPRESSION = 2,
- T_FEED_GLSL = 1,
- T_FLAT = 47,
- T_FLOAT = 48,
- T_FOR = 49,
- T_GE_OP = 50,
- T_HIGHP = 51,
- T_IDENTIFIER = 52,
- T_IF = 53,
- T_IN = 54,
- T_INC_OP = 55,
- T_INOUT = 56,
- T_INT = 57,
- T_INVARIANT = 58,
- T_ISAMPLER1D = 59,
- T_ISAMPLER1DARRAY = 60,
- T_ISAMPLER2D = 61,
- T_ISAMPLER2DARRAY = 62,
- T_ISAMPLER2DMS = 63,
- T_ISAMPLER2DMSARRAY = 64,
- T_ISAMPLER2DRECT = 65,
- T_ISAMPLER3D = 66,
- T_ISAMPLERBUFFER = 67,
- T_ISAMPLERCUBE = 68,
- T_ISAMPLERCUBEARRAY = 69,
- T_IVEC2 = 70,
- T_IVEC3 = 71,
- T_IVEC4 = 72,
- T_LAYOUT = 73,
- T_LEFT_ANGLE = 74,
- T_LEFT_ASSIGN = 75,
- T_LEFT_BRACE = 76,
- T_LEFT_BRACKET = 77,
- T_LEFT_OP = 78,
- T_LEFT_PAREN = 79,
- T_LE_OP = 80,
- T_LOWP = 81,
- T_MAT2 = 82,
- T_MAT2X2 = 83,
- T_MAT2X3 = 84,
- T_MAT2X4 = 85,
- T_MAT3 = 86,
- T_MAT3X2 = 87,
- T_MAT3X3 = 88,
- T_MAT3X4 = 89,
- T_MAT4 = 90,
- T_MAT4X2 = 91,
- T_MAT4X3 = 92,
- T_MAT4X4 = 93,
- T_MEDIUMP = 94,
- T_MOD_ASSIGN = 95,
- T_MUL_ASSIGN = 96,
- T_NE_OP = 97,
- T_NOPERSPECTIVE = 98,
- T_NUMBER = 99,
- T_OR_ASSIGN = 100,
- T_OR_OP = 101,
- T_OUT = 102,
- T_PATCH = 103,
- T_PERCENT = 104,
- T_PLUS = 105,
- T_PRECISION = 106,
- T_PREPROC = 171,
- T_QUESTION = 107,
- T_RESERVED = 174,
- T_RETURN = 108,
- T_RIGHT_ANGLE = 109,
- T_RIGHT_ASSIGN = 110,
- T_RIGHT_BRACE = 111,
- T_RIGHT_BRACKET = 112,
- T_RIGHT_OP = 113,
- T_RIGHT_PAREN = 114,
- T_SAMPLE = 115,
- T_SAMPLER1D = 116,
- T_SAMPLER1DARRAY = 117,
- T_SAMPLER1DARRAYSHADOW = 118,
- T_SAMPLER1DSHADOW = 119,
- T_SAMPLER2D = 120,
- T_SAMPLER2DARRAY = 121,
- T_SAMPLER2DARRAYSHADOW = 122,
- T_SAMPLER2DMS = 123,
- T_SAMPLER2DMSARRAY = 124,
- T_SAMPLER2DRECT = 125,
- T_SAMPLER2DRECTSHADOW = 126,
- T_SAMPLER2DSHADOW = 127,
- T_SAMPLER3D = 128,
- T_SAMPLERBUFFER = 129,
- T_SAMPLERCUBE = 130,
- T_SAMPLERCUBEARRAY = 131,
- T_SAMPLERCUBEARRAYSHADOW = 132,
- T_SAMPLERCUBESHADOW = 133,
- T_SEMICOLON = 134,
- T_SLASH = 135,
- T_SMOOTH = 136,
- T_STAR = 137,
- T_STRUCT = 138,
- T_SUBROUTINE = 139,
- T_SUB_ASSIGN = 140,
- T_SWITCH = 141,
- T_TILDE = 142,
- T_TRUE = 169,
- T_TYPE_NAME = 143,
- T_UINT = 144,
- T_UNIFORM = 145,
- T_USAMPLER1D = 146,
- T_USAMPLER1DARRAY = 147,
- T_USAMPLER2D = 148,
- T_USAMPLER2DARRAY = 149,
- T_USAMPLER2DMS = 150,
- T_USAMPLER2DMSARRAY = 151,
- T_USAMPLER2DRECT = 152,
- T_USAMPLER3D = 153,
- T_USAMPLERBUFFER = 154,
- T_USAMPLERCUBE = 155,
- T_USAMPLERCUBEARRAY = 156,
- T_UVEC2 = 157,
- T_UVEC3 = 158,
- T_UVEC4 = 159,
- T_VARYING = 160,
- T_VEC2 = 161,
- T_VEC3 = 162,
- T_VEC4 = 163,
- T_VERTICAL_BAR = 164,
- T_VOID = 165,
- T_WHILE = 166,
- T_XOR_ASSIGN = 167,
- T_XOR_OP = 168,
+ enum VariousConstants {
+ EOF_SYMBOL = 0,
+ T_ADD_ASSIGN = 3,
+ T_AMPERSAND = 4,
+ T_AND_ASSIGN = 5,
+ T_AND_OP = 6,
+ T_ATTRIBUTE = 7,
+ T_BANG = 8,
+ T_BOOL = 9,
+ T_BREAK = 10,
+ T_BVEC2 = 11,
+ T_BVEC3 = 12,
+ T_BVEC4 = 13,
+ T_CARET = 14,
+ T_CASE = 15,
+ T_CENTROID = 16,
+ T_COLON = 17,
+ T_COMMA = 18,
+ T_COMMENT = 172,
+ T_CONST = 19,
+ T_CONTINUE = 20,
+ T_DASH = 21,
+ T_DEC_OP = 22,
+ T_DEFAULT = 23,
+ T_DISCARD = 24,
+ T_DIV_ASSIGN = 25,
+ T_DMAT2 = 26,
+ T_DMAT2X2 = 27,
+ T_DMAT2X3 = 28,
+ T_DMAT2X4 = 29,
+ T_DMAT3 = 30,
+ T_DMAT3X2 = 31,
+ T_DMAT3X3 = 32,
+ T_DMAT3X4 = 33,
+ T_DMAT4 = 34,
+ T_DMAT4X2 = 35,
+ T_DMAT4X3 = 36,
+ T_DMAT4X4 = 37,
+ T_DO = 38,
+ T_DOT = 39,
+ T_DOUBLE = 40,
+ T_DVEC2 = 41,
+ T_DVEC3 = 42,
+ T_DVEC4 = 43,
+ T_ELSE = 44,
+ T_EQUAL = 45,
+ T_EQ_OP = 46,
+ T_ERROR = 173,
+ T_FALSE = 170,
+ T_FEED_EXPRESSION = 2,
+ T_FEED_GLSL = 1,
+ T_FLAT = 47,
+ T_FLOAT = 48,
+ T_FOR = 49,
+ T_GE_OP = 50,
+ T_HIGHP = 51,
+ T_IDENTIFIER = 52,
+ T_IF = 53,
+ T_IN = 54,
+ T_INC_OP = 55,
+ T_INOUT = 56,
+ T_INT = 57,
+ T_INVARIANT = 58,
+ T_ISAMPLER1D = 59,
+ T_ISAMPLER1DARRAY = 60,
+ T_ISAMPLER2D = 61,
+ T_ISAMPLER2DARRAY = 62,
+ T_ISAMPLER2DMS = 63,
+ T_ISAMPLER2DMSARRAY = 64,
+ T_ISAMPLER2DRECT = 65,
+ T_ISAMPLER3D = 66,
+ T_ISAMPLERBUFFER = 67,
+ T_ISAMPLERCUBE = 68,
+ T_ISAMPLERCUBEARRAY = 69,
+ T_IVEC2 = 70,
+ T_IVEC3 = 71,
+ T_IVEC4 = 72,
+ T_LAYOUT = 73,
+ T_LEFT_ANGLE = 74,
+ T_LEFT_ASSIGN = 75,
+ T_LEFT_BRACE = 76,
+ T_LEFT_BRACKET = 77,
+ T_LEFT_OP = 78,
+ T_LEFT_PAREN = 79,
+ T_LE_OP = 80,
+ T_LOWP = 81,
+ T_MAT2 = 82,
+ T_MAT2X2 = 83,
+ T_MAT2X3 = 84,
+ T_MAT2X4 = 85,
+ T_MAT3 = 86,
+ T_MAT3X2 = 87,
+ T_MAT3X3 = 88,
+ T_MAT3X4 = 89,
+ T_MAT4 = 90,
+ T_MAT4X2 = 91,
+ T_MAT4X3 = 92,
+ T_MAT4X4 = 93,
+ T_MEDIUMP = 94,
+ T_MOD_ASSIGN = 95,
+ T_MUL_ASSIGN = 96,
+ T_NE_OP = 97,
+ T_NOPERSPECTIVE = 98,
+ T_NUMBER = 99,
+ T_OR_ASSIGN = 100,
+ T_OR_OP = 101,
+ T_OUT = 102,
+ T_PATCH = 103,
+ T_PERCENT = 104,
+ T_PLUS = 105,
+ T_PRECISION = 106,
+ T_PREPROC = 171,
+ T_QUESTION = 107,
+ T_RESERVED = 174,
+ T_RETURN = 108,
+ T_RIGHT_ANGLE = 109,
+ T_RIGHT_ASSIGN = 110,
+ T_RIGHT_BRACE = 111,
+ T_RIGHT_BRACKET = 112,
+ T_RIGHT_OP = 113,
+ T_RIGHT_PAREN = 114,
+ T_SAMPLE = 115,
+ T_SAMPLER1D = 116,
+ T_SAMPLER1DARRAY = 117,
+ T_SAMPLER1DARRAYSHADOW = 118,
+ T_SAMPLER1DSHADOW = 119,
+ T_SAMPLER2D = 120,
+ T_SAMPLER2DARRAY = 121,
+ T_SAMPLER2DARRAYSHADOW = 122,
+ T_SAMPLER2DMS = 123,
+ T_SAMPLER2DMSARRAY = 124,
+ T_SAMPLER2DRECT = 125,
+ T_SAMPLER2DRECTSHADOW = 126,
+ T_SAMPLER2DSHADOW = 127,
+ T_SAMPLER3D = 128,
+ T_SAMPLERBUFFER = 129,
+ T_SAMPLERCUBE = 130,
+ T_SAMPLERCUBEARRAY = 131,
+ T_SAMPLERCUBEARRAYSHADOW = 132,
+ T_SAMPLERCUBESHADOW = 133,
+ T_SEMICOLON = 134,
+ T_SLASH = 135,
+ T_SMOOTH = 136,
+ T_STAR = 137,
+ T_STRUCT = 138,
+ T_SUBROUTINE = 139,
+ T_SUB_ASSIGN = 140,
+ T_SWITCH = 141,
+ T_TILDE = 142,
+ T_TRUE = 169,
+ T_TYPE_NAME = 143,
+ T_UINT = 144,
+ T_UNIFORM = 145,
+ T_USAMPLER1D = 146,
+ T_USAMPLER1DARRAY = 147,
+ T_USAMPLER2D = 148,
+ T_USAMPLER2DARRAY = 149,
+ T_USAMPLER2DMS = 150,
+ T_USAMPLER2DMSARRAY = 151,
+ T_USAMPLER2DRECT = 152,
+ T_USAMPLER3D = 153,
+ T_USAMPLERBUFFER = 154,
+ T_USAMPLERCUBE = 155,
+ T_USAMPLERCUBEARRAY = 156,
+ T_UVEC2 = 157,
+ T_UVEC3 = 158,
+ T_UVEC4 = 159,
+ T_VARYING = 160,
+ T_VEC2 = 161,
+ T_VEC3 = 162,
+ T_VEC4 = 163,
+ T_VERTICAL_BAR = 164,
+ T_VOID = 165,
+ T_WHILE = 166,
+ T_XOR_ASSIGN = 167,
+ T_XOR_OP = 168,
- ACCEPT_STATE = 462,
- RULE_COUNT = 316,
- STATE_COUNT = 463,
- TERMINAL_COUNT = 175,
- NON_TERMINAL_COUNT = 85,
+ ACCEPT_STATE = 462,
+ RULE_COUNT = 316,
+ STATE_COUNT = 463,
+ TERMINAL_COUNT = 175,
+ NON_TERMINAL_COUNT = 85,
- GOTO_INDEX_OFFSET = 463,
- GOTO_INFO_OFFSET = 4708,
- GOTO_CHECK_OFFSET = 4708
- };
+ GOTO_INDEX_OFFSET = 463,
+ GOTO_INFO_OFFSET = 4708,
+ GOTO_CHECK_OFFSET = 4708
+ };
- static const char *const spell[];
- static const short lhs[];
- static const short rhs[];
- static const short goto_default[];
- static const short action_default[];
- static const short action_index[];
- static const short action_info[];
- static const short action_check[];
+ static const char *const spell [];
+ static const short lhs [];
+ static const short rhs [];
+ static const short goto_default [];
+ static const short action_default [];
+ static const short action_index [];
+ static const short action_info [];
+ static const short action_check [];
- static inline int nt_action (int state, int nt)
- {
- const int yyn = action_index [GOTO_INDEX_OFFSET + state] + nt;
- if (yyn < 0 || action_check [GOTO_CHECK_OFFSET + yyn] != nt)
- return goto_default [nt];
+ static inline int nt_action (int state, int nt)
+ {
+ const int yyn = action_index [GOTO_INDEX_OFFSET + state] + nt;
+ if (yyn < 0 || action_check [GOTO_CHECK_OFFSET + yyn] != nt)
+ return goto_default [nt];
- return action_info [GOTO_INFO_OFFSET + yyn];
- }
+ return action_info [GOTO_INFO_OFFSET + yyn];
+ }
- static inline int t_action (int state, int token)
- {
- const int yyn = action_index [state] + token;
+ static inline int t_action (int state, int token)
+ {
+ const int yyn = action_index [state] + token;
- if (yyn < 0 || action_check [yyn] != token)
- return - action_default [state];
+ if (yyn < 0 || action_check [yyn] != token)
+ return - action_default [state];
- return action_info [yyn];
- }
+ return action_info [yyn];
+ }
};
diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp
index 9cf5aa76e0..d9c4e50f0e 100644
--- a/src/plugins/android/androidbuildapkstep.cpp
+++ b/src/plugins/android/androidbuildapkstep.cpp
@@ -132,7 +132,7 @@ bool AndroidBuildApkStep::init(QList<const BuildStep *> &earlierSteps)
return false;
}
} else if (version->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0)) {
- emit addOutput(tr("The minimum Qt version required for Gradle build to work is %2. "
+ emit addOutput(tr("The minimum Qt version required for Gradle build to work is %1. "
"It is recommended to install the latest Qt version.")
.arg("5.4.0"), OutputFormat::Stderr);
return false;
diff --git a/src/plugins/clangcodemodel/clangbackendreceiver.cpp b/src/plugins/clangcodemodel/clangbackendreceiver.cpp
index f2606d74cc..3794eb0b6b 100644
--- a/src/plugins/clangcodemodel/clangbackendreceiver.cpp
+++ b/src/plugins/clangcodemodel/clangbackendreceiver.cpp
@@ -151,7 +151,7 @@ void BackendReceiver::reset()
qDeleteAll(m_assistProcessorsTable.begin(), m_assistProcessorsTable.end());
m_assistProcessorsTable.clear();
- // Clean up futures for references
+ // Clean up futures for references; TODO: Remove duplication
for (ReferencesEntry &entry : m_referencesTable) {
entry.futureInterface.cancel();
entry.futureInterface.reportFinished();
@@ -162,6 +162,11 @@ void BackendReceiver::reset()
futureInterface.reportFinished();
}
m_followTable.clear();
+ for (QFutureInterface<CppTools::ToolTipInfo> &futureInterface : m_toolTipsTable) {
+ futureInterface.cancel();
+ futureInterface.reportFinished();
+ }
+ m_toolTipsTable.clear();
}
void BackendReceiver::alive()
diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h
index 0f23b1a0fe..3e20caa37b 100644
--- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h
+++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h
@@ -46,7 +46,7 @@ class ClangCompletionAssistProcessor : public CppTools::CppCompletionAssistProce
public:
ClangCompletionAssistProcessor();
- ~ClangCompletionAssistProcessor();
+ ~ClangCompletionAssistProcessor() override;
TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override;
diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
index 924257cc63..2a405da1f7 100644
--- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
@@ -101,10 +101,8 @@ ClangEditorDocumentProcessor::~ClangEditorDocumentProcessor()
m_parserWatcher.cancel();
m_parserWatcher.waitForFinished();
- if (m_projectPart) {
- m_communicator.unregisterTranslationUnitsForEditor(
- {ClangBackEnd::FileContainer(filePath(), m_projectPart->id())});
- }
+ if (m_projectPart)
+ unregisterTranslationUnitForEditor();
}
void ClangEditorDocumentProcessor::runImpl(
@@ -384,11 +382,6 @@ QFuture<CppTools::ToolTipInfo> ClangEditorDocumentProcessor::toolTipInfo(const Q
static_cast<quint32>(column));
}
-ClangBackEnd::FileContainer ClangEditorDocumentProcessor::fileContainerWithArguments() const
-{
- return fileContainerWithArguments(m_projectPart.data());
-}
-
void ClangEditorDocumentProcessor::clearDiagnosticsWithFixIts()
{
m_diagnosticManager.clearDiagnosticsWithFixIts();
@@ -442,7 +435,6 @@ void ClangEditorDocumentProcessor::registerTranslationUnitForEditor(CppTools::Pr
if (m_projectPart) {
if (projectPart->id() == m_projectPart->id())
return;
- m_communicator.unregisterTranslationUnitsForEditor({fileContainerWithArguments()});
}
m_communicator.registerTranslationUnitsForEditor(
@@ -450,6 +442,13 @@ void ClangEditorDocumentProcessor::registerTranslationUnitForEditor(CppTools::Pr
ClangCodeModel::Utils::setLastSentDocumentRevision(filePath(), revision());
}
+void ClangEditorDocumentProcessor::unregisterTranslationUnitForEditor()
+{
+ QTC_ASSERT(m_projectPart, return);
+ m_communicator.unregisterTranslationUnitsForEditor(
+ {ClangBackEnd::FileContainer(filePath(), m_projectPart->id())});
+}
+
void ClangEditorDocumentProcessor::updateTranslationUnitIfProjectPartExists()
{
if (m_projectPart) {
@@ -627,17 +626,6 @@ static QStringList fileArguments(const QString &filePath, CppTools::ProjectPart
}
ClangBackEnd::FileContainer
-ClangEditorDocumentProcessor::fileContainerWithArguments(CppTools::ProjectPart *projectPart) const
-{
- const auto projectPartId = projectPart
- ? Utf8String::fromString(projectPart->id())
- : Utf8String();
- const QStringList theFileArguments = fileArguments(filePath(), projectPart);
-
- return {filePath(), projectPartId, Utf8StringVector(theFileArguments), revision()};
-}
-
-ClangBackEnd::FileContainer
ClangEditorDocumentProcessor::fileContainerWithArgumentsAndDocumentContent(
CppTools::ProjectPart *projectPart) const
{
diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h
index 67745b582c..27c4b355dc 100644
--- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h
+++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h
@@ -52,7 +52,7 @@ class ClangEditorDocumentProcessor : public CppTools::BaseEditorDocumentProcesso
public:
ClangEditorDocumentProcessor(BackendCommunicator &communicator,
TextEditor::TextDocument *document);
- ~ClangEditorDocumentProcessor();
+ ~ClangEditorDocumentProcessor() override;
// BaseEditorDocumentProcessor interface
void runImpl(const CppTools::BaseEditorDocumentParser::UpdateParams &updateParams) override;
@@ -92,7 +92,7 @@ public:
int line,
int column) override;
- ClangBackEnd::FileContainer fileContainerWithArguments() const;
+ void unregisterTranslationUnitForEditor();
void clearDiagnosticsWithFixIts();
@@ -110,7 +110,6 @@ private:
HeaderErrorDiagnosticWidgetCreator creatorForHeaderErrorDiagnosticWidget(
const ClangBackEnd::DiagnosticContainer &firstHeaderErrorDiagnostic);
ClangBackEnd::FileContainer simpleFileContainer(const QByteArray &codecName = QByteArray()) const;
- ClangBackEnd::FileContainer fileContainerWithArguments(CppTools::ProjectPart *projectPart) const;
ClangBackEnd::FileContainer fileContainerWithArgumentsAndDocumentContent(
CppTools::ProjectPart *projectPart) const;
ClangBackEnd::FileContainer fileContainerWithDocumentContent(const QString &projectpartId) const;
diff --git a/src/plugins/clangcodemodel/clanghoverhandler.cpp b/src/plugins/clangcodemodel/clanghoverhandler.cpp
index 6610b555c2..5903b18246 100644
--- a/src/plugins/clangcodemodel/clanghoverhandler.cpp
+++ b/src/plugins/clangcodemodel/clanghoverhandler.cpp
@@ -102,17 +102,16 @@ static QFuture<CppTools::ToolTipInfo> editorDocumentHandlesToolTipInfo(
ClangHoverHandler::ClangHoverHandler()
{
- setIsAsyncHandler(true);
}
ClangHoverHandler::~ClangHoverHandler()
{
- cancelAsyncCheck();
+ abort();
}
-void ClangHoverHandler::identifyMatchAsync(TextEditorWidget *editorWidget,
- int pos,
- BaseHoverHandler::ReportPriority report)
+void ClangHoverHandler::identifyMatch(TextEditorWidget *editorWidget,
+ int pos,
+ BaseHoverHandler::ReportPriority report)
{
// Reset
m_futureWatcher.reset();
@@ -143,10 +142,12 @@ void ClangHoverHandler::identifyMatchAsync(TextEditorWidget *editorWidget,
report(Priority_None); // Ops, something went wrong.
}
-void ClangHoverHandler::cancelAsyncCheck()
+void ClangHoverHandler::abort()
{
- if (m_futureWatcher)
+ if (m_futureWatcher) {
m_futureWatcher->cancel();
+ m_futureWatcher.reset();
+ }
}
#define RETURN_TEXT_FOR_CASE(enumValue) case TextEditor::HelpItem::enumValue: return #enumValue
diff --git a/src/plugins/clangcodemodel/clanghoverhandler.h b/src/plugins/clangcodemodel/clanghoverhandler.h
index 85b7999f94..e6e262ecd0 100644
--- a/src/plugins/clangcodemodel/clanghoverhandler.h
+++ b/src/plugins/clangcodemodel/clanghoverhandler.h
@@ -40,14 +40,14 @@ public:
ClangHoverHandler();
~ClangHoverHandler() override;
- void identifyMatchAsync(TextEditor::TextEditorWidget *editorWidget,
- int pos,
- ReportPriority report) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report) override;
void decorateToolTip() override;
void operateTooltip(TextEditor::TextEditorWidget *editorWidget, const QPoint &point) override;
private:
- void cancelAsyncCheck() override;
+ void abort() override;
void processToolTipInfo(const CppTools::ToolTipInfo &info);
private:
diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp
index 9495e6d5eb..4de96c5a0e 100644
--- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp
+++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp
@@ -376,7 +376,7 @@ void ModelManagerSupportClang::unregisterTranslationUnitsWithProjectParts(
{
const auto processors = clangProcessorsWithProjectParts(projectPartIds);
foreach (ClangEditorDocumentProcessor *processor, processors) {
- m_communicator.unregisterTranslationUnitsForEditor({processor->fileContainerWithArguments()});
+ processor->unregisterTranslationUnitForEditor();
processor->clearProjectPart();
processor->run();
}
diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.h b/src/plugins/clangcodemodel/clangmodelmanagersupport.h
index 92f253c5a8..3744905b42 100644
--- a/src/plugins/clangcodemodel/clangmodelmanagersupport.h
+++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.h
@@ -58,7 +58,7 @@ class ModelManagerSupportClang:
public:
ModelManagerSupportClang();
- ~ModelManagerSupportClang();
+ ~ModelManagerSupportClang() override;
CppTools::CppCompletionAssistProvider *completionAssistProvider() override;
TextEditor::BaseHoverHandler *createHoverHandler() override;
diff --git a/src/plugins/clangrefactoring/clangqueryhoverhandler.cpp b/src/plugins/clangrefactoring/clangqueryhoverhandler.cpp
index e8ce90c297..11a29f1db1 100644
--- a/src/plugins/clangrefactoring/clangqueryhoverhandler.cpp
+++ b/src/plugins/clangrefactoring/clangqueryhoverhandler.cpp
@@ -30,6 +30,7 @@
#include <dynamicastmatcherdiagnosticmessagecontainer.h>
#include <texteditor/texteditor.h>
+#include <utils/executeondestruction.h>
namespace ClangRefactoring {
@@ -38,8 +39,12 @@ ClangQueryHoverHandler::ClangQueryHoverHandler(ClangQueryHighlighter *highligher
{
}
-void ClangQueryHoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget, int position)
+void ClangQueryHoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int position,
+ ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
using Messages = ClangBackEnd::DynamicASTMatcherDiagnosticMessageContainers;
using Contexts = ClangBackEnd::DynamicASTMatcherDiagnosticContextContainers;
diff --git a/src/plugins/clangrefactoring/clangqueryhoverhandler.h b/src/plugins/clangrefactoring/clangqueryhoverhandler.h
index 7a93bcbf5d..a9dfc5fe22 100644
--- a/src/plugins/clangrefactoring/clangqueryhoverhandler.h
+++ b/src/plugins/clangrefactoring/clangqueryhoverhandler.h
@@ -37,7 +37,9 @@ public:
ClangQueryHoverHandler(ClangQueryHighlighter *highligher);
protected:
- void identifyMatch(TextEditor::TextEditorWidget *editorWidget, int position) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int position,
+ ReportPriority report) override;
private:
ClangQueryHighlighter *m_highligher;
diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp
index 3e656d44c7..f4a6235e76 100644
--- a/src/plugins/cmakeprojectmanager/servermodereader.cpp
+++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp
@@ -813,7 +813,7 @@ void ServerModeReader::addTargets(const QHash<Utils::FileName, ProjectExplorer::
if (cr->type != CrossReference::TARGET) {
if (path == targetPath) {
if (bt->line >= 0)
- dn = tr("%1 in line %3").arg(btName).arg(bt->line);
+ dn = tr("%1 in line %2").arg(btName).arg(bt->line);
else
dn = tr("%1").arg(btName);
} else {
diff --git a/src/plugins/coreplugin/locator/javascriptfilter.cpp b/src/plugins/coreplugin/locator/javascriptfilter.cpp
index 02803ecf72..6255101dca 100644
--- a/src/plugins/coreplugin/locator/javascriptfilter.cpp
+++ b/src/plugins/coreplugin/locator/javascriptfilter.cpp
@@ -32,6 +32,11 @@
namespace Core {
namespace Internal {
+enum JavaScriptAction
+{
+ ResetEngine = QVariant::UserType + 1
+};
+
JavaScriptFilter::JavaScriptFilter()
{
setId("JavaScriptFilter");
@@ -48,7 +53,8 @@ void JavaScriptFilter::prepareSearch(const QString &entry)
{
Q_UNUSED(entry);
- setupEngine();
+ if (!m_engine)
+ setupEngine();
}
QList<LocatorFilterEntry> JavaScriptFilter::matchesFor(
@@ -56,13 +62,17 @@ QList<LocatorFilterEntry> JavaScriptFilter::matchesFor(
{
Q_UNUSED(future);
- const QString result = m_engine->evaluate(entry).toString();
- const QString expression = entry + " = " + result;
-
QList<LocatorFilterEntry> entries;
- entries.append({this, expression, QVariant()});
- entries.append({this, tr("Copy to clipboard: %1").arg(result), result});
- entries.append({this, tr("Copy to clipboard: %1").arg(expression), expression});
+ if (entry.trimmed().isEmpty()) {
+ entries.append({this, tr("Reset Engine"), QVariant(ResetEngine, nullptr)});
+ } else {
+ const QString result = m_engine->evaluate(entry).toString();
+ const QString expression = entry + " = " + result;
+
+ entries.append({this, expression, QVariant()});
+ entries.append({this, tr("Copy to clipboard: %1").arg(result), result});
+ entries.append({this, tr("Copy to clipboard: %1").arg(expression), expression});
+ }
return entries;
}
@@ -77,6 +87,11 @@ void JavaScriptFilter::accept(Core::LocatorFilterEntry selection, QString *newTe
if (selection.internalData.isNull())
return;
+ if (selection.internalData.userType() == ResetEngine) {
+ m_engine.reset();
+ return;
+ }
+
QClipboard *clipboard = QGuiApplication::clipboard();
clipboard->setText(selection.internalData.toString());
}
@@ -89,10 +104,7 @@ void JavaScriptFilter::refresh(QFutureInterface<void> &future)
void JavaScriptFilter::setupEngine()
{
- if (m_engine)
- return;
-
- m_engine = new QJSEngine(this);
+ m_engine.reset(new QJSEngine);
m_engine->evaluate(
"function abs(x) { return Math.abs(x); }\n"
"function acos(x) { return Math.acos(x); }\n"
diff --git a/src/plugins/coreplugin/locator/javascriptfilter.h b/src/plugins/coreplugin/locator/javascriptfilter.h
index 50f5e85c3b..9bf3ac5194 100644
--- a/src/plugins/coreplugin/locator/javascriptfilter.h
+++ b/src/plugins/coreplugin/locator/javascriptfilter.h
@@ -27,6 +27,8 @@
#include <coreplugin/locator/ilocatorfilter.h>
+#include <memory>
+
QT_BEGIN_NAMESPACE
class QJSEngine;
QT_END_NAMESPACE
@@ -51,7 +53,7 @@ public:
private:
void setupEngine();
- QJSEngine *m_engine = nullptr;
+ mutable std::unique_ptr<QJSEngine> m_engine;
};
} // namespace Internal
diff --git a/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp b/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp
index 47c691760d..a657fcd6bc 100644
--- a/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp
+++ b/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp
@@ -33,6 +33,7 @@
#include <projectexplorer/projecttree.h>
#include <projectexplorer/project.h>
#include <texteditor/texteditor.h>
+#include <utils/executeondestruction.h>
#include <QPoint>
#include <QTextBlock>
@@ -164,8 +165,12 @@ static QString findResourceInProject(const QString &resName)
return QString();
}
-void ResourcePreviewHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos)
+void ResourcePreviewHoverHandler::identifyMatch(TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
if (editorWidget->extraSelectionTooltip(pos).isEmpty()) {
const QTextBlock tb = editorWidget->document()->findBlock(pos);
const int tbpos = pos - tb.position();
diff --git a/src/plugins/cppeditor/resourcepreviewhoverhandler.h b/src/plugins/cppeditor/resourcepreviewhoverhandler.h
index 2ccb261c2a..b0977099ec 100644
--- a/src/plugins/cppeditor/resourcepreviewhoverhandler.h
+++ b/src/plugins/cppeditor/resourcepreviewhoverhandler.h
@@ -35,7 +35,9 @@ namespace Internal {
class ResourcePreviewHoverHandler : public TextEditor::BaseHoverHandler
{
private:
- void identifyMatch(TextEditor::TextEditorWidget *editorWidget, int pos) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report) override;
void operateTooltip(TextEditor::TextEditorWidget *editorWidget, const QPoint &point) override;
private:
diff --git a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp
index 44187b6a10..206a0d8baa 100644
--- a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp
+++ b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp
@@ -101,9 +101,7 @@ static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model)
ClangDiagnosticConfigsModel::ClangDiagnosticConfigsModel(const ClangDiagnosticConfigs &customConfigs)
{
addBuiltinConfigs(*this);
-
- foreach (const ClangDiagnosticConfig &config, customConfigs)
- m_diagnosticConfigs.append(config);
+ m_diagnosticConfigs.append(customConfigs);
}
int ClangDiagnosticConfigsModel::size() const
diff --git a/src/plugins/cpptools/cppcodemodelsettings.cpp b/src/plugins/cpptools/cppcodemodelsettings.cpp
index ed860d0c4a..15ec9c9bfe 100644
--- a/src/plugins/cpptools/cppcodemodelsettings.cpp
+++ b/src/plugins/cpptools/cppcodemodelsettings.cpp
@@ -183,11 +183,6 @@ void CppCodeModelSettings::setPCHUsage(CppCodeModelSettings::PCHUsage pchUsage)
m_pchUsage = pchUsage;
}
-void CppCodeModelSettings::emitChanged()
-{
- emit changed();
-}
-
bool CppCodeModelSettings::interpretAmbigiousHeadersAsCHeaders() const
{
return m_interpretAmbigiousHeadersAsCHeaders;
diff --git a/src/plugins/cpptools/cppcodemodelsettings.h b/src/plugins/cpptools/cppcodemodelsettings.h
index edf0a6e1dc..22f5b25c6b 100644
--- a/src/plugins/cpptools/cppcodemodelsettings.h
+++ b/src/plugins/cpptools/cppcodemodelsettings.h
@@ -78,12 +78,8 @@ public:
QString clazyChecks() const;
void setClazyChecks(QString checks);
-public: // for tests
- void emitChanged();
-
signals:
void changed();
- void clangDiagnosticConfigIdChanged();
private:
PCHUsage m_pchUsage = PchUse_None;
diff --git a/src/plugins/cpptools/cppelementevaluator.cpp b/src/plugins/cpptools/cppelementevaluator.cpp
index 3281783ef2..df9ebefa3d 100644
--- a/src/plugins/cpptools/cppelementevaluator.cpp
+++ b/src/plugins/cpptools/cppelementevaluator.cpp
@@ -57,6 +57,269 @@ static QStringList stripName(const QString &name)
return all;
}
+CppElement::CppElement() : helpCategory(TextEditor::HelpItem::Unknown)
+{}
+
+CppElement::~CppElement()
+{}
+
+class Unknown : public CppElement
+{
+public:
+ explicit Unknown(const QString &type) : type(type)
+ {
+ tooltip = type;
+ }
+
+public:
+ QString type;
+};
+
+class CppInclude : public CppElement
+{
+public:
+ explicit CppInclude(const Document::Include &includeFile)
+ : path(QDir::toNativeSeparators(includeFile.resolvedFileName()))
+ , fileName(Utils::FileName::fromString(includeFile.resolvedFileName()).fileName())
+ {
+ helpCategory = TextEditor::HelpItem::Brief;
+ helpIdCandidates = QStringList(fileName);
+ helpMark = fileName;
+ link = Utils::Link(path);
+ tooltip = path;
+ }
+
+public:
+ QString path;
+ QString fileName;
+};
+
+class CppMacro : public CppElement
+{
+public:
+ explicit CppMacro(const Macro &macro)
+ {
+ helpCategory = TextEditor::HelpItem::Macro;
+ const QString macroName = QString::fromUtf8(macro.name(), macro.name().size());
+ helpIdCandidates = QStringList(macroName);
+ helpMark = macroName;
+ link = Utils::Link(macro.fileName(), macro.line());
+ tooltip = macro.toStringWithLineBreaks();
+ }
+};
+
+// CppDeclarableElement
+CppDeclarableElement::CppDeclarableElement(Symbol *declaration)
+ : CppElement()
+ , declaration(declaration)
+ , icon(Icons::iconForSymbol(declaration))
+{
+ Overview overview;
+ overview.showArgumentNames = true;
+ overview.showReturnTypes = true;
+ name = overview.prettyName(declaration->name());
+ if (declaration->enclosingScope()->isClass() ||
+ declaration->enclosingScope()->isNamespace() ||
+ declaration->enclosingScope()->isEnum()) {
+ qualifiedName = overview.prettyName(LookupContext::fullyQualifiedName(declaration));
+ helpIdCandidates = stripName(qualifiedName);
+ } else {
+ qualifiedName = name;
+ helpIdCandidates.append(name);
+ }
+
+ tooltip = overview.prettyType(declaration->type(), qualifiedName);
+ link = CppTools::linkToSymbol(declaration);
+ helpMark = name;
+}
+
+class CppNamespace : public CppDeclarableElement
+{
+public:
+ explicit CppNamespace(Symbol *declaration)
+ : CppDeclarableElement(declaration)
+ {
+ helpCategory = TextEditor::HelpItem::ClassOrNamespace;
+ tooltip = qualifiedName;
+ }
+};
+
+
+CppClass::CppClass(Symbol *declaration) : CppDeclarableElement(declaration)
+{
+ helpCategory = TextEditor::HelpItem::ClassOrNamespace;
+ tooltip = qualifiedName;
+}
+
+bool CppClass::operator==(const CppClass &other)
+{
+ return this->declaration == other.declaration;
+}
+
+void CppClass::lookupBases(Symbol *declaration, const LookupContext &context)
+{
+ typedef QPair<ClassOrNamespace *, CppClass *> Data;
+
+ if (ClassOrNamespace *clazz = context.lookupType(declaration)) {
+ QSet<ClassOrNamespace *> visited;
+
+ QQueue<Data> q;
+ q.enqueue(qMakePair(clazz, this));
+ while (!q.isEmpty()) {
+ Data current = q.dequeue();
+ clazz = current.first;
+ visited.insert(clazz);
+ const QList<ClassOrNamespace *> &bases = clazz->usings();
+ foreach (ClassOrNamespace *baseClass, bases) {
+ const QList<Symbol *> &symbols = baseClass->symbols();
+ foreach (Symbol *symbol, symbols) {
+ if (symbol->isClass() && (
+ clazz = context.lookupType(symbol)) &&
+ !visited.contains(clazz)) {
+ CppClass baseCppClass(symbol);
+ CppClass *cppClass = current.second;
+ cppClass->bases.append(baseCppClass);
+ q.enqueue(qMakePair(clazz, &cppClass->bases.last()));
+ }
+ }
+ }
+ }
+ }
+}
+
+void CppClass::lookupDerived(Symbol *declaration, const Snapshot &snapshot)
+{
+ typedef QPair<CppClass *, CppTools::TypeHierarchy> Data;
+
+ CppTools::TypeHierarchyBuilder builder(declaration, snapshot);
+ const CppTools::TypeHierarchy &completeHierarchy = builder.buildDerivedTypeHierarchy();
+
+ QQueue<Data> q;
+ q.enqueue(qMakePair(this, completeHierarchy));
+ while (!q.isEmpty()) {
+ const Data &current = q.dequeue();
+ CppClass *clazz = current.first;
+ const CppTools::TypeHierarchy &classHierarchy = current.second;
+ foreach (const CppTools::TypeHierarchy &derivedHierarchy, classHierarchy.hierarchy()) {
+ clazz->derived.append(CppClass(derivedHierarchy.symbol()));
+ q.enqueue(qMakePair(&clazz->derived.last(), derivedHierarchy));
+ }
+ }
+}
+
+class CppFunction : public CppDeclarableElement
+{
+public:
+ explicit CppFunction(Symbol *declaration)
+ : CppDeclarableElement(declaration)
+ {
+ helpCategory = TextEditor::HelpItem::Function;
+
+ const FullySpecifiedType &type = declaration->type();
+
+ // Functions marks can be found either by the main overload or signature based
+ // (with no argument names and no return). Help ids have no signature at all.
+ Overview overview;
+ overview.showDefaultArguments = false;
+ helpMark = overview.prettyType(type, name);
+
+ overview.showFunctionSignatures = false;
+ helpIdCandidates.append(overview.prettyName(declaration->name()));
+ }
+};
+
+class CppEnum : public CppDeclarableElement
+{
+public:
+ explicit CppEnum(Enum *declaration)
+ : CppDeclarableElement(declaration)
+ {
+ helpCategory = TextEditor::HelpItem::Enum;
+ tooltip = qualifiedName;
+ }
+};
+
+class CppTypedef : public CppDeclarableElement
+{
+public:
+ explicit CppTypedef(Symbol *declaration)
+ : CppDeclarableElement(declaration)
+ {
+ helpCategory = TextEditor::HelpItem::Typedef;
+ tooltip = Overview().prettyType(declaration->type(), qualifiedName);
+ }
+};
+
+class CppVariable : public CppDeclarableElement
+{
+public:
+ explicit CppVariable(Symbol *declaration, const LookupContext &context, Scope *scope)
+ : CppDeclarableElement(declaration)
+ {
+ const FullySpecifiedType &type = declaration->type();
+
+ const Name *typeName = 0;
+ if (type->isNamedType()) {
+ typeName = type->asNamedType()->name();
+ } else if (type->isPointerType() || type->isReferenceType()) {
+ FullySpecifiedType associatedType;
+ if (type->isPointerType())
+ associatedType = type->asPointerType()->elementType();
+ else
+ associatedType = type->asReferenceType()->elementType();
+ if (associatedType->isNamedType())
+ typeName = associatedType->asNamedType()->name();
+ }
+
+ if (typeName) {
+ if (ClassOrNamespace *clazz = context.lookupType(typeName, scope)) {
+ if (!clazz->symbols().isEmpty()) {
+ Overview overview;
+ Symbol *symbol = clazz->symbols().at(0);
+ const QString &name = overview.prettyName(
+ LookupContext::fullyQualifiedName(symbol));
+ if (!name.isEmpty()) {
+ tooltip = name;
+ helpCategory = TextEditor::HelpItem::ClassOrNamespace;
+ const QStringList &allNames = stripName(name);
+ if (!allNames.isEmpty()) {
+ helpMark = allNames.last();
+ helpIdCandidates = allNames;
+ }
+ }
+ }
+ }
+ }
+ }
+};
+
+class CppEnumerator : public CppDeclarableElement
+{
+public:
+ explicit CppEnumerator(EnumeratorDeclaration *declaration)
+ : CppDeclarableElement(declaration)
+ {
+ helpCategory = TextEditor::HelpItem::Enum;
+
+ Overview overview;
+
+ Symbol *enumSymbol = declaration->enclosingScope();
+ const QString enumName = overview.prettyName(LookupContext::fullyQualifiedName(enumSymbol));
+ const QString enumeratorName = overview.prettyName(declaration->name());
+ QString enumeratorValue;
+ if (const StringLiteral *value = declaration->constantValue())
+ enumeratorValue = QString::fromUtf8(value->chars(), value->size());
+
+ helpMark = overview.prettyName(enumSymbol->name());
+
+ tooltip = enumeratorName;
+ if (!enumName.isEmpty())
+ tooltip.prepend(enumName + QLatin1Char(' '));
+ if (!enumeratorValue.isEmpty())
+ tooltip.append(QLatin1String(" = ") + enumeratorValue);
+ }
+};
+
CppElementEvaluator::CppElementEvaluator(TextEditor::TextEditorWidget *editor) :
m_editor(editor),
m_modelManager(CppTools::CppModelManager::instance()),
@@ -240,234 +503,4 @@ void CppElementEvaluator::clear()
m_diagnosis.clear();
}
-// CppElement
-CppElement::CppElement() : helpCategory(TextEditor::HelpItem::Unknown)
-{}
-
-CppElement::~CppElement()
-{}
-
-// Unknown
-Unknown::Unknown(const QString &type) : type(type)
-{
- tooltip = type;
-}
-
-
-// CppInclude
-
-CppInclude::CppInclude(const Document::Include &includeFile) :
- path(QDir::toNativeSeparators(includeFile.resolvedFileName())),
- fileName(Utils::FileName::fromString(includeFile.resolvedFileName()).fileName())
-{
- helpCategory = TextEditor::HelpItem::Brief;
- helpIdCandidates = QStringList(fileName);
- helpMark = fileName;
- link = Utils::Link(path);
- tooltip = path;
-}
-
-// CppMacro
-CppMacro::CppMacro(const Macro &macro)
-{
- helpCategory = TextEditor::HelpItem::Macro;
- const QString macroName = QString::fromUtf8(macro.name(), macro.name().size());
- helpIdCandidates = QStringList(macroName);
- helpMark = macroName;
- link = Utils::Link(macro.fileName(), macro.line());
- tooltip = macro.toStringWithLineBreaks();
-}
-
-// CppDeclarableElement
-
-CppDeclarableElement::CppDeclarableElement(Symbol *declaration)
- : CppElement()
- , declaration(declaration)
- , icon(Icons::iconForSymbol(declaration))
-{
- Overview overview;
- overview.showArgumentNames = true;
- overview.showReturnTypes = true;
- name = overview.prettyName(declaration->name());
- if (declaration->enclosingScope()->isClass() ||
- declaration->enclosingScope()->isNamespace() ||
- declaration->enclosingScope()->isEnum()) {
- qualifiedName = overview.prettyName(LookupContext::fullyQualifiedName(declaration));
- helpIdCandidates = stripName(qualifiedName);
- } else {
- qualifiedName = name;
- helpIdCandidates.append(name);
- }
-
- tooltip = overview.prettyType(declaration->type(), qualifiedName);
- link = CppTools::linkToSymbol(declaration);
- helpMark = name;
-}
-
-// CppNamespace
-CppNamespace::CppNamespace(Symbol *declaration) : CppDeclarableElement(declaration)
-{
- helpCategory = TextEditor::HelpItem::ClassOrNamespace;
- tooltip = qualifiedName;
-}
-
-// CppClass
-CppClass::CppClass(Symbol *declaration) : CppDeclarableElement(declaration)
-{
- helpCategory = TextEditor::HelpItem::ClassOrNamespace;
- tooltip = qualifiedName;
-}
-
-bool CppClass::operator==(const CppClass &other)
-{
- return this->declaration == other.declaration;
-}
-
-void CppClass::lookupBases(Symbol *declaration, const LookupContext &context)
-{
- typedef QPair<ClassOrNamespace *, CppClass *> Data;
-
- if (ClassOrNamespace *clazz = context.lookupType(declaration)) {
- QSet<ClassOrNamespace *> visited;
-
- QQueue<Data> q;
- q.enqueue(qMakePair(clazz, this));
- while (!q.isEmpty()) {
- Data current = q.dequeue();
- clazz = current.first;
- visited.insert(clazz);
- const QList<ClassOrNamespace *> &bases = clazz->usings();
- foreach (ClassOrNamespace *baseClass, bases) {
- const QList<Symbol *> &symbols = baseClass->symbols();
- foreach (Symbol *symbol, symbols) {
- if (symbol->isClass() && (
- clazz = context.lookupType(symbol)) &&
- !visited.contains(clazz)) {
- CppClass baseCppClass(symbol);
- CppClass *cppClass = current.second;
- cppClass->bases.append(baseCppClass);
- q.enqueue(qMakePair(clazz, &cppClass->bases.last()));
- }
- }
- }
- }
- }
-}
-
-void CppClass::lookupDerived(Symbol *declaration, const Snapshot &snapshot)
-{
- typedef QPair<CppClass *, CppTools::TypeHierarchy> Data;
-
- CppTools::TypeHierarchyBuilder builder(declaration, snapshot);
- const CppTools::TypeHierarchy &completeHierarchy = builder.buildDerivedTypeHierarchy();
-
- QQueue<Data> q;
- q.enqueue(qMakePair(this, completeHierarchy));
- while (!q.isEmpty()) {
- const Data &current = q.dequeue();
- CppClass *clazz = current.first;
- const CppTools::TypeHierarchy &classHierarchy = current.second;
- foreach (const CppTools::TypeHierarchy &derivedHierarchy, classHierarchy.hierarchy()) {
- clazz->derived.append(CppClass(derivedHierarchy.symbol()));
- q.enqueue(qMakePair(&clazz->derived.last(), derivedHierarchy));
- }
- }
-}
-
-// CppFunction
-CppFunction::CppFunction(Symbol *declaration)
- : CppDeclarableElement(declaration)
-{
- helpCategory = TextEditor::HelpItem::Function;
-
- const FullySpecifiedType &type = declaration->type();
-
- // Functions marks can be found either by the main overload or signature based
- // (with no argument names and no return). Help ids have no signature at all.
- Overview overview;
- overview.showDefaultArguments = false;
- helpMark = overview.prettyType(type, name);
-
- overview.showFunctionSignatures = false;
- helpIdCandidates.append(overview.prettyName(declaration->name()));
-}
-
-// CppEnum
-CppEnum::CppEnum(Enum *declaration)
- : CppDeclarableElement(declaration)
-{
- helpCategory = TextEditor::HelpItem::Enum;
- tooltip = qualifiedName;
-}
-
-// CppTypedef
-CppTypedef::CppTypedef(Symbol *declaration) : CppDeclarableElement(declaration)
-{
- helpCategory = TextEditor::HelpItem::Typedef;
- tooltip = Overview().prettyType(declaration->type(), qualifiedName);
-}
-
-// CppVariable
-CppVariable::CppVariable(Symbol *declaration, const LookupContext &context, Scope *scope) :
- CppDeclarableElement(declaration)
-{
- const FullySpecifiedType &type = declaration->type();
-
- const Name *typeName = 0;
- if (type->isNamedType()) {
- typeName = type->asNamedType()->name();
- } else if (type->isPointerType() || type->isReferenceType()) {
- FullySpecifiedType associatedType;
- if (type->isPointerType())
- associatedType = type->asPointerType()->elementType();
- else
- associatedType = type->asReferenceType()->elementType();
- if (associatedType->isNamedType())
- typeName = associatedType->asNamedType()->name();
- }
-
- if (typeName) {
- if (ClassOrNamespace *clazz = context.lookupType(typeName, scope)) {
- if (!clazz->symbols().isEmpty()) {
- Overview overview;
- Symbol *symbol = clazz->symbols().at(0);
- const QString &name =
- overview.prettyName(LookupContext::fullyQualifiedName(symbol));
- if (!name.isEmpty()) {
- tooltip = name;
- helpCategory = TextEditor::HelpItem::ClassOrNamespace;
- const QStringList &allNames = stripName(name);
- if (!allNames.isEmpty()) {
- helpMark = allNames.last();
- helpIdCandidates = allNames;
- }
- }
- }
- }
- }
-}
-
-CppEnumerator::CppEnumerator(EnumeratorDeclaration *declaration)
- : CppDeclarableElement(declaration)
-{
- helpCategory = TextEditor::HelpItem::Enum;
-
- Overview overview;
-
- Symbol *enumSymbol = declaration->enclosingScope();
- const QString enumName = overview.prettyName(LookupContext::fullyQualifiedName(enumSymbol));
- const QString enumeratorName = overview.prettyName(declaration->name());
- QString enumeratorValue;
- if (const StringLiteral *value = declaration->constantValue())
- enumeratorValue = QString::fromUtf8(value->chars(), value->size());
-
- helpMark = overview.prettyName(enumSymbol->name());
-
- tooltip = enumeratorName;
- if (!enumName.isEmpty())
- tooltip.prepend(enumName + QLatin1Char(' '));
- if (!enumeratorValue.isEmpty())
- tooltip.append(QLatin1String(" = ") + enumeratorValue);
-}
-
} // namespace CppTools
diff --git a/src/plugins/cpptools/cppelementevaluator.h b/src/plugins/cpptools/cppelementevaluator.h
index af994989ed..0755bd3004 100644
--- a/src/plugins/cpptools/cppelementevaluator.h
+++ b/src/plugins/cpptools/cppelementevaluator.h
@@ -96,31 +96,6 @@ public:
QString tooltip;
};
-class Unknown : public CppElement
-{
-public:
- explicit Unknown(const QString &type);
-
-public:
- QString type;
-};
-
-class CppInclude : public CppElement
-{
-public:
- explicit CppInclude(const CPlusPlus::Document::Include &includeFile);
-
-public:
- QString path;
- QString fileName;
-};
-
-class CppMacro : public CppElement
-{
-public:
- explicit CppMacro(const CPlusPlus::Macro &macro);
-};
-
class CppDeclarableElement : public CppElement
{
public:
@@ -134,12 +109,6 @@ public:
QIcon icon;
};
-class CppNamespace : public CppDeclarableElement
-{
-public:
- explicit CppNamespace(CPlusPlus::Symbol *declaration);
-};
-
class CppClass : public CppDeclarableElement
{
public:
@@ -156,36 +125,4 @@ public:
QList<CppClass> derived;
};
-class CppFunction : public CppDeclarableElement
-{
-public:
- explicit CppFunction(CPlusPlus::Symbol *declaration);
-};
-
-class CppEnum : public CppDeclarableElement
-{
-public:
- explicit CppEnum(CPlusPlus::Enum *declaration);
-};
-
-class CppTypedef : public CppDeclarableElement
-{
-public:
- explicit CppTypedef(CPlusPlus::Symbol *declaration);
-};
-
-class CppVariable : public CppDeclarableElement
-{
-public:
- CppVariable(CPlusPlus::Symbol *declaration,
- const CPlusPlus::LookupContext &context,
- CPlusPlus::Scope *scope);
-};
-
-class CppEnumerator : public CppDeclarableElement
-{
-public:
- explicit CppEnumerator(CPlusPlus::EnumeratorDeclaration *declaration);
-};
-
} // namespace CppTools
diff --git a/src/plugins/cpptools/cpphoverhandler.cpp b/src/plugins/cpptools/cpphoverhandler.cpp
index 1ff41b7fdc..3969065ff7 100644
--- a/src/plugins/cpptools/cpphoverhandler.cpp
+++ b/src/plugins/cpptools/cpphoverhandler.cpp
@@ -31,6 +31,7 @@
#include <texteditor/texteditor.h>
#include <utils/textutils.h>
+#include <utils/executeondestruction.h>
#include <QTextCursor>
#include <QUrl>
@@ -67,8 +68,10 @@ QString CppHoverHandler::tooltipTextForHelpItem(const HelpItem &helpItem)
return QString();
}
-void CppHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos)
+void CppHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
QTextCursor tc(editorWidget->document());
tc.setPosition(pos);
diff --git a/src/plugins/cpptools/cpphoverhandler.h b/src/plugins/cpptools/cpphoverhandler.h
index edfa6901cf..75d6475537 100644
--- a/src/plugins/cpptools/cpphoverhandler.h
+++ b/src/plugins/cpptools/cpphoverhandler.h
@@ -37,7 +37,9 @@ public:
static QString tooltipTextForHelpItem(const TextEditor::HelpItem &help);
private:
- void identifyMatch(TextEditor::TextEditorWidget *editorWidget, int pos) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report) override;
void decorateToolTip() override;
};
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index 3b3ec7d08e..31e10d0bc0 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -649,12 +649,17 @@ void CdbEngine::runEngine()
// else the debugger will slow down considerably.
const auto cb = [this](const DebuggerResponse &r) { handleBreakInsert(r, BreakpointModelId()); };
if (boolSetting(CdbBreakOnCrtDbgReport)) {
- const QString module = msvcRunTime(runParameters().toolChainAbi.osFlavor());
- const QString debugModule = module + 'D';
- const QString wideFunc = QString::fromLatin1(CdbOptionsPage::crtDbgReport).append('W');
- runCommand({breakAtFunctionCommand(QLatin1String(CdbOptionsPage::crtDbgReport), module), BuiltinCommand, cb});
- runCommand({breakAtFunctionCommand(wideFunc, module), BuiltinCommand, cb});
- runCommand({breakAtFunctionCommand(QLatin1String(CdbOptionsPage::crtDbgReport), debugModule), BuiltinCommand, cb});
+ Abi::OSFlavor flavor = runParameters().toolChainAbi.osFlavor();
+ // CrtDebugReport can not be safely resolved for vc 19
+ if ((flavor > Abi::WindowsMsvc2005Flavor && flavor <= Abi::WindowsMsvc2013Flavor) ||
+ flavor > Abi::WindowsMSysFlavor || flavor <= Abi::WindowsCEFlavor) {
+ const QString module = msvcRunTime(flavor);
+ const QString debugModule = module + 'D';
+ const QString wideFunc = QString::fromLatin1(CdbOptionsPage::crtDbgReport).append('W');
+ runCommand({breakAtFunctionCommand(QLatin1String(CdbOptionsPage::crtDbgReport), module), BuiltinCommand, cb});
+ runCommand({breakAtFunctionCommand(wideFunc, module), BuiltinCommand, cb});
+ runCommand({breakAtFunctionCommand(QLatin1String(CdbOptionsPage::crtDbgReport), debugModule), BuiltinCommand, cb});
+ }
}
// if (boolSetting(BreakOnWarning)) {
// runCommand({"bm /( QtCored4!qWarning", BuiltinCommand}); // 'bm': All overloads.
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index e0fa782c39..8e46a9735e 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1133,6 +1133,8 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
}
} else if (key == "kit") {
kit = KitManager::kit(Id::fromString(val));
+ if (!kit)
+ kit = KitManager::kit(Utils::equal(&Kit::displayName, val));
} else if (key == "server") {
startMode = AttachToRemoteServer;
remoteChannel = remoteChannel;
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 42a3d1e461..62837bbf42 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -4620,7 +4620,7 @@ void GdbEngine::handleFileExecAndSymbols(const DebuggerResponse &response)
+ ' ' + tr("This can be caused by a path length limitation "
"in the core file.")
+ ' ' + tr("Try to specify the binary in "
- "Debug > Start Debugging > Attach to Core.");
+ "Debug > Start Debugging > Load Core File.");
notifyInferiorSetupFailedHelper(msg);
}
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index fcdfe7066c..657a950d3e 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -548,10 +548,13 @@ private:
ExCommandMap &exCommandMap();
ExCommandMap &defaultExCommandMap();
+ ExCommandMap exCommandMapFromWidget();
FakeVimPluginPrivate *m_q;
QGroupBox *m_commandBox;
FancyLineEdit *m_commandEdit;
+
+ friend class FakeVimExCommandsPage; // allow the page accessing the ExCommandMaps
};
FakeVimExCommandsWidget::FakeVimExCommandsWidget(FakeVimPluginPrivate *q, QWidget *parent)
@@ -601,12 +604,12 @@ public:
}
QWidget *widget() override;
- void apply() override {}
- void finish() override;
+ void apply() override;
+ void finish() override {}
private:
FakeVimPluginPrivate *m_q;
- QPointer<QWidget> m_widget;
+ QPointer<FakeVimExCommandsWidget> m_widget;
};
QWidget *FakeVimExCommandsPage::widget()
@@ -616,9 +619,44 @@ QWidget *FakeVimExCommandsPage::widget()
return m_widget;
}
-void FakeVimExCommandsPage::finish()
+const char exCommandMapGroup[] = "FakeVimExCommand";
+const char userCommandMapGroup[] = "FakeVimUserCommand";
+const char reKey[] = "RegEx";
+const char cmdKey[] = "Cmd";
+const char idKey[] = "Command";
+
+void FakeVimExCommandsPage::apply()
{
- delete m_widget;
+ if (!m_widget) // page has not been shown at all
+ return;
+ // now save the mappings if necessary
+ const ExCommandMap &newMapping = m_widget->exCommandMapFromWidget();
+ ExCommandMap &globalCommandMapping = m_widget->exCommandMap();
+
+ if (newMapping != globalCommandMapping) {
+ const ExCommandMap &defaultMap = m_widget->defaultExCommandMap();
+ QSettings *settings = ICore::settings();
+ settings->beginWriteArray(exCommandMapGroup);
+ int count = 0;
+ typedef ExCommandMap::const_iterator Iterator;
+ const Iterator end = newMapping.constEnd();
+ for (Iterator it = newMapping.constBegin(); it != end; ++it) {
+ const QString id = it.key();
+ const QRegExp re = it.value();
+
+ if ((defaultMap.contains(id) && defaultMap[id] != re)
+ || (!defaultMap.contains(id) && !re.pattern().isEmpty())) {
+ settings->setArrayIndex(count);
+ settings->setValue(idKey, id);
+ settings->setValue(reKey, re.pattern());
+ ++count;
+ }
+ }
+ settings->endArray();
+ globalCommandMapping.clear();
+ globalCommandMapping.unite(defaultMap);
+ globalCommandMapping.unite(newMapping);
+ }
}
void FakeVimExCommandsWidget::initialize()
@@ -658,7 +696,7 @@ void FakeVimExCommandsWidget::initialize()
setModified(item, true);
}
- handleCurrentCommandChanged(0);
+ handleCurrentCommandChanged(nullptr);
}
void FakeVimExCommandsWidget::handleCurrentCommandChanged(QTreeWidgetItem *current)
@@ -681,10 +719,8 @@ void FakeVimExCommandsWidget::commandChanged()
const QString name = current->data(0, CommandRole).toString();
const QString regex = m_commandEdit->text();
- if (current->data(0, Qt::UserRole).isValid()) {
+ if (current->data(0, Qt::UserRole).isValid())
current->setText(2, regex);
- exCommandMap()[name] = QRegExp(regex);
- }
setModified(current, regex != defaultExCommandMap()[name].pattern());
}
@@ -734,6 +770,8 @@ public:
FakeVimUserCommandsModel(FakeVimPluginPrivate *q) : m_q(q) {}
~FakeVimUserCommandsModel() {}
+ void initCommandMap(const UserCommandMap &commandMap) { m_commandMap = commandMap; }
+ UserCommandMap commandMap() const { return m_commandMap; }
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
@@ -743,6 +781,7 @@ public:
private:
FakeVimPluginPrivate *m_q;
+ UserCommandMap m_commandMap;
};
int FakeVimUserCommandsModel::rowCount(const QModelIndex &parent) const
@@ -814,17 +853,19 @@ public:
setCategoryIcon(Utils::Icon(SETTINGS_CATEGORY_FAKEVIM_ICON));
}
- void apply();
- void finish() {}
+ void apply() override;
+ void finish() override {}
QWidget *widget();
void initialize() {}
UserCommandMap &userCommandMap();
UserCommandMap &defaultUserCommandMap();
+ UserCommandMap currentCommandMap();
private:
FakeVimPluginPrivate *m_q;
QPointer<QWidget> m_widget;
+ FakeVimUserCommandsModel *m_model;
};
QWidget *FakeVimUserCommandsPage::widget()
@@ -832,10 +873,11 @@ QWidget *FakeVimUserCommandsPage::widget()
if (!m_widget) {
m_widget = new QWidget;
- auto model = new FakeVimUserCommandsModel(m_q);
+ m_model = new FakeVimUserCommandsModel(m_q);
+ m_model->initCommandMap(userCommandMap());
auto widget = new QTreeView;
- model->setParent(widget);
- widget->setModel(model);
+ m_model->setParent(widget);
+ widget->setModel(m_model);
widget->resizeColumnToContents(0);
auto delegate = new FakeVimUserCommandsDelegate(widget);
@@ -850,8 +892,37 @@ QWidget *FakeVimUserCommandsPage::widget()
void FakeVimUserCommandsPage::apply()
{
- //m_q->writeSettings();
- delete m_widget;
+ if (!m_widget) // page has not been shown at all
+ return;
+
+ // now save the mappings if necessary
+ const UserCommandMap &current = currentCommandMap();
+ UserCommandMap &userMap = userCommandMap();
+
+ if (current != userMap) {
+ QSettings *settings = ICore::settings();
+ settings->beginWriteArray(userCommandMapGroup);
+ int count = 0;
+ typedef UserCommandMap::const_iterator Iterator;
+ const Iterator end = current.constEnd();
+ for (Iterator it = current.constBegin(); it != end; ++it) {
+ const int key = it.key();
+ const QString cmd = it.value();
+
+ if ((defaultUserCommandMap().contains(key)
+ && defaultUserCommandMap()[key] != cmd)
+ || (!defaultUserCommandMap().contains(key) && !cmd.isEmpty())) {
+ settings->setArrayIndex(count);
+ settings->setValue(idKey, key);
+ settings->setValue(cmdKey, cmd);
+ ++count;
+ }
+ }
+ settings->endArray();
+ userMap.clear();
+ userMap.unite(defaultUserCommandMap());
+ userMap.unite(current);
+ }
}
@@ -1122,7 +1193,7 @@ QVariant FakeVimUserCommandsModel::data(const QModelIndex &index, int role) cons
case 0: // Action
return Tr::tr("User command #%1").arg(index.row() + 1);
case 1: // Command
- return m_q->userCommandMap().value(index.row() + 1);
+ return m_commandMap.value(index.row() + 1);
}
}
@@ -1134,7 +1205,7 @@ bool FakeVimUserCommandsModel::setData(const QModelIndex &index,
{
if (role == Qt::DisplayRole || role == Qt::EditRole)
if (index.column() == 1)
- m_q->userCommandMap()[index.row() + 1] = data.toString();
+ m_commandMap[index.row() + 1] = data.toString();
return true;
}
@@ -1284,58 +1355,10 @@ void FakeVimPluginPrivate::createRelativeNumberWidget(IEditor *editor)
}
}
-const char exCommandMapGroup[] = "FakeVimExCommand";
-const char userCommandMapGroup[] = "FakeVimUserCommand";
-const char reKey[] = "RegEx";
-const char cmdKey[] = "Cmd";
-const char idKey[] = "Command";
-
void FakeVimPluginPrivate::writeSettings()
{
QSettings *settings = ICore::settings();
-
theFakeVimSettings()->writeSettings(settings);
-
- { // block
- settings->beginWriteArray(exCommandMapGroup);
- int count = 0;
- typedef ExCommandMap::const_iterator Iterator;
- const Iterator end = exCommandMap().constEnd();
- for (Iterator it = exCommandMap().constBegin(); it != end; ++it) {
- const QString id = it.key();
- const QRegExp re = it.value();
-
- if ((defaultExCommandMap().contains(id) && defaultExCommandMap()[id] != re)
- || (!defaultExCommandMap().contains(id) && !re.pattern().isEmpty())) {
- settings->setArrayIndex(count);
- settings->setValue(idKey, id);
- settings->setValue(reKey, re.pattern());
- ++count;
- }
- }
- settings->endArray();
- } // block
-
- { // block
- settings->beginWriteArray(userCommandMapGroup);
- int count = 0;
- typedef UserCommandMap::const_iterator Iterator;
- const Iterator end = userCommandMap().constEnd();
- for (Iterator it = userCommandMap().constBegin(); it != end; ++it) {
- const int key = it.key();
- const QString cmd = it.value();
-
- if ((defaultUserCommandMap().contains(key)
- && defaultUserCommandMap()[key] != cmd)
- || (!defaultUserCommandMap().contains(key) && !cmd.isEmpty())) {
- settings->setArrayIndex(count);
- settings->setValue(idKey, key);
- settings->setValue(cmdKey, cmd);
- ++count;
- }
- }
- settings->endArray();
- } // block
}
void FakeVimPluginPrivate::readSettings()
@@ -2191,6 +2214,26 @@ ExCommandMap &FakeVimExCommandsWidget::defaultExCommandMap()
return m_q->defaultExCommandMap();
}
+ExCommandMap FakeVimExCommandsWidget::exCommandMapFromWidget()
+{
+ ExCommandMap map;
+ int n = commandList()->topLevelItemCount();
+ for (int i = 0; i != n; ++i) {
+ QTreeWidgetItem *section = commandList()->topLevelItem(i);
+ int m = section->childCount();
+ for (int j = 0; j != m; ++j) {
+ QTreeWidgetItem *item = section->child(j);
+ const QString name = item->data(0, CommandRole).toString();
+ const QString regex = item->data(2, Qt::DisplayRole).toString();
+ if ((regex.isEmpty() && defaultExCommandMap().value(name).isEmpty())
+ || (!regex.isEmpty() && defaultExCommandMap().value(name).pattern() == regex))
+ continue;
+ map[name] = QRegExp(regex);
+ }
+ }
+ return map;
+}
+
UserCommandMap &FakeVimUserCommandsPage::userCommandMap()
{
return m_q->userCommandMap();
@@ -2201,6 +2244,11 @@ UserCommandMap &FakeVimUserCommandsPage::defaultUserCommandMap()
return m_q->defaultUserCommandMap();
}
+UserCommandMap FakeVimUserCommandsPage::currentCommandMap()
+{
+ return m_model->commandMap();
+}
+
///////////////////////////////////////////////////////////////////////
//
// FakeVimPlugin
diff --git a/src/plugins/ios/iosrunner.cpp b/src/plugins/ios/iosrunner.cpp
index 6681a27354..6a923be786 100644
--- a/src/plugins/ios/iosrunner.cpp
+++ b/src/plugins/ios/iosrunner.cpp
@@ -270,7 +270,7 @@ void IosRunner::handleGotInferiorPid(IosToolHandler *handler, const QString &bun
if (prerequisiteOk)
reportStarted();
else
- reportFailure(tr("Could not get necessary ports the debugger connection."));
+ reportFailure(tr("Could not get necessary ports for the debugger connection."));
}
void IosRunner::handleAppOutput(IosToolHandler *handler, const QString &output)
diff --git a/src/plugins/ios/iossettingswidget.cpp b/src/plugins/ios/iossettingswidget.cpp
index 0cb54bd28b..02168a79ad 100644
--- a/src/plugins/ios/iossettingswidget.cpp
+++ b/src/plugins/ios/iossettingswidget.cpp
@@ -119,7 +119,7 @@ void IosSettingsWidget::onStart()
QPointer<SimulatorOperationDialog> statusDialog = new SimulatorOperationDialog(this);
statusDialog->setAttribute(Qt::WA_DeleteOnClose);
- statusDialog->addMessage(tr("Starting simulator devices...", "", simulatorInfoList.count()),
+ statusDialog->addMessage(tr("Starting %n simulator device(s)...", "", simulatorInfoList.count()),
Utils::NormalMessageFormat);
QList<QFuture<void>> futureList;
@@ -185,7 +185,7 @@ void IosSettingsWidget::onReset()
const int userInput = QMessageBox::question(this, tr("Reset"),
tr("Do you really want to reset the contents and settings"
- " of the selected devices?", "",
+ " of the %n selected device(s)?", "",
simulatorInfoList.count()));
if (userInput == QMessageBox::No)
return;
@@ -242,14 +242,14 @@ void IosSettingsWidget::onDelete()
return;
const int userInput = QMessageBox::question(this, tr("Delete Device"),
- tr("Do you really want to delete the selected "
- "devices?", "", simulatorInfoList.count()));
+ tr("Do you really want to delete the %n selected "
+ "device(s)?", "", simulatorInfoList.count()));
if (userInput == QMessageBox::No)
return;
QPointer<SimulatorOperationDialog> statusDialog = new SimulatorOperationDialog(this);
statusDialog->setAttribute(Qt::WA_DeleteOnClose);
- statusDialog->addMessage(tr("Deleting simulator devices...", "", simulatorInfoList.count()),
+ statusDialog->addMessage(tr("Deleting %n simulator device(s)...", "", simulatorInfoList.count()),
Utils::NormalMessageFormat);
QList<QFuture<void>> futureList;
foreach (const SimulatorInfo &info, simulatorInfoList) {
@@ -280,7 +280,7 @@ void IosSettingsWidget::onScreenshot()
QPointer<SimulatorOperationDialog> statusDialog = new SimulatorOperationDialog(this);
statusDialog->setAttribute(Qt::WA_DeleteOnClose);
- statusDialog->addMessage(tr("Capturing screenshots from devices...", "",
+ statusDialog->addMessage(tr("Capturing screenshots from %n device(s)...", "",
simulatorInfoList.count()), Utils::NormalMessageFormat);
QList<QFuture<void>> futureList;
foreach (const SimulatorInfo &info, simulatorInfoList) {
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index a291ef212b..f2704e6119 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -527,29 +527,33 @@ void Project::setRootProjectNode(ProjectNode *root)
root = nullptr;
}
- ProjectTree::applyTreeManager(root);
+ if (root) {
+ ProjectTree::applyTreeManager(root);
+ root->setParentFolderNode(d->m_containerNode.get());
+ }
ProjectNode *oldNode = d->m_rootProjectNode;
+
d->m_rootProjectNode = root;
- if (root) {
- QVector<const Node *> nodeList;
- root->forEachGenericNode([&nodeList](const Node *n) {
+ if (oldNode || root)
+ handleSubTreeChanged(d->m_containerNode.get());
+
+ delete oldNode;
+}
+
+void Project::handleSubTreeChanged(FolderNode *node)
+{
+ QVector<const Node *> nodeList;
+ if (d->m_rootProjectNode) {
+ d->m_rootProjectNode->forEachGenericNode([&nodeList](const Node *n) {
nodeList.append(n);
});
Utils::sort(nodeList, &nodeLessThan);
- d->m_sortedNodeList = nodeList;
- root->setParentFolderNode(d->m_containerNode.get());
- // Only announce non-null root, null is only used when project is destroyed.
- // In that case SessionManager::projectRemoved() triggers the update.
- ProjectTree::emitSubtreeChanged(root);
- emit fileListChanged();
- } else {
- d->m_sortedNodeList.clear();
- if (oldNode != nullptr)
- emit fileListChanged();
}
+ d->m_sortedNodeList = nodeList;
- delete oldNode;
+ ProjectTree::emitSubtreeChanged(node);
+ emit fileListChanged();
}
Target *Project::restoreTarget(const QVariantMap &data)
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 845b3c2b42..28b5055189 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -48,6 +48,7 @@ namespace ProjectExplorer {
class BuildInfo;
class ContainerNode;
class EditorConfiguration;
+class FolderNode;
class NamedWidget;
class Node;
class ProjectConfiguration;
@@ -241,10 +242,12 @@ protected:
virtual void projectLoaded(); // Called when the project is fully loaded.
private:
+ void handleSubTreeChanged(FolderNode *node);
void setActiveTarget(Target *target);
ProjectPrivate *d;
friend class Session;
+ friend class ContainerNode;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/projectexplorersettingspage.ui b/src/plugins/projectexplorer/projectexplorersettingspage.ui
index 4a51b8b274..328a8c2caf 100644
--- a/src/plugins/projectexplorer/projectexplorersettingspage.ui
+++ b/src/plugins/projectexplorer/projectexplorersettingspage.ui
@@ -122,7 +122,7 @@
<item>
<widget class="QLabel" name="limitBuildOutputLabel">
<property name="text">
- <string>Limit build output to </string>
+ <string>Limit build output to</string>
</property>
</widget>
</item>
diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp
index 25df41102d..ea4b780cab 100644
--- a/src/plugins/projectexplorer/projectnodes.cpp
+++ b/src/plugins/projectexplorer/projectnodes.cpp
@@ -628,7 +628,7 @@ bool FolderNode::replaceSubtree(Node *oldNode, Node *newNode)
}
QTimer::singleShot(0, [oldNode]() { delete oldNode; });
}
- ProjectTree::emitSubtreeChanged(this);
+ handleSubTreeChanged(this);
return true;
}
@@ -879,6 +879,12 @@ bool FolderNode::isEmpty() const
return m_nodes.isEmpty();
}
+void FolderNode::handleSubTreeChanged(FolderNode *node)
+{
+ if (FolderNode *parent = parentFolderNode())
+ parent->handleSubTreeChanged(node);
+}
+
ContainerNode::ContainerNode(Project *project)
: FolderNode(project->projectDirectory(), NodeType::Project), m_project(project)
{}
@@ -915,4 +921,9 @@ void ContainerNode::removeAllChildren()
m_nodes.clear();
}
+void ContainerNode::handleSubTreeChanged(FolderNode *node)
+{
+ m_project->handleSubTreeChanged(node);
+}
+
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h
index ddd828ee97..34ad086a18 100644
--- a/src/plugins/projectexplorer/projectnodes.h
+++ b/src/plugins/projectexplorer/projectnodes.h
@@ -294,6 +294,8 @@ public:
const FolderNode *asFolderNode() const override { return this; }
protected:
+ virtual void handleSubTreeChanged(FolderNode *node);
+
QList<Node *> m_nodes;
QList<LocationInfo> m_locations;
@@ -361,6 +363,8 @@ public:
void removeAllChildren();
private:
+ void handleSubTreeChanged(FolderNode *node) final;
+
Project *m_project;
};
diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp
index 955cedc956..c98e670eae 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.cpp
+++ b/src/plugins/projectexplorer/targetsettingspanel.cpp
@@ -432,7 +432,7 @@ public:
QPushButton *closeAnyway = box.addButton(tr("Cancel Build and Disable Kit in This Project"), QMessageBox::AcceptRole);
QPushButton *cancelClose = box.addButton(tr("Do Not Remove"), QMessageBox::RejectRole);
box.setDefaultButton(cancelClose);
- box.setWindowTitle(tr("Disable Kit %1 in This Project?").arg(kitName));
+ box.setWindowTitle(tr("Disable Kit \"%1\" in This Project?").arg(kitName));
box.setText(tr("The kit <b>%1</b> is currently being built.").arg(kitName));
box.setInformativeText(tr("Do you want to cancel the build process and remove the kit anyway?"));
box.exec();
diff --git a/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp b/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp
index 3e7ac54eb4..f0a1fb7235 100644
--- a/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp
@@ -109,7 +109,7 @@ QbsProfilesSettingsWidget::QbsProfilesSettingsWidget(QWidget *parent)
m_ui.settingsDirCheckBox->setText(tr("Store profiles in %1 settings directory")
.arg(Core::Constants::IDE_DISPLAY_NAME));
m_ui.settingsDirCheckBox->setChecked(QbsProjectManagerSettings::useCreatorSettingsDirForQbs());
- m_ui.versionValueLabel->setText(qbs::LanguageInfo::qbsVersion());
+ m_ui.versionValueLabel->setText(qbs::LanguageInfo::qbsVersion().toString());
connect(ProjectExplorer::KitManager::instance(), &ProjectExplorer::KitManager::kitsChanged,
this, &QbsProfilesSettingsWidget::refreshKitsList);
connect(m_ui.settingsDirCheckBox, &QCheckBox::stateChanged, [this]() {
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
index 3c0e2eceac..e63a28e0bd 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
@@ -73,6 +73,8 @@ const char QBS_RC_PREFIX[] = "Qbs.RunConfiguration:";
static QString rcNameSeparator() { return QLatin1String("---Qbs.RC.NameSeparator---"); }
+static QString usingLibraryPathsKey() { return "Qbs.RunConfiguration.UsingLibraryPaths"; }
+
const qbs::ProductData findProduct(const qbs::ProjectData &pro, const QString &uniqeName)
{
foreach (const qbs::ProductData &product, pro.allProducts()) {
@@ -124,6 +126,13 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target)
this, &QbsRunConfiguration::installStepChanged);
}
+QVariantMap QbsRunConfiguration::toMap() const
+{
+ QVariantMap map = RunConfiguration::toMap();
+ map.insert(usingLibraryPathsKey(), usingLibraryPaths());
+ return map;
+}
+
bool QbsRunConfiguration::fromMap(const QVariantMap &map)
{
if (!RunConfiguration::fromMap(map))
@@ -137,6 +146,7 @@ bool QbsRunConfiguration::fromMap(const QVariantMap &map)
}
setDefaultDisplayName(defaultDisplayName());
+ m_usingLibraryPaths = map.value(usingLibraryPathsKey(), true).toBool();
installStepChanged();
return true;
@@ -229,6 +239,12 @@ bool QbsRunConfiguration::isConsoleApplication() const
return product.properties().value(QLatin1String("consoleApplication"), false).toBool();
}
+void QbsRunConfiguration::setUsingLibraryPaths(bool useLibPaths)
+{
+ m_usingLibraryPaths = useLibPaths;
+ extraAspect<LocalEnvironmentAspect>()->environmentChanged();
+}
+
QString QbsRunConfiguration::baseWorkingDirectory() const
{
const QString exe = executable();
@@ -245,8 +261,11 @@ void QbsRunConfiguration::addToBaseEnvironment(Utils::Environment &env) const
if (product.isValid()) {
QProcessEnvironment procEnv = env.toProcessEnvironment();
procEnv.insert(QLatin1String("QBS_RUN_FILE_PATH"), executable());
+ QStringList setupRunEnvConfig;
+ if (!m_usingLibraryPaths)
+ setupRunEnvConfig << QLatin1String("ignore-lib-dependencies");
qbs::RunEnvironment qbsRunEnv = project->qbsProject().getRunEnvironment(product,
- qbs::InstallOptions(), procEnv, QbsManager::settings());
+ qbs::InstallOptions(), procEnv, setupRunEnvConfig, QbsManager::settings());
qbs::ErrorInfo error;
procEnv = qbsRunEnv.runEnvironment(&error);
if (error.hasError()) {
@@ -260,10 +279,6 @@ void QbsRunConfiguration::addToBaseEnvironment(Utils::Environment &env) const
}
}
}
-
- QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitInformation::qtVersion(target()->kit());
- if (qtVersion)
- env.prependOrSetLibrarySearchPath(qtVersion->librarySearchPath().toString());
}
QString QbsRunConfiguration::buildSystemTarget() const
@@ -317,6 +332,11 @@ QbsRunConfigurationWidget::QbsRunConfigurationWidget(QbsRunConfiguration *rc)
m_rc->extraAspect<WorkingDirectoryAspect>()->addToMainConfigurationWidget(this, toplayout);
m_rc->extraAspect<TerminalAspect>()->addToMainConfigurationWidget(this, toplayout);
+ m_usingLibPathsCheckBox = new QCheckBox(tr("Add library paths to run environment"));
+ m_usingLibPathsCheckBox->setChecked(m_rc->usingLibraryPaths());
+ connect(m_usingLibPathsCheckBox, &QCheckBox::toggled, m_rc,
+ &QbsRunConfiguration::setUsingLibraryPaths);
+ toplayout->addRow(QString(), m_usingLibPathsCheckBox);
connect(m_rc, &QbsRunConfiguration::targetInformationChanged,
this, &QbsRunConfigurationWidget::targetInformationHasChanged, Qt::QueuedConnection);
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
index af1f8a3f20..9976121606 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
@@ -27,8 +27,9 @@
#include <projectexplorer/runnables.h>
-#include <QStringList>
+#include <QCheckBox>
#include <QLabel>
+#include <QStringList>
#include <QWidget>
namespace qbs { class InstallOptions; }
@@ -63,12 +64,15 @@ public:
QString buildSystemTarget() const final;
QString uniqueProductName() const;
bool isConsoleApplication() const;
+ bool usingLibraryPaths() const { return m_usingLibraryPaths; }
+ void setUsingLibraryPaths(bool useLibPaths);
signals:
void targetInformationChanged();
void usingDyldImageSuffixChanged(bool);
private:
+ QVariantMap toMap() const final;
bool fromMap(const QVariantMap &map) final;
QString extraId() const final;
@@ -83,6 +87,7 @@ private:
ProjectExplorer::BuildStepList *m_currentBuildStepList = nullptr; // We do not take ownership!
QString m_uniqueProductName;
QString m_productDisplayName;
+ bool m_usingLibraryPaths = true;
};
class QbsRunConfigurationWidget : public QWidget
@@ -99,6 +104,7 @@ private:
QbsRunConfiguration *m_rc;
QLabel *m_executableLineLabel;
+ QCheckBox *m_usingLibPathsCheckBox;
bool m_ignoreChange = false;
bool m_isShown = false;
};
diff --git a/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp b/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp
index dfbee9bb66..2aa7fb94b3 100644
--- a/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp
+++ b/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp
@@ -30,6 +30,7 @@
#include <coreplugin/helpmanager.h>
#include <texteditor/texteditor.h>
#include <utils/htmldocextractor.h>
+#include <utils/executeondestruction.h>
#include <QTextBlock>
#include <QUrl>
@@ -44,8 +45,12 @@ ProFileHoverHandler::ProFileHoverHandler()
{
}
-void ProFileHoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget, int pos)
+void ProFileHoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
m_docFragment.clear();
m_manualKind = UnknownManual;
if (!editorWidget->extraSelectionTooltip(pos).isEmpty()) {
diff --git a/src/plugins/qmakeprojectmanager/profilehoverhandler.h b/src/plugins/qmakeprojectmanager/profilehoverhandler.h
index cc9f91ef02..bbcd74db7a 100644
--- a/src/plugins/qmakeprojectmanager/profilehoverhandler.h
+++ b/src/plugins/qmakeprojectmanager/profilehoverhandler.h
@@ -40,7 +40,9 @@ public:
ProFileHoverHandler();
private:
- void identifyMatch(TextEditor::TextEditorWidget *editorWidget, int pos) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report) override;
void identifyQMakeKeyword(const QString &text, int pos);
enum ManualKind {
diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h
index ce7952609a..0035b90fad 100644
--- a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h
+++ b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h
@@ -137,7 +137,7 @@ const char lowerToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Lower s
const char resetSizeToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Reset size and use implicit size.");
const char resetPositionTooltip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Reset position and use implicit position.");
-const char anchorsFillToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Fill selected item to parent. ");
+const char anchorsFillToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Fill selected item to parent.");
const char anchorsResetToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Reset anchors for selected item.");
const char layoutColumnLayoutToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Layout selected items in column layout.");
diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
index b19e06e45b..629f290026 100644
--- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
@@ -359,7 +359,7 @@ bool selectionHasSameParentAndInBaseState(const SelectionContext &context)
bool isNotInLayout(const SelectionContext &context)
{
if (selectionNotEmpty(context)) {
- ModelNode selectedModelNode = context.selectedModelNodes().first();
+ const ModelNode &selectedModelNode = context.selectedModelNodes().constFirst();
ModelNode parentModelNode;
if (selectedModelNode.hasParentProperty())
diff --git a/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp b/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp
index 1d88bf56a0..a22a72498f 100644
--- a/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp
@@ -130,7 +130,7 @@ protected:
if (m_insideObject) {
QStringList stringList = textAt(node->qualifiedId->firstSourceLocation(),
node->qualifiedId->lastSourceLocation()).split(QLatin1String("."));
- const QString itemid = stringList.isEmpty() ? QString() : stringList.first();
+ const QString itemid = stringList.isEmpty() ? QString() : stringList.constFirst();
if (itemid == m_itemId) {
m_implemenations.append(node->statement->firstSourceLocation());
diff --git a/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp b/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp
index 39638e3fcb..ed05faba12 100644
--- a/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp
@@ -57,7 +57,7 @@ static int findFirstBigger(const QVector<int> &v, int tolerance)
if (v.isEmpty())
return 0;
- int last = v.first();
+ int last = v.constFirst();
for (int i = 0; i < v.length(); ++i) {
if (v.value(i) > last + tolerance)
return i;
@@ -257,7 +257,7 @@ void LayoutInGridLayout::collectItemNodes()
m_qmlItemNodes.append(itemNode);
}
}
- m_parentNode = m_qmlItemNodes.first().instanceParentItem();
+ m_parentNode = m_qmlItemNodes.constFirst().instanceParentItem();
}
void LayoutInGridLayout::collectOffsets()
@@ -287,10 +287,10 @@ void LayoutInGridLayout::sortOffsets()
void LayoutInGridLayout::calculateGridOffsets()
{
if (!m_xTopOffsets.isEmpty())
- m_startX = m_xTopOffsets.first();
+ m_startX = m_xTopOffsets.constFirst();
if (!m_yTopOffsets.isEmpty())
- m_startY = m_yTopOffsets.first();
+ m_startY = m_yTopOffsets.constFirst();
const int defaultWidthTolerance = 64;
const int defaultHeightTolerance = 64;
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp
index e70de03f74..195ce608d4 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp
@@ -40,7 +40,7 @@ static inline bool itemsHaveSameParent(const QList<ModelNode> &siblingList)
return false;
- QmlItemNode item(siblingList.first());
+ const QmlItemNode &item = siblingList.constFirst();
if (!item.isValid())
return false;
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index c3d7d9f43d..85e6774750 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -285,7 +285,7 @@ void setVisible(const SelectionContext &selectionState)
return;
try {
- selectionState.selectedModelNodes().first().variantProperty("visible").setValue(selectionState.toggled());
+ selectionState.selectedModelNodes().constFirst().variantProperty("visible").setValue(selectionState.toggled());
} catch (const RewritingException &e) { //better save then sorry
e.showException();
}
@@ -657,7 +657,7 @@ void addSignalHandlerOrGotoImplementation(const SelectionContext &selectionState
{
ModelNode modelNode;
if (selectionState.singleNodeIsSelected())
- modelNode = selectionState.selectedModelNodes().first();
+ modelNode = selectionState.selectedModelNodes().constFirst();
bool isModelNodeRoot = true;
@@ -690,7 +690,7 @@ void addSignalHandlerOrGotoImplementation(const SelectionContext &selectionState
const QString fileName = currentDesignDocument.toString();
const QString typeName = currentDesignDocument.toFileInfo().baseName();
- QStringList signalNames = cleanSignalNames(getSortedSignalNameList(selectionState.selectedModelNodes().first()));
+ QStringList signalNames = cleanSignalNames(getSortedSignalNameList(selectionState.selectedModelNodes().constFirst()));
QList<QmlJSEditor::FindReferences::Usage> usages = QmlJSEditor::FindReferences::findUsageOfType(fileName, typeName);
@@ -701,12 +701,12 @@ void addSignalHandlerOrGotoImplementation(const SelectionContext &selectionState
return;
}
- usages = FindImplementation::run(usages.first().path, typeName, itemId);
+ usages = FindImplementation::run(usages.constFirst().path, typeName, itemId);
Core::ModeManager::activateMode(Core::Constants::MODE_EDIT);
if (usages.count() > 0 && (addAlwaysNewSlot || usages.count() < 2) && (!isModelNodeRoot || addAlwaysNewSlot)) {
- Core::EditorManager::openEditorAt(usages.first().path, usages.first().line, usages.first().col);
+ Core::EditorManager::openEditorAt(usages.constFirst().path, usages.constFirst().line, usages.constFirst().col);
if (!signalNames.isEmpty()) {
AddSignalHandlerDialog *dialog = new AddSignalHandlerDialog(Core::ICore::dialogParent());
@@ -732,7 +732,7 @@ void addSignalHandlerOrGotoImplementation(const SelectionContext &selectionState
//Move cursor to correct curser position
const QString filePath = Core::EditorManager::currentDocument()->filePath().toString();
QList<QmlJSEditor::FindReferences::Usage> usages = FindImplementation::run(filePath, typeName, itemId);
- Core::EditorManager::openEditorAt(filePath, usages.first().line, usages.first().col + 1);
+ Core::EditorManager::openEditorAt(filePath, usages.constFirst().line, usages.constFirst().col + 1);
} );
dialog->show();
@@ -740,7 +740,7 @@ void addSignalHandlerOrGotoImplementation(const SelectionContext &selectionState
return;
}
- Core::EditorManager::openEditorAt(usages.first().path, usages.first().line, usages.first().col + 1);
+ Core::EditorManager::openEditorAt(usages.constFirst().path, usages.constFirst().line, usages.constFirst().col + 1);
}
void removeLayout(const SelectionContext &selectionContext)
@@ -794,7 +794,7 @@ void moveToComponent(const SelectionContext &selectionContext)
{
ModelNode modelNode;
if (selectionContext.singleNodeIsSelected())
- modelNode = selectionContext.selectedModelNodes().first();
+ modelNode = selectionContext.selectedModelNodes().constFirst();
if (modelNode.isValid())
selectionContext.view()->model()->rewriterView()->moveToComponent(modelNode);
diff --git a/src/plugins/qmldesigner/components/debugview/debugview.cpp b/src/plugins/qmldesigner/components/debugview/debugview.cpp
index 261b7ed978..59afd1172f 100644
--- a/src/plugins/qmldesigner/components/debugview/debugview.cpp
+++ b/src/plugins/qmldesigner/components/debugview/debugview.cpp
@@ -396,7 +396,7 @@ void DebugView::instancesChildrenChanged(const QVector<ModelNode> & nodeList)
void DebugView::customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data)
{
if (identifier == "PuppetStatus" && data.count() == 1) {
- m_debugViewWidget->setPuppetStatus(data.first().toString());
+ m_debugViewWidget->setPuppetStatus(data.constFirst().toString());
} else if (isDebugViewEnabled()) {
QTextStream message;
diff --git a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp
index 2cf53f0e79..e4f76d5858 100644
--- a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp
@@ -265,7 +265,7 @@ void AbstractFormEditorTool::mouseReleaseEvent(const QList<QGraphicsItem*> & ite
QmlItemNode currentSelectedNode;
if (view()->selectedModelNodes().count() == 1) {
- currentSelectedNode = view()->selectedModelNodes().first();
+ currentSelectedNode = view()->selectedModelNodes().constFirst();
if (!containsItemNode(itemList, currentSelectedNode)) {
QmlItemNode selectedNode;
diff --git a/src/plugins/qmldesigner/components/formeditor/anchorindicator.cpp b/src/plugins/qmldesigner/components/formeditor/anchorindicator.cpp
index 6d48240b03..6cd4be56f8 100644
--- a/src/plugins/qmldesigner/components/formeditor/anchorindicator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/anchorindicator.cpp
@@ -89,7 +89,7 @@ void AnchorIndicator::setItems(const QList<FormEditorItem *> &itemList)
clear();
if (itemList.count() == 1) {
- m_formEditorItem = itemList.first();
+ m_formEditorItem = itemList.constFirst();
QmlItemNode sourceQmlItemNode = m_formEditorItem->qmlItemNode();
if (!sourceQmlItemNode.modelNode().isRootNode()) {
QmlAnchors qmlAnchors = sourceQmlItemNode.anchors();
diff --git a/src/plugins/qmldesigner/components/formeditor/bindingindicator.cpp b/src/plugins/qmldesigner/components/formeditor/bindingindicator.cpp
index 5bd4fe7453..766458ec59 100644
--- a/src/plugins/qmldesigner/components/formeditor/bindingindicator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/bindingindicator.cpp
@@ -116,7 +116,7 @@ void BindingIndicator::setItems(const QList<FormEditorItem *> &itemList)
clear();
if (itemList.count() == 1) {
- m_formEditorItem = itemList.first();
+ m_formEditorItem = itemList.constFirst();
const QmlItemNode qmlItemNode = m_formEditorItem->qmlItemNode();
if (qmlItemNode.hasBindingProperty("x")) {
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp
index be6437c898..b9cba15c9e 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp
@@ -200,8 +200,8 @@ void FormEditorScene::dropEvent(QGraphicsSceneDragDropEvent * event)
{
currentTool()->dropEvent(removeLayerItems(itemsAt(event->scenePos())), event);
- if (views().first())
- views().first()->setFocus();
+ if (views().constFirst())
+ views().constFirst()->setFocus();
}
void FormEditorScene::dragEnterEvent(QGraphicsSceneDragDropEvent * event)
@@ -237,7 +237,7 @@ QList<QGraphicsItem *> FormEditorScene::itemsAt(const QPointF &pos)
QTransform transform;
if (!views().isEmpty())
- transform = views().first()->transform();
+ transform = views().constFirst()->transform();
return items(pos,
Qt::IntersectsItemShape,
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index 1956dadb34..fad8a6817b 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -397,7 +397,7 @@ void FormEditorView::changeToCustomTool()
int handlingRank = 0;
AbstractCustomTool *selectedCustomTool = 0;
- ModelNode selectedModelNode = selectedModelNodes().first();
+ const ModelNode &selectedModelNode = selectedModelNodes().constFirst();
foreach (AbstractCustomTool *customTool, m_customToolList) {
if (customTool->wantHandleItem(selectedModelNode) > handlingRank) {
diff --git a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp
index d55f85090f..57a280d72b 100644
--- a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp
@@ -75,10 +75,10 @@ void MoveManipulator::setItems(const QList<FormEditorItem*> &itemList)
{
m_itemList = itemList;
if (!m_itemList.isEmpty()) {
- if (m_itemList.first()->parentItem())
- m_snapper.setContainerFormEditorItem(m_itemList.first()->parentItem());
+ if (m_itemList.constFirst()->parentItem())
+ m_snapper.setContainerFormEditorItem(m_itemList.constFirst()->parentItem());
else
- m_snapper.setContainerFormEditorItem(m_itemList.first());
+ m_snapper.setContainerFormEditorItem(m_itemList.constFirst());
m_snapper.setTransformtionSpaceFormEditorItem(m_snapper.containerFormEditorItem());
}
}
@@ -105,8 +105,8 @@ void MoveManipulator::synchronizeParent(const QList<FormEditorItem*> &itemList,
void MoveManipulator::synchronizeInstanceParent(const QList<FormEditorItem*> &itemList)
{
- if (m_view->model() && !m_itemList.isEmpty() && m_itemList.first()->qmlItemNode().hasInstanceParent())
- synchronizeParent(itemList, m_itemList.first()->qmlItemNode().instanceParent());
+ if (m_view->model() && !m_itemList.isEmpty() && m_itemList.constFirst()->qmlItemNode().hasInstanceParent())
+ synchronizeParent(itemList, m_itemList.constFirst()->qmlItemNode().instanceParent());
}
bool MoveManipulator::itemsCanReparented() const
diff --git a/src/plugins/qmldesigner/components/formeditor/movetool.cpp b/src/plugins/qmldesigner/components/formeditor/movetool.cpp
index b779216d61..4978c37026 100644
--- a/src/plugins/qmldesigner/components/formeditor/movetool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/movetool.cpp
@@ -106,10 +106,10 @@ void MoveTool::mouseMoveEvent(const QList<QGraphicsItem*> &itemList,
FormEditorItem *containerItem = containerFormEditorItem(itemList, m_movingItems);
if (containerItem && view()->currentState().isBaseState()) {
- if (containerItem != m_movingItems.first()->parentItem()
+ if (containerItem != m_movingItems.constFirst()->parentItem()
&& event->modifiers().testFlag(Qt::ShiftModifier)) {
- FormEditorItem *movingItem = m_movingItems.first();
+ const FormEditorItem *movingItem = m_movingItems.constFirst();
if (m_movingItems.count() > 1
|| (movingItem->qmlItemNode().canBereparentedTo(containerItem->qmlItemNode())))
@@ -129,7 +129,7 @@ void MoveTool::hoverMoveEvent(const QList<QGraphicsItem*> &itemList,
return;
}
- ResizeHandleItem* resizeHandle = ResizeHandleItem::fromGraphicsItem(itemList.first());
+ ResizeHandleItem* resizeHandle = ResizeHandleItem::fromGraphicsItem(itemList.constFirst());
if (resizeHandle) {
view()->changeToResizeTool();
return;
@@ -289,7 +289,7 @@ bool MoveTool::haveSameParent(const QList<FormEditorItem*> &itemList)
if (itemList.isEmpty())
return false;
- QGraphicsItem *firstParent = itemList.first()->parentItem();
+ QGraphicsItem *firstParent = itemList.constFirst()->parentItem();
foreach (FormEditorItem* item, itemList)
{
if (firstParent != item->parentItem())
diff --git a/src/plugins/qmldesigner/components/formeditor/onedimensionalcluster.cpp b/src/plugins/qmldesigner/components/formeditor/onedimensionalcluster.cpp
index 864ae64b76..aee6bba6dc 100644
--- a/src/plugins/qmldesigner/components/formeditor/onedimensionalcluster.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/onedimensionalcluster.cpp
@@ -53,17 +53,17 @@ double OneDimensionalCluster::mean() const
if (m_coordinateList.size() == 1)
{
- return m_coordinateList.first();
+ return m_coordinateList.constFirst();
}
return sum(m_coordinateList) / m_coordinateList.size();
}
-double OneDimensionalCluster::first() const
+double OneDimensionalCluster::constFirst() const
{
Q_ASSERT(!m_coordinateList.isEmpty());
- return m_coordinateList.first();
+ return m_coordinateList.constFirst();
}
QList<OneDimensionalCluster> OneDimensionalCluster::createOneDimensionalClusterList(const QList<double> & oneDimensionalCoordinateList)
@@ -136,7 +136,7 @@ QList<double> OneDimensionalCluster::reduceLines(const QList<double> & oneDimens
QList<double> lineList;
foreach (const OneDimensionalCluster &cluster, clusterList)
- lineList.append(cluster.first());
+ lineList.append(cluster.constFirst());
return lineList;
}
diff --git a/src/plugins/qmldesigner/components/formeditor/onedimensionalcluster.h b/src/plugins/qmldesigner/components/formeditor/onedimensionalcluster.h
index 83b9397629..5c5b184288 100644
--- a/src/plugins/qmldesigner/components/formeditor/onedimensionalcluster.h
+++ b/src/plugins/qmldesigner/components/formeditor/onedimensionalcluster.h
@@ -39,7 +39,7 @@ private:
OneDimensionalCluster(const QList<double> & coordinateList );
double mean() const;
- double first() const;
+ double constFirst() const;
static QList<OneDimensionalCluster> createOneDimensionalClusterList(const QList<double> & oneDimensionalCoordinateList);
static QList<OneDimensionalCluster> reduceOneDimensionalClusterList(const QList<OneDimensionalCluster> & unreducedClusterList, double maximumDistance);
diff --git a/src/plugins/qmldesigner/components/formeditor/resizetool.cpp b/src/plugins/qmldesigner/components/formeditor/resizetool.cpp
index c9e8a977fd..96b960867c 100644
--- a/src/plugins/qmldesigner/components/formeditor/resizetool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/resizetool.cpp
@@ -58,7 +58,7 @@ void ResizeTool::mousePressEvent(const QList<QGraphicsItem*> &itemList,
if (itemList.isEmpty())
return;
- ResizeHandleItem *resizeHandle = ResizeHandleItem::fromGraphicsItem(itemList.first());
+ ResizeHandleItem *resizeHandle = ResizeHandleItem::fromGraphicsItem(itemList.constFirst());
if (resizeHandle && resizeHandle->resizeController().isValid()) {
m_resizeManipulator.setHandle(resizeHandle);
m_resizeManipulator.begin(event->scenePos());
@@ -85,7 +85,7 @@ void ResizeTool::hoverMoveEvent(const QList<QGraphicsItem*> &itemList,
return;
}
- ResizeHandleItem* resizeHandle = ResizeHandleItem::fromGraphicsItem(itemList.first());
+ ResizeHandleItem* resizeHandle = ResizeHandleItem::fromGraphicsItem(itemList.constFirst());
if (resizeHandle && resizeHandle->resizeController().isValid()) {
m_resizeManipulator.setHandle(resizeHandle);
} else {
diff --git a/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp b/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp
index c1b26877ad..b9cbd74bba 100644
--- a/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp
@@ -82,8 +82,8 @@ static QPolygonF boundingRectInLayerItemSpaceForItem(FormEditorItem *item, QGrap
static bool checkSingleSelection(const QList<FormEditorItem*> &itemList)
{
return !itemList.isEmpty()
- && itemList.first()
- && itemList.first()->qmlItemNode().view()->singleSelectedModelNode().isValid();
+ && itemList.constFirst()
+ && itemList.constFirst()->qmlItemNode().view()->singleSelectedModelNode().isValid();
}
const int labelHeight = 16;
@@ -112,7 +112,7 @@ void SelectionIndicator::setItems(const QList<FormEditorItem*> &itemList)
}
if (checkSingleSelection(itemList)) {
- FormEditorItem *selectedItem = itemList.first();
+ FormEditorItem *selectedItem = itemList.constFirst();
m_labelItem.reset(new QGraphicsPolygonItem(m_layerItem.data()));
QGraphicsWidget *toolbar = DesignerActionManager::instance().createFormEditorToolBar(m_labelItem.get());
@@ -161,7 +161,7 @@ void SelectionIndicator::updateItems(const QList<FormEditorItem*> &itemList)
if (checkSingleSelection(itemList)
&& m_labelItem) {
- FormEditorItem *selectedItem = itemList.first();
+ FormEditorItem *selectedItem = itemList.constFirst();
QPolygonF labelPolygon = boundingRectInLayerItemSpaceForItem(selectedItem, m_layerItem.data());
QRectF labelRect = labelPolygon.boundingRect();
QPointF pos = labelRect.topLeft();
diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
index 559cec498e..52bcae4ff5 100644
--- a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
@@ -126,7 +126,7 @@ void SelectionTool::hoverMoveEvent(const QList<QGraphicsItem*> &itemList,
{
if (!itemList.isEmpty()) {
- ResizeHandleItem* resizeHandle = ResizeHandleItem::fromGraphicsItem(itemList.first());
+ ResizeHandleItem* resizeHandle = ResizeHandleItem::fromGraphicsItem(itemList.constFirst());
if (resizeHandle) {
view()->changeToResizeTool();
return;
diff --git a/src/plugins/qmldesigner/components/formeditor/snapper.cpp b/src/plugins/qmldesigner/components/formeditor/snapper.cpp
index 5b8e02a288..7a11b6c7e3 100644
--- a/src/plugins/qmldesigner/components/formeditor/snapper.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/snapper.cpp
@@ -449,7 +449,7 @@ double Snapper::snappingDistance() const
static QLineF mergedHorizontalLine(const QList<QLineF> &lineList)
{
if (lineList.count() == 1)
- return lineList.first();
+ return lineList.constFirst();
double minimumX = std::numeric_limits<double>::max();
double maximumX = std::numeric_limits<double>::min();
@@ -460,14 +460,14 @@ static QLineF mergedHorizontalLine(const QList<QLineF> &lineList)
maximumX = qMax(maximumX, double(line.x2()));
}
- double y(lineList.first().y1());
+ double y(lineList.constFirst().y1());
return QLineF(minimumX, y, maximumX, y);
}
static QLineF mergedVerticalLine(const QList<QLineF> &lineList)
{
if (lineList.count() == 1)
- return lineList.first();
+ return lineList.constFirst();
double minimumY = std::numeric_limits<double>::max();
double maximumY = std::numeric_limits<double>::min();
@@ -478,7 +478,7 @@ static QLineF mergedVerticalLine(const QList<QLineF> &lineList)
maximumY = qMax(maximumY, double(line.y2()));
}
- double x(lineList.first().x1());
+ double x(lineList.constFirst().x1());
return QLineF(x, minimumY, x, maximumY);
}
diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp
index 068915d13c..9a7aa73676 100644
--- a/src/plugins/qmldesigner/components/integration/designdocument.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp
@@ -450,7 +450,7 @@ void DesignDocument::paste()
ModelNode targetNode;
if (!view.selectedModelNodes().isEmpty())
- targetNode = view.selectedModelNodes().first();
+ targetNode = view.selectedModelNodes().constFirst();
//In case we copy and paste a selection we paste in the parent item
if ((view.selectedModelNodes().count() == selectedNodes.count()) && targetNode.isValid() && targetNode.hasParentProperty())
@@ -495,7 +495,7 @@ void DesignDocument::paste()
ModelNode targetNode;
if (!view.selectedModelNodes().isEmpty())
- targetNode = view.selectedModelNodes().first();
+ targetNode = view.selectedModelNodes().constFirst();
if (!targetNode.isValid())
targetNode = view.rootModelNode();
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
index b371fe3fe6..89d27cd5f0 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
@@ -219,7 +219,7 @@ void DesignDocumentView::copyModelNodes(const QList<ModelNode> &nodesToCopy)
copyModel->attachView(&view);
if (selectedNodes.count() == 1) {
- ModelNode selectedNode(selectedNodes.first());
+ const ModelNode &selectedNode = selectedNodes.constFirst();
if (!selectedNode.isValid())
return;
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
index a90800d76f..8b81df3355 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
@@ -454,7 +454,7 @@ void NavigatorView::updateItemSelection()
blockSelectionChangedSignal(blocked);
if (!selectedModelNodes().isEmpty())
- treeWidget()->scrollTo(indexForModelNode(selectedModelNodes().first()));
+ treeWidget()->scrollTo(indexForModelNode(selectedModelNodes().constFirst()));
// make sure selected nodes a visible
foreach (const QModelIndex &selectedIndex, itemSelection.indexes()) {
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
index 832e733872..6966bfe187 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
@@ -145,7 +145,7 @@ void PropertyEditorContextObject::toogleExportAlias()
if (rewriterView->selectedModelNodes().isEmpty())
return;
- ModelNode selectedNode = rewriterView->selectedModelNodes().first();
+ const ModelNode &selectedNode = rewriterView->selectedModelNodes().constFirst();
if (QmlObjectNode::isValidQmlObjectNode(selectedNode)) {
QmlObjectNode objectNode(selectedNode);
@@ -184,7 +184,7 @@ void PropertyEditorContextObject::changeTypeName(const QString &typeName)
if (rewriterView->selectedModelNodes().isEmpty())
return;
- ModelNode selectedNode = rewriterView->selectedModelNodes().first();
+ ModelNode selectedNode = rewriterView->selectedModelNodes().constFirst();
try {
RewriterTransaction transaction =
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
index a8e2b42e59..7c6435a1b8 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
@@ -550,12 +550,12 @@ QString PropertyEditorQmlBackend::locateQmlFile(const NodeMetaInfo &info, const
//Check for qml files with versions first
- const QString withoutDir = relativePath.split(QStringLiteral("/")).last();
+ const QString withoutDir = relativePath.split(QStringLiteral("/")).constLast();
if (importDirVersion.exists(withoutDir))
return importDirVersion.absoluteFilePath(withoutDir);
- const QString withoutDirWithVersion = relativePathWithVersion.split(QStringLiteral("/")).last();
+ const QString withoutDirWithVersion = relativePathWithVersion.split(QStringLiteral("/")).constLast();
const QStringList possiblePaths = {
importDir.absoluteFilePath(relativePathWithVersion),
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp
index 4cad2d08cc..63e415f1b9 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp
@@ -510,8 +510,8 @@ void PropertyEditorView::selectedNodesChanged(const QList<ModelNode> &selectedNo
if (selectedNodeList.isEmpty() || selectedNodeList.count() > 1)
select(ModelNode());
- else if (m_selectedNode != selectedNodeList.first())
- select(selectedNodeList.first());
+ else if (m_selectedNode != selectedNodeList.constFirst())
+ select(selectedNodeList.constFirst());
}
void PropertyEditorView::nodeAboutToBeRemoved(const ModelNode &removedNode)
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h
index b9028aad3d..316164f4c2 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h
@@ -44,6 +44,7 @@ class CollapseButton;
class PropertyEditorWidget;
class PropertyEditorView;
class PropertyEditorQmlBackend;
+class ModelNode;
class PropertyEditorView: public AbstractView
{
@@ -66,8 +67,6 @@ public:
void modelAboutToBeDetached(Model *model) override;
- ModelState modelState() const;
-
void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange) override;
void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) override;
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.cpp
index 36b3794fd2..ec434abb59 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.cpp
+++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.cpp
@@ -43,7 +43,7 @@ QImage StatesEditorImageProvider::requestImage(const QString &id, QSize *size, c
bool nodeInstanceViewIsDetached = m_nodeInstanceView.isNull() || !m_nodeInstanceView->model();
if (!nodeInstanceViewIsDetached) {
- QString imageId = id.split(QLatin1Char('-')).first();
+ QString imageId = id.split(QLatin1Char('-')).constFirst();
if (imageId == QLatin1String("baseState")) {
image = m_nodeInstanceView->statePreviewImage(m_nodeInstanceView->rootModelNode());
} else {
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.h b/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.h
index 231f4bfb43..8455ec6310 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.h
+++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.h
@@ -35,8 +35,6 @@ QT_END_NAMESPACE
namespace QmlDesigner {
-class Model;
-class ModelState;
class StatesEditorModel;
class StatesEditorView;
class NodeInstanceView;
diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp
index 495f6762ca..a5c4441e6e 100644
--- a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp
+++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp
@@ -186,7 +186,7 @@ void TextEditorView::documentMessagesChanged(const QList<DocumentMessage> &error
if (errors.isEmpty()) {
m_widget->clearStatusBar();
} else {
- const DocumentMessage error = errors.first();
+ const DocumentMessage &error = errors.constFirst();
m_widget->setStatusText(QString("%1 (Line: %2)").arg(error.description()).arg(error.line()));
}
}
diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp
index 8c0e715ba9..4cf464d4e7 100644
--- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp
+++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp
@@ -126,7 +126,7 @@ void TextEditorWidget::jumpTextCursorToSelectedModelNode()
return;
if (!m_textEditorView->selectedModelNodes().isEmpty())
- selectedNode = m_textEditorView->selectedModelNodes().first();
+ selectedNode = m_textEditorView->selectedModelNodes().constFirst();
if (selectedNode.isValid()) {
RewriterView *rewriterView = m_textEditorView->model()->rewriterView();
diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp b/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp
index a2b4c9b3fc..809fe37ed4 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp
@@ -66,7 +66,7 @@ bool QmlRefactoring::reparseDocument()
qDebug() << "*** QML text:" << textModifier->text();
QString errorMessage = QStringLiteral("Parsing Error");
if (!tmpDocument->diagnosticMessages().isEmpty())
- errorMessage = tmpDocument->diagnosticMessages().first().message;
+ errorMessage = tmpDocument->diagnosticMessages().constFirst().message;
qDebug() << "*** " << errorMessage;
return false;
diff --git a/src/plugins/qmldesigner/designercore/include/abstractproperty.h b/src/plugins/qmldesigner/designercore/include/abstractproperty.h
index b3e1c16413..65f3f666be 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractproperty.h
@@ -108,6 +108,7 @@ protected:
AbstractProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
AbstractProperty(const Internal::InternalPropertyPointer &property, Model* model, AbstractView *view);
Internal::InternalNodePointer internalNode() const;
+ Internal::ModelPrivate *privateModel() const;
private:
PropertyName m_propertyName;
diff --git a/src/plugins/qmldesigner/designercore/include/forwardview.h b/src/plugins/qmldesigner/designercore/include/forwardview.h
index b34cd107e9..d317bec793 100644
--- a/src/plugins/qmldesigner/designercore/include/forwardview.h
+++ b/src/plugins/qmldesigner/designercore/include/forwardview.h
@@ -280,7 +280,7 @@ ViewType *ForwardView<ViewType>::firstView() const
if (m_targetViewList.isEmpty())
return 0;
- return m_targetViewList.first().data();
+ return m_targetViewList.constFirst().data();
}
diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h
index b3a146b174..d5f16be0ed 100644
--- a/src/plugins/qmldesigner/designercore/include/model.h
+++ b/src/plugins/qmldesigner/designercore/include/model.h
@@ -40,7 +40,10 @@ QT_END_NAMESPACE
namespace QmlDesigner {
-namespace Internal { class ModelPrivate; }
+namespace Internal {
+class ModelPrivate;
+class WriteLocker;
+} //Internal
class AnchorLine;
class ModelNode;
@@ -61,12 +64,10 @@ typedef QList<QPair<PropertyName, QVariant> > PropertyListType;
class QMLDESIGNERCORE_EXPORT Model : public QObject
{
friend class QmlDesigner::ModelNode;
- friend class QmlDesigner::NodeState;
- friend class QmlDesigner::ModelState;
- friend class QmlDesigner::NodeAnchors;
friend class QmlDesigner::AbstractProperty;
friend class QmlDesigner::AbstractView;
friend class Internal::ModelPrivate;
+ friend class Internal::WriteLocker;
Q_OBJECT
@@ -116,7 +117,7 @@ public:
protected:
Model();
-public:
+private:
Internal::ModelPrivate *d;
};
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
index 197c7d5064..823f966d8c 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
@@ -881,8 +881,8 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand()
if (versionString.contains(QStringLiteral("."))) {
const QStringList splittedString = versionString.split(QStringLiteral("."));
- majorVersion = splittedString.first().toInt();
- minorVersion = splittedString.last().toInt();
+ majorVersion = splittedString.constFirst().toInt();
+ minorVersion = splittedString.constLast().toInt();
}
bool isItem = false;
diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
index 2b9092e286..6efc88a7b8 100644
--- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
@@ -227,7 +227,7 @@ QProcess *PuppetCreator::puppetProcess(const QString &puppetPath,
#endif
if (debugPuppet == puppetMode || debugPuppet == "all") {
QMessageBox::information(Core::ICore::dialogParent(),
- QCoreApplication::translate("PuppetCreator", "Puppet is starting ..."),
+ QCoreApplication::translate("PuppetCreator", "Puppet is starting..."),
QCoreApplication::translate("PuppetCreator", "You can now attach your debugger to the %1 puppet with process id: %2.")
.arg(puppetMode, QString::number(puppetProcess->processId())));
}
diff --git a/src/plugins/qmldesigner/designercore/metainfo/metainforeader.cpp b/src/plugins/qmldesigner/designercore/metainfo/metainforeader.cpp
index d2d906e665..1caff4817e 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/metainforeader.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/metainforeader.cpp
@@ -278,9 +278,9 @@ void MetaInfoReader::setVersion(const QString &versionNumber)
int val;
bool ok;
if (versionNumber.contains(QLatin1Char('.'))) {
- val = versionNumber.split(QLatin1Char('.')).first().toInt(&ok);
+ val = versionNumber.split(QLatin1Char('.')).constFirst().toInt(&ok);
major = ok ? val : major;
- val = versionNumber.split(QLatin1Char('.')).last().toInt(&ok);
+ val = versionNumber.split(QLatin1Char('.')).constLast().toInt(&ok);
minor = ok ? val : minor;
} else {
val = versionNumber.toInt(&ok);
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp
index 209754d125..1a38b0a631 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp
@@ -96,7 +96,7 @@ QmlDesigner::NodeHints::NodeHints(const ModelNode &node) : m_modelNode(node)
modelNode().type(), modelNode().majorVersion(), modelNode().minorVersion());
if (!itemLibraryEntryList.isEmpty())
- m_hints = itemLibraryEntryList.first().hints();
+ m_hints = itemLibraryEntryList.constFirst().hints();
}
}
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index f5bb5d1ba6..46801cf0e0 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -709,7 +709,7 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, TypeName type, int maj, i
} else {
m_isFileComponent = true;
const Imports *imports = context()->imports(document());
- ImportInfo importInfo = imports->info(lookupNameComponent().last(), context().data());
+ ImportInfo importInfo = imports->info(lookupNameComponent().constLast(), context().data());
if (importInfo.isValid() && importInfo.type() == ImportType::Library) {
m_majorVersion = importInfo.version().majorVersion();
m_minorVersion = importInfo.version().minorVersion();
@@ -729,7 +729,7 @@ const CppComponentValue *NodeMetaInfoPrivate::getCppComponentValue() const
const QList<TypeName> nameComponents = m_qualfiedTypeName.split('.');
if (nameComponents.size() < 2)
return 0;
- const TypeName type = nameComponents.last();
+ const TypeName &type = nameComponents.constLast();
TypeName module;
for (int i = 0; i < nameComponents.size() - 1; ++i) {
@@ -821,8 +821,8 @@ bool NodeMetaInfoPrivate::isPropertyWritable(const PropertyName &propertyName) c
if (propertyName.contains('.')) {
const PropertyNameList parts = propertyName.split('.');
- const PropertyName objectName = parts.first();
- const PropertyName rawPropertyName = parts.last();
+ const PropertyName &objectName = parts.constFirst();
+ const PropertyName &rawPropertyName = parts.constLast();
const TypeName objectType = propertyType(objectName);
if (isValueType(objectType))
@@ -854,8 +854,8 @@ bool NodeMetaInfoPrivate::isPropertyList(const PropertyName &propertyName) const
if (propertyName.contains('.')) {
const PropertyNameList parts = propertyName.split('.');
- const PropertyName objectName = parts.first();
- const PropertyName rawPropertyName = parts.last();
+ const PropertyName &objectName = parts.constFirst();
+ const PropertyName &rawPropertyName = parts.constLast();
const TypeName objectType = propertyType(objectName);
if (isValueType(objectType))
@@ -883,8 +883,8 @@ bool NodeMetaInfoPrivate::isPropertyPointer(const PropertyName &propertyName) co
if (propertyName.contains('.')) {
const PropertyNameList parts = propertyName.split('.');
- const PropertyName objectName = parts.first();
- const PropertyName rawPropertyName = parts.last();
+ const PropertyName &objectName = parts.constFirst();
+ const PropertyName &rawPropertyName = parts.constLast();
const TypeName objectType = propertyType(objectName);
if (isValueType(objectType))
@@ -915,8 +915,8 @@ bool NodeMetaInfoPrivate::isPropertyEnum(const PropertyName &propertyName) const
if (propertyName.contains('.')) {
const PropertyNameList parts = propertyName.split('.');
- const PropertyName objectName = parts.first();
- const PropertyName rawPropertyName = parts.last();
+ const PropertyName &objectName = parts.constFirst();
+ const PropertyName &rawPropertyName = parts.constLast();
const TypeName objectType = propertyType(objectName);
if (isValueType(objectType))
@@ -947,8 +947,8 @@ QString NodeMetaInfoPrivate::propertyEnumScope(const PropertyName &propertyName)
if (propertyName.contains('.')) {
const PropertyNameList parts = propertyName.split('.');
- const PropertyName objectName = parts.first();
- const PropertyName rawPropertyName = parts.last();
+ const PropertyName &objectName = parts.constFirst();
+ const PropertyName &rawPropertyName = parts.constLast();
const TypeName objectType = propertyType(objectName);
if (isValueType(objectType))
@@ -989,7 +989,7 @@ static QByteArray getUnqualifiedName(const QByteArray &name)
const QList<QByteArray> nameComponents = name.split('.');
if (nameComponents.size() < 2)
return name;
- return nameComponents.last();
+ return nameComponents.constLast();
}
static QByteArray getPackage(const QByteArray &name)
@@ -1138,7 +1138,7 @@ QString NodeMetaInfoPrivate::importDirectoryPath() const
if (isValid()) {
const Imports *imports = context()->imports(document());
- ImportInfo importInfo = imports->info(lookupNameComponent().last(), context().data());
+ ImportInfo importInfo = imports->info(lookupNameComponent().constLast(), context().data());
if (importInfo.type() == ImportType::Directory) {
return importInfo.path();
diff --git a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp
index 9dfd1b3dc1..db1d9f9f27 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp
@@ -152,7 +152,7 @@ void SubComponentManager::parseDirectories()
parseDirectory(dirInfo.canonicalFilePath(), false);
}
- QString fullUrlVersion = path + QLatin1Char('/') + url + QLatin1Char('.') + import.version().split(".").first();
+ QString fullUrlVersion = path + QLatin1Char('/') + url + QLatin1Char('.') + import.version().split(".").constFirst();
dirInfo = QFileInfo(fullUrlVersion);
if (dirInfo.exists() && dirInfo.isDir()) {
diff --git a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
index fa5595a420..40a9d75776 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
@@ -106,6 +106,11 @@ Internal::InternalNodePointer AbstractProperty::internalNode() const
return m_internalNode;
}
+Internal::ModelPrivate *AbstractProperty::privateModel() const
+{
+ return m_model ? m_model->d : nullptr;
+}
+
Model *AbstractProperty::model() const
{
return m_model.data();
diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
index 1649a17a4a..e245c060fa 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
@@ -437,7 +437,7 @@ QList<ModelNode> AbstractView::selectedModelNodes() const
ModelNode AbstractView::firstSelectedModelNode() const
{
if (hasSelectedModelNodes())
- return ModelNode(model()->d->selectedNodes().first(), model(), this);
+ return ModelNode(model()->d->selectedNodes().constFirst(), model(), this);
return ModelNode();
}
@@ -445,7 +445,7 @@ ModelNode AbstractView::firstSelectedModelNode() const
ModelNode AbstractView::singleSelectedModelNode() const
{
if (hasSingleSelectedModelNode())
- return ModelNode(model()->d->selectedNodes().first(), model(), this);
+ return ModelNode(model()->d->selectedNodes().constFirst(), model(), this);
return ModelNode();
}
@@ -725,7 +725,7 @@ static int getMinorVersionFromImport(const Model *model)
if (import.isLibraryImport() && import.url() == "QtQuick") {
const QString versionString = import.version();
if (versionString.contains(".")) {
- const QString minorVersionString = versionString.split(".").last();
+ const QString minorVersionString = versionString.split(".").constLast();
return minorVersionString.toInt();
}
}
@@ -740,7 +740,7 @@ static int getMajorVersionFromImport(const Model *model)
if (import.isLibraryImport() && import.url() == QStringLiteral("QtQuick")) {
const QString versionString = import.version();
if (versionString.contains(QStringLiteral("."))) {
- const QString majorVersionString = versionString.split(QStringLiteral(".")).first();
+ const QString majorVersionString = versionString.split(QStringLiteral(".")).constFirst();
return majorVersionString.toInt();
}
}
diff --git a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
index 018075da66..fe8ebe1729 100644
--- a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
@@ -84,9 +84,9 @@ void BindingProperty::setExpression(const QString &expression)
}
if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isBindingProperty())
- model()->d->removeProperty(internalNode()->property(name()));
+ privateModel()->removeProperty(internalNode()->property(name()));
- model()->d->setBindingProperty(internalNode(), name(), expression);
+ privateModel()->setBindingProperty(internalNode(), name(), expression);
}
QString BindingProperty::expression() const
@@ -161,7 +161,7 @@ AbstractProperty BindingProperty::resolveToProperty() const
ModelNode node = parentModelNode();
QString element;
if (binding.contains(QLatin1Char('.'))) {
- element = binding.split(QLatin1Char('.')).last();
+ element = binding.split(QLatin1Char('.')).constLast();
QString nodeBinding = binding;
nodeBinding.chop(element.length());
node = resolveBinding(nodeBinding, parentModelNode(), view());
@@ -239,9 +239,9 @@ void BindingProperty::setDynamicTypeNameAndExpression(const TypeName &typeName,
}
if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isBindingProperty())
- model()->d->removeProperty(internalNode()->property(name()));
+ privateModel()->removeProperty(internalNode()->property(name()));
- model()->d->setDynamicBindingProperty(internalNode(), name(), typeName, expression);
+ privateModel()->setDynamicBindingProperty(internalNode(), name(), typeName, expression);
}
QDebug operator<<(QDebug debug, const BindingProperty &property)
diff --git a/src/plugins/qmldesigner/designercore/model/internalnode_p.h b/src/plugins/qmldesigner/designercore/model/internalnode_p.h
index 9f70fe1e94..0997c5a4ff 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnode_p.h
+++ b/src/plugins/qmldesigner/designercore/model/internalnode_p.h
@@ -40,8 +40,6 @@
namespace QmlDesigner {
-class Model;
-
namespace Internal {
class InternalProperty;
diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp
index 3b9ddf99c9..70dd0f4fd4 100644
--- a/src/plugins/qmldesigner/designercore/model/model.cpp
+++ b/src/plugins/qmldesigner/designercore/model/model.cpp
@@ -1882,17 +1882,17 @@ static bool compareVersions(const QString &version1, const QString &version2, bo
QStringList version2List = version2.split(QLatin1Char('.'));
if (version1List.count() == 2 && version2List.count() == 2) {
bool ok;
- int major1 = version1List.first().toInt(&ok);
+ int major1 = version1List.constFirst().toInt(&ok);
if (!ok)
return false;
- int major2 = version2List.first().toInt(&ok);
+ int major2 = version2List.constFirst().toInt(&ok);
if (!ok)
return false;
if (major1 >= major2) {
- int minor1 = version1List.last().toInt(&ok);
+ int minor1 = version1List.constLast().toInt(&ok);
if (!ok)
return false;
- int minor2 = version2List.last().toInt(&ok);
+ int minor2 = version2List.constLast().toInt(&ok);
if (!ok)
return false;
if (minor1 >= minor2)
diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
index 641849d004..7a80390d85 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
@@ -310,7 +310,7 @@ QString ModelNode::simplifiedTypeName() const
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
}
- return QString::fromUtf8(type().split('.').last());
+ return QString::fromUtf8(type().split('.').constLast());
}
QString ModelNode::displayName() const
@@ -1138,7 +1138,7 @@ bool ModelNode::isComponent() const
* the default property is always implcitly a NodeListProperty. This is something that has to be fixed.
*/
- ModelNode componentNode = nodeListProperty("component").toModelNodeList().first();
+ ModelNode componentNode = nodeListProperty("component").toModelNodeList().constFirst();
if (componentNode.nodeSourceType() == ModelNode::NodeWithComponentSource)
return true;
if (componentNode.metaInfo().isFileComponent())
@@ -1175,7 +1175,7 @@ QIcon ModelNode::typeIcon() const
QList <ItemLibraryEntry> itemLibraryEntryList = libraryInfo->entriesForType(
type(), majorVersion(), minorVersion());
if (!itemLibraryEntryList.isEmpty())
- return itemLibraryEntryList.first().typeIcon();
+ return itemLibraryEntryList.constFirst().typeIcon();
else if (metaInfo().isValid())
return QIcon(QStringLiteral(":/ItemLibrary/images/item-default-icon.png"));
}
diff --git a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
index 19b8b7c1d1..39d99accdf 100644
--- a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
@@ -229,7 +229,7 @@ void ModelToTextMerger::applyChanges()
QString errorMessage = QStringLiteral("Error while rewriting");
if (!tmpDocument->diagnosticMessages().isEmpty())
- errorMessage = tmpDocument->diagnosticMessages().first().message;
+ errorMessage = tmpDocument->diagnosticMessages().constFirst().message;
m_rewriterView->enterErrorState(errorMessage);
return;
diff --git a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
index 488988bbeb..27b5a5c746 100644
--- a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
@@ -86,18 +86,18 @@ void NodeAbstractProperty::reparentHere(const ModelNode &modelNode, bool isNode
throw InvalidReparentingException(__LINE__, __FUNCTION__, __FILE__);
if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isNodeAbstractProperty())
- model()->d->removeProperty(internalNode()->property(name()));
+ privateModel()->removeProperty(internalNode()->property(name()));
if (modelNode.hasParentProperty()) {
Internal::InternalNodeAbstractProperty::Pointer oldParentProperty = modelNode.internalNode()->parentProperty();
- model()->d->reparentNode(internalNode(), name(), modelNode.internalNode(), isNodeList, dynamicTypeName);
+ privateModel()->reparentNode(internalNode(), name(), modelNode.internalNode(), isNodeList, dynamicTypeName);
Q_ASSERT(!oldParentProperty.isNull());
} else {
- model()->d->reparentNode(internalNode(), name(), modelNode.internalNode(), isNodeList, dynamicTypeName);
+ privateModel()->reparentNode(internalNode(), name(), modelNode.internalNode(), isNodeList, dynamicTypeName);
}
}
diff --git a/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
index 1d03c89418..d4735160c5 100644
--- a/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
@@ -99,7 +99,7 @@ void NodeListProperty::slide(int from, int to) const
if (to > count() - 1)
throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, "<invalid node list sliding>");
- model()->d->changeNodeOrder(internalNode(), name(), from, to);
+ privateModel()->changeNodeOrder(internalNode(), name(), from, to);
}
void NodeListProperty::reparentHere(const ModelNode &modelNode)
diff --git a/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp
index 6d9bcfd1de..2d262c2ab6 100644
--- a/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp
@@ -59,9 +59,9 @@ void NodeProperty::setModelNode(const ModelNode &modelNode)
}
if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isNodeProperty())
- model()->d->removeProperty(internalNode()->property(name()));
+ privateModel()->removeProperty(internalNode()->property(name()));
- model()->d->reparentNode(internalNode(), name(), modelNode.internalNode(), false); //### we have to add a flag that this is not a list
+ privateModel()->reparentNode(internalNode(), name(), modelNode.internalNode(), false); //### we have to add a flag that this is not a list
}
ModelNode NodeProperty::modelNode() const
diff --git a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
index 5f65bea40c..08105bf2be 100644
--- a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
@@ -167,8 +167,8 @@ QString QmlTextGenerator::toQml(const ModelNode &node, int indentDepth) const
QString url;
if (type.contains('.')) {
QStringList nameComponents = type.split('.');
- url = nameComponents.first();
- type = nameComponents.last();
+ url = nameComponents.constFirst();
+ type = nameComponents.constLast();
}
QString alias;
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index dc1f03794d..c4cb5bf710 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -402,7 +402,7 @@ void RewriterView::applyChanges()
try {
modelToTextMerger()->applyChanges();
if (!errors().isEmpty())
- enterErrorState(errors().first().description());
+ enterErrorState(errors().constFirst().description());
} catch (const Exception &e) {
const QString content = textModifierContent();
qDebug().noquote() << "RewriterException:" << m_rewritingErrorMessage;
@@ -417,7 +417,7 @@ void RewriterView::applyChanges()
qDebug().noquote() << "RewriterException: " << m_rewritingErrorMessage;
qDebug().noquote() << "Content: " << content;
if (!errors().isEmpty())
- qDebug().noquote() << "Error:" << errors().first().description();
+ qDebug().noquote() << "Error:" << errors().constFirst().description();
throw RewritingException(__LINE__, __FUNCTION__, __FILE__, qPrintable(m_rewritingErrorMessage), content);
}
}
@@ -668,7 +668,7 @@ QString RewriterView::convertTypeToImportAlias(const QString &type) const
if (type.contains('.')) {
QStringList nameComponents = type.split('.');
url = getUrlFromType(type);
- simplifiedType = nameComponents.last();
+ simplifiedType = nameComponents.constLast();
}
QString alias;
diff --git a/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp b/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp
index 21659a37e2..3ad9280e7a 100644
--- a/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp
@@ -71,9 +71,9 @@ void SignalHandlerProperty::setSource(const QString &source)
}
if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isSignalHandlerProperty())
- model()->d->removeProperty(internalNode()->property(name()));
+ privateModel()->removeProperty(internalNode()->property(name()));
- model()->d->setSignalHandlerProperty(internalNode(), name(), source);
+ privateModel()->setSignalHandlerProperty(internalNode(), name(), source);
}
QString SignalHandlerProperty::source() const
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index 7a624b6e08..f94cd99fb7 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -166,7 +166,7 @@ static inline bool isSignalPropertyName(const QString &signalName)
// see QmlCompiler::isSignalPropertyName
QStringList list = signalName.split(QLatin1String("."));
- QString pureSignalName = list.last();
+ const QString &pureSignalName = list.constLast();
return pureSignalName.length() >= 3 && pureSignalName.startsWith(QStringLiteral("on")) &&
pureSignalName.at(2).isLetter();
}
@@ -611,12 +611,12 @@ public:
if (astValueList.count() == 2) {
//Check for global Qt enums
- if (astValueList.first() == QStringLiteral("Qt")
- && globalQtEnums().contains(astValueList.last()))
+ if (astValueList.constFirst() == QStringLiteral("Qt")
+ && globalQtEnums().contains(astValueList.constLast()))
return QVariant::fromValue(Enumeration(astValue));
//Check for known enum scopes used globally
- if (knownEnumScopes().contains(astValueList.first()))
+ if (knownEnumScopes().contains(astValueList.constFirst()))
return QVariant::fromValue(Enumeration(astValue));
}
@@ -640,7 +640,7 @@ public:
QString rhsValueName;
if (AST::IdentifierExpression *idExp = AST::cast<AST::IdentifierExpression *>(eStmt->expression)) {
if (!m_scopeChain.qmlScopeObjects().isEmpty())
- rhsValueObject = m_scopeChain.qmlScopeObjects().last();
+ rhsValueObject = m_scopeChain.qmlScopeObjects().constLast();
if (!idExp->name.isEmpty())
rhsValueName = idExp->name.toString();
} else if (AST::FieldMemberExpression *memberExp = AST::cast<AST::FieldMemberExpression *>(eStmt->expression)) {
@@ -792,8 +792,8 @@ static bool isLatestImportVersion(const ImportKey &importKey, const QHash<QStrin
static bool isBlacklistImport(const ImportKey &importKey)
{
- QString importPathFirst = importKey.splitPath.first();
- QString importPathLast = importKey.splitPath.last();
+ const QString &importPathFirst = importKey.splitPath.constFirst();
+ const QString &importPathLast = importKey.splitPath.constLast();
return importPathFirst == QStringLiteral("<cpp>")
|| importPathFirst == QStringLiteral("QML")
|| importPathFirst == QStringLiteral("QtQml")
@@ -1439,7 +1439,7 @@ static QString fileForFullQrcPath(const QString &string)
if (stringList.isEmpty())
return QString();
- return stringList.last();
+ return stringList.constLast();
}
static QString removeFileFromQrcPath(const QString &string)
@@ -2046,7 +2046,7 @@ void TextToModelMerger::populateQrcMapping(const QString &filePath)
QMap<QString,QStringList> map = ModelManagerInterface::instance()->filesInQrcPath(path);
const QStringList qrcFilePaths = map.value(fileName, {});
if (!qrcFilePaths.isEmpty()) {
- QString fileSystemPath = qrcFilePaths.first();
+ QString fileSystemPath = qrcFilePaths.constFirst();
fileSystemPath.remove(fileName);
if (path.isEmpty())
path.prepend(QLatin1String("/"));
diff --git a/src/plugins/qmldesigner/designercore/model/variantproperty.cpp b/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
index 259a6900ee..dbdf1bb74e 100644
--- a/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
@@ -71,9 +71,9 @@ void VariantProperty::setValue(const QVariant &value)
}
if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isVariantProperty())
- model()->d->removeProperty(internalNode()->property(name()));
+ privateModel()->removeProperty(internalNode()->property(name()));
- model()->d->setVariantProperty(internalNode(), name(), value);
+ privateModel()->setVariantProperty(internalNode(), name(), value);
}
QVariant VariantProperty::value() const
@@ -120,9 +120,9 @@ void VariantProperty::setDynamicTypeNameAndValue(const TypeName &type, const QVa
}
if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isVariantProperty())
- model()->d->removeProperty(internalNode()->property(name()));
+ privateModel()->removeProperty(internalNode()->property(name()));
- model()->d->setDynamicVariantProperty(internalNode(), name(), type, value);
+ privateModel()->setDynamicVariantProperty(internalNode(), name(), type, value);
}
void VariantProperty::setDynamicTypeNameAndEnumeration(const TypeName &type, const EnumerationName &enumerationName)
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp
index cacd365cad..1008a26e3a 100644
--- a/src/plugins/qmldesigner/designmodewidget.cpp
+++ b/src/plugins/qmldesigner/designmodewidget.cpp
@@ -441,7 +441,7 @@ static QWidget *createbottomSideBarWidget(const QList<WidgetInfo> &widgetInfos)
topWidgetInfos.append(widgetInfo);
}
- QWidget *widget = topWidgetInfos.first().widget;
+ QWidget *widget = topWidgetInfos.constFirst().widget;
if (topWidgetInfos.count() > 1) {
QWidget *background = new QWidget();
background->setProperty("designerBackgroundColor", true);
diff --git a/src/plugins/qmldesigner/documentmanager.cpp b/src/plugins/qmldesigner/documentmanager.cpp
index f72939d36f..e5ec89524a 100644
--- a/src/plugins/qmldesigner/documentmanager.cpp
+++ b/src/plugins/qmldesigner/documentmanager.cpp
@@ -138,7 +138,7 @@ static void openComponentSourcePropertyOfLoader(const ModelNode &modelNode)
* the default property is always implcitly a NodeListProperty. This is something that has to be fixed.
*/
- componentModelNode = modelNode.nodeListProperty("component").toModelNodeList().first();
+ componentModelNode = modelNode.nodeListProperty("component").toModelNodeList().constFirst();
}
Core::EditorManager::openEditor(componentModelNode.metaInfo().componentFileName(), Core::Id(), Core::EditorManager::DoNotMakeVisible);
diff --git a/src/plugins/qmldesigner/documentwarningwidget.cpp b/src/plugins/qmldesigner/documentwarningwidget.cpp
index a6c0303464..6afe9b2714 100644
--- a/src/plugins/qmldesigner/documentwarningwidget.cpp
+++ b/src/plugins/qmldesigner/documentwarningwidget.cpp
@@ -63,7 +63,8 @@ DocumentWarningWidget::DocumentWarningWidget(QWidget *parent)
m_messageLabel->setForegroundRole(QPalette::ToolTipText);
m_messageLabel->setWordWrap(true);
- m_ignoreWarningsCheckBox->setText(tr("Ignore always these unsupported Qt Quick Designer warnings."));
+ m_ignoreWarningsCheckBox->setText(tr("Always ignore these warnings about features "
+ "not supported by Qt Quick Designer."));
connect(m_navigateLabel, &QLabel::linkActivated, this, [=](const QString &link) {
if (link == QLatin1String("goToCode")) {
diff --git a/src/plugins/qmldesigner/qmldesignerextension/colortool/colortool.cpp b/src/plugins/qmldesigner/qmldesignerextension/colortool/colortool.cpp
index 8e8c0b1cde..7f03543c2c 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/colortool/colortool.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/colortool/colortool.cpp
@@ -170,8 +170,8 @@ void ColorTool::selectedItemsChanged(const QList<FormEditorItem*> &itemList)
m_formEditorItem->qmlItemNode().setVariantProperty("color", m_oldColor);
if (!itemList.isEmpty()
- && itemList.first()->qmlItemNode().modelNode().metaInfo().hasProperty("color")) {
- m_formEditorItem = itemList.first();
+ && itemList.constFirst()->qmlItemNode().modelNode().metaInfo().hasProperty("color")) {
+ m_formEditorItem = itemList.constFirst();
m_oldColor = m_formEditorItem->qmlItemNode().modelValue("color").value<QColor>();
if (m_colorDialog.isNull()) {
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/backendmodel.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/backendmodel.cpp
index 312f2d8327..2944a195b6 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/backendmodel.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/backendmodel.cpp
@@ -232,7 +232,7 @@ void BackendModel::addNewBackend()
QString typeName = dialog.type();
- Import import = Import::createLibraryImport(importSplit.first(), importSplit.last());
+ Import import = Import::createLibraryImport(importSplit.constFirst(), importSplit.constLast());
try {
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp
index 7bc7f55dff..88bb7ffec2 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp
@@ -160,7 +160,7 @@ QStringList BindingModel::possibleSourceProperties(const BindingProperty &bindin
qWarning() << " BindingModel::possibleSourcePropertiesForRow no meta info for target node";
}
- const QString id = stringlist.first();
+ const QString &id = stringlist.constFirst();
ModelNode modelNode = getNodeByIdOrParent(id, bindingProperty.parentModelNode());
@@ -222,7 +222,7 @@ static PropertyName unusedProperty(const ModelNode &modelNode)
void BindingModel::addBindingForCurrentNode()
{
if (connectionView()->selectedModelNodes().count() == 1) {
- ModelNode modelNode = connectionView()->selectedModelNodes().first();
+ const ModelNode &modelNode = connectionView()->selectedModelNodes().constFirst();
if (modelNode.isValid()) {
try {
modelNode.bindingProperty(unusedProperty(modelNode)).setExpression(QLatin1String("none.none"));
@@ -386,7 +386,7 @@ bool BindingModel::getExpressionStrings(const BindingProperty &bindingProperty,
if (true) {
const QStringList stringList = expression.split(QLatin1String("."));
- *sourceNode = stringList.first();
+ *sourceNode = stringList.constFirst();
QString propertyName;
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp
index 58af1da41c..2cde52ec61 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp
@@ -270,8 +270,8 @@ void ConnectionModel::addConnection()
newNode.signalHandlerProperty("onClicked").setSource(QLatin1String("print(\"clicked\")"));
if (connectionView()->selectedModelNodes().count() == 1
- && !connectionView()->selectedModelNodes().first().id().isEmpty()) {
- ModelNode selectedNode = connectionView()->selectedModelNodes().first();
+ && !connectionView()->selectedModelNodes().constFirst().id().isEmpty()) {
+ const ModelNode &selectedNode = connectionView()->selectedModelNodes().constFirst();
newNode.bindingProperty("target").setExpression(selectedNode.id());
} else {
newNode.bindingProperty("target").setExpression(QLatin1String("parent"));
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionviewwidget.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionviewwidget.cpp
index 54b771bf0d..46acbeb8a6 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionviewwidget.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionviewwidget.cpp
@@ -139,17 +139,17 @@ QList<QToolButton *> ConnectionViewWidget::createToolBarWidgets()
QList<QToolButton *> buttons;
buttons << new QToolButton();
- buttons.last()->setIcon(Utils::Icons::PLUS_TOOLBAR.icon());
- buttons.last()->setToolTip(tr("Add binding or connection."));
- connect(buttons.last(), &QAbstractButton::clicked, this, &ConnectionViewWidget::addButtonClicked);
- connect(this, &ConnectionViewWidget::setEnabledAddButton, buttons.last(), &QWidget::setEnabled);
+ buttons.constLast()->setIcon(Utils::Icons::PLUS_TOOLBAR.icon());
+ buttons.constLast()->setToolTip(tr("Add binding or connection."));
+ connect(buttons.constLast(), &QAbstractButton::clicked, this, &ConnectionViewWidget::addButtonClicked);
+ connect(this, &ConnectionViewWidget::setEnabledAddButton, buttons.constLast(), &QWidget::setEnabled);
buttons << new QToolButton();
- buttons.last()->setIcon(Utils::Icons::MINUS.icon());
- buttons.last()->setToolTip(tr("Remove selected binding or connection."));
- buttons.last()->setShortcut(QKeySequence(Qt::Key_Delete));
- connect(buttons.last(), &QAbstractButton::clicked, this, &ConnectionViewWidget::removeButtonClicked);
- connect(this, &ConnectionViewWidget::setEnabledRemoveButton, buttons.last(), &QWidget::setEnabled);
+ buttons.constLast()->setIcon(Utils::Icons::MINUS.icon());
+ buttons.constLast()->setToolTip(tr("Remove selected binding or connection."));
+ buttons.constLast()->setShortcut(QKeySequence(Qt::Key_Delete));
+ connect(buttons.constLast(), &QAbstractButton::clicked, this, &ConnectionViewWidget::removeButtonClicked);
+ connect(this, &ConnectionViewWidget::setEnabledRemoveButton, buttons.constLast(), &QWidget::setEnabled);
return buttons;
}
@@ -233,7 +233,7 @@ void ConnectionViewWidget::removeButtonClicked()
if (currentTab() == ConnectionTab) {
if (ui->connectionView->selectionModel()->selectedRows().isEmpty())
return;
- int currentRow = ui->connectionView->selectionModel()->selectedRows().first().row();
+ int currentRow = ui->connectionView->selectionModel()->selectedRows().constFirst().row();
ConnectionModel *connectionModel = qobject_cast<ConnectionModel*>(ui->connectionView->model());
if (connectionModel) {
connectionModel->deleteConnectionByRow(currentRow);
@@ -241,7 +241,7 @@ void ConnectionViewWidget::removeButtonClicked()
} else if (currentTab() == BindingTab) {
if (ui->bindingView->selectionModel()->selectedRows().isEmpty())
return;
- int currentRow = ui->bindingView->selectionModel()->selectedRows().first().row();
+ int currentRow = ui->bindingView->selectionModel()->selectedRows().constFirst().row();
BindingModel *bindingModel = qobject_cast<BindingModel*>(ui->bindingView->model());
if (bindingModel) {
bindingModel->deleteBindindByRow(currentRow);
@@ -249,12 +249,12 @@ void ConnectionViewWidget::removeButtonClicked()
} else if (currentTab() == DynamicPropertiesTab) {
if (ui->dynamicPropertiesView->selectionModel()->selectedRows().isEmpty())
return;
- int currentRow = ui->dynamicPropertiesView->selectionModel()->selectedRows().first().row();
+ int currentRow = ui->dynamicPropertiesView->selectionModel()->selectedRows().constFirst().row();
DynamicPropertiesModel *dynamicPropertiesModel = qobject_cast<DynamicPropertiesModel*>(ui->dynamicPropertiesView->model());
if (dynamicPropertiesModel)
dynamicPropertiesModel->deleteDynamicPropertyByRow(currentRow);
} else if (currentTab() == BackendTab) {
- int currentRow = ui->backendView->selectionModel()->selectedRows().first().row();
+ int currentRow = ui->backendView->selectionModel()->selectedRows().constFirst().row();
BackendModel *backendModel = qobject_cast<BackendModel*>(ui->backendView->model());
if (backendModel)
backendModel->deletePropertyByRow(currentRow);
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp
index b9cca0f403..a6cb2d911b 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp
@@ -265,7 +265,7 @@ QStringList DynamicPropertiesModel::possibleTargetProperties(const BindingProper
void DynamicPropertiesModel::addDynamicPropertyForCurrentNode()
{
if (connectionView()->selectedModelNodes().count() == 1) {
- ModelNode modelNode = connectionView()->selectedModelNodes().first();
+ const ModelNode &modelNode = connectionView()->selectedModelNodes().constFirst();
if (modelNode.isValid()) {
try {
modelNode.variantProperty(unusedProperty(modelNode)).setDynamicTypeNameAndValue("string", QLatin1String("none.none"));
@@ -292,7 +292,7 @@ QStringList DynamicPropertiesModel::possibleSourceProperties(const BindingProper
qWarning() << " BindingModel::possibleSourcePropertiesForRow no meta info for target node";
}
- const QString id = stringlist.first();
+ const QString &id = stringlist.constFirst();
ModelNode modelNode = getNodeByIdOrParent(id, bindingProperty.parentModelNode());
@@ -617,7 +617,7 @@ bool DynamicPropertiesModel::getExpressionStrings(const BindingProperty &binding
if (true) {
const QStringList stringList = expression.split(QLatin1String("."));
- *sourceNode = stringList.first();
+ *sourceNode = stringList.constFirst();
QString propertyName;
diff --git a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.cpp b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.cpp
index 4a1e0dba2b..8653e8a20a 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.cpp
@@ -140,8 +140,8 @@ void PathItem::writePathToProperty()
pathSegment.destroy();
if (!m_cubicSegments.isEmpty()) {
- pathNode.variantProperty("startX").setValue(m_cubicSegments.first().firstControlPoint().coordinate().x());
- pathNode.variantProperty("startY").setValue(m_cubicSegments.first().firstControlPoint().coordinate().y());
+ pathNode.variantProperty("startX").setValue(m_cubicSegments.constFirst().firstControlPoint().coordinate().x());
+ pathNode.variantProperty("startY").setValue(m_cubicSegments.constFirst().firstControlPoint().coordinate().y());
foreach (const CubicSegment &cubicSegment, m_cubicSegments) {
writePathAttributes(pathNode, cubicSegment.attributes());
@@ -178,8 +178,8 @@ void PathItem::writePathAsCubicSegmentsOnly()
pathSegment.destroy();
if (!m_cubicSegments.isEmpty()) {
- pathNode.variantProperty("startX").setValue(m_cubicSegments.first().firstControlPoint().coordinate().x());
- pathNode.variantProperty("startY").setValue(m_cubicSegments.first().firstControlPoint().coordinate().y());
+ pathNode.variantProperty("startX").setValue(m_cubicSegments.constFirst().firstControlPoint().coordinate().x());
+ pathNode.variantProperty("startY").setValue(m_cubicSegments.constFirst().firstControlPoint().coordinate().y());
foreach (const CubicSegment &cubicSegment, m_cubicSegments) {
@@ -239,7 +239,7 @@ static void drawCubicSegments(const QList<CubicSegment> &cubicSegments, QPainter
{
painter->save();
- QPainterPath curvePainterPath(cubicSegments.first().firstControlPoint().coordinate());
+ QPainterPath curvePainterPath(cubicSegments.constFirst().firstControlPoint().coordinate());
foreach (const CubicSegment &cubicSegment, cubicSegments)
addCubicSegmentToPainterPath(cubicSegment, curvePainterPath);
@@ -547,9 +547,9 @@ void PathItem::readControlPoints()
m_lastAttributes = actualAttributes;
m_lastPercent = percent;
- if (m_cubicSegments.first().firstControlPoint().coordinate() == m_cubicSegments.last().fourthControlPoint().coordinate()) {
- CubicSegment lastCubicSegment = m_cubicSegments.last();
- lastCubicSegment.setFourthControlPoint(m_cubicSegments.first().firstControlPoint());
+ if (m_cubicSegments.constFirst().firstControlPoint().coordinate() == m_cubicSegments.constLast().fourthControlPoint().coordinate()) {
+ CubicSegment lastCubicSegment = m_cubicSegments.constLast();
+ lastCubicSegment.setFourthControlPoint(m_cubicSegments.constFirst().firstControlPoint());
lastCubicSegment.fourthControlPoint().setPathModelNode(pathNode);
lastCubicSegment.fourthControlPoint().setPointType(StartAndEndPoint);
}
@@ -588,8 +588,8 @@ void PathItem::splitCubicSegment(CubicSegment &cubicSegment, double t)
void PathItem::closePath()
{
if (!m_cubicSegments.isEmpty()) {
- CubicSegment firstCubicSegment = m_cubicSegments.first();
- CubicSegment lastCubicSegment = m_cubicSegments.last();
+ const CubicSegment &firstCubicSegment = m_cubicSegments.constFirst();
+ CubicSegment lastCubicSegment = m_cubicSegments.constLast();
lastCubicSegment.setFourthControlPoint(firstCubicSegment.firstControlPoint());
writePathAsCubicSegmentsOnly();
}
@@ -598,8 +598,8 @@ void PathItem::closePath()
void PathItem::openPath()
{
if (!m_cubicSegments.isEmpty()) {
- CubicSegment firstCubicSegment = m_cubicSegments.first();
- CubicSegment lastCubicSegment = m_cubicSegments.last();
+ const CubicSegment &firstCubicSegment = m_cubicSegments.constFirst();
+ CubicSegment lastCubicSegment = m_cubicSegments.constLast();
QPointF newEndPoint = firstCubicSegment.firstControlPoint().coordinate();
newEndPoint.setX(newEndPoint.x() + 10.);
lastCubicSegment.setFourthControlPoint(ControlPoint(newEndPoint));
@@ -694,7 +694,7 @@ const QList<ControlPoint> PathItem::controlPoints() const
controlPointList.reserve((m_cubicSegments.count() * 4));
if (!m_cubicSegments.isEmpty())
- controlPointList.append(m_cubicSegments.first().firstControlPoint());
+ controlPointList.append(m_cubicSegments.constFirst().firstControlPoint());
foreach (const CubicSegment &cubicSegment, m_cubicSegments) {
controlPointList.append(cubicSegment.secondControlPoint());
@@ -908,8 +908,8 @@ bool PathItem::isClosedPath() const
if (m_cubicSegments.isEmpty())
return false;
- ControlPoint firstControlPoint = m_cubicSegments.first().firstControlPoint();
- ControlPoint lastControlPoint = m_cubicSegments.last().fourthControlPoint();
+ ControlPoint firstControlPoint = m_cubicSegments.constFirst().firstControlPoint();
+ ControlPoint lastControlPoint = m_cubicSegments.constLast().fourthControlPoint();
return firstControlPoint == lastControlPoint;
}
@@ -939,7 +939,7 @@ void PathItem::removeEditPoint(const ControlPoint &controlPoint)
QList<CubicSegment> cubicSegments = cubicSegmentsContainingControlPoint(controlPoint, m_cubicSegments);
if (cubicSegments.count() == 1) {
- m_cubicSegments.removeOne(cubicSegments.first());
+ m_cubicSegments.removeOne(cubicSegments.constFirst());
} else if (cubicSegments.count() == 2){
CubicSegment mergedCubicSegment = CubicSegment::create();
CubicSegment firstCubicSegment = cubicSegments.at(0);
diff --git a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathselectionmanipulator.cpp b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathselectionmanipulator.cpp
index 2740078ae8..510181258e 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathselectionmanipulator.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathselectionmanipulator.cpp
@@ -80,7 +80,7 @@ static ControlPoint getControlPoint(const QList<ControlPoint> &selectedPoints, c
return selectedPoints.at(offsetIndex);
else if (isClosedPath) {
if (offsetIndex == -1)
- return selectedPoints.last();
+ return selectedPoints.constLast();
else if (offsetIndex < selectedPoints.count())
return selectedPoints.at(1);
}
diff --git a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtool.cpp b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtool.cpp
index a30390e345..66582f017d 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtool.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtool.cpp
@@ -257,8 +257,8 @@ void PathTool::selectedItemsChanged(const QList<FormEditorItem*> &itemList)
m_pathItem->writePathToProperty();
delete m_pathItem.data();
- if (!itemList.isEmpty() && hasPathProperty(itemList.first())) {
- FormEditorItem *formEditorItem = itemList.first();
+ if (!itemList.isEmpty() && hasPathProperty(itemList.constFirst())) {
+ FormEditorItem *formEditorItem = itemList.constFirst();
m_pathItem = new PathItem(scene());
m_pathItem->setParentItem(scene()->manipulatorLayerItem());
m_pathItem->setFormEditorItem(formEditorItem);
diff --git a/src/plugins/qmldesigner/qmldesignerextension/sourcetool/sourcetool.cpp b/src/plugins/qmldesigner/qmldesignerextension/sourcetool/sourcetool.cpp
index ad87f996cb..9c7f32c1bb 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/sourcetool/sourcetool.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/sourcetool/sourcetool.cpp
@@ -192,7 +192,7 @@ static QString baseDirectory(const QUrl &url)
void SourceTool::selectedItemsChanged(const QList<FormEditorItem*> &itemList)
{
if (!itemList.isEmpty()) {
- m_formEditorItem = itemList.first();
+ m_formEditorItem = itemList.constFirst();
m_oldFileName = m_formEditorItem->qmlItemNode().modelValue("source").toString();
QString openDirectory = baseDirectory(view()->model()->fileUrl());
diff --git a/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp b/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp
index 20ae2ab03d..fcaaba72ce 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp
@@ -209,7 +209,7 @@ void TextTool::selectedItemsChanged(const QList<FormEditorItem*> &itemList)
view()->changeToSelectionTool();
}
if (!itemList.isEmpty()) {
- FormEditorItem *formEditorItem = itemList.first();
+ FormEditorItem *formEditorItem = itemList.constFirst();
m_textItem = new TextEditItem(scene());
textItem()->setParentItem(scene()->manipulatorLayerItem());
textItem()->setFormEditorItem(formEditorItem);
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index 84ab7d25db..32e0940342 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -361,7 +361,7 @@ void QmlDesignerPlugin::jumpTextCursorToSelectedModelNode()
// visual editor -> text editor
ModelNode selectedNode;
if (!rewriterView()->selectedModelNodes().isEmpty())
- selectedNode = rewriterView()->selectedModelNodes().first();
+ selectedNode = rewriterView()->selectedModelNodes().constFirst();
if (selectedNode.isValid()) {
const int nodeOffset = rewriterView()->nodeOffset(selectedNode);
@@ -477,7 +477,7 @@ double QmlDesignerPlugin::formEditorDevicePixelRatio()
const QList<QWindow *> topLevelWindows = QApplication::topLevelWindows();
if (topLevelWindows.isEmpty())
return 1;
- return topLevelWindows.first()->screen()->devicePixelRatio();
+ return topLevelWindows.constFirst()->screen()->devicePixelRatio();
}
QmlDesignerPlugin *QmlDesignerPlugin::instance()
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index 01e37a3e4c..946edbd078 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -34,7 +34,6 @@
#include "qmljshighlighter.h"
#include "qmljshoverhandler.h"
#include "qmljsquickfixassist.h"
-#include "qmljstextmark.h"
#include "qmloutlinemodel.h"
#include <qmljs/qmljsbind.h>
@@ -203,14 +202,12 @@ static void appendExtraSelectionsForMessages(
void QmlJSEditorWidget::updateCodeWarnings(Document::Ptr doc)
{
- cleanDiagnosticMarks();
if (doc->ast()) {
setExtraSelections(CodeWarningsSelection, QList<QTextEdit::ExtraSelection>());
} else if (doc->language().isFullySupportedLanguage()) {
// show parsing errors
QList<QTextEdit::ExtraSelection> selections;
appendExtraSelectionsForMessages(&selections, doc->diagnosticMessages(), document());
- createTextMarks(doc->diagnosticMessages());
setExtraSelections(CodeWarningsSelection, selections);
} else {
setExtraSelections(CodeWarningsSelection, QList<QTextEdit::ExtraSelection>());
@@ -935,8 +932,6 @@ void QmlJSEditorWidget::semanticInfoUpdated(const SemanticInfo &semanticInfo)
}
}
- createTextMarks(semanticInfo);
-
updateUses();
}
@@ -978,61 +973,6 @@ bool QmlJSEditorWidget::hideContextPane()
return b;
}
-void QmlJSEditorWidget::createTextMarks(const QList<DiagnosticMessage> &diagnostics)
-{
- for (const DiagnosticMessage &diagnostic : diagnostics) {
- const auto onMarkRemoved = [this](QmlJSTextMark *mark) {
- m_diagnosticMarks.removeAll(mark);
- delete mark;
- };
-
- auto mark = new QmlJSTextMark(textDocument()->filePath().toString(),
- diagnostic, onMarkRemoved);
- m_diagnosticMarks.append(mark);
- textDocument()->addMark(mark);
- }
-}
-
-static void cleanMarks(QVector<TextMark *> *marks, TextDocument *doc)
-{
- for (TextEditor::TextMark *mark : *marks) {
- doc->removeMark(mark);
- delete mark;
- }
- marks->clear();
-}
-
-void QmlJSEditorWidget::cleanDiagnosticMarks()
-{
- cleanMarks(&m_diagnosticMarks, textDocument());
-}
-
-void QmlJSEditorWidget::createTextMarks(const SemanticInfo &info)
-{
- cleanSemanticMarks();
- const auto onMarkRemoved = [this](QmlJSTextMark *mark) {
- m_semanticMarks.removeAll(mark);
- delete mark;
- };
- for (const DiagnosticMessage &diagnostic : info.semanticMessages) {
- auto mark = new QmlJSTextMark(textDocument()->filePath().toString(),
- diagnostic, onMarkRemoved);
- m_semanticMarks.append(mark);
- textDocument()->addMark(mark);
- }
- for (const QmlJS::StaticAnalysis::Message &message : info.staticAnalysisMessages) {
- auto mark = new QmlJSTextMark(textDocument()->filePath().toString(),
- message, onMarkRemoved);
- m_semanticMarks.append(mark);
- textDocument()->addMark(mark);
- }
-}
-
-void QmlJSEditorWidget::cleanSemanticMarks()
-{
- cleanMarks(&m_semanticMarks, textDocument());
-}
-
AssistInterface *QmlJSEditorWidget::createAssistInterface(
AssistKind assistKind,
AssistReason reason) const
diff --git a/src/plugins/qmljseditor/qmljseditor.h b/src/plugins/qmljseditor/qmljseditor.h
index 7d68cf318f..3e055d69c0 100644
--- a/src/plugins/qmljseditor/qmljseditor.h
+++ b/src/plugins/qmljseditor/qmljseditor.h
@@ -47,8 +47,6 @@ namespace QmlJS {
namespace AST { class UiObjectMember; }
}
-namespace TextEditor { class TextMark; }
-
namespace QmlJSEditor {
class QmlJSEditorDocument;
@@ -129,14 +127,6 @@ private:
QmlJS::IContextPane *m_contextPane = nullptr;
int m_oldCursorPosition = -1;
- void createTextMarks(const QList<QmlJS::DiagnosticMessage> &diagnostics);
- void cleanDiagnosticMarks();
- QVector<TextEditor::TextMark *> m_diagnosticMarks;
-
- void createTextMarks(const QmlJSTools::SemanticInfo &info);
- void cleanSemanticMarks();
- QVector<TextEditor::TextMark *> m_semanticMarks;
-
FindReferences *m_findReferences;
};
diff --git a/src/plugins/qmljseditor/qmljseditordocument.cpp b/src/plugins/qmljseditor/qmljseditordocument.cpp
index 387c1d719f..66fa6da393 100644
--- a/src/plugins/qmljseditor/qmljseditordocument.cpp
+++ b/src/plugins/qmljseditor/qmljseditordocument.cpp
@@ -32,6 +32,7 @@
#include "qmljsquickfixassist.h"
#include "qmljssemantichighlighter.h"
#include "qmljssemanticinfoupdater.h"
+#include "qmljstextmark.h"
#include "qmloutlinemodel.h"
#include <coreplugin/coreconstants.h>
@@ -42,6 +43,8 @@
#include <qmljstools/qmljsmodelmanager.h>
#include <qmljstools/qmljsqtstylecodeformatter.h>
+#include <utils/asconst.h>
+
using namespace QmlJSEditor;
using namespace QmlJS;
using namespace QmlJS::AST;
@@ -521,10 +524,13 @@ void QmlJSEditorDocumentPrivate::onDocumentUpdated(Document::Ptr doc)
if (doc->editorRevision() != q->document()->revision())
return;
+ cleanDiagnosticMarks();
if (doc->ast()) {
// got a correctly parsed (or recovered) file.
m_semanticInfoDocRevision = doc->editorRevision();
m_semanticInfoUpdater->update(doc, ModelManagerInterface::instance()->snapshot());
+ } else if (doc->language().isFullySupportedLanguage()) {
+ createTextMarks(doc->diagnosticMessages());
}
emit q->updateCodeWarnings(doc);
}
@@ -573,6 +579,7 @@ void QmlJSEditorDocumentPrivate::acceptNewSemanticInfo(const SemanticInfo &seman
}
}
+ createTextMarks(m_semanticInfo);
emit q->semanticInfoUpdated(m_semanticInfo); // calls triggerPendingUpdates as necessary
}
@@ -584,6 +591,61 @@ void QmlJSEditorDocumentPrivate::updateOutlineModel()
m_outlineModel->update(m_semanticInfo);
}
+static void cleanMarks(QVector<TextEditor::TextMark *> *marks, TextEditor::TextDocument *doc)
+{
+ for (TextEditor::TextMark *mark : *marks) {
+ doc->removeMark(mark);
+ delete mark;
+ }
+ marks->clear();
+}
+
+void QmlJSEditorDocumentPrivate::createTextMarks(const QList<DiagnosticMessage> &diagnostics)
+{
+ for (const DiagnosticMessage &diagnostic : diagnostics) {
+ const auto onMarkRemoved = [this](QmlJSTextMark *mark) {
+ m_diagnosticMarks.removeAll(mark);
+ delete mark;
+ };
+
+ auto mark = new QmlJSTextMark(q->filePath().toString(),
+ diagnostic, onMarkRemoved);
+ m_diagnosticMarks.append(mark);
+ q->addMark(mark);
+ }
+}
+
+void QmlJSEditorDocumentPrivate::cleanDiagnosticMarks()
+{
+ cleanMarks(&m_diagnosticMarks, q);
+}
+
+void QmlJSEditorDocumentPrivate::createTextMarks(const SemanticInfo &info)
+{
+ cleanSemanticMarks();
+ const auto onMarkRemoved = [this](QmlJSTextMark *mark) {
+ m_semanticMarks.removeAll(mark);
+ delete mark;
+ };
+ for (const DiagnosticMessage &diagnostic : Utils::asConst(info.semanticMessages)) {
+ auto mark = new QmlJSTextMark(q->filePath().toString(),
+ diagnostic, onMarkRemoved);
+ m_semanticMarks.append(mark);
+ q->addMark(mark);
+ }
+ for (const QmlJS::StaticAnalysis::Message &message : Utils::asConst(info.staticAnalysisMessages)) {
+ auto mark = new QmlJSTextMark(q->filePath().toString(),
+ message, onMarkRemoved);
+ m_semanticMarks.append(mark);
+ q->addMark(mark);
+ }
+}
+
+void QmlJSEditorDocumentPrivate::cleanSemanticMarks()
+{
+ cleanMarks(&m_semanticMarks, q);
+}
+
} // Internal
QmlJSEditorDocument::QmlJSEditorDocument()
diff --git a/src/plugins/qmljseditor/qmljseditordocument_p.h b/src/plugins/qmljseditor/qmljseditordocument_p.h
index 854b81519f..11d639cb59 100644
--- a/src/plugins/qmljseditor/qmljseditordocument_p.h
+++ b/src/plugins/qmljseditor/qmljseditordocument_p.h
@@ -32,6 +32,8 @@
#include <QTextLayout>
#include <QTimer>
+namespace TextEditor { class TextMark; }
+
namespace QmlJSEditor {
class QmlJSEditorDocument;
@@ -57,6 +59,11 @@ public:
void acceptNewSemanticInfo(const QmlJSTools::SemanticInfo &semanticInfo);
void updateOutlineModel();
+ void createTextMarks(const QList<QmlJS::DiagnosticMessage> &diagnostics);
+ void cleanDiagnosticMarks();
+ void createTextMarks(const QmlJSTools::SemanticInfo &info);
+ void cleanSemanticMarks();
+
public:
QmlJSEditorDocument *q = nullptr;
QTimer m_updateDocumentTimer; // used to compress multiple document changes
@@ -71,6 +78,8 @@ public:
bool m_firstSementicInfo = true;
QTimer m_updateOutlineModelTimer;
Internal::QmlOutlineModel *m_outlineModel = nullptr;
+ QVector<TextEditor::TextMark *> m_diagnosticMarks;
+ QVector<TextEditor::TextMark *> m_semanticMarks;
};
} // Internal
diff --git a/src/plugins/qmljseditor/qmljshoverhandler.cpp b/src/plugins/qmljseditor/qmljshoverhandler.cpp
index a767d6713b..7334ad7ecd 100644
--- a/src/plugins/qmljseditor/qmljshoverhandler.cpp
+++ b/src/plugins/qmljseditor/qmljshoverhandler.cpp
@@ -45,6 +45,7 @@
#include <qmljs/qmljsqrcparser.h>
#include <texteditor/texteditor.h>
#include <texteditor/helpitem.h>
+#include <utils/executeondestruction.h>
#include <utils/tooltip/tooltip.h>
#include <QDir>
@@ -201,8 +202,10 @@ bool QmlJSHoverHandler::setQmlTypeHelp(const ScopeChain &scopeChain, const Docum
return true;
}
-void QmlJSHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos)
+void QmlJSHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
reset();
if (!m_modelManager)
diff --git a/src/plugins/qmljseditor/qmljshoverhandler.h b/src/plugins/qmljseditor/qmljshoverhandler.h
index fde05c7e4a..682d713f39 100644
--- a/src/plugins/qmljseditor/qmljshoverhandler.h
+++ b/src/plugins/qmljseditor/qmljshoverhandler.h
@@ -58,7 +58,9 @@ public:
private:
void reset();
- void identifyMatch(TextEditor::TextEditorWidget *editorWidget, int pos) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report) override;
void operateTooltip(TextEditor::TextEditorWidget *editorWidget, const QPoint &point) override;
bool matchDiagnosticMessage(QmlJSEditorWidget *qmlEditor, int pos);
diff --git a/src/plugins/scxmleditor/plugin_interface/idwarningitem.cpp b/src/plugins/scxmleditor/plugin_interface/idwarningitem.cpp
index 7376192581..6422c22292 100644
--- a/src/plugins/scxmleditor/plugin_interface/idwarningitem.cpp
+++ b/src/plugins/scxmleditor/plugin_interface/idwarningitem.cpp
@@ -34,7 +34,7 @@ IdWarningItem::IdWarningItem(QGraphicsItem *parent)
setSeverity(OutputPane::Warning::ErrorType);
setTypeName(tr("State"));
setDescription(tr("Each state must have a unique ID."));
- setReason(tr("Missing ID"));
+ setReason(tr("Missing ID."));
setX(-boundingRect().width());
}
diff --git a/src/plugins/scxmleditor/plugin_interface/stateitem.cpp b/src/plugins/scxmleditor/plugin_interface/stateitem.cpp
index edc2562ccf..01fd5a994b 100644
--- a/src/plugins/scxmleditor/plugin_interface/stateitem.cpp
+++ b/src/plugins/scxmleditor/plugin_interface/stateitem.cpp
@@ -350,7 +350,7 @@ void StateItem::selectedMenuAction(const QAction *action)
break;
}
case TagUtils::Relayout: {
- document->undoStack()->beginMacro(tr("Relayout"));
+ document->undoStack()->beginMacro(tr("Re-Layout"));
doLayout(depth());
document->undoStack()->endMacro();
break;
diff --git a/src/plugins/texteditor/basehoverhandler.cpp b/src/plugins/texteditor/basehoverhandler.cpp
index 86d8eb0bbc..3b5edef2ee 100644
--- a/src/plugins/texteditor/basehoverhandler.cpp
+++ b/src/plugins/texteditor/basehoverhandler.cpp
@@ -26,6 +26,7 @@
#include "basehoverhandler.h"
#include "texteditor.h"
+#include <utils/executeondestruction.h>
#include <utils/qtcassert.h>
#include <utils/tooltip/tooltip.h>
@@ -34,11 +35,6 @@ namespace TextEditor {
BaseHoverHandler::~BaseHoverHandler()
{}
-bool BaseHoverHandler::isAsyncHandler() const
-{
- return m_isAsyncHandler;
-}
-
void BaseHoverHandler::showToolTip(TextEditorWidget *widget, const QPoint &point, bool decorate)
{
if (decorate)
@@ -55,11 +51,6 @@ void BaseHoverHandler::checkPriority(TextEditorWidget *widget,
process(widget, pos, report);
}
-void BaseHoverHandler::cancelAsyncCheck()
-{
- QTC_CHECK(false && "BaseHoverHandler: Implement cancelCheck() in derived class!");
-}
-
int BaseHoverHandler::priority() const
{
if (m_priority >= 0)
@@ -79,16 +70,16 @@ void BaseHoverHandler::setPriority(int priority)
m_priority = priority;
}
-QString BaseHoverHandler::contextHelpId(TextEditorWidget *widget, int pos)
+void BaseHoverHandler::contextHelpId(TextEditorWidget *widget,
+ int pos,
+ const Core::IContext::HelpIdCallback &callback)
{
// If the tooltip is visible and there is a help match, this match is used to update
// the help id. Otherwise, let the identification process happen.
if (!Utils::ToolTip::isVisible() || !lastHelpItemIdentified().isValid())
- process(widget, pos, [](int){});
-
- if (lastHelpItemIdentified().isValid())
- return lastHelpItemIdentified().helpId();
- return QString();
+ process(widget, pos, [this, widget, callback](int) { propagateHelpId(widget, callback); });
+ else
+ propagateHelpId(widget, callback);
}
void BaseHoverHandler::setToolTip(const QString &tooltip)
@@ -111,37 +102,35 @@ const HelpItem &BaseHoverHandler::lastHelpItemIdentified() const
return m_lastHelpItemIdentified;
}
+void BaseHoverHandler::propagateHelpId(TextEditorWidget *widget,
+ const Core::IContext::HelpIdCallback &callback)
+{
+ QString id;
+ if (lastHelpItemIdentified().isValid())
+ id = lastHelpItemIdentified().helpId();
+
+ widget->setContextHelpId(id);
+ callback(id);
+}
+
void BaseHoverHandler::process(TextEditorWidget *widget, int pos, ReportPriority report)
{
m_toolTip.clear();
m_priority = -1;
m_lastHelpItemIdentified = HelpItem();
- if (m_isAsyncHandler) {
- identifyMatchAsync(widget, pos, report);
- } else {
- identifyMatch(widget, pos);
- report(priority());
- }
+ identifyMatch(widget, pos, report);
}
-void BaseHoverHandler::setIsAsyncHandler(bool isAsyncHandler)
+void BaseHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report)
{
- m_isAsyncHandler = isAsyncHandler;
-}
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
-void BaseHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos)
-{
QString tooltip = editorWidget->extraSelectionTooltip(pos);
if (!tooltip.isEmpty())
setToolTip(tooltip);
}
-void BaseHoverHandler::identifyMatchAsync(TextEditorWidget *, int, BaseHoverHandler::ReportPriority)
-{
- QTC_CHECK(false && "BaseHoverHandler: Implement identifyMatchAsync() in derived class!");
-}
-
void BaseHoverHandler::decorateToolTip()
{
if (Qt::mightBeRichText(toolTip()))
diff --git a/src/plugins/texteditor/basehoverhandler.h b/src/plugins/texteditor/basehoverhandler.h
index cdd8735264..bc8d3e3e1d 100644
--- a/src/plugins/texteditor/basehoverhandler.h
+++ b/src/plugins/texteditor/basehoverhandler.h
@@ -28,6 +28,8 @@
#include "texteditor_global.h"
#include "helpitem.h"
+#include <coreplugin/icontext.h>
+
#include <functional>
QT_BEGIN_NAMESPACE
@@ -43,14 +45,13 @@ class TEXTEDITOR_EXPORT BaseHoverHandler
public:
virtual ~BaseHoverHandler();
- bool isAsyncHandler() const;
- void setIsAsyncHandler(bool isAsyncHandler);
-
- QString contextHelpId(TextEditorWidget *widget, int pos);
+ void contextHelpId(TextEditorWidget *widget,
+ int pos,
+ const Core::IContext::HelpIdCallback &callback);
using ReportPriority = std::function<void(int priority)>;
void checkPriority(TextEditorWidget *widget, int pos, ReportPriority report);
- virtual void cancelAsyncCheck();
+ virtual void abort() {} // Implement for asynchronous priority reporter
void showToolTip(TextEditorWidget *widget, const QPoint &point, bool decorate = true);
@@ -70,16 +71,19 @@ protected:
void setLastHelpItemIdentified(const HelpItem &help);
const HelpItem &lastHelpItemIdentified() const;
- virtual void identifyMatch(TextEditorWidget *editorWidget, int pos);
- virtual void identifyMatchAsync(TextEditorWidget *editorWidget, int pos, ReportPriority report);
+ void propagateHelpId(TextEditorWidget *widget, const Core::IContext::HelpIdCallback &callback);
+
+ // identifyMatch() is required to report a priority by using the "report" callback.
+ // It is recommended to use e.g.
+ // Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+ // at the beginning of an implementation to ensure this in any case.
+ virtual void identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report);
virtual void decorateToolTip();
virtual void operateTooltip(TextEditorWidget *editorWidget, const QPoint &point);
private:
void process(TextEditorWidget *widget, int pos, ReportPriority report);
- bool m_isAsyncHandler = false;
-
QString m_toolTip;
HelpItem m_lastHelpItemIdentified;
int m_priority = -1;
diff --git a/src/plugins/texteditor/colorpreviewhoverhandler.cpp b/src/plugins/texteditor/colorpreviewhoverhandler.cpp
index c6ca5947d0..6a6f4e20dd 100644
--- a/src/plugins/texteditor/colorpreviewhoverhandler.cpp
+++ b/src/plugins/texteditor/colorpreviewhoverhandler.cpp
@@ -27,6 +27,7 @@
#include "texteditor.h"
#include <coreplugin/icore.h>
+#include <utils/executeondestruction.h>
#include <utils/tooltip/tooltip.h>
#include <utils/qtcassert.h>
@@ -355,8 +356,12 @@ static QColor colorFromFuncAndArgs(const QString &func, const QStringList &args)
return colorFromArgs(args, spec);
}
-void ColorPreviewHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos)
+void ColorPreviewHoverHandler::identifyMatch(TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
if (editorWidget->extraSelectionTooltip(pos).isEmpty()) {
const QTextBlock tb = editorWidget->document()->findBlock(pos);
const int tbpos = pos - tb.position();
diff --git a/src/plugins/texteditor/colorpreviewhoverhandler.h b/src/plugins/texteditor/colorpreviewhoverhandler.h
index 8677bf009a..ee8db3f93f 100644
--- a/src/plugins/texteditor/colorpreviewhoverhandler.h
+++ b/src/plugins/texteditor/colorpreviewhoverhandler.h
@@ -39,7 +39,7 @@ class TextEditorWidget;
class TEXTEDITOR_EXPORT ColorPreviewHoverHandler : public BaseHoverHandler
{
private:
- void identifyMatch(TextEditorWidget *editorWidget, int pos) override;
+ void identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report) override;
void operateTooltip(TextEditorWidget *editorWidget, const QPoint &point) override;
QColor m_colorTip;
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index 505c4325ae..a0cbd17699 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -313,11 +313,12 @@ public:
return;
}
+ if (isCheckRunning(documentRevision, position))
+ return;
+
// Cancel currently running checks
- for (BaseHoverHandler *handler : m_handlers) {
- if (handler->isAsyncHandler())
- handler->cancelAsyncCheck();
- }
+ for (BaseHoverHandler *handler : m_handlers)
+ handler->abort();
// Update invocation data
m_documentRevision = documentRevision;
@@ -333,6 +334,13 @@ public:
checkNext();
}
+ bool isCheckRunning(int documentRevision, int position) const
+ {
+ return m_currentHandlerIndex <= m_handlers.size()
+ && m_documentRevision == documentRevision
+ && m_position == position;
+ }
+
void checkNext()
{
QTC_ASSERT(m_currentHandlerIndex < m_handlers.size(), return);
@@ -7927,8 +7935,9 @@ void BaseTextEditor::setContextHelpId(const QString &id)
void TextEditorWidget::contextHelpId(const IContext::HelpIdCallback &callback)
{
if (d->m_contextHelpId.isEmpty() && !d->m_hoverHandlers.isEmpty())
- d->m_contextHelpId = d->m_hoverHandlers.first()->contextHelpId(this, textCursor().position());
- callback(d->m_contextHelpId);
+ d->m_hoverHandlers.first()->contextHelpId(this, textCursor().position(), callback);
+ else
+ callback(d->m_contextHelpId);
}
void TextEditorWidget::setContextHelpId(const QString &id)
diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp
index 00c49a16d6..d007f3580f 100644
--- a/src/plugins/valgrind/memchecktool.cpp
+++ b/src/plugins/valgrind/memchecktool.cpp
@@ -73,6 +73,7 @@
#include <ssh/sshconnection.h>
+#include <utils/checkablemessagebox.h>
#include <utils/fancymainwindow.h>
#include <utils/pathchooser.h>
#include <utils/qtcassert.h>
@@ -792,12 +793,27 @@ void MemcheckTool::heobAction()
const QString heob = QString("heob%1.exe").arg(abi.wordWidth());
const QString heobPath = dialog.path() + '/' + heob;
if (!QFile::exists(heobPath)) {
- const QString msg = tr("Heob: Can't find %1").arg(heob);
- TaskHub::addTask(Task::Error, msg, Debugger::Constants::ANALYZERTASK_ID);
- TaskHub::requestPopup();
+ QMessageBox::critical(Core::ICore::mainWindow(), tr("Heob"),
+ tr("The %1 executables must be in the appropriate location.")
+ .arg("<a href=\"https://github.com/ssbssa/heob/releases\">Heob</a>"));
return;
}
+ // dwarfstack
+ if (abi.osFlavor() == Abi::WindowsMSysFlavor) {
+ const QString dwarfstack = QString("dwarfstack%1.dll").arg(abi.wordWidth());
+ const QString dwarfstackPath = dialog.path() + '/' + dwarfstack;
+ if (!QFile::exists(dwarfstackPath)
+ && CheckableMessageBox::doNotShowAgainInformation(
+ Core::ICore::mainWindow(), tr("Heob"),
+ tr("Heob used with MinGW projects needs the %1 DLLs for proper stacktrace resolution.")
+ .arg("<a href=\"https://github.com/ssbssa/dwarfstack/releases\">Dwarfstack</a>"),
+ ICore::settings(), "HeobDwarfstackInfo",
+ QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
+ QDialogButtonBox::Ok) != QDialogButtonBox::Ok)
+ return;
+ }
+
// output xml file
QDir wdDir(workingDirectory);
const QString xmlPath = wdDir.absoluteFilePath(dialog.xmlName());
diff --git a/src/shared/qbs b/src/shared/qbs
-Subproject 1ee4260129336c83d7acab1e3e675f7f507ad46
+Subproject 6655d563c3cac6dbfd61bfb3dd15ae5b9467d5a
diff --git a/src/src.qbs b/src/src.qbs
index 28246e5476..ff52425d5d 100644
--- a/src/src.qbs
+++ b/src/src.qbs
@@ -35,6 +35,7 @@ Project {
qbsBaseDir + "/src/plugins/plugins.qbs",
qbsBaseDir + "/share/share.qbs",
qbsBaseDir + "/src/app/apps.qbs",
+ qbsBaseDir + "/src/shared/bundledqt/bundledqt.qbs",
qbsBaseDir + "/src/shared/json/json.qbs",
]
}
diff --git a/src/tools/clangbackend/source/clangbackend_global.h b/src/tools/clangbackend/source/clangbackend_global.h
index a7ca785958..31425c0717 100644
--- a/src/tools/clangbackend/source/clangbackend_global.h
+++ b/src/tools/clangbackend/source/clangbackend_global.h
@@ -36,7 +36,7 @@ enum class PreferredTranslationUnit
LastUninitialized,
};
-// CLANG-UPGRADE-CHECK: Remove IS_SUSPEND_SUPPORTED once we require clang >= 7.0
+// CLANG-UPGRADE-CHECK: Remove IS_PRETTY_DECL_SUPPORTED once we require clang >= 7.0
#if defined(CINDEX_VERSION_HAS_PRETTYDECL_BACKPORTED) || CINDEX_VERSION_MINOR >= 47
# define IS_PRETTY_DECL_SUPPORTED
#endif
diff --git a/src/tools/clangbackend/source/clangcodemodelserver.cpp b/src/tools/clangbackend/source/clangcodemodelserver.cpp
index d3e873d732..185f0f8096 100644
--- a/src/tools/clangbackend/source/clangcodemodelserver.cpp
+++ b/src/tools/clangbackend/source/clangcodemodelserver.cpp
@@ -28,7 +28,6 @@
#include "clangdocuments.h"
#include "clangdocumentsuspenderresumer.h"
#include "clangfilesystemwatcher.h"
-#include "clangtranslationunits.h"
#include "codecompleter.h"
#include "diagnosticset.h"
#include "tokeninfos.h"
@@ -85,21 +84,36 @@ void ClangCodeModelServer::end()
QCoreApplication::exit();
}
+static std::vector<Document> operator+(const std::vector<Document> &a,
+ const std::vector<Document> &b)
+{
+ std::vector<Document> result = a;
+ result.insert(result.end(), b.begin(), b.end());
+ return result;
+}
+
+// TODO: Rename to createOrUpdate...
void ClangCodeModelServer::registerTranslationUnitsForEditor(const ClangBackEnd::RegisterTranslationUnitForEditorMessage &message)
{
qCDebug(serverLog) << "########## registerTranslationUnitsForEditor";
TIME_SCOPE_DURATION("ClangCodeModelServer::registerTranslationUnitsForEditor");
try {
- auto createdDocuments = documents.create(message.fileContainers());
+ DocumentResetInfos toReset;
+ QVector<FileContainer> toCreate;
+ categorizeFileContainers(message.fileContainers(), toCreate, toReset);
+
+ const std::vector<Document> createdDocuments = documents.create(toCreate);
for (const auto &document : createdDocuments)
documentProcessors().create(document);
+ const std::vector<Document> resetDocuments_ = resetDocuments(toReset);
+
unsavedFiles.createOrUpdate(message.fileContainers());
documents.setUsedByCurrentEditor(message.currentEditorFilePath());
documents.setVisibleInEditors(message.visibleEditorFilePaths());
- processSuspendResumeJobs(documents.documents());
- processInitialJobsForDocuments(createdDocuments);
+ processSuspendResumeJobs(documents.documents());
+ processInitialJobsForDocuments(createdDocuments + resetDocuments_);
} catch (const std::exception &exception) {
qWarning() << "Error in ClangCodeModelServer::registerTranslationUnitsForEditor:" << exception.what();
}
@@ -148,6 +162,14 @@ void ClangCodeModelServer::unregisterTranslationUnitsForEditor(const ClangBackEn
}
}
+static DocumentResetInfos toDocumentResetInfos(const std::vector<Document> &documents)
+{
+ DocumentResetInfos infos;
+ for (const auto &d : documents)
+ infos.push_back(DocumentResetInfo{d, d.fileContainer()});
+ return infos;
+}
+
void ClangCodeModelServer::registerProjectPartsForEditor(const RegisterProjectPartsForEditorMessage &message)
{
qCDebug(serverLog) << "########## registerProjectPartsForEditor";
@@ -157,14 +179,7 @@ void ClangCodeModelServer::registerProjectPartsForEditor(const RegisterProjectPa
projects.createOrUpdate(message.projectContainers());
std::vector<Document> affectedDocuments = documents.setDocumentsDirtyIfProjectPartChanged();
- for (Document &document : affectedDocuments) {
- document.setResponsivenessIncreaseNeeded(document.isResponsivenessIncreased());
-
- documentProcessors().remove(document);
- document.translationUnits().removeAll();
- document.translationUnits().createAndAppend();
- documentProcessors().create(document);
- }
+ resetDocuments(toDocumentResetInfos(affectedDocuments));
processJobsForDirtyAndVisibleDocuments();
} catch (const std::exception &exception) {
@@ -415,6 +430,45 @@ void ClangCodeModelServer::processSuspendResumeJobs(const std::vector<Document>
}
}
+void ClangCodeModelServer::categorizeFileContainers(const QVector<FileContainer> &fileContainers,
+ QVector<FileContainer> &toCreate,
+ DocumentResetInfos &toReset) const
+{
+ for (const FileContainer &fileContainer : fileContainers) {
+ const std::vector<Document> matching = documents.filtered([&](const Document &document) {
+ return document.filePath() == fileContainer.filePath();
+ });
+ if (matching.empty())
+ toCreate.push_back(fileContainer);
+ else
+ toReset.push_back(DocumentResetInfo{*matching.begin(), fileContainer});
+ }
+}
+
+std::vector<Document> ClangCodeModelServer::resetDocuments(const DocumentResetInfos &infos)
+{
+ std::vector<Document> newDocuments;
+
+ for (const DocumentResetInfo &info : infos) {
+ const Document &document = info.documentToRemove;
+ QTC_CHECK(document.filePath() == info.fileContainer.filePath());
+
+ documents.remove({document.fileContainer()});
+
+ Document newDocument = *documents.create({info.fileContainer}).begin();
+ newDocument.setDirtyIfDependencyIsMet(document.filePath());
+ newDocument.setIsUsedByCurrentEditor(document.isUsedByCurrentEditor());
+ newDocument.setIsVisibleInEditor(document.isVisibleInEditor(), document.visibleTimePoint());
+ newDocument.setResponsivenessIncreaseNeeded(document.isResponsivenessIncreased());
+
+ documentProcessors().reset(document, newDocument);
+
+ newDocuments.push_back(newDocument);
+ }
+
+ return newDocuments;
+}
+
void ClangCodeModelServer::processInitialJobsForDocuments(const std::vector<Document> &documents)
{
for (const auto &document : documents) {
diff --git a/src/tools/clangbackend/source/clangcodemodelserver.h b/src/tools/clangbackend/source/clangcodemodelserver.h
index 98508f348c..ee4ecd4847 100644
--- a/src/tools/clangbackend/source/clangcodemodelserver.h
+++ b/src/tools/clangbackend/source/clangcodemodelserver.h
@@ -42,6 +42,12 @@
namespace ClangBackEnd {
+struct DocumentResetInfo {
+ Document documentToRemove;
+ FileContainer fileContainer;
+};
+using DocumentResetInfos = QVector<DocumentResetInfo>;
+
class ClangCodeModelServer : public ClangCodeModelServerInterface,
public IpcClientProvider<ClangCodeModelClientInterface>
{
@@ -79,6 +85,11 @@ private:
void processTimerForVisibleButNotCurrentDocuments();
void processSuspendResumeJobs(const std::vector<Document> &documents);
+ void categorizeFileContainers(const QVector<FileContainer> &fileContainers,
+ QVector<FileContainer> &toCreate,
+ DocumentResetInfos &toReset) const;
+ std::vector<Document> resetDocuments(const DocumentResetInfos &infos);
+
void addAndRunUpdateJobs(std::vector<Document> documents);
private:
diff --git a/src/tools/clangbackend/source/clangdocument.cpp b/src/tools/clangbackend/source/clangdocument.cpp
index cbbaf51b33..bef88e9cb2 100644
--- a/src/tools/clangbackend/source/clangdocument.cpp
+++ b/src/tools/clangbackend/source/clangdocument.cpp
@@ -155,6 +155,11 @@ bool Document::isParsed() const
return d->translationUnits.areAllTranslationUnitsParsed();
}
+long Document::useCount() const
+{
+ return d.use_count();
+}
+
Utf8String Document::filePath() const
{
checkIfNull();
@@ -175,6 +180,7 @@ FileContainer Document::fileContainer() const
return FileContainer(d->filePath,
d->projectPart.id(),
+ d->fileArguments,
Utf8String(),
false,
d->documentRevision);
diff --git a/src/tools/clangbackend/source/clangdocument.h b/src/tools/clangbackend/source/clangdocument.h
index 415deefbe9..92a852c820 100644
--- a/src/tools/clangbackend/source/clangdocument.h
+++ b/src/tools/clangbackend/source/clangdocument.h
@@ -78,6 +78,7 @@ public:
bool isNull() const;
bool isIntact() const;
bool isParsed() const;
+ long useCount() const;
Utf8String filePath() const;
Utf8StringVector fileArguments() const;
diff --git a/src/tools/clangbackend/source/clangdocumentprocessor.cpp b/src/tools/clangbackend/source/clangdocumentprocessor.cpp
index 8196e804d0..3c51db5b49 100644
--- a/src/tools/clangbackend/source/clangdocumentprocessor.cpp
+++ b/src/tools/clangbackend/source/clangdocumentprocessor.cpp
@@ -102,6 +102,12 @@ JobRequests DocumentProcessor::process()
return d->jobs.process();
}
+JobRequests DocumentProcessor::stop()
+{
+ d->supportiveTranslationUnitInitializer.abort();
+ return d->jobs.stop();
+}
+
Document DocumentProcessor::document() const
{
return d->document;
diff --git a/src/tools/clangbackend/source/clangdocumentprocessor.h b/src/tools/clangbackend/source/clangdocumentprocessor.h
index 9c3fb147f9..8f4e805158 100644
--- a/src/tools/clangbackend/source/clangdocumentprocessor.h
+++ b/src/tools/clangbackend/source/clangdocumentprocessor.h
@@ -59,6 +59,7 @@ public:
= PreferredTranslationUnit::RecentlyParsed);
JobRequests process();
+ JobRequests stop();
Document document() const;
diff --git a/src/tools/clangbackend/source/clangdocumentprocessors.cpp b/src/tools/clangbackend/source/clangdocumentprocessors.cpp
index 611611a41f..8e5a51d005 100644
--- a/src/tools/clangbackend/source/clangdocumentprocessors.cpp
+++ b/src/tools/clangbackend/source/clangdocumentprocessors.cpp
@@ -28,6 +28,8 @@
#include "clangexceptions.h"
#include "projectpart.h"
+#include <utils/algorithm.h>
+
namespace ClangBackEnd {
DocumentProcessors::DocumentProcessors(Documents &documents,
@@ -84,6 +86,37 @@ void DocumentProcessors::remove(const Document &document)
throw DocumentProcessorDoesNotExist(document.filePath(), document.projectPart().id());
}
+static JobRequests jobsToTakeOver(const JobRequests &jobsStillInQueue,
+ const Utf8String &updatedProjectPartId)
+{
+ JobRequests jobs = Utils::filtered(jobsStillInQueue, [](const JobRequest &job) {
+ return job.isTakeOverable();
+ });
+
+ for (JobRequest &job : jobs)
+ job.projectPartId = updatedProjectPartId;
+
+ return jobs;
+}
+
+void DocumentProcessors::reset(const Document &oldDocument, const Document &newDocument)
+{
+ // Wait until the currently running jobs finish and remember the not yet
+ // processed job requests for the new processor...
+ const JobRequests jobsStillInQueue = processor(oldDocument).stop();
+ // ...but do not take over irrelevant ones.
+ const JobRequests jobsForNewProcessor = jobsToTakeOver(jobsStillInQueue,
+ newDocument.projectPart().id());
+
+ // Remove current processor
+ remove(oldDocument);
+
+ // Create new processor and take over not yet processed jobs.
+ DocumentProcessor newProcessor = create(newDocument);
+ for (const JobRequest &job : jobsForNewProcessor)
+ newProcessor.addJob(job);
+}
+
JobRequests DocumentProcessors::process()
{
JobRequests jobsStarted;
diff --git a/src/tools/clangbackend/source/clangdocumentprocessors.h b/src/tools/clangbackend/source/clangdocumentprocessors.h
index 83e37f5276..4060fd4b47 100644
--- a/src/tools/clangbackend/source/clangdocumentprocessors.h
+++ b/src/tools/clangbackend/source/clangdocumentprocessors.h
@@ -54,6 +54,7 @@ public:
DocumentProcessor create(const Document &document);
DocumentProcessor processor(const Document &document);
void remove(const Document &document);
+ void reset(const Document &oldDocument, const Document &newDocument);
JobRequests process();
diff --git a/src/tools/clangbackend/source/clangjobrequest.cpp b/src/tools/clangbackend/source/clangjobrequest.cpp
index e2c6f8f6d4..995102bcf0 100644
--- a/src/tools/clangbackend/source/clangjobrequest.cpp
+++ b/src/tools/clangbackend/source/clangjobrequest.cpp
@@ -168,6 +168,43 @@ static JobRequest::RunConditions conditionsForType(JobRequest::Type type)
return conditions;
}
+bool JobRequest::isTakeOverable() const
+{
+ // When new project information comes in and there are unprocessed jobs
+ // in the queue, we need to decide what to do with them.
+
+ switch (type) {
+ // Never discard these as the client side might wait for a response.
+ case Type::CompleteCode:
+ case Type::RequestReferences:
+ case Type::FollowSymbol:
+ case Type::RequestToolTip:
+ return true;
+
+ // Discard this one as UpdateDocumentAnnotations will have the same effect.
+ case Type::RequestDocumentAnnotations:
+
+ // Discard Suspend because the document will be cleared anyway.
+ // Discard Resume because a (re)parse will happen on demand.
+ case Type::SuspendDocument:
+ case Type::ResumeDocument:
+
+ // Discard these as they are initial jobs that will be recreated on demand
+ // anyway.
+ case Type::UpdateDocumentAnnotations:
+ case Type::CreateInitialDocumentPreamble:
+
+ // Discard these as they only make sense in a row. Avoid splitting them up.
+ case Type::ParseSupportiveTranslationUnit:
+ case Type::ReparseSupportiveTranslationUnit:
+
+ case Type::Invalid:
+ return false;
+ }
+
+ return false;
+}
+
JobRequest::JobRequest(Type type)
{
static quint64 idCounter = 0;
diff --git a/src/tools/clangbackend/source/clangjobrequest.h b/src/tools/clangbackend/source/clangjobrequest.h
index 81c78ba9db..0447496753 100644
--- a/src/tools/clangbackend/source/clangjobrequest.h
+++ b/src/tools/clangbackend/source/clangjobrequest.h
@@ -96,6 +96,7 @@ public:
IAsyncJob *createJob() const;
void cancelJob(ClangCodeModelClientInterface &client) const;
+ bool isTakeOverable() const;
bool operator==(const JobRequest &other) const;
diff --git a/src/tools/clangbackend/source/clangjobs.cpp b/src/tools/clangbackend/source/clangjobs.cpp
index 872aecd936..61f99b3985 100644
--- a/src/tools/clangbackend/source/clangjobs.cpp
+++ b/src/tools/clangbackend/source/clangjobs.cpp
@@ -113,6 +113,20 @@ JobRequests Jobs::process()
return jobsStarted;
}
+JobRequests Jobs::stop()
+{
+ // Take the queued jobs to prevent processing them.
+ const JobRequests queuedJobs = queue();
+ queue().clear();
+
+ // Wait until currently running jobs finish.
+ QFutureSynchronizer<void> waitForFinishedJobs;
+ foreach (const RunningJob &runningJob, m_running.values())
+ waitForFinishedJobs.addFuture(runningJob.future);
+
+ return queuedJobs;
+}
+
JobRequests Jobs::runJobs(const JobRequests &jobsRequests)
{
JobRequests jobsStarted;
@@ -166,6 +180,11 @@ void Jobs::onJobFinished(IAsyncJob *asyncJob)
process();
}
+Jobs::JobFinishedCallback Jobs::jobFinishedCallback() const
+{
+ return m_jobFinishedCallback;
+}
+
void Jobs::setJobFinishedCallback(const JobFinishedCallback &jobFinishedCallback)
{
m_jobFinishedCallback = jobFinishedCallback;
diff --git a/src/tools/clangbackend/source/clangjobs.h b/src/tools/clangbackend/source/clangjobs.h
index c2984db4b4..dd6b5d5081 100644
--- a/src/tools/clangbackend/source/clangjobs.h
+++ b/src/tools/clangbackend/source/clangjobs.h
@@ -71,6 +71,7 @@ public:
= PreferredTranslationUnit::RecentlyParsed);
JobRequests process();
+ JobRequests stop();
void setJobFinishedCallback(const JobFinishedCallback &jobFinishedCallback);
@@ -80,6 +81,7 @@ public /*for tests*/:
const JobRequests &queue() const;
bool isJobRunningForTranslationUnit(const Utf8String &translationUnitId) const;
bool isJobRunningForJobRequest(const JobRequest &jobRequest) const;
+ JobFinishedCallback jobFinishedCallback() const;
private:
JobRequests runJobs(const JobRequests &jobRequest);
diff --git a/src/tools/clangbackend/source/clangsupportivetranslationunitinitializer.cpp b/src/tools/clangbackend/source/clangsupportivetranslationunitinitializer.cpp
index 9c162eb8cf..b84fe43155 100644
--- a/src/tools/clangbackend/source/clangsupportivetranslationunitinitializer.cpp
+++ b/src/tools/clangbackend/source/clangsupportivetranslationunitinitializer.cpp
@@ -56,8 +56,7 @@ SupportiveTranslationUnitInitializer::State SupportiveTranslationUnitInitializer
void SupportiveTranslationUnitInitializer::startInitializing()
{
- QTC_CHECK(m_state == State::NotInitialized);
- if (abortIfDocumentIsClosed())
+ if (!checkStateAndDocument(State::NotInitialized))
return;
m_document.translationUnits().createAndAppend();
@@ -71,10 +70,15 @@ void SupportiveTranslationUnitInitializer::startInitializing()
m_state = State::WaitingForParseJob;
}
+void SupportiveTranslationUnitInitializer::abort()
+{
+ m_jobs.setJobFinishedCallback(Jobs::JobFinishedCallback());
+ m_state = State::Aborted;
+}
+
void SupportiveTranslationUnitInitializer::checkIfParseJobFinished(const Jobs::RunningJob &job)
{
- QTC_CHECK(m_state == State::WaitingForParseJob);
- if (abortIfDocumentIsClosed())
+ if (!checkStateAndDocument(State::WaitingForParseJob))
return;
if (job.jobRequest.type == JobRequest::Type::ParseSupportiveTranslationUnit) {
@@ -90,8 +94,7 @@ void SupportiveTranslationUnitInitializer::checkIfParseJobFinished(const Jobs::R
void SupportiveTranslationUnitInitializer::checkIfReparseJobFinished(const Jobs::RunningJob &job)
{
- QTC_CHECK(m_state == State::WaitingForReparseJob);
- if (abortIfDocumentIsClosed())
+ if (!checkStateAndDocument(State::WaitingForReparseJob))
return;
if (job.jobRequest.type == JobRequest::Type::ReparseSupportiveTranslationUnit) {
@@ -106,16 +109,20 @@ void SupportiveTranslationUnitInitializer::checkIfReparseJobFinished(const Jobs:
}
}
-bool SupportiveTranslationUnitInitializer::abortIfDocumentIsClosed()
+bool SupportiveTranslationUnitInitializer::checkStateAndDocument(State currentExpectedState)
{
- QTC_CHECK(m_isDocumentClosedChecker);
+ if (m_state != currentExpectedState) {
+ m_state = State::Aborted;
+ return false;
+ }
+ QTC_CHECK(m_isDocumentClosedChecker);
if (m_isDocumentClosedChecker(m_document.filePath(), m_document.projectPart().id())) {
m_state = State::Aborted;
- return true;
+ return false;
}
- return false;
+ return true;
}
void SupportiveTranslationUnitInitializer::addJob(JobRequest::Type jobRequestType)
diff --git a/src/tools/clangbackend/source/clangsupportivetranslationunitinitializer.h b/src/tools/clangbackend/source/clangsupportivetranslationunitinitializer.h
index 18a01864dd..785e145c60 100644
--- a/src/tools/clangbackend/source/clangsupportivetranslationunitinitializer.h
+++ b/src/tools/clangbackend/source/clangsupportivetranslationunitinitializer.h
@@ -52,6 +52,7 @@ public:
State state() const;
void startInitializing();
+ void abort();
public: // for tests
void setState(const State &state);
@@ -59,7 +60,7 @@ public: // for tests
void checkIfReparseJobFinished(const Jobs::RunningJob &job);
private:
- bool abortIfDocumentIsClosed();
+ bool checkStateAndDocument(State currentExpectedState);
void addJob(JobRequest::Type jobRequestType);
private:
diff --git a/src/tools/clangbackend/source/clangtooltipinfocollector.cpp b/src/tools/clangbackend/source/clangtooltipinfocollector.cpp
index 44dde1edbb..c9b70350a4 100644
--- a/src/tools/clangbackend/source/clangtooltipinfocollector.cpp
+++ b/src/tools/clangbackend/source/clangtooltipinfocollector.cpp
@@ -237,7 +237,7 @@ Utf8String ToolTipInfoCollector::text(const Cursor &cursor, const Cursor &refere
if (referenced.isAnyTypeAlias())
return textForAnyTypeAlias(referenced);
- if (referenced.isFunctionLike())
+ if (referenced.isFunctionLike() || referenced.kind() == CXCursor_Constructor)
return textForFunctionLike(referenced);
if (referenced.type().canonical().isBuiltinType())
@@ -412,6 +412,14 @@ ToolTipInfo ToolTipInfoCollector::qDocInfo(const Cursor &cursor) const
if (isBuiltinOrPointerToBuiltin(cursor.type()))
return result;
+ if (cursor.kind() == CXCursor_Constructor) {
+ const ToolTipInfo parentInfo = qDocInfo(cursor.semanticParent());
+ result.setQdocIdCandidates(parentInfo.qdocIdCandidates());
+ result.setQdocMark(parentInfo.qdocMark());
+ result.setQdocCategory(ToolTipInfo::Unknown);
+ return result;
+ }
+
result.setQdocIdCandidates(qDocIdCandidates(cursor));
result.setQdocMark(qdocMark(cursor));
result.setQdocCategory(qdocCategory(cursor));
diff --git a/src/tools/sdktool/README.md b/src/tools/sdktool/README.md
index a8e9a75f6d..764fee5342 100644
--- a/src/tools/sdktool/README.md
+++ b/src/tools/sdktool/README.md
@@ -1,4 +1,4 @@
-The SDK tool can be used to set up Qt versions, tool chains and kits
+The SDK tool can be used to set up Qt versions, tool chains, devices and kits
in Qt Creator.
There still is a lot of knowledge about Qt Creator internals required
@@ -6,18 +6,23 @@ to use this tool!
Note that some tool chains/Qt versions/kits may require settings not
available via command line switches. All operations will add any parameter
-followed by another parameter in the form "<TYPE>:<VALUE>" to the
+followed by another parameter in the form `<TYPE>:<VALUE>` to the
configuration that they create.
Currently supported types are int, bool, QString, QByteArray and QVariantList.
Dependencies:
-The SDK tool depends on the Utils library of Qt Creator and Qt itself.
-Please make sure both libraries are found by setting PATH/LD_LIBRARY_PATH.
+=============
+
+The SDK tool depends only on Qt core library.
Usage:
+======
+
+```
+./sdktool --help
Qt Creator SDK setup tool.
- Usage:./sdktool <ARGS> <OPERATION> <OPERATION_ARGS>
+ Usage: sdktool <ARGS> <OPERATION> <OPERATION_ARGS>
ARGS:
--help|-h Print this help text
@@ -26,109 +31,174 @@ ARGS:
OPERATION:
One of:
addKeys add settings to Qt Creator configuration
- addKit add a Kit to Qt Creator
+ addCMake add a CMake tool to Qt Creator
+ addDebugger add a debugger to Qt Creator
+ addDev add a device to Qt Creator
addQt add a Qt version to Qt Creator
addTC add a tool chain to Qt Creator
- findKey find a key in the settings of Qt Creator
- find find a value in the settings of Qt Creator
+ addKit add a kit to Qt Creator
get get settings from Qt Creator configuration
+ rmCMake remove a CMake tool from Qt Creator
+ rmKit remove a kit from Qt Creator
+ rmDebugger remove a debugger from Qt Creator
+ rmDev remove a device from Qt Creator
rmKeys remove settings from Qt Creator configuration
- rmKit remove a Kit from Qt Creator
rmQt remove a Qt version from Qt Creator
rmTC remove a tool chain from Qt Creator
+ findKey find a key in the settings of Qt Creator
+ find find a value in the settings of Qt Creator
OPERATION_ARGS:
use "--help <OPERATION>" to get help on the arguments required for an operation.
-
-
-Help for individual operations can be retrieved using
-
- ./sdktool --help addKit
-
-Examples:
+```
Add a tool chain:
+================
+
+```
./sdktool addTC \
- --id "ProjectExplorer.ToolChain.Gcc:my_test_TC" \
- --name "Test TC" \
- --path /usr/bin/g++ \
+ --id "ProjectExplorer.ToolChain.Gcc:company.product.toolchain.g++" \
+ --language 2
+ --name "GCC (C++, x86_64)" \
+ --path /home/code/build/gcc-6.3/usr/bin/g++ \
--abi x86-linux-generic-elf-64bit \
--supportedAbis x86-linux-generic-elf-64bit,x86-linux-generic-elf-32bit \
ADDITIONAL_INTEGER_PARAMETER int:42 \
ADDITIONAL_STRING_PARAMETER "QString:some string" \
+```
Tricky parts:
- - The id has to be in the form "ToolChainType:some_unique_part", where the
- tool chain type must be one of (as of Qt Creator 2.6):
- * ProjectExplorer.ToolChain.Msvc for Microsoft MSVC compilers
+ - language is one of:
+ * C
+ * Cxx
+ - `id` has to be in the form `ToolChainType:some_unique_part`, where the
+ tool chain type can be one of the following, or other toolchains that plugins provide:
+ * `ProjectExplorer.ToolChain.Msvc` for Microsoft MSVC compilers
(Note: This one will be autodetected anyway, so there is little
need to add it from the sdktool)
- * ProjectExplorer.ToolChain.WinCE for Windows CE tool chain by
- Microsoft (Note: This one will be autodetected anyway, so there
- is little need to add it from the sdktool)
- * ProjectExplorer.ToolChain.Gcc for a normal GCC (linux/mac)
- * Qt4ProjectManager.ToolChain.Android for the Android tool chain
- * ProjectExplorer.ToolChain.Clang for the Clang compiler
- * ProjectExplorer.ToolChain.LinuxIcc for the LinuxICC compiler
- * ProjectExplorer.ToolChain.Mingw for the Mingw compiler
-
- Check the classes derived from ProjectExplorer::ToolChain for their
+ * `ProjectExplorer.ToolChain.Gcc` for a normal GCC (linux/mac)
+ * `ProjectExplorer.ToolChain.Clang` for the Clang compiler
+ * `ProjectExplorer.ToolChain.LinuxIcc` for the LinuxICC compiler
+ * `ProjectExplorer.ToolChain.Mingw` for the Mingw compiler
+ * `ProjectExplorer.ToolChain.ClangCl` for the Clang/CL compiler
+ * `ProjectExplorer.ToolChain.Custom` for custom toolchain
+ * `Qt4ProjectManager.ToolChain.Android` for the Android tool chain
+ * `Qnx.QccToolChain` for the Qnx QCC tool chain
+
+ Check the classes derived from `ProjectExplorer::ToolChain` for their
Ids.
- The some_unique_part can be anything. Creator uses GUIDs by default,
+ The `some_unique_part` can be anything. Qt Creator uses GUIDs by default,
but any string is fine for the SDK to use.
- - The ABI needs to be in a format that ProjectExplorer::Abi::fromString(...)
+ - `abi` needs to be in a format that `ProjectExplorer::Abi::fromString(...)`
can parse.
+Add a debugger:
+===============
+
+
+```
+./sdktool addDebugger \
+ --id "company.product.toolchain.gdb" \
+ --name "GDB (company, product)" \
+ --engine 1 \
+ --binary /home/code/build/gdb-7.12/bin/gdb \
+ --abis arm-linux-generic-elf-32 \
+```
+
+Tricky parts:
+ - `id` can be any unique string. In Qt Creator this is set as the autodetection
+ source of the Qt version.
+ TODO: is it use in any special way?
+
+ - `engine` is the integer used in the enum `Debugger::DebuggerEngineType`
+
+ Currently these are (Qt Creator 4.6):
+ * 1 for gdb
+ * 4 for cdb
+ * 8 for pdb
+ * 256 for lldb
+
+ - `binary` can be a absolute path, the value `auto` or an ABI.
+ This is used to find the appropriate debugger for MSVC toolchains
+ where Creator does not know the binary path itself.
+
Add a Qt version:
+=================
+
+```
./sdktool addQt \
- --id "my_test_Qt" \
- --name "Test Qt" \
- --qmake /home/code/build/qt4-4/bin/qmake \
+ --id "company.product.qt" \
+ --name "Custom Qt" \
+ --qmake /home/code/build/qt-5.9/bin/qmake \
--type Qt4ProjectManager.QtVersion.Desktop \
+```
Tricky parts:
- - The id can be any unique string. In creator this is set as the autodetection
+ - `id` can be any unique string. In Qt Creator this is set as the autodetection
source of the Qt version.
- - type must be the string returned by BaseQtVersion::type().
+ - `type` must be the string returned by `BaseQtVersion::type()`.
- Currently these are (Qt Creator 2.6):
- * Qt4ProjectManager.QtVersion.Android for Android
- * Qt4ProjectManager.QtVersion.Desktop for a desktop Qt
- * RemoteLinux.EmbeddedLinuxQt for an embedded linux Qt
- * Qt4ProjectManager.QtVersion.Maemo for an Maemo Qt
- * Qt4ProjectManager.QtVersion.QNX.QNX for Qt on QNX
- * Qt4ProjectManager.QtVersion.Simulator for Qt running in the Qt simulator
- * Qt4ProjectManager.QtVersion.WinCE for Qt on WinCE
+ Currently these are (Qt Creator 4.6):
+ * `Qt4ProjectManager.QtVersion.Android` for Android
+ * `Qt4ProjectManager.QtVersion.Desktop` for a desktop Qt
+ * `Qt4ProjectManager.QtVersion.Ios` for iOS
+ * `Qt4ProjectManager.QtVersion.QNX.QNX` for QNX
+ * `RemoteLinux.EmbeddedLinuxQt` for Embedded Linux
+ * `WinRt.QtVersion.WindowsRuntime` for Windows RT
+ * `WinRt.QtVersion.WindowsPhone` for Windows RT phone
-Add a Kit using the newly set up tool chain and Qt version:
+Add a kit:
+==========
+
+Using the newly set up tool chain and Qt version:
+
+```
./sdktool addKit \
- --id "my_test_kit" \
- --name "Test Kit" \
- --debuggerengine 1 \
- --debugger /tmp/gdb-test \
- --devicetype Desktop \
+ --id "company.product.kit" \
+ --name "Qt %{Qt:Version} (company, product)" \
+ --debuggerid "company.product.toolchain.gdb" \
+ --devicetype GenericLinuxOsType \
--sysroot /tmp/sysroot \
- --toolchain "ProjectExplorer.ToolChain.Gcc:my_test_TC" \
- --qt "my_test_Qt" \
- --mkspec "testspec" \
+ --Ctoolchain "ProjectExplorer.ToolChain.Gcc:company.product.toolchain.gcc" \
+ --Cxxtoolchain "ProjectExplorer.ToolChain.Gcc:company.product.toolchain.g++" \
+ --qt "company.product.qt" \
+ --mkspec "devices/linux-mipsel-broadcom-97425-g++" \
+```
Tricky parts:
- - debuggerengine is the integer used in the enum Debugger::DebuggerEngineType
- The most important type is 1 for GDB.
- - debugger can be a absolute path or the value: 'auto'
+ - `devicetype` is the string returned IDevice::type()
+
+ Currently these are (Qt Creator 4.6):
+ * `Android.Device.Type` for Android devices
+ * `Desktop` for code running on the local desktop
+ * `Ios.Device.Type` for an iOS device
+ * `Ios.Simulator.Type` for an iOS simulator
+ * `GenericLinuxOsType` for an embedded Linux device
+ * `WinRt.Device.Local` for Windows RT (local)
+ * `WinRt.Device.Emulator` for a Windows RT emulator
+ * `WinRt.Device.Phone` for a Windows RT phone
+
+ - `debuggerid` is one of the ids used when setting up toolchains with
+ `sdktool addDebugger`.
+
+ - `<Lang>toolchain` is one of the ids used when setting up toolchains with
+ `sdktool addTC`.
+
+ - `<Lang>` is one of (options can be extended by plugins):
+ * C, Cxx, Nim
+
+ - `qt` is one of the ids used when setting up Qt versions with `sdktool addQt`.
- - devicetype is the string returned IDevice::type()
- Currently these are (Qt Creator 2.6):
- * Android.Device.Type for Android devices
- * Desktop for code running on the local desktop
- * HarmattanOsType for N9/N950 devices based on Harmattan
- * Maemo5OsType for N900 devices based on Maemo
+Add a device:
+=============
- - toolchain is one of the ids used when setting up toolchains with sdktool addTC.
+TODO
- - qt is one of the ids used when setting up Qt versions with sdktool addQt.
+Add a CMake:
+============
+TODO
diff --git a/tests/system/settings/mac/QtProject/qtcreator/profiles.xml b/tests/system/settings/mac/QtProject/qtcreator/profiles.xml
index 3df47f6a77..a3f0a20048 100644
--- a/tests/system/settings/mac/QtProject/qtcreator/profiles.xml
+++ b/tests/system/settings/mac/QtProject/qtcreator/profiles.xml
@@ -49,7 +49,7 @@
<value type="QString" key="PE.Profile.Icon">:///DESKTOP///</value>
<value type="QString" key="PE.Profile.Id">{fc5f34fd-e703-4f4c-85ce-ea5bf5869e6a}</value>
<valuelist type="QVariantList" key="PE.Profile.MutableInfo"/>
- <value type="QString" key="PE.Profile.Name">Desktop 561 default</value>
+ <value type="QString" key="PE.Profile.Name">Desktop 5.6.1 default</value>
<value type="bool" key="PE.Profile.SDK">false</value>
<valuelist type="QVariantList" key="PE.Profile.StickyInfo"/>
</valuemap>
@@ -75,7 +75,7 @@
<value type="QString" key="PE.Profile.Icon">:///DESKTOP///</value>
<value type="QString" key="PE.Profile.Id">{1dcb5509-1670-470d-80a5-8a988f36e4e2}</value>
<valuelist type="QVariantList" key="PE.Profile.MutableInfo"/>
- <value type="QString" key="PE.Profile.Name">Desktop 487 default</value>
+ <value type="QString" key="PE.Profile.Name">Desktop 4.8.7 default</value>
<value type="bool" key="PE.Profile.SDK">false</value>
</valuemap>
</data>
@@ -101,7 +101,7 @@
<value type="QString" key="PE.Profile.Icon">:///DESKTOP///</value>
<value type="QString" key="PE.Profile.Id">{a1e860d1-c241-4abf-80fe-cf0c9f0a43b3}</value>
<valuelist type="QVariantList" key="PE.Profile.MutableInfo"/>
- <value type="QString" key="PE.Profile.Name">Desktop 531 default</value>
+ <value type="QString" key="PE.Profile.Name">Desktop 5.3.1 default</value>
<value type="bool" key="PE.Profile.SDK">false</value>
<valuelist type="QVariantList" key="PE.Profile.StickyInfo"/>
</valuemap>
diff --git a/tests/system/settings/unix/QtProject/qtcreator/profiles.xml b/tests/system/settings/unix/QtProject/qtcreator/profiles.xml
index 265a81a89b..1f56742fe0 100644
--- a/tests/system/settings/unix/QtProject/qtcreator/profiles.xml
+++ b/tests/system/settings/unix/QtProject/qtcreator/profiles.xml
@@ -44,7 +44,7 @@
<value type="QString" key="PE.Profile.Icon">:///DESKTOP///</value>
<value type="QString" key="PE.Profile.Id">{1dcb5509-1670-470d-80a5-8a988f36e4e2}</value>
<valuelist type="QVariantList" key="PE.Profile.MutableInfo"/>
- <value type="QString" key="PE.Profile.Name">Desktop 487 default</value>
+ <value type="QString" key="PE.Profile.Name">Desktop 4.8.7 default</value>
<value type="bool" key="PE.Profile.SDK">false</value>
</valuemap>
</data>
@@ -66,7 +66,7 @@
<value type="QString" key="PE.Profile.Icon">:///DESKTOP///</value>
<value type="QString" key="PE.Profile.Id">{e91398ba-6443-4b02-b416-782a70d9df90}</value>
<valuelist type="QVariantList" key="PE.Profile.MutableInfo"/>
- <value type="QString" key="PE.Profile.Name">Desktop 531 default</value>
+ <value type="QString" key="PE.Profile.Name">Desktop 5.3.1 default</value>
<value type="bool" key="PE.Profile.SDK">false</value>
<valuelist type="QVariantList" key="PE.Profile.StickyInfo"/>
</valuemap>
@@ -90,7 +90,7 @@
<value type="QString" key="PE.Profile.Icon">:///DESKTOP///</value>
<value type="QString" key="PE.Profile.Id">{8ca91e21-c12e-4876-85b3-4b2141708acb}</value>
<valuelist type="QVariantList" key="PE.Profile.MutableInfo"/>
- <value type="QString" key="PE.Profile.Name">Desktop 541 GCC</value>
+ <value type="QString" key="PE.Profile.Name">Desktop 5.4.1 GCC</value>
<value type="bool" key="PE.Profile.SDK">false</value>
<valuelist type="QVariantList" key="PE.Profile.StickyInfo"/>
</valuemap>
@@ -114,7 +114,7 @@
<value type="QString" key="PE.Profile.Icon">:///DESKTOP///</value>
<value type="QString" key="PE.Profile.Id">{542217c7-ce0f-48f7-843b-d4fad339688d}</value>
<valuelist type="QVariantList" key="PE.Profile.MutableInfo"/>
- <value type="QString" key="PE.Profile.Name">Desktop 561 default</value>
+ <value type="QString" key="PE.Profile.Name">Desktop 5.6.1 default</value>
<value type="bool" key="PE.Profile.SDK">false</value>
<valuelist type="QVariantList" key="PE.Profile.StickyInfo"/>
</valuemap>
diff --git a/tests/system/settings/windows/QtProject/qtcreator/profiles.xml b/tests/system/settings/windows/QtProject/qtcreator/profiles.xml
index 8baf4c029a..70eda53be2 100644
--- a/tests/system/settings/windows/QtProject/qtcreator/profiles.xml
+++ b/tests/system/settings/windows/QtProject/qtcreator/profiles.xml
@@ -25,7 +25,7 @@
<value type="QString" key="PE.Profile.Icon">:///DESKTOP///</value>
<value type="QString" key="PE.Profile.Id">{9b35bbe6-25a7-4cce-ba07-487c795f5265}</value>
<valuelist type="QVariantList" key="PE.Profile.MutableInfo"/>
- <value type="QString" key="PE.Profile.Name">Desktop 487 default</value>
+ <value type="QString" key="PE.Profile.Name">Desktop 4.8.7 default</value>
<value type="bool" key="PE.Profile.SDK">false</value>
<valuelist type="QVariantList" key="PE.Profile.StickyInfo"/>
</valuemap>
@@ -53,7 +53,7 @@
<value type="QString" key="PE.Profile.Icon">:///DESKTOP///</value>
<value type="QString" key="PE.Profile.Id">{6a95566e-8372-4372-8286-ef73af7de191}</value>
<valuelist type="QVariantList" key="PE.Profile.MutableInfo"/>
- <value type="QString" key="PE.Profile.Name">Desktop 531 default</value>
+ <value type="QString" key="PE.Profile.Name">Desktop 5.3.1 default</value>
<value type="bool" key="PE.Profile.SDK">false</value>
<valuelist type="QVariantList" key="PE.Profile.StickyInfo"/>
</valuemap>
@@ -81,7 +81,7 @@
<value type="QString" key="PE.Profile.Icon">:///DESKTOP///</value>
<value type="QString" key="PE.Profile.Id">{10cf33c5-e36d-4a49-a8c7-086f3cf59695}</value>
<valuelist type="QVariantList" key="PE.Profile.MutableInfo"/>
- <value type="QString" key="PE.Profile.Name">Desktop 541 GCC</value>
+ <value type="QString" key="PE.Profile.Name">Desktop 5.4.1 GCC</value>
<value type="bool" key="PE.Profile.SDK">false</value>
<valuelist type="QVariantList" key="PE.Profile.StickyInfo"/>
</valuemap>
@@ -109,7 +109,7 @@
<value type="QString" key="PE.Profile.Icon">:///DESKTOP///</value>
<value type="QString" key="PE.Profile.Id">{f9c7858c-d167-4b78-847a-91943bd0af07}</value>
<valuelist type="QVariantList" key="PE.Profile.MutableInfo"/>
- <value type="QString" key="PE.Profile.Name">Desktop 561 default</value>
+ <value type="QString" key="PE.Profile.Name">Desktop 5.6.1 default</value>
<value type="bool" key="PE.Profile.SDK">false</value>
<valuelist type="QVariantList" key="PE.Profile.StickyInfo"/>
</valuemap>
diff --git a/tests/system/shared/classes.py b/tests/system/shared/classes.py
index eb74c9ad0d..402181cfa5 100644
--- a/tests/system/shared/classes.py
+++ b/tests/system/shared/classes.py
@@ -30,11 +30,11 @@ import operator
class Targets:
ALL_TARGETS = tuple(map(lambda x: 2 ** x , range(5)))
- (DESKTOP_487_DEFAULT,
+ (DESKTOP_4_8_7_DEFAULT,
EMBEDDED_LINUX,
- DESKTOP_531_DEFAULT,
- DESKTOP_541_GCC,
- DESKTOP_561_DEFAULT) = ALL_TARGETS
+ DESKTOP_5_3_1_DEFAULT,
+ DESKTOP_5_4_1_GCC,
+ DESKTOP_5_6_1_DEFAULT) = ALL_TARGETS
@staticmethod
def availableTargetClasses():
@@ -42,7 +42,7 @@ class Targets:
if platform.system() in ('Windows', 'Microsoft'):
availableTargets.remove(Targets.EMBEDDED_LINUX)
elif platform.system() == 'Darwin':
- availableTargets.remove(Targets.DESKTOP_541_GCC)
+ availableTargets.remove(Targets.DESKTOP_5_4_1_GCC)
return availableTargets
@staticmethod
@@ -54,20 +54,20 @@ class Targets:
@staticmethod
def qt4Classes():
- return (Targets.DESKTOP_487_DEFAULT | Targets.EMBEDDED_LINUX)
+ return (Targets.DESKTOP_4_8_7_DEFAULT | Targets.EMBEDDED_LINUX)
@staticmethod
def getStringForTarget(target):
- if target == Targets.DESKTOP_487_DEFAULT:
- return "Desktop 487 default"
+ if target == Targets.DESKTOP_4_8_7_DEFAULT:
+ return "Desktop 4.8.7 default"
elif target == Targets.EMBEDDED_LINUX:
return "Embedded Linux"
- elif target == Targets.DESKTOP_531_DEFAULT:
- return "Desktop 531 default"
- elif target == Targets.DESKTOP_541_GCC:
- return "Desktop 541 GCC"
- elif target == Targets.DESKTOP_561_DEFAULT:
- return "Desktop 561 default"
+ elif target == Targets.DESKTOP_5_3_1_DEFAULT:
+ return "Desktop 5.3.1 default"
+ elif target == Targets.DESKTOP_5_4_1_GCC:
+ return "Desktop 5.4.1 GCC"
+ elif target == Targets.DESKTOP_5_6_1_DEFAULT:
+ return "Desktop 5.6.1 default"
else:
return None
@@ -83,7 +83,7 @@ class Targets:
@staticmethod
def getDefaultKit():
- return Targets.DESKTOP_531_DEFAULT
+ return Targets.DESKTOP_5_3_1_DEFAULT
# this class holds some constants for easier usage inside the Projects view
class ProjectSettings:
@@ -169,9 +169,9 @@ class Qt5Path:
@staticmethod
def getPaths(pathSpec):
- qt5targets = [Targets.DESKTOP_531_DEFAULT, Targets.DESKTOP_561_DEFAULT]
+ qt5targets = [Targets.DESKTOP_5_3_1_DEFAULT, Targets.DESKTOP_5_6_1_DEFAULT]
if platform.system() != 'Darwin':
- qt5targets.append(Targets.DESKTOP_541_GCC)
+ qt5targets.append(Targets.DESKTOP_5_4_1_GCC)
if pathSpec == Qt5Path.DOCS:
return map(lambda target: Qt5Path.docsPath(target), qt5targets)
elif pathSpec == Qt5Path.EXAMPLES:
@@ -185,7 +185,7 @@ class Qt5Path:
if target not in Targets.ALL_TARGETS:
raise Exception("Unexpected target '%s'" % str(target))
- matcher = re.match("^Desktop (5\\d{2}).*$", Targets.getStringForTarget(target))
+ matcher = re.match("^Desktop (5\.\\d{1,2}\.\\d{1,2}).*$", Targets.getStringForTarget(target))
if matcher is None:
raise Exception("Currently this is supported for Desktop Qt5 only, got target '%s'"
% str(Targets.getStringForTarget(target)))
@@ -211,9 +211,18 @@ class Qt5Path:
return os.path.expanduser("~/Qt5.%d.1" % qt5Minor)
@staticmethod
- def examplesPath(target):
+ def toVersionTuple(versionString):
+ return tuple(map(__builtin__.int, versionString.split(".")))
+
+ @staticmethod
+ def getQtMinorAndPatchVersion(target):
qtVersionStr = Qt5Path.__preCheckAndExtractQtVersionStr__(target)
- qtMinorVersion = __builtin__.int(qtVersionStr[1])
+ versionTuple = Qt5Path.toVersionTuple(qtVersionStr)
+ return versionTuple[1], versionTuple[2]
+
+ @staticmethod
+ def examplesPath(target):
+ qtMinorVersion, qtPatchVersion = Qt5Path.getQtMinorAndPatchVersion(target)
if qtMinorVersion == 2:
path = "examples"
else:
@@ -223,8 +232,7 @@ class Qt5Path:
@staticmethod
def docsPath(target):
- qtVersionStr = Qt5Path.__preCheckAndExtractQtVersionStr__(target)
- qtMinorVersion = __builtin__.int(qtVersionStr[1])
+ qtMinorVersion, qtPatchVersion = Qt5Path.getQtMinorAndPatchVersion(target)
if qtMinorVersion == 2:
path = "doc"
else:
diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py
index 06b67e18c7..1a35e81aa5 100644
--- a/tests/system/shared/project.py
+++ b/tests/system/shared/project.py
@@ -73,7 +73,7 @@ def openCmakeProject(projectPath, buildDir):
invokeMenuItem("File", "Open File or Project...")
selectFromFileDialog(projectPath)
__chooseTargets__([]) # uncheck all
- __chooseTargets__([Targets.DESKTOP_487_DEFAULT], additionalFunc=additionalFunction)
+ __chooseTargets__([Targets.DESKTOP_4_8_7_DEFAULT], additionalFunc=additionalFunction)
clickButton(waitForObject(":Qt Creator.Configure Project_QPushButton"))
return True
@@ -190,28 +190,23 @@ def __verifyFileCreation__(path, expectedFiles):
test.verify(os.path.exists(filename), "Checking if '" + filename + "' was created")
def __modifyAvailableTargets__(available, requiredQt, asStrings=False):
- threeDigits = re.compile("\d{3}")
- requiredQtVersion = requiredQt.replace(".", "") + "0"
+ versionFinder = re.compile("^Desktop (\\d{1}\.\\d{1,2}\.\\d{1,2}).*$")
tmp = list(available) # we need a deep copy
+ if Qt5Path.toVersionTuple(requiredQt) > (4,8,7):
+ toBeRemoved = Targets.EMBEDDED_LINUX
+ if asStrings:
+ toBeRemoved = Targets.getStringForTarget(toBeRemoved)
+ if toBeRemoved in available:
+ available.remove(toBeRemoved)
for currentItem in tmp:
if asStrings:
item = currentItem
else:
item = Targets.getStringForTarget(currentItem)
- found = threeDigits.search(item)
+ found = versionFinder.search(item)
if found:
- if found.group(0) < requiredQtVersion:
- # Quick 1.1 supports 4.7.4 only for running, debugging is unsupported
- # so the least required version is 4.8, but 4.7.4 will be still listed
- if not (requiredQtVersion == "480" and found.group(0) == "474"):
- available.remove(currentItem)
- if requiredQtVersion > "487":
- toBeRemoved = [Targets.EMBEDDED_LINUX]
- if asStrings:
- toBeRemoved = Targets.getTargetsAsStrings(toBeRemoved)
- for t in toBeRemoved:
- if t in available:
- available.remove(t)
+ if Qt5Path.toVersionTuple(found.group(1)) < Qt5Path.toVersionTuple(requiredQt):
+ available.remove(currentItem)
# Creates a Qt GUI project
# param path specifies where to create the project
@@ -320,7 +315,7 @@ def createNewQtQuickUI(workingDir, qtVersion = "5.6"):
return projectName
-def createNewQmlExtension(workingDir, targets=[Targets.DESKTOP_531_DEFAULT]):
+def createNewQmlExtension(workingDir, targets=[Targets.DESKTOP_5_3_1_DEFAULT]):
available = __createProjectOrFileSelectType__(" Library", "Qt Quick 2 Extension Plugin")
if workingDir == None:
workingDir = tempDir()
@@ -349,7 +344,7 @@ def createEmptyQtProject(workingDir=None, projectName=None, targets=Targets.desk
__createProjectHandleLastPage__()
return projectName, checkedTargets
-def createNewNonQtProject(workingDir=None, projectName=None, target=[Targets.DESKTOP_487_DEFAULT],
+def createNewNonQtProject(workingDir=None, projectName=None, target=[Targets.DESKTOP_4_8_7_DEFAULT],
plainC=False, cmake=False, qbs=False):
if plainC:
template = "Plain C Application"
@@ -378,7 +373,7 @@ def createNewNonQtProject(workingDir=None, projectName=None, target=[Targets.DES
return projectName
def createNewCPPLib(projectDir = None, projectName = None, className = None, fromWelcome = False,
- target = [Targets.DESKTOP_487_DEFAULT], isStatic = False, modules = ["QtCore"]):
+ target = [Targets.DESKTOP_4_8_7_DEFAULT], isStatic = False, modules = ["QtCore"]):
available = __createProjectOrFileSelectType__(" Library", "C++ Library", fromWelcome, True)
if isStatic:
libType = LibType.STATIC
@@ -396,7 +391,7 @@ def createNewCPPLib(projectDir = None, projectName = None, className = None, fro
return checkedTargets, projectName, className
def createNewQtPlugin(projectDir=None, projectName=None, className=None, fromWelcome=False,
- target=[Targets.DESKTOP_487_DEFAULT], baseClass="QGenericPlugin"):
+ target=[Targets.DESKTOP_4_8_7_DEFAULT], baseClass="QGenericPlugin"):
available = __createProjectOrFileSelectType__(" Library", "C++ Library", fromWelcome, True)
if projectDir == None:
projectDir = tempDir()
@@ -414,7 +409,7 @@ def createNewQtPlugin(projectDir=None, projectName=None, className=None, fromWel
# parameter additionalFunc function to be executed inside the detailed view of each chosen kit
# if present, 'Details' button will be clicked, function will be executed,
# 'Details' button will be clicked again
-def __chooseTargets__(targets=[Targets.DESKTOP_487_DEFAULT], availableTargets=None, additionalFunc=None):
+def __chooseTargets__(targets=[Targets.DESKTOP_4_8_7_DEFAULT], availableTargets=None, additionalFunc=None):
if availableTargets != None:
available = availableTargets
else:
@@ -645,7 +640,7 @@ def __getSupportedPlatforms__(text, templateName, getAsStrings=False):
else:
version = None
if 'only available with Qt 5.6' in text:
- result = [Targets.DESKTOP_561_DEFAULT]
+ result = [Targets.DESKTOP_5_6_1_DEFAULT]
elif 'available with Qt 5.7 and later' in text:
result = [] # FIXME we have currently no Qt5.7+ available in predefined settings
elif 'Supported Platforms' in text:
@@ -653,12 +648,12 @@ def __getSupportedPlatforms__(text, templateName, getAsStrings=False):
result = []
if 'Desktop' in supports:
if version == None or version < "5.0":
- result.append(Targets.DESKTOP_487_DEFAULT)
+ result.append(Targets.DESKTOP_4_8_7_DEFAULT)
if platform.system() in ("Linux", "Darwin"):
result.append(Targets.EMBEDDED_LINUX)
- result.extend([Targets.DESKTOP_531_DEFAULT, Targets.DESKTOP_561_DEFAULT])
+ result.extend([Targets.DESKTOP_5_3_1_DEFAULT, Targets.DESKTOP_5_6_1_DEFAULT])
if platform.system() != 'Darwin':
- result.append(Targets.DESKTOP_541_GCC)
+ result.append(Targets.DESKTOP_5_4_1_GCC)
elif 'Platform independent' in text:
result = Targets.desktopTargetClasses()
else:
diff --git a/tests/system/suite_APTW/tst_APTW03/test.py b/tests/system/suite_APTW/tst_APTW03/test.py
index d1ef6a5f80..2ceef47b70 100644
--- a/tests/system/suite_APTW/tst_APTW03/test.py
+++ b/tests/system/suite_APTW/tst_APTW03/test.py
@@ -85,7 +85,7 @@ def main():
target=targets)
virtualFunctionsAdded = False
for kit, config in iterateBuildConfigs(len(checkedTargets), "Debug"):
- is487Kit = "487" in Targets.getStringForTarget(checkedTargets[kit])
+ is487Kit = checkedTargets[kit] in (Targets.DESKTOP_4_8_7_DEFAULT, Targets.EMBEDDED_LINUX)
verifyBuildConfig(len(checkedTargets), kit, config, True, True)
if virtualFunctionsAdded and platform.system() in ('Microsoft', 'Windows') and is487Kit:
test.warning("Skipping building of Qt4.8 targets because of QTCREATORBUG-12251.")
diff --git a/tests/system/suite_CCOM/tst_CCOM01/test.py b/tests/system/suite_CCOM/tst_CCOM01/test.py
index 8e336c8567..6e75e634f2 100755
--- a/tests/system/suite_CCOM/tst_CCOM01/test.py
+++ b/tests/system/suite_CCOM/tst_CCOM01/test.py
@@ -28,7 +28,7 @@ source("../../shared/qtcreator.py")
# entry of test
def main():
# prepare example project
- sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_561_DEFAULT),
+ sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_5_6_1_DEFAULT),
"quick", "animation")
proFile = "animation.pro"
if not neededFilePresent(os.path.join(sourceExample, proFile)):
@@ -41,7 +41,7 @@ def main():
return
# open example project, supports only Qt 5
targets = Targets.desktopTargetClasses()
- targets.remove(Targets.DESKTOP_487_DEFAULT)
+ targets.remove(Targets.DESKTOP_4_8_7_DEFAULT)
checkedTargets = openQmakeProject(examplePath, targets)
# build and wait until finished - on all build configurations
availableConfigs = iterateBuildConfigs(len(checkedTargets))
diff --git a/tests/system/suite_CCOM/tst_CCOM02/test.py b/tests/system/suite_CCOM/tst_CCOM02/test.py
index 2a59212706..f6a3232bd8 100755
--- a/tests/system/suite_CCOM/tst_CCOM02/test.py
+++ b/tests/system/suite_CCOM/tst_CCOM02/test.py
@@ -29,7 +29,7 @@ source("../../shared/qtcreator.py")
# entry of test
def main():
# prepare example project
- sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_561_DEFAULT),
+ sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_5_6_1_DEFAULT),
"quick", "animation")
proFile = "animation.pro"
if not neededFilePresent(os.path.join(sourceExample, proFile)):
diff --git a/tests/system/suite_CSUP/tst_CSUP06/test.py b/tests/system/suite_CSUP/tst_CSUP06/test.py
index f703669755..40d924d2c5 100644
--- a/tests/system/suite_CSUP/tst_CSUP06/test.py
+++ b/tests/system/suite_CSUP/tst_CSUP06/test.py
@@ -165,7 +165,7 @@ def main():
with TestSection(getCodeModelString(useClang)):
if not startCreator(useClang):
continue
- openQmakeProject(examplePath, [Targets.DESKTOP_531_DEFAULT])
+ openQmakeProject(examplePath, [Targets.DESKTOP_5_3_1_DEFAULT])
checkCodeModelSettings(useClang)
if not openDocument("cplusplus-tools.Sources.main\\.cpp"):
earlyExit("Failed to open main.cpp.")
diff --git a/tests/system/suite_QMLS/tst_QMLS03/test.py b/tests/system/suite_QMLS/tst_QMLS03/test.py
index 3682816da5..11408d700b 100644
--- a/tests/system/suite_QMLS/tst_QMLS03/test.py
+++ b/tests/system/suite_QMLS/tst_QMLS03/test.py
@@ -67,7 +67,7 @@ def checkUsages(resultsView, expectedResults, directory):
def main():
# prepare example project
- sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_561_DEFAULT),
+ sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_5_6_1_DEFAULT),
"quick", "animation")
proFile = "animation.pro"
if not neededFilePresent(os.path.join(sourceExample, proFile)):
@@ -80,7 +80,7 @@ def main():
if not startedWithoutPluginError():
return
# open example project
- openQmakeProject(examplePath, [Targets.DESKTOP_531_DEFAULT])
+ openQmakeProject(examplePath, [Targets.DESKTOP_5_3_1_DEFAULT])
# open qml file
openDocument("animation.Resources.animation\\.qrc./animation.basics.color-animation\\.qml")
# get editor
diff --git a/tests/system/suite_WELP/tst_WELP02/test.py b/tests/system/suite_WELP/tst_WELP02/test.py
index ae7b22e934..e809a753df 100644
--- a/tests/system/suite_WELP/tst_WELP02/test.py
+++ b/tests/system/suite_WELP/tst_WELP02/test.py
@@ -65,7 +65,7 @@ def checkTypeAndProperties(typePropertiesDetails):
def main():
# prepare example project
- sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_561_DEFAULT),
+ sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_5_6_1_DEFAULT),
"quick", "animation")
if not neededFilePresent(sourceExample):
return
diff --git a/tests/system/suite_debugger/tst_cli_output_console/test.py b/tests/system/suite_debugger/tst_cli_output_console/test.py
index 7acaedc0fe..1add5fe028 100644
--- a/tests/system/suite_debugger/tst_cli_output_console/test.py
+++ b/tests/system/suite_debugger/tst_cli_output_console/test.py
@@ -71,10 +71,10 @@ def main():
appOutput = str(waitForObject(":Qt Creator_Core::OutputWindow").plainText)
verifyOutput(appOutput, outputStdOut, "std::cout", "Application Output")
verifyOutput(appOutput, outputStdErr, "std::cerr", "Application Output")
- if (checkedTargets[kit] == Targets.DESKTOP_541_GCC
+ if (checkedTargets[kit] == Targets.DESKTOP_5_4_1_GCC
and platform.system() in ('Windows', 'Microsoft')):
test.log("Skipping qDebug() from %s (unstable, QTCREATORBUG-15067)"
- % Targets.getStringForTarget(Targets.DESKTOP_541_GCC))
+ % Targets.getStringForTarget(Targets.DESKTOP_5_4_1_GCC))
else:
verifyOutput(appOutput, outputQDebug,
"qDebug()", "Application Output")
diff --git a/tests/system/suite_debugger/tst_debug_empty_main/test.py b/tests/system/suite_debugger/tst_debug_empty_main/test.py
index 524499c816..230e3793a8 100644
--- a/tests/system/suite_debugger/tst_debug_empty_main/test.py
+++ b/tests/system/suite_debugger/tst_debug_empty_main/test.py
@@ -61,7 +61,8 @@ def main():
for name,isC in {"C":True, "CPP":False}.items():
for singleTarget in targets:
workingDir = tempDir()
- qtVersion = re.search("\d{3}", Targets.getStringForTarget(singleTarget)).group()
+ qtVersion = re.search("\\d{1}\.\\d{1,2}\.\\d{1,2}", Targets.getStringForTarget(singleTarget)).group()
+ qtVersion = qtVersion.replace(".", "")
projectName = createNewNonQtProject(workingDir, "Sample%s%s" % (name, qtVersion),
[singleTarget], isC)
if projectName == None:
diff --git a/tests/system/suite_editors/tst_qml_editor/test.py b/tests/system/suite_editors/tst_qml_editor/test.py
index 8854035e6a..c61b7aa43d 100644
--- a/tests/system/suite_editors/tst_qml_editor/test.py
+++ b/tests/system/suite_editors/tst_qml_editor/test.py
@@ -26,7 +26,7 @@
source("../../shared/qtcreator.py")
def main():
- target = Targets.DESKTOP_531_DEFAULT
+ target = Targets.DESKTOP_5_3_1_DEFAULT
sourceExample = os.path.join(Qt5Path.examplesPath(target), "declarative/keyinteraction/focus")
proFile = "focus.pro"
if not neededFilePresent(os.path.join(sourceExample, proFile)):
diff --git a/tests/system/suite_general/tst_build_speedcrunch/test.py b/tests/system/suite_general/tst_build_speedcrunch/test.py
index 34be2beafa..686943b422 100644
--- a/tests/system/suite_general/tst_build_speedcrunch/test.py
+++ b/tests/system/suite_general/tst_build_speedcrunch/test.py
@@ -42,7 +42,7 @@ def main():
startApplication("qtcreator" + SettingsPath)
if not startedWithoutPluginError():
return
- checkedTargets = openQmakeProject(SpeedCrunchPath, [Targets.DESKTOP_487_DEFAULT])
+ checkedTargets = openQmakeProject(SpeedCrunchPath, [Targets.DESKTOP_4_8_7_DEFAULT])
progressBarWait(30000)
fancyToolButton = waitForObject(":*Qt Creator_Core::Internal::FancyToolButton")
diff --git a/tests/system/suite_general/tst_opencreator_qbs/test.py b/tests/system/suite_general/tst_opencreator_qbs/test.py
index e8b17b607d..60cc0d3444 100644
--- a/tests/system/suite_general/tst_opencreator_qbs/test.py
+++ b/tests/system/suite_general/tst_opencreator_qbs/test.py
@@ -37,8 +37,8 @@ def main():
if not startedWithoutPluginError():
return
openQbsProject(pathCreator)
- if not addAndActivateKit(Targets.DESKTOP_561_DEFAULT):
- test.fatal("Failed to activate '%s'" % Targets.getStringForTarget(Targets.DESKTOP_541_GCC))
+ if not addAndActivateKit(Targets.DESKTOP_5_6_1_DEFAULT):
+ test.fatal("Failed to activate '%s'" % Targets.getStringForTarget(Targets.DESKTOP_5_4_1_GCC))
invokeMenuItem("File", "Exit")
return
test.log("Start parsing project")
diff --git a/tests/system/suite_general/tst_openqt_creator/test.py b/tests/system/suite_general/tst_openqt_creator/test.py
index b2846b5e97..6d40178470 100644
--- a/tests/system/suite_general/tst_openqt_creator/test.py
+++ b/tests/system/suite_general/tst_openqt_creator/test.py
@@ -36,12 +36,12 @@ def main():
return
runButton = findObject(':*Qt Creator.Run_Core::Internal::FancyToolButton')
- openQmakeProject(pathSpeedcrunch, [Targets.DESKTOP_487_DEFAULT])
+ openQmakeProject(pathSpeedcrunch, [Targets.DESKTOP_4_8_7_DEFAULT])
# Wait for parsing to complete
waitFor("runButton.enabled", 30000)
# Starting before opening, because this is where Creator froze (QTCREATORBUG-10733)
startopening = datetime.utcnow()
- openQmakeProject(pathCreator, [Targets.DESKTOP_561_DEFAULT])
+ openQmakeProject(pathCreator, [Targets.DESKTOP_5_6_1_DEFAULT])
# Wait for parsing to complete
startreading = datetime.utcnow()
waitFor("runButton.enabled", 300000)
diff --git a/tests/system/suite_general/tst_remove_kits/test.py b/tests/system/suite_general/tst_remove_kits/test.py
index 98590d674a..b5b5148741 100644
--- a/tests/system/suite_general/tst_remove_kits/test.py
+++ b/tests/system/suite_general/tst_remove_kits/test.py
@@ -46,7 +46,7 @@ def __removeKit__(kit, kitName):
if kitName == Targets.getStringForTarget(Targets.getDefaultKit()):
# The following kits will be the default kit at that time
kitNameTemplate += " (default)"
- item = kitNameTemplate % kitName
+ item = kitNameTemplate % kitName.replace(".", "\\.")
waitForObjectItem(":BuildAndRun_QTreeView", item)
clickItem(":BuildAndRun_QTreeView", item, 5, 5, 0, Qt.LeftButton)
clickButton(waitForObject(":Remove_QPushButton"))
diff --git a/tests/system/suite_general/tst_rename_file/test.py b/tests/system/suite_general/tst_rename_file/test.py
index 7aa17f2e05..ee55e9c2b4 100644
--- a/tests/system/suite_general/tst_rename_file/test.py
+++ b/tests/system/suite_general/tst_rename_file/test.py
@@ -28,7 +28,7 @@ source("../../shared/qtcreator.py")
def main():
# prepare example project
projectName = "adding"
- sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_561_DEFAULT),
+ sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_5_6_1_DEFAULT),
"qml", "referenceexamples", "adding")
proFile = projectName + ".pro"
if not neededFilePresent(os.path.join(sourceExample, proFile)):
diff --git a/tests/system/suite_general/tst_session_handling/test.py b/tests/system/suite_general/tst_session_handling/test.py
index 754f42bd1e..673aae739a 100644
--- a/tests/system/suite_general/tst_session_handling/test.py
+++ b/tests/system/suite_general/tst_session_handling/test.py
@@ -39,7 +39,7 @@ def main():
"Verifying window title contains created session name.")
checkWelcomePage(sessionName, True)
for project in projects:
- openQmakeProject(project, [Targets.DESKTOP_531_DEFAULT])
+ openQmakeProject(project, [Targets.DESKTOP_5_3_1_DEFAULT])
progressBarWait(20000)
checkNavigator(52, "Verifying whether all projects have been opened.")
openDocument("animation.Resources.animation\\.qrc./animation.basics.animators\\.qml")
@@ -66,9 +66,9 @@ def main():
invokeMenuItem("File", "Exit")
def prepareTestExamples():
- examples = [os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_561_DEFAULT),
+ examples = [os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_5_6_1_DEFAULT),
"quick", "animation", "animation.pro"),
- os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_561_DEFAULT),
+ os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_5_6_1_DEFAULT),
"quick", "keyinteraction", "keyinteraction.pro")
]
projects = []
diff --git a/tests/system/suite_qtquick/tst_qml_outline/test.py b/tests/system/suite_qtquick/tst_qml_outline/test.py
index 383d8296f7..f3ca4885ac 100644
--- a/tests/system/suite_qtquick/tst_qml_outline/test.py
+++ b/tests/system/suite_qtquick/tst_qml_outline/test.py
@@ -30,7 +30,7 @@ outline = ":Qt Creator_QmlJSEditor::Internal::QmlJSOutlineTreeView"
treebase = "keyinteraction.Resources.keyinteraction\\.qrc./keyinteraction.focus."
def main():
- sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_561_DEFAULT),
+ sourceExample = os.path.join(Qt5Path.examplesPath(Targets.DESKTOP_5_6_1_DEFAULT),
"quick", "keyinteraction")
proFile = "keyinteraction.pro"
if not neededFilePresent(os.path.join(sourceExample, proFile)):
@@ -39,7 +39,7 @@ def main():
startApplication("qtcreator" + SettingsPath)
if not startedWithoutPluginError():
return
- openQmakeProject(os.path.join(templateDir, proFile), [Targets.DESKTOP_531_DEFAULT])
+ openQmakeProject(os.path.join(templateDir, proFile), [Targets.DESKTOP_5_3_1_DEFAULT])
qmlFiles = [treebase + "focus\\.qml", treebase + "Core.ListMenu\\.qml"]
checkOutlineFor(qmlFiles)
testModify()
diff --git a/tests/system/suite_qtquick/tst_qtquick_creation/test.py b/tests/system/suite_qtquick/tst_qtquick_creation/test.py
index 2b767cde89..0487240ecb 100644
--- a/tests/system/suite_qtquick/tst_qtquick_creation/test.py
+++ b/tests/system/suite_qtquick/tst_qtquick_creation/test.py
@@ -33,7 +33,7 @@ def main():
available = [("5.6", False), ("5.6", True)]
for qtVersion, controls in available:
- targ = [Targets.DESKTOP_561_DEFAULT]
+ targ = [Targets.DESKTOP_5_6_1_DEFAULT]
quick = "2.6"
# using a temporary directory won't mess up a potentially existing
workingDir = tempDir()
diff --git a/tests/system/suite_qtquick/tst_qtquick_creation3/test.py b/tests/system/suite_qtquick/tst_qtquick_creation3/test.py
index 507abffba3..b47da5d58d 100644
--- a/tests/system/suite_qtquick/tst_qtquick_creation3/test.py
+++ b/tests/system/suite_qtquick/tst_qtquick_creation3/test.py
@@ -35,8 +35,8 @@ def main():
# using a temporary directory won't mess up a potentially existing
workingDir = tempDir()
projectName = createNewQtQuickUI(workingDir, qtVersion)
- kit = Targets.getStringForTarget(Targets.DESKTOP_561_DEFAULT)
- if addAndActivateKit(Targets.DESKTOP_561_DEFAULT):
+ kit = Targets.getStringForTarget(Targets.DESKTOP_5_6_1_DEFAULT)
+ if addAndActivateKit(Targets.DESKTOP_5_6_1_DEFAULT):
quick = "2.6"
else:
test.fatal("Failed to activate kit %s" % kit)
diff --git a/tests/system/suite_qtquick/tst_qtquick_creation4/test.py b/tests/system/suite_qtquick/tst_qtquick_creation4/test.py
index 3fc99ae0bf..a39ac6f867 100644
--- a/tests/system/suite_qtquick/tst_qtquick_creation4/test.py
+++ b/tests/system/suite_qtquick/tst_qtquick_creation4/test.py
@@ -29,7 +29,7 @@ def main():
startApplication("qtcreator" + SettingsPath)
if not startedWithoutPluginError():
return
- for target in [Targets.DESKTOP_561_DEFAULT, Targets.DESKTOP_531_DEFAULT]:
+ for target in [Targets.DESKTOP_5_6_1_DEFAULT, Targets.DESKTOP_5_3_1_DEFAULT]:
# using a temporary directory won't mess up a potentially existing
createNewQmlExtension(tempDir(), [target])
# wait for parsing to complete
diff --git a/tests/unit/unittest/clangcodemodelserver-test.cpp b/tests/unit/unittest/clangcodemodelserver-test.cpp
index 36efb1597a..df4afa8004 100644
--- a/tests/unit/unittest/clangcodemodelserver-test.cpp
+++ b/tests/unit/unittest/clangcodemodelserver-test.cpp
@@ -102,6 +102,7 @@ protected:
bool waitUntilAllJobsFinished(int timeOutInMs = 10000);
void registerProjectPart();
+ void registerProjectPart(const Utf8String &projectPartId);
void changeProjectPartArguments();
void registerProjectAndFile(const Utf8String &filePath,
@@ -111,6 +112,8 @@ protected:
void registerProjectAndFilesAndWaitForFinished(int expectedDocumentAnnotationsChangedMessages = 2);
void registerFile(const Utf8String &filePath,
int expectedDocumentAnnotationsChangedMessages = 1);
+ void registerFile(const Utf8String &filePath, const Utf8String &projectPartId,
+ int expectedDocumentAnnotationsChangedMessages = 1);
void registerFiles(int expectedDocumentAnnotationsChangedMessages);
void registerFileWithUnsavedContent(const Utf8String &filePath, const Utf8String &content);
@@ -155,6 +158,7 @@ protected:
ClangBackEnd::ClangCodeModelServer clangServer;
const ClangBackEnd::Documents &documents = clangServer.documentsForTestOnly();
const Utf8String projectPartId = Utf8StringLiteral("pathToProjectPart.pro");
+ const Utf8String projectPartId2 = Utf8StringLiteral("otherPathToProjectPart.pro");
const Utf8String filePathA = Utf8StringLiteral(TESTDATA_DIR"/complete_extractor_function.cpp");
const QString filePathAUnsavedVersion1
@@ -406,6 +410,30 @@ TEST_F(ClangCodeModelServerSlowTest, TranslationUnitAfterUpdateNeedsReparse)
ASSERT_THAT(clangServer, HasDirtyDocument(filePathA, projectPartId, 1U, true, true));
}
+TEST_F(ClangCodeModelServerSlowTest, TakeOverJobsOnProjectPartChange)
+{
+ registerProjectAndFileAndWaitForFinished(filePathC, 2);
+ updateVisibilty(filePathB, filePathB); // Disable processing jobs
+ requestReferences();
+
+ expectReferences();
+
+ changeProjectPartArguments(); // Here we do not want to loose the RequestReferences job
+ updateVisibilty(filePathC, filePathC); // Enable processing jobs
+}
+
+TEST_F(ClangCodeModelServerSlowTest, TakeOverJobsOnProjectPartIdChange)
+{
+ registerProjectPart(projectPartId);
+ registerProjectPart(projectPartId2);
+ registerFile(filePathC, projectPartId, 0);
+ requestReferences();
+
+ expectReferences();
+
+ registerFile(filePathC, projectPartId2); // Here we do not want to loose the RequestReferences job
+}
+
void ClangCodeModelServer::SetUp()
{
clangServer.setClient(&mockClangCodeModelClient);
@@ -441,6 +469,13 @@ void ClangCodeModelServer::registerProjectAndFilesAndWaitForFinished(
void ClangCodeModelServer::registerFile(const Utf8String &filePath,
int expectedDocumentAnnotationsChangedMessages)
{
+ registerFile(filePath, projectPartId, expectedDocumentAnnotationsChangedMessages);
+}
+
+void ClangCodeModelServer::registerFile(const Utf8String &filePath,
+ const Utf8String &projectPartId,
+ int expectedDocumentAnnotationsChangedMessages)
+{
const FileContainer fileContainer(filePath, projectPartId);
const RegisterTranslationUnitForEditorMessage message({fileContainer}, filePath, {filePath});
@@ -672,6 +707,11 @@ void ClangCodeModelServer::unregisterFile(const Utf8String &filePath)
void ClangCodeModelServer::registerProjectPart()
{
+ registerProjectPart(projectPartId);
+}
+
+void ClangCodeModelServer::registerProjectPart(const Utf8String &projectPartId)
+{
RegisterProjectPartsForEditorMessage message({ProjectPartContainer(projectPartId)});
clangServer.registerProjectPartsForEditor(message);
diff --git a/tests/unit/unittest/clangdocumentprocessors-test.cpp b/tests/unit/unittest/clangdocumentprocessors-test.cpp
index 87990bca11..0e16ab1f4e 100644
--- a/tests/unit/unittest/clangdocumentprocessors-test.cpp
+++ b/tests/unit/unittest/clangdocumentprocessors-test.cpp
@@ -126,6 +126,19 @@ TEST_F(DocumentProcessors, Remove)
ASSERT_TRUE(documentProcessors.processors().empty());
}
+TEST_F(DocumentProcessors, ResetTakesOverJobsInQueue)
+{
+ documentProcessors.create(document);
+ documentProcessors.processor(document).addJob(JobRequest::Type::RequestReferences);
+ documents.remove({document.fileContainer()});
+ const auto newDocument = *documents.create({document.fileContainer()}).begin();
+
+ documentProcessors.reset(document, newDocument);
+
+ ASSERT_THAT(documentProcessors.processor(document).queue().first().type,
+ JobRequest::Type::RequestReferences);
+}
+
TEST_F(DocumentProcessors, RemoveThrowsForNotExisting)
{
ASSERT_THROW(documentProcessors.remove(document),
diff --git a/tests/unit/unittest/clangsupportivetranslationunitinitializer-test.cpp b/tests/unit/unittest/clangsupportivetranslationunitinitializer-test.cpp
index 540fcf7fdc..65062a9d16 100644
--- a/tests/unit/unittest/clangsupportivetranslationunitinitializer-test.cpp
+++ b/tests/unit/unittest/clangsupportivetranslationunitinitializer-test.cpp
@@ -111,6 +111,18 @@ TEST_F(SupportiveTranslationUnitInitializerSlowTest, StartInitializingStartsJob)
ASSERT_THAT(runningJob.jobRequest.type, JobRequest::Type::ParseSupportiveTranslationUnit);
}
+TEST_F(SupportiveTranslationUnitInitializerSlowTest, Abort)
+{
+ initializer.startInitializing();
+ assertSingleJobRunningAndEmptyQueue();
+
+ initializer.abort();
+
+ ASSERT_THAT(initializer.state(),
+ Eq(ClangBackEnd::SupportiveTranslationUnitInitializer::State::Aborted));
+ ASSERT_FALSE(jobs.jobFinishedCallback());
+}
+
TEST_F(SupportiveTranslationUnitInitializer, CheckIfParseJobFinishedAbortsIfDocumentIsClosed)
{
documents.remove({FileContainer(filePath, projectPartId)});
diff --git a/tests/unit/unittest/clangtooltipinfo-test.cpp b/tests/unit/unittest/clangtooltipinfo-test.cpp
index acaa3e18d7..c796932092 100644
--- a/tests/unit/unittest/clangtooltipinfo-test.cpp
+++ b/tests/unit/unittest/clangtooltipinfo-test.cpp
@@ -614,6 +614,48 @@ TEST_F(ToolTipInfo, AutoTypeClassTemplateType)
ASSERT_THAT(actual.text(), Utf8StringLiteral("Zii<int>"));
}
+TEST_F(ToolTipInfo, DISABLED_WITHOUT_PRETTYDECL_PATCH(Function_DefaultConstructor))
+{
+ const ::ToolTipInfo actual = tooltip(193, 5);
+
+ ASSERT_THAT(actual.text(), Utf8StringLiteral("inline constexpr Con::Con() noexcept"));
+}
+
+TEST_F(ToolTipInfo, DISABLED_WITHOUT_PRETTYDECL_PATCH(Function_ExplicitDefaultConstructor))
+{
+ const ::ToolTipInfo actual = tooltip(194, 5);
+
+ ASSERT_THAT(actual.text(), Utf8StringLiteral("ExplicitCon::ExplicitCon() noexcept = default"));
+}
+
+TEST_F(ToolTipInfo, DISABLED_WITHOUT_PRETTYDECL_PATCH(Function_CustomConstructor))
+{
+ const ::ToolTipInfo actual = tooltip(195, 5);
+
+ ASSERT_THAT(actual.text(), Utf8StringLiteral("ExplicitCon::ExplicitCon(int m)"));
+}
+
+// Overloads are problematic for the help system since the data base has not
+// enough information about them. At least for constructors we can improve
+// the situation a bit - provide a help system query that:
+// 1) will not lead to the replacement of the constructor signature as
+// clang sees it with the wrong overload documentation
+// (signature + main help sentence). That's the qdocCategory=Unknown
+// part.
+// 2) finds the documentation for the class instead of the overload,
+// so F1 will go to the class documentation.
+TEST_F(ToolTipInfo, Function_ConstructorQDoc)
+{
+ ::ToolTipInfo expected;
+ expected.setQdocIdCandidates({Utf8StringLiteral("Con")});
+ expected.setQdocMark(Utf8StringLiteral("Con"));
+ expected.setQdocCategory(::ToolTipInfo::Unknown);
+
+ const ::ToolTipInfo actual = tooltip(193, 5);
+
+ ASSERT_THAT(actual, IsQdocToolTip(expected));
+}
+
std::unique_ptr<Data> ToolTipInfo::d;
void ToolTipInfo::SetUpTestCase()
diff --git a/tests/unit/unittest/data/tooltipinfo.cpp b/tests/unit/unittest/data/tooltipinfo.cpp
index 1945577b63..266d86bc47 100644
--- a/tests/unit/unittest/data/tooltipinfo.cpp
+++ b/tests/unit/unittest/data/tooltipinfo.cpp
@@ -178,3 +178,19 @@ void autoTypes()
auto c = Bar(); (void)c;
auto d = Zii<int>(); (void)d;
}
+
+
+
+
+struct Con {};
+struct ExplicitCon {
+ ExplicitCon() = default;
+ ExplicitCon(int m) :member(m) {}
+ int member;
+};
+void constructor()
+{
+ Con();
+ ExplicitCon();
+ ExplicitCon(2);
+}