From ecfac0740033b048b55001332eb11131b64ddcaf Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 17 Apr 2016 15:33:54 +0100 Subject: Add try nodes --- .../java/org/zwobble/couscous/ast/TryNode.java | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/main/java/org/zwobble/couscous/ast/TryNode.java (limited to 'src/main/java/org/zwobble/couscous/ast/TryNode.java') diff --git a/src/main/java/org/zwobble/couscous/ast/TryNode.java b/src/main/java/org/zwobble/couscous/ast/TryNode.java new file mode 100644 index 0000000..643e65c --- /dev/null +++ b/src/main/java/org/zwobble/couscous/ast/TryNode.java @@ -0,0 +1,71 @@ +package org.zwobble.couscous.ast; + +import org.zwobble.couscous.ast.visitors.NodeTransformer; +import org.zwobble.couscous.ast.visitors.StatementNodeMapper; + +import java.util.List; + +import static org.zwobble.couscous.util.ExtraLists.eagerMap; + +public class TryNode implements StatementNode { + public static TryNode tryStatement(List body, List exceptionHandlers) { + return new TryNode(body, exceptionHandlers); + } + + private final List body; + private final List exceptionHandlers; + + public TryNode(List body, List exceptionHandlers) { + this.body = body; + this.exceptionHandlers = exceptionHandlers; + } + + public List getBody() { + return body; + } + + public List getExceptionHandlers() { + return exceptionHandlers; + } + + @Override + public T accept(StatementNodeMapper visitor) { + return visitor.visit(this); + } + + @Override + public StatementNode transform(NodeTransformer transformer) { + return new TryNode( + transformer.transformStatements(body), + eagerMap(exceptionHandlers, handler -> new ExceptionHandlerNode( + transformer.transform(handler.getExceptionType()), + transformer.transformStatements(handler.getBody())))); + } + + @Override + public String toString() { + return "TryNode(" + + "body=" + body + + ", exceptionHandlers=" + exceptionHandlers + + ')'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + TryNode tryNode = (TryNode) o; + + if (!body.equals(tryNode.body)) return false; + return exceptionHandlers.equals(tryNode.exceptionHandlers); + + } + + @Override + public int hashCode() { + int result = body.hashCode(); + result = 31 * result + exceptionHandlers.hashCode(); + return result; + } +} -- cgit v1.2.3