Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public Result visit(
- minijava.syntaxtree.IfStatement n, Context argu) {
- minijava.syntaxtree.Expression mjBoolExpr = n.expression;
- minijava.syntaxtree.Statement mjTrueStmt = n.statement;
- minijava.syntaxtree.Statement mjFalseStmt = n.statement1;
- // get two unique `IF?' labels
- PigletLabel pIF2 = createLabel("IF");
- PigletLabel pIF3 = createLabel("IF");
- // MOVE TEMP ? <BoolExpr>
- Result boolResult = mjBoolExpr.accept(this, argu);
- assert(boolResult.node instanceof piglet.syntaxtree.Exp);
- PigletTemp boolTemp = createTemp();
- argu.attachMoveStmt(boolTemp,
- (piglet.syntaxtree.Exp) boolResult.node);
- // CJUMP TEMP ? IF2
- argu.attachCJumpStmt(
- new piglet.syntaxtree.Exp(
- new piglet.syntaxtree.NodeChoice(
- createTempNode(boolTemp), 4)),
- pIF3);
- // TrueStmt
- mjTrueStmt.accept(this, argu);
- // JUMP IF3
- argu.attachJumpStmt(pIF3);
- // IF2: NOOP
- argu.attachLabeledNoOpStmt(pIF2);
- // FalseStmt
- mjFalseStmt.accept(this, argu);
- // IF3: NOOP
- argu.attachLabeledNoOpStmt(pIF3);
- return null; // XXX: what to do? this returns sibling nodes!
- }
Add Comment
Please, Sign In to add comment