diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-02-20 16:54:35 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-03-18 11:00:31 +0100 |
commit | c5b48c735e1c26444e53c4ea7dc6df4c57b5e9b4 (patch) | |
tree | 42ee42ccf75a6a5ed24b303fd70d37af157dc905 /src | |
parent | 36fb7cf832e801a7b3718fa443ec2f1b83e0fea2 (diff) |
Also support partly specified versions in JS .imports
Task-number: QTBUG-71278
Change-Id: Ie3167d44780a192b5010052eea5192eee8c21c32
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/compiler/qqmlirbuilder.cpp | 2 | ||||
-rw-r--r-- | src/qml/parser/qqmljslexer.cpp | 37 |
2 files changed, 18 insertions, 21 deletions
diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp index 0316e54c09..1717fb18f8 100644 --- a/src/qml/compiler/qqmlirbuilder.cpp +++ b/src/qml/compiler/qqmlirbuilder.cpp @@ -1052,7 +1052,7 @@ QTypeRevision IRBuilder::extractVersion(const QStringRef &string) const int dot = string.indexOf(QLatin1Char('.')); return (dot < 0) - ? QTypeRevision::fromVersion(string.toInt(), 0) + ? QTypeRevision::fromMajorVersion(string.toInt()) : QTypeRevision::fromVersion(string.left(dot).toInt(), string.mid(dot + 1).toInt()); } diff --git a/src/qml/parser/qqmljslexer.cpp b/src/qml/parser/qqmljslexer.cpp index 243fc5bd30..4f694447bb 100644 --- a/src/qml/parser/qqmljslexer.cpp +++ b/src/qml/parser/qqmljslexer.cpp @@ -1538,9 +1538,10 @@ bool Lexer::scanDirectives(Directives *directives, DiagnosticMessage *error) setError(QCoreApplication::translate("QQmlParser","Imported file must be a script")); return false; } + lex(); } else if (_tokenKind == T_IDENTIFIER) { - // .import T_IDENTIFIER (. T_IDENTIFIER)* T_VERSION_NUMBER . T_VERSION_NUMBER as T_IDENTIFIER + // .import T_IDENTIFIER (. T_IDENTIFIER)* (T_VERSION_NUMBER (. T_VERSION_NUMBER)?)? as T_IDENTIFIER while (true) { if (!isUriToken(_tokenKind)) { setError(QCoreApplication::translate("QQmlParser","Invalid module URI")); @@ -1566,31 +1567,27 @@ bool Lexer::scanDirectives(Directives *directives, DiagnosticMessage *error) } } - if (_tokenKind != T_VERSION_NUMBER) { - setError(QCoreApplication::translate("QQmlParser","Module import requires a version")); - return false; // expected the module version number - } - - version = tokenText(); - lex(); - if (_tokenKind != T_DOT) { - setError(QCoreApplication::translate( "QQmlParser", "Module import requires a minor version (missing dot)")); - return false; // expected the module version number - } - version += QLatin1Char('.'); - - lex(); - if (_tokenKind != T_VERSION_NUMBER) { - setError(QCoreApplication::translate( "QQmlParser", "Module import requires a minor version (missing number)")); - return false; // expected the module version number + if (_tokenKind == T_VERSION_NUMBER) { + version = tokenText(); + lex(); + if (_tokenKind == T_DOT) { + version += QLatin1Char('.'); + lex(); + if (_tokenKind != T_VERSION_NUMBER) { + setError(QCoreApplication::translate( + "QQmlParser", "Incomplete version number (dot but no minor)")); + return false; // expected the module version number + } + version += tokenText(); + lex(); + } } - version += tokenText(); } // // recognize the mandatory `as' followed by the module name // - if (! (lex() == T_AS && tokenStartLine() == lineNumber)) { + if (! (_tokenKind == T_AS && tokenStartLine() == lineNumber)) { if (fileImport) setError(QCoreApplication::translate("QQmlParser", "File import requires a qualifier")); else |