private ContRef thenTarget;
private ContRef elseTarget;
- public If(ValRef condition, ContRef thenTarget, ContRef elseTarget) {
+ public If(int lineNumber, ValRef condition, ContRef thenTarget, ContRef elseTarget) {
+ super(lineNumber);
setCondition(condition);
setThenTarget(thenTarget);
setElseTarget(elseTarget);
@Override
public void generateCode(MethodBuilder mb) {
+ mb.lineNumber(lineNumber);
Val binding = condition.getBinding();
simplifyTestCode: if(binding instanceof BoundVar) {
BoundVar boundVar = (BoundVar)binding;
@Override
public SSAExit copy(CopyContext context) {
- return new If(context.copy(condition),
+ If copy = new If(lineNumber,
+ context.copy(condition),
context.copy(thenTarget),
context.copy(elseTarget));
+ return copy;
}
@Override
if(cond instanceof BooleanConstant) {
SSAExit newExit;
if(((BooleanConstant) cond).getValue()) {
- newExit = new Jump(thenTarget);
+ newExit = new Jump(lineNumber, thenTarget);
elseTarget.remove();
}
else {
- newExit = new Jump(elseTarget);
+ newExit = new Jump(lineNumber, elseTarget);
thenTarget.remove();
}
condition.remove();
else if(thenTarget.getBinding() == elseTarget.getBinding()) {
elseTarget.remove();
condition.remove();
- getParent().setExit(new Jump(thenTarget));
+ getParent().setExit(new Jump(lineNumber, thenTarget));
context.markModified("equal-branches-if");
}
}
public void forValRefs(ValRefVisitor visitor) {
visitor.visit(condition);
}
+
+ @Override
+ public void cleanup() {
+ condition.remove();
+ }
}