diff options
| author | Yong He <yonghe@outlook.com> | 2023-11-28 09:15:31 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-28 09:15:31 -0800 |
| commit | 62426e94ef11fd6baa213757f87114ec174b406e (patch) | |
| tree | 620b539efe2f01bfc213953a4893d09635093653 /source | |
| parent | a2083d64fec7732195e533b6a2ed7d05cc9beedc (diff) | |
Misc language server fixes. (#3357)
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-ast-print.cpp | 14 | ||||
| -rw-r--r-- | source/slang/slang-check-decl.cpp | 6 | ||||
| -rw-r--r-- | source/slang/slang-language-server.cpp | 16 |
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); |
