summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-overload.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-overload.cpp')
-rw-r--r--source/slang/slang-check-overload.cpp33
1 files changed, 26 insertions, 7 deletions
diff --git a/source/slang/slang-check-overload.cpp b/source/slang/slang-check-overload.cpp
index 41aa94a35..92d390bf0 100644
--- a/source/slang/slang-check-overload.cpp
+++ b/source/slang/slang-check-overload.cpp
@@ -1261,9 +1261,9 @@ namespace Slang
if (!first) sb << ", ";
first = false;
- formatType(sb, GetType(genericValParam));
- sb << " ";
sb << getText(genericValParam.GetName());
+ sb << ":";
+ formatType(sb, GetType(genericValParam));
}
else
{}
@@ -1279,14 +1279,24 @@ namespace Slang
static void formatDeclKindPrefix(StringBuilder& sb, Decl* decl)
{
+ if(auto genericDecl = as<GenericDecl>(decl))
+ {
+ decl = genericDecl->inner;
+ }
if(as<FuncDecl>(decl))
{
sb << "func ";
}
}
- void SemanticsVisitor::formatDeclResultType(StringBuilder& sb, DeclRef<Decl> const& declRef)
+ void SemanticsVisitor::formatDeclResultType(StringBuilder& sb, DeclRef<Decl> const& inDeclRef)
{
+ DeclRef<Decl> declRef = inDeclRef;
+ if(auto genericDeclRef = declRef.as<GenericDecl>())
+ {
+ declRef = DeclRef<Decl>(GetInner(genericDeclRef), genericDeclRef.substitutions);
+ }
+
if(as<ConstructorDecl>(declRef))
{}
else if(auto callableDeclRef = declRef.as<CallableDecl>())
@@ -1434,10 +1444,19 @@ namespace Slang
}
Name* funcName = nullptr;
- if (auto baseVar = as<VarExpr>(funcExpr))
- funcName = baseVar->name;
- else if(auto baseMemberRef = as<MemberExpr>(funcExpr))
- funcName = baseMemberRef->name;
+ {
+ Expr* baseExpr = funcExpr;
+
+ if(auto baseGenericApp = as<GenericAppExpr>(baseExpr))
+ baseExpr = baseGenericApp->FunctionExpr;
+
+ if (auto baseVar = as<VarExpr>(baseExpr))
+ funcName = baseVar->name;
+ else if(auto baseMemberRef = as<MemberExpr>(baseExpr))
+ funcName = baseMemberRef->name;
+ else if(auto baseOverloaded = as<OverloadedExpr>(baseExpr))
+ funcName = baseOverloaded->name;
+ }
String argsList = getCallSignatureString(context);