From 4d7c64426869ca21be9a69401c18bbb2d11e12cc Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Thu, 10 Oct 2019 11:05:40 +0200 Subject: [PATCH] Fix parsing of QML version tokens in the presence of "as Foo" The previous code would omit the minor version, leading to a test failure. Change-Id: I3dccee5252a54806f8e1e5bf5c49eff149d9b936 Reviewed-by: Fabian Kosmale Reviewed-by: Thomas Hartmann --- src/libs/qmljs/parser/qmljs.g | 9 +++++++-- src/libs/qmljs/parser/qmljsparser.cpp | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/libs/qmljs/parser/qmljs.g b/src/libs/qmljs/parser/qmljs.g index c9dd6dae52b..e0f7b92a23e 100644 --- a/src/libs/qmljs/parser/qmljs.g +++ b/src/libs/qmljs/parser/qmljs.g @@ -863,8 +863,13 @@ UiImport: UiImportHead UiVersionSpecifier Semicolon; UiImport: UiImportHead UiVersionSpecifier T_AS QmlIdentifier Semicolon; /. case $rule_number: { - sym(1).UiImport->versionToken = loc(2); - sym(1).UiImport->version = sym(2).UiVersionSpecifier; + auto versionToken = loc(2); + auto version = sym(2).UiVersionSpecifier; + sym(1).UiImport->version = version; + if (version->minorToken.isValid()) { + versionToken.length += version->minorToken.length + (version->minorToken.offset - versionToken.offset - versionToken.length); + } + sym(1).UiImport->versionToken = versionToken; sym(1).UiImport->asToken = loc(3); sym(1).UiImport->importIdToken = loc(4); sym(1).UiImport->importId = stringRef(4); diff --git a/src/libs/qmljs/parser/qmljsparser.cpp b/src/libs/qmljs/parser/qmljsparser.cpp index 7c112e5b923..694ca208cc4 100644 --- a/src/libs/qmljs/parser/qmljsparser.cpp +++ b/src/libs/qmljs/parser/qmljsparser.cpp @@ -398,8 +398,13 @@ bool Parser::parse(int startToken) #line 866 "qmljs.g" case 22: { - sym(1).UiImport->versionToken = loc(2); - sym(1).UiImport->version = sym(2).UiVersionSpecifier; + auto versionToken = loc(2); + auto version = sym(2).UiVersionSpecifier; + sym(1).UiImport->version = version; + if (version->minorToken.isValid()) { + versionToken.length += version->minorToken.length + (version->minorToken.offset - versionToken.offset - versionToken.length); + } + sym(1).UiImport->versionToken = versionToken; sym(1).UiImport->asToken = loc(3); sym(1).UiImport->importIdToken = loc(4); sym(1).UiImport->importId = stringRef(4);