diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-19 17:04:18 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-19 17:04:48 +0100 |
| commit | 950f2ca528566f71e4becab80fdda25783b3d485 (patch) | |
| tree | 93433f3c26437074e4bb058ec5fec4f7fedfb6e2 /src/main/java | |
| parent | 127a55c72365adab757d1d14aafef0f8150886f4 (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.java | 55 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 52 |
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, |
