aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java b/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java
new file mode 100644
index 0000000..21f823b
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java
@@ -0,0 +1,69 @@
+package org.zwobble.couscous.ast;
+
+import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
+import org.zwobble.couscous.ast.visitors.NodeTransformer;
+import org.zwobble.couscous.types.ScalarType;
+import org.zwobble.couscous.types.Type;
+import org.zwobble.couscous.types.Types;
+
+public class InstanceOfNode implements ExpressionNode {
+ private final ExpressionNode left;
+ private final ScalarType right;
+
+ public InstanceOfNode(ExpressionNode left, ScalarType right) {
+ this.left = left;
+ this.right = right;
+ }
+
+ public ExpressionNode getLeft() {
+ return left;
+ }
+
+ public ScalarType getRight() {
+ return right;
+ }
+
+ @Override
+ public Type getType() {
+ return Types.BOOLEAN;
+ }
+
+ @Override
+ public <T> T accept(ExpressionNodeMapper<T> visitor) {
+ return visitor.visit(this);
+ }
+
+ @Override
+ public ExpressionNode transform(NodeTransformer transformer) {
+ return new InstanceOfNode(
+ transformer.transformExpression(left),
+ transformer.transform(right));
+ }
+
+ @Override
+ public String toString() {
+ return "InstanceOfNode(" +
+ "left=" + left +
+ ", right=" + right +
+ ')';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ InstanceOfNode that = (InstanceOfNode) o;
+
+ if (!left.equals(that.left)) return false;
+ return right.equals(that.right);
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = left.hashCode();
+ result = 31 * result + right.hashCode();
+ return result;
+ }
+}