aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-04 20:57:00 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-04 20:57:00 +0100
commitcdf51cdb9b3f8cef5896315496f348d9f7220903 (patch)
tree6dc623930652236499980f46da75547797511045 /src/main/java/org/zwobble/couscous/ast
parent6e45abd92526df9fce5d263eefed7fcaa400a86d (diff)
Add separate notion of VariableDeclaration
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java10
-rw-r--r--src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java14
-rw-r--r--src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java12
-rw-r--r--src/main/java/org/zwobble/couscous/ast/VariableNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java2
5 files changed, 31 insertions, 12 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java b/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
index 947a015..cd2cb86 100644
--- a/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
@@ -4,9 +4,11 @@ import org.zwobble.couscous.values.TypeReference;
import lombok.Value;
-@Value
+@Value(staticConstructor="formalArg")
public class FormalArgumentNode implements VariableNode {
- int id;
- TypeReference type;
- String name;
+ VariableDeclaration declaration;
+
+ public TypeReference getType() {
+ return declaration.getType();
+ }
}
diff --git a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
index 880a7fd..cf6c5f0 100644
--- a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
@@ -3,13 +3,21 @@ package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.StatementNodeVisitor;
import org.zwobble.couscous.values.TypeReference;
+import static org.zwobble.couscous.ast.VariableDeclaration.var;
+
import lombok.Value;
@Value(staticConstructor="localVariableDeclaration")
public class LocalVariableDeclarationNode implements VariableNode, StatementNode {
- int id;
- TypeReference type;
- String name;
+ public static LocalVariableDeclarationNode localVariableDeclaration(
+ int id,
+ String name,
+ TypeReference type,
+ ExpressionNode initialValue) {
+ return localVariableDeclaration(var(id, name, type), initialValue);
+ }
+
+ VariableDeclaration declaration;
ExpressionNode initialValue;
@Override
diff --git a/src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java b/src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java
new file mode 100644
index 0000000..3a60412
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/VariableDeclaration.java
@@ -0,0 +1,12 @@
+package org.zwobble.couscous.ast;
+
+import org.zwobble.couscous.values.TypeReference;
+
+import lombok.Value;
+
+@Value(staticConstructor="var")
+public class VariableDeclaration {
+ int id;
+ String name;
+ TypeReference type;
+}
diff --git a/src/main/java/org/zwobble/couscous/ast/VariableNode.java b/src/main/java/org/zwobble/couscous/ast/VariableNode.java
index acfa29b..c526db1 100644
--- a/src/main/java/org/zwobble/couscous/ast/VariableNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/VariableNode.java
@@ -1,8 +1,5 @@
package org.zwobble.couscous.ast;
-import org.zwobble.couscous.values.TypeReference;
-
public interface VariableNode {
- int getId();
- TypeReference getType();
+ VariableDeclaration getDeclaration();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
index 536a7c3..2410549 100644
--- a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
@@ -7,7 +7,7 @@ import lombok.Value;
@Value
public class VariableReferenceNode implements ExpressionNode {
public static VariableReferenceNode reference(VariableNode variable) {
- return new VariableReferenceNode(variable.getId());
+ return new VariableReferenceNode(variable.getDeclaration().getId());
}
int referentId;