From 0423169bd40190a38b41bf7113bf012fcee37aa1 Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Thu, 25 Mar 2010 14:11:23 +0100
Subject: [PATCH] Update Qml parser.

---
 src/libs/qmljs/parser/cmd.sed          |  1 +
 src/libs/qmljs/parser/gen-parser.sh    |  2 +-
 src/libs/qmljs/parser/qmldirparser.cpp | 15 ++++++++++++++-
 src/libs/qmljs/parser/qmldirparser_p.h | 10 +++++++---
 src/libs/qmljs/parser/qmljsparser.cpp  |  4 +++-
 5 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/src/libs/qmljs/parser/cmd.sed b/src/libs/qmljs/parser/cmd.sed
index 740da4e3d1a..fd76d634419 100644
--- a/src/libs/qmljs/parser/cmd.sed
+++ b/src/libs/qmljs/parser/cmd.sed
@@ -1,6 +1,7 @@
 s/qdeclarative/qml/g
 s/QDECLARATIVE/QML/g
 s/QDeclarative/Qml/g
+s/Q_DECLARATIVE_EXPORT //g
 
 # adjust pri file
 s/    \$\$PWD\/qmljsglobal_p.h/    $$PWD\/qmljsglobal_p.h \\\
diff --git a/src/libs/qmljs/parser/gen-parser.sh b/src/libs/qmljs/parser/gen-parser.sh
index 5b999e27f15..7123511b2ca 100755
--- a/src/libs/qmljs/parser/gen-parser.sh
+++ b/src/libs/qmljs/parser/gen-parser.sh
@@ -11,4 +11,4 @@ for i in $QTDIR/src/declarative/qml/qdeclarative{error.{h,cpp},dirparser{_p.h,.c
 done
 
 # export QmlDirParser
-perl -p -0777 -i -e 's/QT_BEGIN_NAMESPACE\n\nclass QmlError;\n\nclass QmlDirParser/#include "qmljsglobal_p.h"\n\nQT_BEGIN_NAMESPACE\n\nclass QmlError;\n\nclass QML_PARSER_EXPORT QmlDirParser/' qmldirparser_p.h
+perl -p -0777 -i -e 's/QT_BEGIN_NAMESPACE\n\nclass QmlError;\nclass QmlDirParser/#include "qmljsglobal_p.h"\n\nQT_BEGIN_NAMESPACE\n\nclass QmlError;\nclass QML_PARSER_EXPORT QmlDirParser/' qmldirparser_p.h
diff --git a/src/libs/qmljs/parser/qmldirparser.cpp b/src/libs/qmljs/parser/qmldirparser.cpp
index 60beb720978..86ca9f6a60a 100644
--- a/src/libs/qmljs/parser/qmldirparser.cpp
+++ b/src/libs/qmljs/parser/qmldirparser.cpp
@@ -151,13 +151,26 @@ bool QmlDirParser::parse()
 
             _plugins.append(entry);
 
+        } else if (sections[0] == QLatin1String("internal")) {
+            if (sectionCount != 3) {
+                reportError(lineNumber, -1,
+                            QString::fromUtf8("internal types require 2 arguments, but %1 were provided").arg(sectionCount + 1));
+                continue;
+            }
+            Component entry(sections[1], sections[2], -1, -1);
+            entry.internal = true;
+            _components.append(entry);
+
+        } else if (sectionCount == 2) {
+            // No version specified (should only be used for relative qmldir files)
+            const Component entry(sections[0], sections[1], -1, -1);
+            _components.append(entry);
         } else if (sectionCount == 3) {
             const QString &version = sections[1];
             const int dotIndex = version.indexOf(QLatin1Char('.'));
 
             if (dotIndex == -1) {
                 qWarning() << "expected '.'"; // ### use reportError
-
             } else if (version.indexOf(QLatin1Char('.'), dotIndex + 1) != -1) {
                 qWarning() << "unexpected '.'"; // ### use reportError
 
diff --git a/src/libs/qmljs/parser/qmldirparser_p.h b/src/libs/qmljs/parser/qmldirparser_p.h
index 8ab6095c382..07c783ffcf0 100644
--- a/src/libs/qmljs/parser/qmldirparser_p.h
+++ b/src/libs/qmljs/parser/qmldirparser_p.h
@@ -61,7 +61,6 @@
 QT_BEGIN_NAMESPACE
 
 class QmlError;
-
 class QML_PARSER_EXPORT QmlDirParser
 {
     Q_DISABLE_COPY(QmlDirParser)
@@ -96,15 +95,17 @@ public:
     struct Component
     {
         Component()
-            : majorVersion(0), minorVersion(0) {}
+            : majorVersion(0), minorVersion(0), internal(false) {}
 
         Component(const QString &typeName, const QString &fileName, int majorVersion, int minorVersion)
-            : typeName(typeName), fileName(fileName), majorVersion(majorVersion), minorVersion(minorVersion) {}
+            : typeName(typeName), fileName(fileName), majorVersion(majorVersion), minorVersion(minorVersion),
+            internal(false) {}
 
         QString typeName;
         QString fileName;
         int majorVersion;
         int minorVersion;
+        bool internal;
     };
 
     QList<Component> components() const;
@@ -122,6 +123,9 @@ private:
     unsigned _isParsed: 1;
 };
 
+typedef QList<QmlDirParser::Component> QmlDirComponents;
+
+
 QT_END_NAMESPACE
 
 #endif // QMLDIRPARSER_P_H
diff --git a/src/libs/qmljs/parser/qmljsparser.cpp b/src/libs/qmljs/parser/qmljsparser.cpp
index 71050e1cda1..5e12f8543cd 100644
--- a/src/libs/qmljs/parser/qmljsparser.cpp
+++ b/src/libs/qmljs/parser/qmljsparser.cpp
@@ -284,7 +284,9 @@ case 20: {
 
     sym(1).Node = node;
 
-    if (! node) {
+    if (node) {
+        node->importToken = loc(1);
+    } else {
        diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1),
          QLatin1String("Expected a qualified name id or a string literal")));
 
-- 
GitLab