diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-29 22:04:07 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-29 22:04:07 +0000 |
| commit | cc29e25d7b9cdb79944aeb6e93e95f5caa50c942 (patch) | |
| tree | de775553a34dd1e38c0e74fa60ac202065254dbc /src/main/java | |
| parent | 4297d6392513ef161bd8636f37d8461ebcc3f94a (diff) | |
Remove unsafe functions
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index 38c4639d..3f430b9e 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -14,6 +14,7 @@ import org.shedlang.compiler.util.P; import org.shedlang.compiler.util.PCollectors; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -598,16 +599,25 @@ public class TypeChecker { ) { var typedSignature = typeCheckFunctionSignature(untyped.signature(), context); - var partialSignatureParams = typedSignature.params().all().stream() - .map(param -> new PartialFunctionSignature.Param( + Function<TypedParamNode, PartialFunctionSignature.Param> typedParamNodeToParam = param -> + new PartialFunctionSignature.Param( param.name(), param.type() .orElseThrow(() -> new FunctionSignatureMissingParamTypeError(param.source())) .value(), param.source() - )) + ); + + var positionalParams = typedSignature.params().positional().stream() + .map(typedParamNodeToParam) + .toList(); + + var namedParams = typedSignature.params().named().stream() + .map(typedParamNodeToParam) .toList(); + var partialSignatureParams = Lists.concat(positionalParams, namedParams); + var effect = functionSignatureToEffect(typedSignature); var returnType = functionSignatureToReturnType(typedSignature) @@ -620,8 +630,12 @@ public class TypeChecker { ); var type = new FunctionType( - functionSignatureToPositionalParams(typedSignature), - functionSignatureToNamedParams(typedSignature), + positionalParams.stream() + .map(param -> param.type()) + .toList(), + namedParams.stream() + .map(param -> new NamedParam(param.name(), param.type())) + .toList(), effect, returnType ); @@ -819,18 +833,6 @@ public class TypeChecker { ); } - private static List<Type> functionSignatureToPositionalParams(TypedFunctionSignatureNode signature) { - return signature.params().positional().stream() - .map(param -> param.type().orElseThrow().value()) - .toList(); - } - - private static List<NamedParam> functionSignatureToNamedParams(TypedFunctionSignatureNode signature) { - return signature.params().named().stream() - .map(param -> new NamedParam(param.name(), param.type().orElseThrow().value())) - .toList(); - } - private static Effect functionSignatureToEffect(TypedFunctionSignatureNode signature) { return signature.effect().map(e -> e.value()).orElse(Effects.NONE); } |
