From cbc1eff56057f199183bb7c17d8a360326512367 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 1 Nov 2022 08:46:57 -0700 Subject: Make `DifferentialPair` able to nest. (#2477) --- source/slang/slang-ast-val.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'source/slang/slang-ast-val.cpp') diff --git a/source/slang/slang-ast-val.cpp b/source/slang/slang-ast-val.cpp index a8ceaa716..87e89ef18 100644 --- a/source/slang/slang-ast-val.cpp +++ b/source/slang/slang-ast-val.cpp @@ -618,6 +618,41 @@ Val* TaggedUnionSubtypeWitness::_substituteImplOverride(ASTBuilder* astBuilder, return substWitness; } +bool DifferentialBottomSubtypeWitness::_equalsValOverride(Val* val) +{ + auto otherDiffBottomWitness = as(val); + if (!otherDiffBottomWitness) + return false; + + return otherDiffBottomWitness->sub && otherDiffBottomWitness->sub->equals(sub); +} + +void DifferentialBottomSubtypeWitness::_toTextOverride(StringBuilder& out) +{ + out << "DifferentialBottomSubtypeWitness(" << sub << ")"; +} + +HashCode DifferentialBottomSubtypeWitness::_getHashCodeOverride() +{ + return combineHash(3892, sub->getHashCode()); +} + +Val* DifferentialBottomSubtypeWitness::_substituteImplOverride(ASTBuilder* astBuilder, SubstitutionSet subst, int* ioDiff) +{ + int diff = 0; + + auto substSub = as(sub->substituteImpl(astBuilder, subst, &diff)); + auto substSup = as(sup->substituteImpl(astBuilder, subst, &diff)); + if (!diff) + return this; + + *ioDiff += diff; + + DifferentialBottomSubtypeWitness* substWitness = + astBuilder->create(substSub, substSup); + return substWitness; +} + bool ConjunctionSubtypeWitness::_equalsValOverride(Val* val) { if (auto other = as(val)) -- cgit v1.2.3