diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-22 13:35:36 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-22 13:35:36 +0100 |
| commit | f270dedd0e6b6631f440dcce81df5c7dc90f1655 (patch) | |
| tree | 9689ac65a350319175379bb55499553bcc28fed9 /src/main/java | |
| parent | f3bcdfe21627f64c11abda54596eb1388caa74e7 (diff) | |
Add DeclaredVariable.fromNode()
Diffstat (limited to 'src/main/java')
4 files changed, 31 insertions, 13 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedTargetNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedTargetNode.java index 5a11cb4b..200da79c 100644 --- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedTargetNode.java +++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedTargetNode.java @@ -7,8 +7,17 @@ import java.util.List; public sealed interface UntypedTargetNode extends UntypedNode { record Ignore(Source source) implements UntypedTargetNode {} + record Reassign(String name, Source source) implements UntypedTargetNode {} + record Tuple(List<UntypedTargetNode> elements, Source source) implements UntypedTargetNode {} + record Val(String name, Visibility visibility, Source source) implements UntypedTargetNode, UntypedVariableDeclarationNode {} - record Var(String name, Source source) implements UntypedTargetNode, UntypedVariableDeclarationNode {} + + record Var(String name, Source source) implements UntypedTargetNode, UntypedVariableDeclarationNode { + @Override + public Visibility visibility() { + return Visibility.PRIVATE; + } + } } diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedVariableDeclarationNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedVariableDeclarationNode.java index b805b701..1dde2cf0 100644 --- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedVariableDeclarationNode.java +++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedVariableDeclarationNode.java @@ -1,5 +1,8 @@ package org.shedlang.compiler.ast.untyped; +import org.shedlang.compiler.types.Visibility; + public interface UntypedVariableDeclarationNode extends UntypedNode { String name(); + Visibility visibility(); } diff --git a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariable.java b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariable.java index bed7501e..a19916aa 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariable.java +++ b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariable.java @@ -1,5 +1,6 @@ package org.shedlang.compiler.typechecker; +import org.shedlang.compiler.ast.untyped.UntypedVariableDeclarationNode; import org.shedlang.compiler.sources.Source; import org.shedlang.compiler.types.Visibility; @@ -9,4 +10,15 @@ public record DeclaredVariable( Visibility visibility, Source source ) { + public static DeclaredVariable fromNode( + VariableType variableType, + UntypedVariableDeclarationNode node + ) { + return new DeclaredVariable( + node.name(), + variableType, + node.visibility(), + node.source() + ); + } } diff --git a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java index ce057c56..a153f49d 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java +++ b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java @@ -90,11 +90,9 @@ class DeclaredVariables { forAssign(assign, variables); case UntypedFunctionDefinitionNode functionDefinition -> - variables.plus(new DeclaredVariable( - functionDefinition.name(), + variables.plus(DeclaredVariable.fromNode( VariableType.CONSTANT, - functionDefinition.visibility(), - functionDefinition.source() + functionDefinition )); case UntypedStructDefinitionNode struct -> @@ -131,19 +129,15 @@ class DeclaredVariables { } case UntypedTargetNode.Var var -> - variables.plus(new DeclaredVariable( - var.name(), + variables.plus(DeclaredVariable.fromNode( VariableType.VAR, - Visibility.PRIVATE, - var.source() + var )); case UntypedTargetNode.Val val -> - variables.plus(new DeclaredVariable( - val.name(), + variables.plus(DeclaredVariable.fromNode( VariableType.VAL, - val.visibility(), - val.source() + val )); case UntypedTargetNode.Ignore ignore -> |
