diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/types/Types.java | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/types/Types.java b/src/main/java/org/shedlang/compiler/types/Types.java index 9ab5c634..ab48f77e 100644 --- a/src/main/java/org/shedlang/compiler/types/Types.java +++ b/src/main/java/org/shedlang/compiler/types/Types.java @@ -89,4 +89,18 @@ public class Types { return TOP; } } + + public static Type commonSubtype(List<Type> supertypes) { + var uniqueSubtypes = supertypes.stream() + .filter(subtype -> subtype != Types.TOP) + .collect(Collectors.toSet()); + + if (uniqueSubtypes.isEmpty()) { + return TOP; + } else if (uniqueSubtypes.size() == 1) { + return uniqueSubtypes.iterator().next(); + } else { + return BOTTOM; + } + } } |
