aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-29 22:04:07 +0000
committerMichael Williamson <mike@zwobble.org>2023-10-29 22:04:07 +0000
commitcc29e25d7b9cdb79944aeb6e93e95f5caa50c942 (patch)
treede775553a34dd1e38c0e74fa60ac202065254dbc /src/main/java
parent4297d6392513ef161bd8636f37d8461ebcc3f94a (diff)
Remove unsafe functions
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java36
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);
}