Operand |
IR_Builder.buildFloat(FloatNode node,
IR_Scope m)
public Operand buildFlip(Node node, IR_Scope m) {
final FlipNode flipNode = (FlipNode) node;
m.getVariableCompiler().retrieveLocalVariable(flipNode.getIndex(), flipNode.getDepth());
if (flipNode.isExclusive()) {
m.performBooleanBranch(new BranchCallback() {
public void branch(IR_Scope m) {
build(flipNode.getEndNode(), m,true);
m.performBooleanBranch(new BranchCallback() {
public void branch(IR_Scope m) {
m.loadFalse();
m.getVariableCompiler().assignLocalVariable(flipNode.getIndex(), flipNode.getDepth(), false);
}
}, new BranchCallback() {
public void branch(IR_Scope m) {
}
});
m.loadTrue();
}
}, new BranchCallback() {
public void branch(IR_Scope m) {
build(flipNode.getBeginNode(), m,true);
becomeTrueOrFalse(m);
m.getVariableCompiler().assignLocalVariable(flipNode.getIndex(), flipNode.getDepth(), true);
}
});
} else {
m.performBooleanBranch(new BranchCallback() {
public void branch(IR_Scope m) {
build(flipNode.getEndNode(), m,true);
m.performBooleanBranch(new BranchCallback() {
public void branch(IR_Scope m) {
m.loadFalse();
m.getVariableCompiler().assignLocalVariable(flipNode.getIndex(), flipNode.getDepth(), false);
}
}, new BranchCallback() {
public void branch(IR_Scope m) {
}
});
m.loadTrue();
}
}, new BranchCallback() {
public void branch(IR_Scope m) {
build(flipNode.getBeginNode(), m,true);
m.performBooleanBranch(new BranchCallback() {
public void branch(IR_Scope m) {
build(flipNode.getEndNode(), m,true);
flipTrueOrFalse(m);
m.getVariableCompiler().assignLocalVariable(flipNode.getIndex(), flipNode.getDepth(), false);
m.loadTrue();
}
}, new BranchCallback() {
public void branch(IR_Scope m) {
m.loadFalse();
}
});
}
});
}
// TODO: don't require pop
if (!expr) m.consumeCurrentValue();
}
private void becomeTrueOrFalse(IR_Scope m) {
m.performBooleanBranch(new BranchCallback() {
public void branch(IR_Scope m) {
m.loadTrue();
}
}, new BranchCallback() {
public void branch(IR_Scope m) {
m.loadFalse();
}
});
}
private void flipTrueOrFalse(IR_Scope m) {
m.performBooleanBranch(new BranchCallback() {
public void branch(IR_Scope m) {
m.loadFalse();
}
}, new BranchCallback() {
public void branch(IR_Scope m) {
m.loadTrue();
}
});
} |