diff options
| author | Yong He <yonghe@outlook.com> | 2022-11-08 10:07:57 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-08 10:07:57 -0800 |
| commit | bf67309454032b4f92d0bc9735b608e56b16882f (patch) | |
| tree | a321fe7db0b49fa67608b935c1389354a020f59c /source/slang/slang-syntax.cpp | |
| parent | ca882a1ef46a5a8bbff50e3a1a6f973e16358634 (diff) | |
Make `__BuiltinFloatingPointType` conform to `IDifferentiable`. (#2499)
Diffstat (limited to 'source/slang/slang-syntax.cpp')
| -rw-r--r-- | source/slang/slang-syntax.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/source/slang/slang-syntax.cpp b/source/slang/slang-syntax.cpp index 12b9dab42..f3b590acf 100644 --- a/source/slang/slang-syntax.cpp +++ b/source/slang/slang-syntax.cpp @@ -234,6 +234,10 @@ Index getFilterCountImpl(const ReflectClassInfo& clsInfo, MemberFilterStyle filt case RequirementWitness::Flavor::none: return RequirementWitness(); + case RequirementWitness::Flavor::witnessTable: + SLANG_ASSERT(!subst); + return *this; + case RequirementWitness::Flavor::declRef: { int diff = 0; @@ -321,16 +325,19 @@ Index getFilterCountImpl(const ReflectClassInfo& clsInfo, MemberFilterStyle filt } else if (auto transitiveTypeWitness = as<TransitiveSubtypeWitness>(subtypeWitness)) { - // Hard code witness entry that `T.Differential = DifferentialBottom` for `T` that - // coerce to `DifferentialBottom`. - if (astBuilder->getDifferentialBottomType()->equals(transitiveTypeWitness->subToMid->sup)) + if (auto declaredSubtypeWitnessMidToSup = as<DeclaredSubtypeWitness>(transitiveTypeWitness->midToSup)) { - if (auto builtinAttr = requirementKey->findModifier<BuiltinRequirementModifier>()) + auto midKey = declaredSubtypeWitnessMidToSup->declRef; + auto midWitness = tryLookUpRequirementWitness(astBuilder, as<SubtypeWitness>(transitiveTypeWitness->subToMid), midKey); + if (midWitness.getFlavor() == RequirementWitness::Flavor::witnessTable) { - if (builtinAttr->kind == BuiltinRequirementKind::DifferentialType) + auto table = midWitness.getWitnessTable(); + RequirementWitness result; + if (table->requirementDictionary.TryGetValue(requirementKey, result)) { - return RequirementWitness(astBuilder->getDifferentialBottomType()); + result = result.specialize(astBuilder, midKey.substitutions); } + return result; } } } |
