aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-19 17:04:18 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-19 17:04:48 +0100
commit950f2ca528566f71e4becab80fdda25783b3d485 (patch)
tree93433f3c26437074e4bb058ec5fec4f7fedfb6e2 /src/main/java
parent127a55c72365adab757d1d14aafef0f8150886f4 (diff)
Extract declaredVariables functions to their own class
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java55
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java52
2 files changed, 57 insertions, 50 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java
new file mode 100644
index 00000000..0d7a6a62
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java
@@ -0,0 +1,55 @@
+package org.shedlang.compiler.typechecker;
+
+import org.pcollections.PVector;
+import org.shedlang.compiler.ast.untyped.*;
+
+class DeclaredVariables {
+ static PVector<UntypedVariableDeclarationNode> declaredVariables(
+ UntypedFunctionStatementNode statement,
+ PVector<UntypedVariableDeclarationNode> variables
+ ) {
+ return switch (statement) {
+ case UntypedBlockReturnNode blockReturn ->
+ variables;
+
+ case UntypedExpressionStatementNode expressionStatement ->
+ variables;
+
+ case UntypedFunctionReturnNode functionReturn ->
+ variables;
+
+ case UntypedValNode val ->
+ declaredVariables(val, variables);
+ };
+ }
+
+ static PVector<UntypedVariableDeclarationNode> declaredVariables(
+ UntypedNamespaceStatementNode statement,
+ PVector<UntypedVariableDeclarationNode> variables
+ ) {
+ return switch (statement) {
+ case UntypedFunctionDefinitionNode functionDefinition ->
+ variables.plus(functionDefinition);
+
+ case UntypedValNode val ->
+ declaredVariables(val, variables);
+ };
+ }
+
+ static PVector<UntypedVariableDeclarationNode> declaredVariables(
+ UntypedValNode statement,
+ PVector<UntypedVariableDeclarationNode> variables
+ ) {
+ return declaredVariables(statement.target(), variables);
+ }
+
+ private static PVector<UntypedVariableDeclarationNode> declaredVariables(
+ UntypedTargetNode target,
+ PVector<UntypedVariableDeclarationNode> variables
+ ) {
+ return switch (target) {
+ case UntypedTargetNode.Variable variable ->
+ variables.plus(variable);
+ };
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index 0584509e..fe844d66 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -1,6 +1,5 @@
package org.shedlang.compiler.typechecker;
-import org.pcollections.PVector;
import org.shedlang.compiler.ast.typed.*;
import org.shedlang.compiler.ast.untyped.*;
import org.shedlang.compiler.sources.Source;
@@ -16,6 +15,8 @@ import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import static org.shedlang.compiler.typechecker.DeclaredVariables.declaredVariables;
+
public class TypeChecker {
private TypeChecker() {
@@ -71,55 +72,6 @@ public class TypeChecker {
});
}
- static PVector<UntypedVariableDeclarationNode> declaredVariables(
- UntypedFunctionStatementNode statement,
- PVector<UntypedVariableDeclarationNode> variables
- ) {
- return switch (statement) {
- case UntypedBlockReturnNode blockReturn ->
- variables;
-
- case UntypedExpressionStatementNode expressionStatement ->
- variables;
-
- case UntypedFunctionReturnNode functionReturn ->
- variables;
-
- case UntypedValNode val ->
- declaredVariables(val, variables);
- };
- }
-
- static PVector<UntypedVariableDeclarationNode> declaredVariables(
- UntypedNamespaceStatementNode statement,
- PVector<UntypedVariableDeclarationNode> variables
- ) {
- return switch (statement) {
- case UntypedFunctionDefinitionNode functionDefinition ->
- variables.plus(functionDefinition);
-
- case UntypedValNode val ->
- declaredVariables(val, variables);
- };
- }
-
- static PVector<UntypedVariableDeclarationNode> declaredVariables(
- UntypedValNode statement,
- PVector<UntypedVariableDeclarationNode> variables
- ) {
- return declaredVariables(statement.target(), variables);
- }
-
- private static PVector<UntypedVariableDeclarationNode> declaredVariables(
- UntypedTargetNode target,
- PVector<UntypedVariableDeclarationNode> variables
- ) {
- return switch (target) {
- case UntypedTargetNode.Variable variable ->
- variables.plus(variable);
- };
- }
-
private static TypeCheckerResult<TypedArgsNode> typeCheckArgs(
UntypedArgsNode args,
TypeCheckerContext context,