From 46529df2c4f73a4655bdd79d48004f29374a99a8 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 6 Nov 2023 14:40:38 -0800 Subject: Fix ICE when lowering an associatedtype declref from an derived interface. (#3312) * Fix ICE when lowering an associatedtype declref from an derived interface. * Fixes. * Fix test. * Fix GLSL/SPIRV image subscript swizzle store regression. * Fix. --------- Co-authored-by: Yong He --- source/slang/slang-language-server.cpp | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'source/slang/slang-language-server.cpp') diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp index 7f8338b1b..e550b23d2 100644 --- a/source/slang/slang-language-server.cpp +++ b/source/slang/slang-language-server.cpp @@ -642,10 +642,26 @@ SlangResult LanguageServer::hover( } } }; + auto fillLoc = [&](SourceLoc loc) + { + auto humaneLoc = version->linkage->getSourceManager()->getHumaneLoc(loc, SourceLocType::Actual); + hover.range.start.line = int(humaneLoc.line - 1); + hover.range.end.line = int(humaneLoc.line - 1); + hover.range.start.character = int(humaneLoc.column - 1); + hover.range.end.character = hover.range.start.character + int(doc->getTokenLength(humaneLoc.line, humaneLoc.column)); + }; auto fillExprHoverInfo = [&](Expr* expr) { if (auto declRefExpr = as(expr)) return fillDeclRefHoverInfo(declRefExpr->declRef); + else if (auto thisExpr = as(expr)) + { + if (expr->type) + { + sb << "```\n" << expr->type->toString() << " this" << "\n```\n"; + } + fillLoc(expr->loc); + } if (const auto higherOrderExpr = as(expr)) { String documentation; @@ -657,12 +673,7 @@ SlangResult LanguageServer::hover( << "\n```\n"; sb << documentation; maybeAppendAdditionalOverloadsHint(); - auto humaneLoc = version->linkage->getSourceManager()->getHumaneLoc( - expr->loc, SourceLocType::Actual); - hover.range.start.line = int(humaneLoc.line - 1); - hover.range.end.line = int(humaneLoc.line - 1); - hover.range.start.character = int(humaneLoc.column - 1); - hover.range.end.character = hover.range.start.character + int(doc->getTokenLength(humaneLoc.line, humaneLoc.column)); + fillLoc(expr->loc); } }; if (auto declRefExpr = as(leafNode)) @@ -686,6 +697,10 @@ SlangResult LanguageServer::hover( { fillExprHoverInfo(higherOrderExpr); } + else if (auto thisExprExpr = as(leafNode)) + { + fillExprHoverInfo(thisExprExpr); + } else if (auto importDecl = as(leafNode)) { auto moduleLoc = getModuleLoc(version->linkage->getSourceManager(), importDecl->importedModuleDecl); -- cgit v1.2.3