From 950f2ca528566f71e4becab80fdda25783b3d485 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 19 Jul 2023 17:04:18 +0100 Subject: Extract declaredVariables functions to their own class --- .../compiler/typechecker/DeclaredVariables.java | 55 ++++++++++++++++++++++ .../shedlang/compiler/typechecker/TypeChecker.java | 52 +------------------- 2 files changed, 57 insertions(+), 50 deletions(-) create mode 100644 src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java (limited to 'src/main/java') 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 declaredVariables( + UntypedFunctionStatementNode statement, + PVector variables + ) { + return switch (statement) { + case UntypedBlockReturnNode blockReturn -> + variables; + + case UntypedExpressionStatementNode expressionStatement -> + variables; + + case UntypedFunctionReturnNode functionReturn -> + variables; + + case UntypedValNode val -> + declaredVariables(val, variables); + }; + } + + static PVector declaredVariables( + UntypedNamespaceStatementNode statement, + PVector variables + ) { + return switch (statement) { + case UntypedFunctionDefinitionNode functionDefinition -> + variables.plus(functionDefinition); + + case UntypedValNode val -> + declaredVariables(val, variables); + }; + } + + static PVector declaredVariables( + UntypedValNode statement, + PVector variables + ) { + return declaredVariables(statement.target(), variables); + } + + private static PVector declaredVariables( + UntypedTargetNode target, + PVector 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 declaredVariables( - UntypedFunctionStatementNode statement, - PVector variables - ) { - return switch (statement) { - case UntypedBlockReturnNode blockReturn -> - variables; - - case UntypedExpressionStatementNode expressionStatement -> - variables; - - case UntypedFunctionReturnNode functionReturn -> - variables; - - case UntypedValNode val -> - declaredVariables(val, variables); - }; - } - - static PVector declaredVariables( - UntypedNamespaceStatementNode statement, - PVector variables - ) { - return switch (statement) { - case UntypedFunctionDefinitionNode functionDefinition -> - variables.plus(functionDefinition); - - case UntypedValNode val -> - declaredVariables(val, variables); - }; - } - - static PVector declaredVariables( - UntypedValNode statement, - PVector variables - ) { - return declaredVariables(statement.target(), variables); - } - - private static PVector declaredVariables( - UntypedTargetNode target, - PVector variables - ) { - return switch (target) { - case UntypedTargetNode.Variable variable -> - variables.plus(variable); - }; - } - private static TypeCheckerResult typeCheckArgs( UntypedArgsNode args, TypeCheckerContext context, -- cgit v1.2.3