diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-23 23:14:46 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-23 23:14:46 +0000 |
| commit | f79bc929ef4dd607e56da8639b60c09a3b64f8d1 (patch) | |
| tree | 5d155f83d489e9579e572171fb5c3fbfef6baf16 /src/main/java | |
| parent | 0147a8f2d72d26a076df2e8d9ca0e8348f4ab557 (diff) | |
Convert if to when
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 40 |
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); } } |
