summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-11-29 11:44:47 -0800
committerGitHub <noreply@github.com>2022-11-29 11:44:47 -0800
commitd60c925229cf911b0363bf9d5e25a6f73c6d5737 (patch)
tree722cbb05928cb357abcaa5a483ede66fd696195a /source
parenta54471a1ac25cd40c2eca60d784909e566aff4aa (diff)
Bug fix: partially specialized non-static generic invoke missing `this` argument. (#2536)
* Fix non-static generic func call issue. * Add test case. * Revert unnecessary change. * Update test comment. Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-check-expr.cpp8
-rw-r--r--source/slang/slang-check-overload.cpp2
2 files changed, 9 insertions, 1 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp
index 2c6899269..1f0e1a2dc 100644
--- a/source/slang/slang-check-expr.cpp
+++ b/source/slang/slang-check-expr.cpp
@@ -1054,6 +1054,14 @@ namespace Slang
{
return overloadedExpr2->base;
}
+ else if (auto genApp = as<GenericAppExpr>(expr))
+ {
+ return GetBaseExpr(genApp->functionExpr);
+ }
+ else if (auto partiallyApplied = as<PartiallyAppliedGenericExpr>(expr))
+ {
+ return GetBaseExpr(partiallyApplied->originalExpr);
+ }
return nullptr;
}
diff --git a/source/slang/slang-check-overload.cpp b/source/slang/slang-check-overload.cpp
index 3867dda03..911587fd5 100644
--- a/source/slang/slang-check-overload.cpp
+++ b/source/slang/slang-check-overload.cpp
@@ -729,7 +729,7 @@ namespace Slang
{
auto expr = m_astBuilder->create<PartiallyAppliedGenericExpr>();
expr->loc = context.loc;
- expr->originalExpr = originalAppExpr;
+ expr->originalExpr = baseExpr;
expr->baseGenericDeclRef = as<DeclRefExpr>(baseExpr)->declRef.as<GenericDecl>();
expr->substWithKnownGenericArgs = (GenericSubstitution*)candidate.subst;
return expr;