aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-23 23:14:46 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-23 23:14:46 +0000
commitf79bc929ef4dd607e56da8639b60c09a3b64f8d1 (patch)
tree5d155f83d489e9579e572171fb5c3fbfef6baf16 /src/main/java
parent0147a8f2d72d26a076df2e8d9ca0e8348f4ab557 (diff)
Convert if to when
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java40
1 files changed, 19 insertions, 21 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index c9d4f811..8ada73c2 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -572,27 +572,25 @@ public class TypeChecker {
}
private static Type fieldType(Type receiverType, String fieldName, Source source, TypeCheckerContext context) {
- if (receiverType instanceof StructType receiverTypeStruct) {
- var structTypeInfo = context.structTypeInfo(receiverTypeStruct, source);
-
- return structTypeInfo.fieldType(fieldName)
- .orElseThrow(() -> new NoSuchFieldError(receiverTypeStruct, fieldName, source));
- } else if (receiverType instanceof NamespaceType receiverTypeNamespace) {
- var namespaceTypeInfo = context.namespaceTypeInfo(receiverTypeNamespace, source);
-
- return namespaceTypeInfo.fieldType(fieldName)
- .orElseThrow(() -> new NoSuchFieldError(receiverTypeNamespace, fieldName, source));
- } else if (
- receiverType instanceof TypeLevelValueType receiverTypeTypeLevelValue &&
- receiverTypeTypeLevelValue.value() instanceof UserDefinedEffect effect
- ) {
- var effectInfo = context.userDefinedEffectInfo(effect, source);
-
- return effectInfo.methodType(fieldName)
- .orElseThrow(() -> new NoSuchFieldError(receiverType, fieldName, source))
- .withEffect(effect);
- } else {
- throw new NoSuchFieldError(receiverType, fieldName, source);
+ switch (receiverType) {
+ case StructType receiverTypeStruct -> {
+ var structTypeInfo = context.structTypeInfo(receiverTypeStruct, source);
+ return structTypeInfo.fieldType(fieldName)
+ .orElseThrow(() -> new NoSuchFieldError(receiverTypeStruct, fieldName, source));
+ }
+ case NamespaceType receiverTypeNamespace -> {
+ var namespaceTypeInfo = context.namespaceTypeInfo(receiverTypeNamespace, source);
+ return namespaceTypeInfo.fieldType(fieldName)
+ .orElseThrow(() -> new NoSuchFieldError(receiverTypeNamespace, fieldName, source));
+ }
+ case TypeLevelValueType receiverTypeTypeLevelValue when receiverTypeTypeLevelValue.value() instanceof UserDefinedEffect effect -> {
+ var effectInfo = context.userDefinedEffectInfo(effect, source);
+ return effectInfo.methodType(fieldName)
+ .orElseThrow(() -> new NoSuchFieldError(receiverType, fieldName, source))
+ .withEffect(effect);
+ }
+ default ->
+ throw new NoSuchFieldError(receiverType, fieldName, source);
}
}