summaryrefslogtreecommitdiffstats
path: root/source/slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-11-28 09:15:31 -0800
committerGitHub <noreply@github.com>2023-11-28 09:15:31 -0800
commit62426e94ef11fd6baa213757f87114ec174b406e (patch)
tree620b539efe2f01bfc213953a4893d09635093653 /source/slang
parenta2083d64fec7732195e533b6a2ed7d05cc9beedc (diff)
Misc language server fixes. (#3357)
Diffstat (limited to 'source/slang')
-rw-r--r--source/slang/slang-ast-print.cpp14
-rw-r--r--source/slang/slang-check-decl.cpp6
-rw-r--r--source/slang/slang-language-server.cpp16
3 files changed, 33 insertions, 3 deletions
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<AttributeTargetModifier>(modifier))
continue;
+ if (as<RequiredCUDASMVersionModifier>(modifier))
+ continue;
+ if (as<RequiredSPIRVVersionModifier>(modifier))
+ continue;
+ if (as<RequiredGLSLVersionModifier>(modifier))
+ continue;
+ if (as<RequiredGLSLExtensionModifier>(modifier))
+ continue;
+ if (as<GLSLLayoutModifier>(modifier))
+ continue;
+ if (as<GLSLLayoutModifierGroupMarker>(modifier))
+ continue;
+ if (as<HLSLLayoutSemantic>(modifier))
+ continue;
}
// Don't print out attributes.
if (as<AttributeBase>(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<DeclRefExpr>(appExpr->originalFunctionExpr))
+ {
+ if (!originalDeclRefExpr->declRef)
+ {
+ useOriginalExpr = false;
+ }
+ }
+ if (useOriginalExpr)
+ funcExpr = appExpr->originalFunctionExpr;
+ }
if (!funcExpr)
{
m_connection->sendResult(NullResponse::get(), responseId);