From b5f4cf63a8b952731053a0d04af0fc8c946d86f3 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 2 Apr 2024 11:51:36 -0700 Subject: Allow enum values to be used as generic arguments. (#3874) * Allow enum values to be used as generic arguments. * Fix constant folding. --- source/slang/slang-check-expr.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (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 d3341e87b..ff5dd4af5 100644 --- a/source/slang/slang-check-expr.cpp +++ b/source/slang/slang-check-expr.cpp @@ -1768,7 +1768,10 @@ namespace Slang return nullptr; ConstantFoldingCircularityInfo newCircularityInfo(enumCaseDecl, circularityInfo); - return tryConstantFoldExpr(tagExpr, kind, &newCircularityInfo); + auto intVal = as(tryConstantFoldExpr(tagExpr, kind, &newCircularityInfo)); + if (!intVal) + return nullptr; + return as(m_astBuilder->getTypeCastIntVal(enumCaseDecl->getType(), intVal)->resolve()); } } } @@ -1778,7 +1781,7 @@ namespace Slang auto substType = getType(m_astBuilder, expr); if (!substType) return nullptr; - if (!isScalarIntegerType(substType)) + if (!isValidCompileTimeConstantType(substType)) return nullptr; auto val = tryConstantFoldExpr(getArg(castExpr, 0), kind, circularityInfo); if (val) @@ -1826,7 +1829,7 @@ namespace Slang { // Check if type is acceptable for an integer constant expression // - if(!isScalarIntegerType(getType(m_astBuilder, expr))) + if(!isValidCompileTimeConstantType(getType(m_astBuilder, expr))) return nullptr; // Consider operations that we might be able to constant-fold... -- cgit v1.2.3