From ba6f55ed9481960b4f6c7f0a6b8f1cf7d450c752 Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 24 Aug 2022 12:05:19 -0700 Subject: Allow `static const` interface requirements. (#2378) --- source/slang/slang-check-expr.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'source/slang/slang-check-expr.cpp') diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp index 8e14af72a..e33d26c0c 100644 --- a/source/slang/slang-check-expr.cpp +++ b/source/slang/slang-check-expr.cpp @@ -982,7 +982,7 @@ namespace Slang || opName == getName("|") || opName == getName("&") || opName == getName("^") || opName == getName("~") || opName == getName("%") || opName == getName("?:") || opName == getName("<<") || opName == getName(">>")) { - auto result = m_astBuilder->create(); + auto result = m_astBuilder->create(); result->args.addRange(argVals, argCount); result->funcDeclRef = funcDeclRef; result->funcType = as(funcDeclRefExpr.getExpr()->type->substitute( @@ -1131,6 +1131,22 @@ namespace Slang if(!decl->hasModifier()) return nullptr; + if (isInterfaceRequirement(decl)) + { + for (auto subst = declRef.substitutions.substitutions; subst; subst = subst->outer) + { + if (auto thisTypeSubst = as(subst)) + { + auto val = WitnessLookupIntVal::tryFold( + m_astBuilder, + thisTypeSubst->witness, + decl, + declRef.substitute(m_astBuilder, decl->type.type)); + return as(val); + } + } + } + auto initExpr = getInitExpr(m_astBuilder, declRef); if(!initExpr) return nullptr; -- cgit v1.2.3