diff options
| author | Yong He <yonghe@outlook.com> | 2023-11-06 14:40:38 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-06 14:40:38 -0800 |
| commit | 46529df2c4f73a4655bdd79d48004f29374a99a8 (patch) | |
| tree | 801e69e70a47ce702c055df68ada41a38158367b /source/slang/slang-language-server.cpp | |
| parent | da9e0adb5cf2b1bed6075a3afe93cfdcceabe904 (diff) | |
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 <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-language-server.cpp')
| -rw-r--r-- | source/slang/slang-language-server.cpp | 27 |
1 files changed, 21 insertions, 6 deletions
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<DeclRefExpr>(expr)) return fillDeclRefHoverInfo(declRefExpr->declRef); + else if (auto thisExpr = as<ThisExpr>(expr)) + { + if (expr->type) + { + sb << "```\n" << expr->type->toString() << " this" << "\n```\n"; + } + fillLoc(expr->loc); + } if (const auto higherOrderExpr = as<HigherOrderInvokeExpr>(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<DeclRefExpr>(leafNode)) @@ -686,6 +697,10 @@ SlangResult LanguageServer::hover( { fillExprHoverInfo(higherOrderExpr); } + else if (auto thisExprExpr = as<ThisExpr>(leafNode)) + { + fillExprHoverInfo(thisExprExpr); + } else if (auto importDecl = as<ImportDecl>(leafNode)) { auto moduleLoc = getModuleLoc(version->linkage->getSourceManager(), importDecl->importedModuleDecl); |
