From 62426e94ef11fd6baa213757f87114ec174b406e Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 28 Nov 2023 09:15:31 -0800 Subject: Misc language server fixes. (#3357) --- source/slang/slang-ast-print.cpp | 14 ++++++++++++++ source/slang/slang-check-decl.cpp | 6 +++++- source/slang/slang-language-server.cpp | 16 ++++++++++++++-- 3 files changed, 33 insertions(+), 3 deletions(-) (limited to 'source') diff --git a/source/slang/slang-ast-print.cpp b/source/slang/slang-ast-print.cpp index b80afeee1..d3e028901 100644 --- a/source/slang/slang-ast-print.cpp +++ b/source/slang/slang-ast-print.cpp @@ -365,6 +365,20 @@ void ASTPrinter::addDeclKindPrefix(Decl* decl) continue; if (as(modifier)) continue; + if (as(modifier)) + continue; + if (as(modifier)) + continue; + if (as(modifier)) + continue; + if (as(modifier)) + continue; + if (as(modifier)) + continue; + if (as(modifier)) + continue; + if (as(modifier)) + continue; } // Don't print out attributes. if (as(modifier)) diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp index c31c94a85..7c36bdd5f 100644 --- a/source/slang/slang-check-decl.cpp +++ b/source/slang/slang-check-decl.cpp @@ -7346,6 +7346,10 @@ namespace Slang visitor->getSink()->diagnose(attr, Diagnostics::cannotUseInterfaceRequirementAsDerivative); return; } + if (funcType->getParamCount() != imaginaryArguments.getCount()) + { + goto error; + } for (Index ii = 0; ii < imaginaryArguments.getCount(); ++ii) { // Check if the resolved invoke argument type is an error type. @@ -7403,7 +7407,7 @@ namespace Slang return; } } - + error:; // Build the expected signature from imaginary args to diagnose // when no matching function is found (this excludes the case handled above) // diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp index 24ab534ab..c188142f5 100644 --- a/source/slang/slang-language-server.cpp +++ b/source/slang/slang-language-server.cpp @@ -1255,8 +1255,20 @@ SlangResult LanguageServer::signatureHelp( return SLANG_OK; } - auto funcExpr = - appExpr->originalFunctionExpr ? appExpr->originalFunctionExpr : appExpr->functionExpr; + auto funcExpr = appExpr->functionExpr; + if (appExpr->originalFunctionExpr) + { + bool useOriginalExpr = true; + if (auto originalDeclRefExpr = as(appExpr->originalFunctionExpr)) + { + if (!originalDeclRefExpr->declRef) + { + useOriginalExpr = false; + } + } + if (useOriginalExpr) + funcExpr = appExpr->originalFunctionExpr; + } if (!funcExpr) { m_connection->sendResult(NullResponse::get(), responseId); -- cgit v1.2.3