diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-04 20:57:00 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-04 20:57:00 +0100 |
| commit | cdf51cdb9b3f8cef5896315496f348d9f7220903 (patch) | |
| tree | 6dc623930652236499980f46da75547797511045 /src/main/java/org/zwobble/couscous/ast | |
| parent | 6e45abd92526df9fce5d263eefed7fcaa400a86d (diff) | |
Add separate notion of VariableDeclaration
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
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; |
