diff options
| author | Yong He <yonghe@outlook.com> | 2022-11-01 08:46:57 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-01 08:46:57 -0700 |
| commit | cbc1eff56057f199183bb7c17d8a360326512367 (patch) | |
| tree | 487865e928cd2ceecbb509f0bfd06aa8d9584411 /source/slang/slang-ast-val.cpp | |
| parent | b707a07b1de3535cb0a8ccb6fe2ed4afa4a016d1 (diff) | |
Make `DifferentialPair` able to nest. (#2477)
Diffstat (limited to 'source/slang/slang-ast-val.cpp')
| -rw-r--r-- | source/slang/slang-ast-val.cpp | 35 |
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)) |
