From d60c925229cf911b0363bf9d5e25a6f73c6d5737 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 29 Nov 2022 11:44:47 -0800 Subject: 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 --- source/slang/slang-check-expr.cpp | 8 ++++++++ source/slang/slang-check-overload.cpp | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'source') 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(expr)) + { + return GetBaseExpr(genApp->functionExpr); + } + else if (auto partiallyApplied = as(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(); expr->loc = context.loc; - expr->originalExpr = originalAppExpr; + expr->originalExpr = baseExpr; expr->baseGenericDeclRef = as(baseExpr)->declRef.as(); expr->substWithKnownGenericArgs = (GenericSubstitution*)candidate.subst; return expr; -- cgit v1.2.3