diff options
Diffstat (limited to 'src/declarative/qml/qdeclarativescriptparser.cpp')
-rw-r--r-- | src/declarative/qml/qdeclarativescriptparser.cpp | 47 |
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 { |