aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-10 21:06:30 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-10 21:06:30 +0100
commit80cd27b6b9c79829d19ad6a1a04b037241fd0105 (patch)
tree83ee27b20455ec5f4b401763ef845dcb4065d6ee
parent38c95d6f76efde8b14a93e3a31d28c5d56bfb638 (diff)
Add type to Node interface
-rw-r--r--src/main/java/org/zwobble/couscous/ast/AnnotationNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ArrayNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/AssignmentNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/CastNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ConstructorNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/EnumNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/IfStatementNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/InstanceReceiver.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/InterfaceNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/LiteralNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodCallNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/Node.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/OperationNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ReturnNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/StatementNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/StaticReceiver.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ThrowNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TryNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/ast/WhileNode.java5
33 files changed, 158 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/AnnotationNode.java b/src/main/java/org/zwobble/couscous/ast/AnnotationNode.java
index 86fe23c..1d4b8ce 100644
--- a/src/main/java/org/zwobble/couscous/ast/AnnotationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/AnnotationNode.java
@@ -26,6 +26,11 @@ public class AnnotationNode implements Node {
}
@Override
+ public int type() {
+ return NodeTypes.ANNOTATION;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.empty();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ArrayNode.java b/src/main/java/org/zwobble/couscous/ast/ArrayNode.java
index a544cc9..1f3c8e3 100644
--- a/src/main/java/org/zwobble/couscous/ast/ArrayNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ArrayNode.java
@@ -39,6 +39,11 @@ public class ArrayNode implements ExpressionNode {
}
@Override
+ public int type() {
+ return NodeTypes.ARRAY;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return elements;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
index a2f9f2d..d41f629 100644
--- a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
@@ -47,6 +47,11 @@ public class AssignmentNode implements ExpressionNode {
}
@Override
+ public int type() {
+ return NodeTypes.ASSIGNMENT;
+ }
+
+ @Override
public Iterable<Node> childNodes() {
return ExtraIterables.of(value, target);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/CastNode.java b/src/main/java/org/zwobble/couscous/ast/CastNode.java
index ed41011..d22bb63 100644
--- a/src/main/java/org/zwobble/couscous/ast/CastNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/CastNode.java
@@ -33,6 +33,11 @@ public class CastNode implements ExpressionNode {
}
@Override
+ public int type() {
+ return NodeTypes.CAST;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.of(expression);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNode.java b/src/main/java/org/zwobble/couscous/ast/ClassNode.java
index 97f66f8..4664bc0 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNode.java
@@ -98,6 +98,11 @@ public class ClassNode implements TypeNode {
}
@Override
+ public int type() {
+ return NodeTypes.CLASS;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return Iterables.concat(
ExtraIterables.of(constructor),
diff --git a/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java b/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java
index 9f054ae..e9eabd6 100644
--- a/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java
@@ -40,6 +40,11 @@ public class ConstructorCallNode implements ExpressionNode {
}
@Override
+ public int type() {
+ return NodeTypes.CONSTRUCTOR_CALL;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return arguments;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java b/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java
index ea83c93..cca7a31 100644
--- a/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ConstructorNode.java
@@ -40,6 +40,11 @@ public class ConstructorNode implements Node {
}
@Override
+ public int type() {
+ return NodeTypes.CONSTRUCTOR;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return Iterables.concat(arguments, body);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/EnumNode.java b/src/main/java/org/zwobble/couscous/ast/EnumNode.java
index 5b68dc6..c1db294 100644
--- a/src/main/java/org/zwobble/couscous/ast/EnumNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/EnumNode.java
@@ -51,6 +51,11 @@ public class EnumNode implements TypeNode {
}
@Override
+ public int type() {
+ return NodeTypes.ENUM;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.empty();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java b/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java
index 1dacc9f..c32efbc 100644
--- a/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java
@@ -25,6 +25,11 @@ public class ExpressionStatementNode implements StatementNode {
}
@Override
+ public int type() {
+ return NodeTypes.EXPRESSION_STATEMENT;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.of(expression);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
index 3b7992c..a6ef2dd 100644
--- a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
@@ -67,6 +67,11 @@ public class FieldAccessNode implements AssignableExpressionNode {
}
@Override
+ public int type() {
+ return NodeTypes.FIELD_ACCESS;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.of(left);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java b/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java
index 8c4dc5a..59fcab8 100644
--- a/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java
@@ -46,6 +46,11 @@ public class FieldDeclarationNode implements Node {
}
@Override
+ public int type() {
+ return NodeTypes.FIELD_DECLARATION;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.empty();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java b/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
index db13e59..9c20aff 100644
--- a/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FormalArgumentNode.java
@@ -34,6 +34,11 @@ public class FormalArgumentNode implements VariableNode, Node {
}
@Override
+ public int type() {
+ return NodeTypes.FORMAL_ARGUMENT;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.empty();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java b/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java
index 2c1ac4a..d51a4a4 100644
--- a/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FormalTypeParameterNode.java
@@ -30,6 +30,11 @@ public class FormalTypeParameterNode implements Node {
}
@Override
+ public int type() {
+ return NodeTypes.FORMAL_TYPE_PARAMETER;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.empty();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java b/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java
index 6ead916..4a58251 100644
--- a/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/IfStatementNode.java
@@ -46,6 +46,11 @@ public class IfStatementNode implements StatementNode {
}
@Override
+ public int type() {
+ return NodeTypes.IF_STATEMENT;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return Iterables.concat(ExtraIterables.of(condition), trueBranch, falseBranch);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java b/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java
index d36e909..f2dcc0b 100644
--- a/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java
@@ -35,6 +35,11 @@ public class InstanceOfNode implements ExpressionNode {
}
@Override
+ public int type() {
+ return NodeTypes.INSTANCE_OF;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.of(left);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/InstanceReceiver.java b/src/main/java/org/zwobble/couscous/ast/InstanceReceiver.java
index 292b026..d86d5d1 100644
--- a/src/main/java/org/zwobble/couscous/ast/InstanceReceiver.java
+++ b/src/main/java/org/zwobble/couscous/ast/InstanceReceiver.java
@@ -25,6 +25,11 @@ public class InstanceReceiver implements Receiver {
}
@Override
+ public int type() {
+ return NodeTypes.INSTANCE_RECEIVER;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.of(expression);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java b/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java
index 94d45fd..c01df04 100644
--- a/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/InterfaceNode.java
@@ -71,6 +71,11 @@ public class InterfaceNode implements TypeNode {
}
@Override
+ public int type() {
+ return NodeTypes.INTERFACE;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return methods;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
index ac9cd1b..b8d8735 100644
--- a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
@@ -60,6 +60,11 @@ public class LiteralNode implements ExpressionNode {
}
@Override
+ public int type() {
+ return NodeTypes.LITERAL;
+ }
+
+ @Override
public Iterable<Node> childNodes() {
return ExtraIterables.empty();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
index 54a6804..595adb1 100644
--- a/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/LocalVariableDeclarationNode.java
@@ -56,6 +56,11 @@ public class LocalVariableDeclarationNode implements VariableNode, StatementNode
}
@Override
+ public int type() {
+ return NodeTypes.LOCAL_VARIABLE_DECLARATION;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.of(initialValue);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
index 0446857..381fb11 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
@@ -160,6 +160,11 @@ public class MethodCallNode implements ExpressionNode {
}
@Override
+ public int type() {
+ return NodeTypes.METHOD_CALL;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.lazyCons(receiver, arguments);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodNode.java b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
index 2c1c099..143158a 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
@@ -195,6 +195,11 @@ public class MethodNode implements Node {
}
@Override
+ public int type() {
+ return NodeTypes.METHOD;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return Iterables.concat(
annotations,
diff --git a/src/main/java/org/zwobble/couscous/ast/Node.java b/src/main/java/org/zwobble/couscous/ast/Node.java
index cc57d12..e210c51 100644
--- a/src/main/java/org/zwobble/couscous/ast/Node.java
+++ b/src/main/java/org/zwobble/couscous/ast/Node.java
@@ -4,6 +4,8 @@ import org.zwobble.couscous.ast.visitors.NodeMapper;
import org.zwobble.couscous.ast.visitors.NodeVisitor;
public interface Node {
+ int type();
+
Iterable<? extends Node> childNodes();
default void accept(NodeVisitor visitor) {
diff --git a/src/main/java/org/zwobble/couscous/ast/OperationNode.java b/src/main/java/org/zwobble/couscous/ast/OperationNode.java
index 32bde37..44f2d1f 100644
--- a/src/main/java/org/zwobble/couscous/ast/OperationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/OperationNode.java
@@ -52,6 +52,11 @@ public class OperationNode implements ExpressionNode {
}
@Override
+ public int type() {
+ return NodeTypes.OPERATION;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return arguments;
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ReturnNode.java b/src/main/java/org/zwobble/couscous/ast/ReturnNode.java
index a5d9011..2c6d665 100644
--- a/src/main/java/org/zwobble/couscous/ast/ReturnNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ReturnNode.java
@@ -25,6 +25,11 @@ public class ReturnNode implements StatementNode {
}
@Override
+ public int type() {
+ return NodeTypes.RETURN;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.of(value);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/StatementNode.java b/src/main/java/org/zwobble/couscous/ast/StatementNode.java
index 38eb4d3..4755de7 100644
--- a/src/main/java/org/zwobble/couscous/ast/StatementNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/StatementNode.java
@@ -6,7 +6,7 @@ import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
public interface StatementNode extends Node {
<T> T accept(StatementNodeMapper<T> visitor);
-
+
@Override
default <T> T accept(NodeMapper<T> visitor) {
return accept(new StatementNodeMapper<T>() {
diff --git a/src/main/java/org/zwobble/couscous/ast/StaticReceiver.java b/src/main/java/org/zwobble/couscous/ast/StaticReceiver.java
index f2fbc59..34f9e13 100644
--- a/src/main/java/org/zwobble/couscous/ast/StaticReceiver.java
+++ b/src/main/java/org/zwobble/couscous/ast/StaticReceiver.java
@@ -35,6 +35,11 @@ public class StaticReceiver implements Receiver {
}
@Override
+ public int type() {
+ return NodeTypes.STATIC_RECEIVER;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.empty();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
index 3ffcf63..0d2ecda 100644
--- a/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
@@ -44,6 +44,11 @@ public class TernaryConditionalNode implements ExpressionNode {
}
@Override
+ public int type() {
+ return NodeTypes.TERNARY_CONDITIONAL;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.of(condition, ifTrue, ifFalse);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java b/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java
index 1363b24..8da97e6 100644
--- a/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java
@@ -31,6 +31,11 @@ public class ThisReferenceNode implements ExpressionNode, ReferenceNode {
}
@Override
+ public int type() {
+ return NodeTypes.THIS_REFERENCE;
+ }
+
+ @Override
public Iterable<Node> childNodes() {
return ExtraIterables.empty();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ThrowNode.java b/src/main/java/org/zwobble/couscous/ast/ThrowNode.java
index c8a0edf..0b273c9 100644
--- a/src/main/java/org/zwobble/couscous/ast/ThrowNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ThrowNode.java
@@ -25,6 +25,11 @@ public class ThrowNode implements StatementNode {
}
@Override
+ public int type() {
+ return NodeTypes.THROW;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.of(value);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/TryNode.java b/src/main/java/org/zwobble/couscous/ast/TryNode.java
index 3c18e1a..9a61ecc 100644
--- a/src/main/java/org/zwobble/couscous/ast/TryNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/TryNode.java
@@ -50,6 +50,11 @@ public class TryNode implements StatementNode {
}
@Override
+ public int type() {
+ return NodeTypes.TRY;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return Iterables.concat(
body,
diff --git a/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java b/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java
index 89f6d84..9e4507d 100644
--- a/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java
@@ -43,6 +43,11 @@ public class TypeCoercionNode implements ExpressionNode {
}
@Override
+ public int type() {
+ return NodeTypes.TYPE_COERCION;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.of(expression);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
index ce2ba44..2fb65ef 100644
--- a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
@@ -51,6 +51,11 @@ public class VariableReferenceNode implements AssignableExpressionNode, Referenc
}
@Override
+ public int type() {
+ return NodeTypes.VARIABLE_REFERENCE;
+ }
+
+ @Override
public Iterable<Node> childNodes() {
return ExtraIterables.empty();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/WhileNode.java b/src/main/java/org/zwobble/couscous/ast/WhileNode.java
index 3dd6bce..6cd5c51 100644
--- a/src/main/java/org/zwobble/couscous/ast/WhileNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/WhileNode.java
@@ -34,6 +34,11 @@ public class WhileNode implements StatementNode {
}
@Override
+ public int type() {
+ return NodeTypes.WHILE;
+ }
+
+ @Override
public Iterable<? extends Node> childNodes() {
return ExtraIterables.lazyCons(condition, body);
}