z80-tools/src/nl/grauw/glass/expressions/IfElse.java

77 wiersze
1.7 KiB
Java

package nl.grauw.glass.expressions;
public class IfElse extends Passthrough {
private final Expression condition;
private final Expression trueTerm;
private final Expression falseTerm;
public IfElse(Expression condition, Expression trueTerm, Expression falseTerm) {
this.condition = condition;
this.trueTerm = trueTerm;
this.falseTerm = falseTerm;
}
@Override
public IfElse copy(Context context) {
return new IfElse(condition.copy(context), trueTerm.copy(context), falseTerm.copy(context));
}
public Expression getCondition() {
return condition;
}
public Expression getTrueTerm() {
return trueTerm;
}
public Expression getFalseTerm() {
return falseTerm;
}
public boolean isTrue() {
return condition.getInteger() != 0;
}
@Override
public Expression resolve() {
return isTrue() ? trueTerm : falseTerm;
}
@Override
public boolean isInteger() {
return (trueTerm.isInteger() && falseTerm.isInteger()) || super.isInteger();
}
@Override
public boolean isString() {
return (trueTerm.isString() && falseTerm.isString()) || super.isString();
}
@Override
public boolean isRegister() {
return (trueTerm.isRegister() && falseTerm.isRegister()) || super.isRegister();
}
@Override
public boolean isFlag() {
return (trueTerm.isFlag() && falseTerm.isFlag()) || super.isFlag();
}
@Override
public boolean isContext() {
return (trueTerm.isContext() && falseTerm.isContext()) || super.isContext();
}
@Override
public String toString() {
return "" + condition + " ? " + trueTerm + " : " + falseTerm;
}
@Override
public String toDebugString() {
return "{" + condition.toDebugString() + " ? " + trueTerm.toDebugString() + " : " + falseTerm.toDebugString() + "}";
}
}