aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlscript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/qqmlscript.cpp')
-rw-r--r--src/qml/qml/qqmlscript.cpp63
1 files changed, 36 insertions, 27 deletions
diff --git a/src/qml/qml/qqmlscript.cpp b/src/qml/qml/qqmlscript.cpp
index 05882f313d..b1a50a4f9a 100644
--- a/src/qml/qml/qqmlscript.cpp
+++ b/src/qml/qml/qqmlscript.cpp
@@ -451,22 +451,6 @@ QStringList QQmlScript::Variant::asStringList() const
//
// Actual parser classes
//
-void QQmlScript::Import::extractVersion(int *maj, int *min) const
-{
- *maj = -1; *min = -1;
-
- if (!version.isEmpty()) {
- int dot = version.indexOf(QLatin1Char('.'));
- if (dot < 0) {
- *maj = version.toInt();
- *min = 0;
- } else {
- *maj = version.left(dot).toInt();
- *min = version.mid(dot+1).toInt();
- }
- }
-}
-
namespace {
class ProcessAST: protected AST::Visitor
@@ -526,6 +510,8 @@ public:
void operator()(const QString &code, AST::Node *node);
+ static void extractVersion(QStringRef string, int *maj, int *min);
+
protected:
QQmlScript::Object *defineObjectBinding(AST::UiQualifiedId *propertyName, bool onAssignment,
@@ -661,6 +647,26 @@ QString ProcessAST::qualifiedNameId() const
return _scope.join(QLatin1String("/"));
}
+void ProcessAST::extractVersion(QStringRef string, int *maj, int *min)
+{
+ *maj = -1; *min = -1;
+
+ if (!string.isEmpty()) {
+
+ int dot = string.indexOf(QLatin1Char('.'));
+
+ if (dot < 0) {
+ *maj = string.toString().toInt();
+ *min = 0;
+ } else {
+ const QString *s = string.string();
+ int p = string.position();
+ *maj = QStringRef(s, p, dot).toString().toInt();
+ *min = QStringRef(s, p + dot + 1, string.size() - dot - 1).toString().toInt();
+ }
+ }
+}
+
QString ProcessAST::asString(AST::UiQualifiedId *node) const
{
QString s;
@@ -898,7 +904,7 @@ bool ProcessAST::visit(AST::UiImport *node)
}
if (node->versionToken.isValid()) {
- import.version = textAt(node->versionToken);
+ extractVersion(textRefAt(node->versionToken), &import.majorVersion, &import.minorVersion);
} else if (import.type == QQmlScript::Import::Library) {
QQmlError error;
error.setDescription(QCoreApplication::translate("QQmlParser","Library import requires a version"));
@@ -1290,8 +1296,13 @@ public:
};
}
-bool QQmlScript::Parser::parse(const QByteArray &qmldata, const QUrl &url,
- const QString &urlString)
+QByteArray QQmlScript::Parser::preparseData() const
+{
+ return QByteArray();
+}
+
+bool QQmlScript::Parser::parse(const QString &qmlcode, const QByteArray &preparseData,
+ const QUrl &url, const QString &urlString)
{
clear();
@@ -1302,11 +1313,7 @@ bool QQmlScript::Parser::parse(const QByteArray &qmldata, const QUrl &url,
_scriptFile = urlString;
}
- QTextStream stream(qmldata, QIODevice::ReadOnly);
-#ifndef QT_NO_TEXTCODEC
- stream.setCodec("UTF-8");
-#endif
- QString *code = _pool.NewString(stream.readAll());
+ QString *code = _pool.NewString(qmlcode);
data = new QQmlScript::ParserJsASTData(_scriptFile);
@@ -1573,7 +1580,6 @@ QQmlScript::Parser::JavaScriptMetaData QQmlScript::Parser::extractMetaData(QStri
} else {
// URI
QString uri;
- QString version;
while (true) {
if (!isUriToken(token))
@@ -1593,7 +1599,9 @@ QQmlScript::Parser::JavaScriptMetaData QQmlScript::Parser::extractMetaData(QStri
}
CHECK_TOKEN(T_NUMERIC_LITERAL);
- version = script.mid(l.tokenOffset(), l.tokenLength());
+ int vmaj, vmin;
+ ProcessAST::extractVersion(QStringRef(&script, l.tokenOffset(), l.tokenLength()),
+ &vmaj, &vmin);
token = l.lex();
@@ -1624,7 +1632,8 @@ QQmlScript::Parser::JavaScriptMetaData QQmlScript::Parser::extractMetaData(QStri
Import import;
import.type = Import::Library;
import.uri = uri;
- import.version = version;
+ import.majorVersion = vmaj;
+ import.minorVersion = vmin;
import.qualifier = importId;
import.location = location;