summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-check-constraint.cpp4
-rw-r--r--source/slang/slang-mangle.cpp18
2 files changed, 22 insertions, 0 deletions
diff --git a/source/slang/slang-check-constraint.cpp b/source/slang/slang-check-constraint.cpp
index 42d01a996..f0df78c43 100644
--- a/source/slang/slang-check-constraint.cpp
+++ b/source/slang/slang-check-constraint.cpp
@@ -540,8 +540,12 @@ namespace Slang
// Check if both are integer values in general
if (auto fstInt = as<IntVal>(fst))
{
+ if (auto tc = as<TypeCastIntVal>(fstInt))
+ fstInt = as<IntVal>(tc->base);
if (auto sndInt = as<IntVal>(snd))
{
+ if (auto tc = as<TypeCastIntVal>(sndInt))
+ sndInt = as<IntVal>(tc->base);
auto fstParam = as<GenericParamIntVal>(fstInt);
auto sndParam = as<GenericParamIntVal>(sndInt);
diff --git a/source/slang/slang-mangle.cpp b/source/slang/slang-mangle.cpp
index ef9bf4938..3b0d12da8 100644
--- a/source/slang/slang-mangle.cpp
+++ b/source/slang/slang-mangle.cpp
@@ -326,6 +326,24 @@ namespace Slang
else if (const auto polynomialIntVal = dynamicCast<PolynomialIntVal>(val))
{
emitRaw(context, "KX");
+ emit(context, (UInt)polynomialIntVal->constantTerm);
+ emit(context, (UInt)polynomialIntVal->terms.getCount());
+ for (auto term : polynomialIntVal->terms)
+ {
+ emit(context, (UInt)term->constFactor);
+ emit(context, (UInt)term->paramFactors.getCount());
+ for (auto factor : term->paramFactors)
+ {
+ emitVal(context, factor->param);
+ emit(context, (UInt)factor->power);
+ }
+ }
+ }
+ else if (const auto typecastIntVal = dynamicCast<TypeCastIntVal>(val))
+ {
+ emitRaw(context, "KK");
+ emitVal(context, typecastIntVal->type);
+ emitVal(context, typecastIntVal->base);
}
else
{