CommonJumpNode.java
package edu.udel.cis.vsl.abc.ast.node.common.statement;
import java.io.PrintStream;
import edu.udel.cis.vsl.abc.ast.IF.DifferenceObject;
import edu.udel.cis.vsl.abc.ast.node.IF.ASTNode;
import edu.udel.cis.vsl.abc.ast.node.IF.statement.JumpNode;
import edu.udel.cis.vsl.abc.token.IF.Source;
public class CommonJumpNode extends CommonStatementNode implements JumpNode {
private JumpKind jumpKind;
public CommonJumpNode(Source source, JumpKind jumpKind) {
super(source);
this.jumpKind = jumpKind;
}
@Override
public JumpKind getKind() {
return jumpKind;
}
@Override
protected void printBody(PrintStream out) {
switch (jumpKind) {
case GOTO :
out.print("GotoStatement");
break;
case CONTINUE :
out.print("ContinueStatement");
break;
case BREAK :
out.print("BreakStatement");
break;
case RETURN :
out.print("ReturnStatement");
break;
default :
throw new RuntimeException("impossible");
}
}
@Override
public JumpNode copy() {
return new CommonJumpNode(getSource(), getKind());
}
@Override
public StatementKind statementKind() {
return StatementKind.JUMP;
}
@Override
protected DifferenceObject diffWork(ASTNode that) {
if (that instanceof JumpNode)
if (this.jumpKind == ((JumpNode) that).getKind())
return null;
return new DifferenceObject(this, that);
}
}