aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-22 13:35:36 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-22 13:35:36 +0100
commitf270dedd0e6b6631f440dcce81df5c7dc90f1655 (patch)
tree9689ac65a350319175379bb55499553bcc28fed9 /src/main/java
parentf3bcdfe21627f64c11abda54596eb1388caa74e7 (diff)
Add DeclaredVariable.fromNode()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedTargetNode.java11
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedVariableDeclarationNode.java3
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/DeclaredVariable.java12
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java18
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 ->