summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-syntax.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-11-08 10:07:57 -0800
committerGitHub <noreply@github.com>2022-11-08 10:07:57 -0800
commitbf67309454032b4f92d0bc9735b608e56b16882f (patch)
treea321fe7db0b49fa67608b935c1389354a020f59c /source/slang/slang-syntax.cpp
parentca882a1ef46a5a8bbff50e3a1a6f973e16358634 (diff)
Make `__BuiltinFloatingPointType` conform to `IDifferentiable`. (#2499)
Diffstat (limited to 'source/slang/slang-syntax.cpp')
-rw-r--r--source/slang/slang-syntax.cpp19
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;
}
}
}