aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-05 23:46:58 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-05 23:46:58 +0000
commit87a79dc241771b8b1ab72f27ecd2bcb63c9e8eb8 (patch)
tree0faabce5781e028ee21463d132abd9d6b11e1ae9 /src/main/java/org
parent87a5266dc5224abe7d2755f6b5072898ce18aeb2 (diff)
Use upper bound in the absence of lower bounds
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java
index 75b49f39..cacb1c78 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerSubTyping.java
@@ -95,7 +95,11 @@ public class TypeCheckerSubTyping {
throw new IllegalStateException("Incompatible type bounds");
}
- return Map.entry(typeParam, lowerBound);
+ var inferredType = typeParamBounds.lower.isEmpty() && !typeParamBounds.upper.isEmpty()
+ ? upperBound
+ : lowerBound;
+
+ return Map.entry(typeParam, inferredType);
})
.collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));