summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ast-val.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-11-01 08:46:57 -0700
committerGitHub <noreply@github.com>2022-11-01 08:46:57 -0700
commitcbc1eff56057f199183bb7c17d8a360326512367 (patch)
tree487865e928cd2ceecbb509f0bfd06aa8d9584411 /source/slang/slang-ast-val.cpp
parentb707a07b1de3535cb0a8ccb6fe2ed4afa4a016d1 (diff)
Make `DifferentialPair` able to nest. (#2477)
Diffstat (limited to 'source/slang/slang-ast-val.cpp')
-rw-r--r--source/slang/slang-ast-val.cpp35
1 files changed, 35 insertions, 0 deletions
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<DifferentialBottomSubtypeWitness>(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<Type>(sub->substituteImpl(astBuilder, subst, &diff));
+ auto substSup = as<Type>(sup->substituteImpl(astBuilder, subst, &diff));
+ if (!diff)
+ return this;
+
+ *ioDiff += diff;
+
+ DifferentialBottomSubtypeWitness* substWitness =
+ astBuilder->create<DifferentialBottomSubtypeWitness>(substSub, substSup);
+ return substWitness;
+}
+
bool ConjunctionSubtypeWitness::_equalsValOverride(Val* val)
{
if (auto other = as<ConjunctionSubtypeWitness>(val))