diff options
| -rw-r--r-- | source/slang/slang-ast-builder.h | 9 | ||||
| -rw-r--r-- | source/slang/slang-ast-val.cpp | 2 | ||||
| -rw-r--r-- | source/slang/slang-check-expr.cpp | 4 |
3 files changed, 12 insertions, 3 deletions
diff --git a/source/slang/slang-ast-builder.h b/source/slang/slang-ast-builder.h index 338993552..f75ab960f 100644 --- a/source/slang/slang-ast-builder.h +++ b/source/slang/slang-ast-builder.h @@ -372,6 +372,15 @@ public: return getOrCreate<ConstantIntVal>(type, value); } + TypeCastIntVal* getTypeCastIntVal(Type* type, Val* base) + { + // Unwrap any existing type casts. + while (auto baseTypeCast = as<TypeCastIntVal>(base)) + base = baseTypeCast->getBase(); + + return getOrCreate<TypeCastIntVal>(type, base); + } + DeclRef<Decl> getGenericAppDeclRef(DeclRef<GenericDecl> genericDeclRef, ConstArrayView<Val*> args, Decl* innerDecl = nullptr) { if (!innerDecl) diff --git a/source/slang/slang-ast-val.cpp b/source/slang/slang-ast-val.cpp index a0ea60625..8afc6e689 100644 --- a/source/slang/slang-ast-val.cpp +++ b/source/slang/slang-ast-val.cpp @@ -1062,7 +1062,7 @@ Val* TypeCastIntVal::_substituteImplOverride(ASTBuilder* astBuilder, Substitutio return newVal; else { - auto result = astBuilder->getOrCreate<TypeCastIntVal>(substType, substBase); + auto result = astBuilder->getTypeCastIntVal(substType, substBase); return result; } } diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp index e6d1049a0..bf7950310 100644 --- a/source/slang/slang-check-expr.cpp +++ b/source/slang/slang-check-expr.cpp @@ -1368,7 +1368,7 @@ namespace Slang TypeCastIntVal::tryFoldImpl(m_astBuilder, targetBasicType, argVals[0], getSink())); if (foldVal) return foldVal; - auto result = m_astBuilder->getOrCreate<TypeCastIntVal>(targetBasicType, argVals[0]); + auto result = m_astBuilder->getTypeCastIntVal(targetBasicType, argVals[0]); return result; } else @@ -1594,7 +1594,7 @@ namespace Slang TypeCastIntVal::tryFoldImpl(m_astBuilder, substType, val, getSink())); if (foldVal) return foldVal; - auto result = m_astBuilder->getOrCreate<TypeCastIntVal>(substType, val); + auto result = m_astBuilder->getTypeCastIntVal(substType, val); return result; } } |
