From c88aea4655fb8396741dba4fa13a2315e30d14d2 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 3 Jan 2024 22:21:36 +0000 Subject: Add subtyping between sum types --- .../compiler/typechecker/TypeCheckerSubTyping.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java index 4ee16c4d..4f1a283e 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java @@ -120,6 +120,24 @@ public class TypeCheckerSubTyping { return Optional.of(constraints); } + if (subtype instanceof SumType subtypeSum) { + var subtypeInfo = constraints.typeInfos + .sumTypeInfo(subtypeSum) + .orElseThrow(); + + for (var subtypeVariant : subtypeInfo.variants()) { + var result = tryAddSubtypeConstraint(subtypeVariant, supertype, constraints); + if (result.isPresent()) { + // TODO: test assignment + constraints = result.get(); + } else { + return result; + } + } + + return Optional.of(constraints); + } + if (supertype instanceof SumType supertypeSum) { var superTypeInfo = constraints.typeInfos.sumTypeInfo(supertypeSum).orElseThrow(); return tryAddVariantSubtypeConstraint(subtype, superTypeInfo, constraints); -- cgit v1.2.3