From bf67309454032b4f92d0bc9735b608e56b16882f Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 8 Nov 2022 10:07:57 -0800 Subject: Make `__BuiltinFloatingPointType` conform to `IDifferentiable`. (#2499) --- source/slang/slang-syntax.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'source/slang/slang-syntax.cpp') 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(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(transitiveTypeWitness->midToSup)) { - if (auto builtinAttr = requirementKey->findModifier()) + auto midKey = declaredSubtypeWitnessMidToSup->declRef; + auto midWitness = tryLookUpRequirementWitness(astBuilder, as(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; } } } -- cgit v1.2.3