Guest User

Untitled

a guest
Jun 18th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. @Override
  2. public Result visit(
  3. minijava.syntaxtree.IfStatement n, Context argu) {
  4. minijava.syntaxtree.Expression mjBoolExpr = n.expression;
  5. minijava.syntaxtree.Statement mjTrueStmt = n.statement;
  6. minijava.syntaxtree.Statement mjFalseStmt = n.statement1;
  7.  
  8. // get two unique `IF?' labels
  9. PigletLabel pIF2 = createLabel("IF");
  10. PigletLabel pIF3 = createLabel("IF");
  11.  
  12. // MOVE TEMP ? <BoolExpr>
  13. Result boolResult = mjBoolExpr.accept(this, argu);
  14. assert(boolResult.node instanceof piglet.syntaxtree.Exp);
  15. PigletTemp boolTemp = createTemp();
  16. argu.attachMoveStmt(boolTemp,
  17. (piglet.syntaxtree.Exp) boolResult.node);
  18. // CJUMP TEMP ? IF2
  19. argu.attachCJumpStmt(
  20. new piglet.syntaxtree.Exp(
  21. new piglet.syntaxtree.NodeChoice(
  22. createTempNode(boolTemp), 4)),
  23. pIF3);
  24. // TrueStmt
  25. mjTrueStmt.accept(this, argu);
  26. // JUMP IF3
  27. argu.attachJumpStmt(pIF3);
  28. // IF2: NOOP
  29. argu.attachLabeledNoOpStmt(pIF2);
  30. // FalseStmt
  31. mjFalseStmt.accept(this, argu);
  32. // IF3: NOOP
  33. argu.attachLabeledNoOpStmt(pIF3);
  34.  
  35. return null; // XXX: what to do? this returns sibling nodes!
  36. }
Add Comment
Please, Sign In to add comment