diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeInfos.java | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeInfos.java b/src/main/java/org/shedlang/compiler/typechecker/TypeInfos.java index 22f68b38..4547c895 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeInfos.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeInfos.java @@ -145,6 +145,21 @@ public class TypeInfos { return supertypes; } + /** + * Get the subtypes of a type, from most specific to least specific. + */ + public Set<Type> subtypes(Type type) { + var subtypes = P.orderedSet(type); + if (type instanceof SumType sumType) { + var sumTypeInfo = sumTypeInfo(sumType); + subtypes = subtypes.plusAll( + sumTypeInfo.orElseThrow().variants() + ); + } + subtypes = subtypes.plus(Types.BOTTOM); + return subtypes; + } + private Optional<SumTypeInfo> simpleSumTypeInfo(SimpleSumType type) { return Optional.ofNullable(sumTypeInfos.get(type)); } |
