aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qdeclarativescriptparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/qml/qdeclarativescriptparser.cpp')
-rw-r--r--src/declarative/qml/qdeclarativescriptparser.cpp47
1 files changed, 42 insertions, 5 deletions
diff --git a/src/declarative/qml/qdeclarativescriptparser.cpp b/src/declarative/qml/qdeclarativescriptparser.cpp
index e04cfc52af..352e341437 100644
--- a/src/declarative/qml/qdeclarativescriptparser.cpp
+++ b/src/declarative/qml/qdeclarativescriptparser.cpp
@@ -59,6 +59,22 @@ QT_BEGIN_NAMESPACE
using namespace QDeclarativeJS;
using namespace QDeclarativeParser;
+void QDeclarativeScriptParser::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
@@ -896,6 +912,19 @@ static void replaceWithSpace(QString &str, int idx, int n)
*data++ = space;
}
+static QDeclarativeParser::LocationSpan
+locationFromLexer(const QDeclarativeJS::Lexer &lex, int startLine, int startColumn, int startOffset)
+{
+ QDeclarativeParser::LocationSpan l;
+
+ l.start.line = startLine; l.start.column = startColumn;
+ l.end.line = lex.endLineNo(); l.end.column = lex.endColumnNo();
+ l.range.offset = startOffset;
+ l.range.length = lex.tokenOffset() + lex.tokenLength() - startOffset;
+
+ return l;
+}
+
/*
Searches for ".pragma <value>" declarations within \a script. Currently supported pragmas
are:
@@ -1024,7 +1053,8 @@ QDeclarativeScriptParser::JavaScriptMetaData QDeclarativeScriptParser::extractMe
return rv;
int startOffset = l.tokenOffset();
- int startLine = l.currentLineNo();
+ int startLine = l.startLineNo();
+ int startColumn = l.startColumnNo();
token = l.lex();
@@ -1062,8 +1092,11 @@ QDeclarativeScriptParser::JavaScriptMetaData QDeclarativeScriptParser::extractMe
if (!importId.at(0).isUpper())
return rv;
+ QDeclarativeParser::LocationSpan location =
+ locationFromLexer(l, startLine, startColumn, startOffset);
+
token = l.lex();
- if (l.currentLineNo() == startLine)
+ if (l.startLineNo() == startLine)
return rv;
replaceWithSpace(script, startOffset, endOffset - startOffset);
@@ -1072,9 +1105,9 @@ QDeclarativeScriptParser::JavaScriptMetaData QDeclarativeScriptParser::extractMe
import.type = Import::Script;
import.uri = file;
import.qualifier = importId;
+ import.location = location;
rv.imports << import;
-
} else {
// URI
QString uri;
@@ -1117,8 +1150,11 @@ QDeclarativeScriptParser::JavaScriptMetaData QDeclarativeScriptParser::extractMe
if (!importId.at(0).isUpper())
return rv;
+ QDeclarativeParser::LocationSpan location =
+ locationFromLexer(l, startLine, startColumn, startOffset);
+
token = l.lex();
- if (l.currentLineNo() == startLine)
+ if (l.startLineNo() == startLine)
return rv;
replaceWithSpace(script, startOffset, endOffset - startOffset);
@@ -1128,6 +1164,7 @@ QDeclarativeScriptParser::JavaScriptMetaData QDeclarativeScriptParser::extractMe
import.uri = uri;
import.version = version;
import.qualifier = importId;
+ import.location = location;
rv.imports << import;
}
@@ -1143,7 +1180,7 @@ QDeclarativeScriptParser::JavaScriptMetaData QDeclarativeScriptParser::extractMe
QString pragmaValue = script.mid(l.tokenOffset(), l.tokenLength());
int endOffset = l.tokenLength() + l.tokenOffset();
- if (pragmaValue == QLatin1String("library")) {
+ if (pragmaValue == library) {
pragmas |= QDeclarativeParser::Object::ScriptBlock::Shared;
replaceWithSpace(script, startOffset, endOffset - startOffset);
} else {