CommonMPIContractAbsentNode.java
package edu.udel.cis.vsl.abc.ast.node.common.acsl;
import java.io.PrintStream;
import java.util.LinkedList;
import java.util.List;
import edu.udel.cis.vsl.abc.ast.node.IF.acsl.MPIContractAbsentEventNode;
import edu.udel.cis.vsl.abc.ast.node.IF.acsl.MPIContractAbsentNode;
import edu.udel.cis.vsl.abc.ast.node.IF.expression.ExpressionNode;
import edu.udel.cis.vsl.abc.token.IF.Source;
public class CommonMPIContractAbsentNode
extends CommonMPIContractExpressionNode
implements MPIContractAbsentNode {
public CommonMPIContractAbsentNode(Source source,
List<ExpressionNode> events) {
super(source, events, MPIContractExpressionKind.MPI_ABSENT,
"\\absent");
}
@Override
public MPIContractAbsentEventNode absentEvent() {
return (MPIContractAbsentEventNode) child(0);
}
@Override
public MPIContractAbsentEventNode fromEvent() {
return (MPIContractAbsentEventNode) child(1);
}
@Override
public MPIContractAbsentEventNode untilEvent() {
return (MPIContractAbsentEventNode) child(2);
}
@Override
public MPIContractAbsentNode copy() {
List<ExpressionNode> events = new LinkedList<>();
for (int i = 0; i < 3; i++)
events.add(duplicate(getArgument(i)));
return new CommonMPIContractAbsentNode(getSource(), events);
}
@Override
public boolean isSideEffectFree(boolean errorsAreSideEffects) {
return true;
}
@Override
public boolean isConstantExpression() {
return false;
}
@Override
protected void printBody(PrintStream out) {
out.print(toString());
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("\\absent(");
sb.append(absentEvent().prettyRepresentation() + ", ");
sb.append(fromEvent().prettyRepresentation() + ", ");
sb.append(untilEvent().prettyRepresentation() + ")");
return sb.toString();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof MPIContractAbsentNode) {
MPIContractAbsentNode other = (MPIContractAbsentNode) obj;
if (other.absentEvent().equals(absentEvent()))
if (other.fromEvent().equals(fromEvent()))
if (other.untilEvent().equals(untilEvent()))
return true;
}
return false;
}
}