summaryrefslogtreecommitdiff
path: root/source/slang/slang-ast-val.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-10-13 13:42:05 -0700
committerGitHub <noreply@github.com>2022-10-13 13:42:05 -0700
commitafa9f4b2786c92e72a563f316e074f62770630cb (patch)
tree8b84c53e6ef0eecf7dc16a0ca57055723e2e60a9 /source/slang/slang-ast-val.cpp
parent344898b091867e5450a3fa432a207d75255df77a (diff)
Fix missing implementations in ConjunctionSubtypeWitness. (#2449)
* Fix missing implementations in ConjunctionSubtypeWitness. * Fix. Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-ast-val.cpp')
-rw-r--r--source/slang/slang-ast-val.cpp102
1 files changed, 102 insertions, 0 deletions
diff --git a/source/slang/slang-ast-val.cpp b/source/slang/slang-ast-val.cpp
index b5291509f..377dee350 100644
--- a/source/slang/slang-ast-val.cpp
+++ b/source/slang/slang-ast-val.cpp
@@ -558,6 +558,108 @@ Val* TaggedUnionSubtypeWitness::_substituteImplOverride(ASTBuilder* astBuilder,
return substWitness;
}
+bool ConjunctionSubtypeWitness::_equalsValOverride(Val* val)
+{
+ if (auto other = as<ConjunctionSubtypeWitness>(val))
+ {
+ return other->leftWitness && other->leftWitness->equalsVal(leftWitness) &&
+ other->rightWitness && other->rightWitness->equalsVal(rightWitness);
+ }
+ return false;
+}
+
+void ConjunctionSubtypeWitness::_toTextOverride(StringBuilder& out)
+{
+ out << "ConjunctionSubtypeWitness(";
+ if (leftWitness) out << leftWitness;
+ out << ",";
+ if (rightWitness) out << rightWitness;
+ out << ")";
+}
+
+HashCode ConjunctionSubtypeWitness::_getHashCodeOverride()
+{
+ HashCode result = 0;
+ if (leftWitness) result = leftWitness->getHashCode();
+ if (rightWitness) result = combineHash(result, rightWitness->getHashCode());
+ return result;
+}
+
+Val* ConjunctionSubtypeWitness::_substituteImplOverride(ASTBuilder* astBuilder, SubstitutionSet subst, int* ioDiff)
+{
+ int diff = 0;
+ Val* left = nullptr;
+ Val* right = nullptr;
+
+ auto substSub = as<Type>(sub->substituteImpl(astBuilder, subst, &diff));
+ auto substSup = as<Type>(sup->substituteImpl(astBuilder, subst, &diff));
+
+ if (leftWitness)
+ left = leftWitness->substituteImpl(astBuilder, subst, &diff);
+ if (rightWitness)
+ right = rightWitness->substituteImpl(astBuilder, subst, &diff);
+
+ *ioDiff += diff;
+
+ if (diff)
+ {
+ auto result = astBuilder->create<ConjunctionSubtypeWitness>();
+ result->leftWitness = left;
+ result->rightWitness = right;
+ result->sub = substSub;
+ result->sup = substSup;
+ return result;
+ }
+ return this;
+}
+
+bool ExtractFromConjunctionSubtypeWitness::_equalsValOverride(Val* val)
+{
+ if (auto other = as<ExtractFromConjunctionSubtypeWitness>(val))
+ {
+ return other->conjunctionWitness && other->conjunctionWitness->equalsVal(conjunctionWitness) &&
+ other->indexInConjunction == indexInConjunction;
+ }
+ return false;
+}
+
+void ExtractFromConjunctionSubtypeWitness::_toTextOverride(StringBuilder& out)
+{
+ out << "ExtractFromConjunctionSubtypeWitness(";
+ if (conjunctionWitness)
+ out << conjunctionWitness;
+ out << "," << indexInConjunction;
+ out << ")";
+}
+
+HashCode ExtractFromConjunctionSubtypeWitness::_getHashCodeOverride()
+{
+ return combineHash(indexInConjunction, conjunctionWitness ? conjunctionWitness->getHashCode() : 0);
+}
+
+Val* ExtractFromConjunctionSubtypeWitness::_substituteImplOverride(ASTBuilder* astBuilder, SubstitutionSet subst, int* ioDiff)
+{
+ int diff = 0;
+ Val* newConjunctionWitness = nullptr;
+
+ auto substSub = as<Type>(sub->substituteImpl(astBuilder, subst, &diff));
+ auto substSup = as<Type>(sup->substituteImpl(astBuilder, subst, &diff));
+
+ if (this->conjunctionWitness)
+ newConjunctionWitness = conjunctionWitness->substituteImpl(astBuilder, subst, &diff);
+ *ioDiff += diff;
+
+ if (diff)
+ {
+ auto result = astBuilder->create<ExtractFromConjunctionSubtypeWitness>();
+ result->conjunctionWitness = newConjunctionWitness;
+ result->sub = substSub;
+ result->sup = substSup;
+ return result;
+ }
+ return this;
+}
+
// ModifierVal
bool ModifierVal::_equalsValOverride(Val* val)