private Block createUnconditionalJump(Tree terminator, @Nullable Block target, @Nullable Block successorWithoutJump) { Block result = createBlock(); result.terminator = terminator; if (target != null) { if (target == exitBlock()) { result.addExitSuccessor(target); } else { result.addSuccessor(target); } } result.successorWithoutJump = successorWithoutJump; return result; }
private Block createUnconditionalJump(Tree terminator, @Nullable Block target, @Nullable Block successorWithoutJump) { Block result = createBlock(); result.terminator = terminator; if (target != null) { if (target == exitBlock()) { result.addExitSuccessor(target); } else { result.addSuccessor(target); } } result.successorWithoutJump = successorWithoutJump; return result; }
hasDefaultCase = containsDefaultCase(caseGroupTree.labels()); switches.getLast().addSuccessor(currentBlock); if (!caseGroupTree.equals(firstCase)) { currentBlock.addSuccessor(switchSuccessor);
switches.getLast().addSuccessor(currentBlock); if (!caseGroupTree.equals(firstCase)) { currentBlock.addSuccessor(switchSuccessor);
currentBlock = createUnconditionalJump(tree, body); updateBlock.addSuccessor(currentBlock);
private void buildForStatement(ForStatementTree tree) { Block falseBranch = currentBlock; // process step currentBlock = createBlock(); Block updateBlock = currentBlock; build(tree.update()); addContinueTarget(currentBlock); // process body currentBlock = createBlock(currentBlock); breakTargets.addLast(falseBranch); build(tree.statement()); breakTargets.removeLast(); continueTargets.removeLast(); Block body = currentBlock; // process condition ExpressionTree condition = tree.condition(); if (condition != null) { currentBlock = createBranch(tree, body, falseBranch); buildCondition(condition, body, falseBranch); } else { currentBlock = createUnconditionalJump(tree, body, falseBranch); } updateBlock.addSuccessor(currentBlock); // process init currentBlock = createBlock(currentBlock); build(tree.initializer()); }
private void buildForStatement(ForStatementTree tree) { Block falseBranch = currentBlock; // process step currentBlock = createBlock(); Block updateBlock = currentBlock; build(tree.update()); addContinueTarget(currentBlock); // process body currentBlock = createBlock(currentBlock); breakTargets.addLast(falseBranch); build(tree.statement()); breakTargets.removeLast(); continueTargets.removeLast(); Block body = currentBlock; // process condition ExpressionTree condition = tree.condition(); if (condition != null) { currentBlock = createBranch(tree, body, falseBranch); buildCondition(condition, body, falseBranch); } else { currentBlock = createUnconditionalJump(tree, body, falseBranch); } updateBlock.addSuccessor(currentBlock); // process init currentBlock = createBlock(currentBlock); build(tree.initializer()); }
private void buildForEachStatement(ForEachStatement tree) { // TODO(npe) One solution is to create a forstatement node depending on type of expression (iterable or array) and build CFG from it. Block afterLoop = currentBlock; Block statementBlock = createBlock(); Block loopback = createBranch(tree, statementBlock, afterLoop); currentBlock = createBlock(loopback); addContinueTarget(loopback); breakTargets.addLast(afterLoop); build(tree.statement()); breakTargets.removeLast(); continueTargets.removeLast(); statementBlock.addSuccessor(currentBlock); currentBlock = loopback; build(tree.variable()); currentBlock = createBlock(currentBlock); build(tree.expression()); currentBlock = createBlock(currentBlock); }
private void buildWhileStatement(WhileStatementTree whileStatement) { Block falseBranch = currentBlock; Block loopback = createBlock(); // process body currentBlock = createBlock(loopback); addContinueTarget(loopback); breakTargets.addLast(falseBranch); build(whileStatement.statement()); breakTargets.removeLast(); continueTargets.removeLast(); Block bodyBlock = currentBlock; // process condition currentBlock = createBranch(whileStatement, bodyBlock, falseBranch); buildCondition(whileStatement.condition(), bodyBlock, falseBranch); loopback.addSuccessor(currentBlock); currentBlock = createBlock(currentBlock); }
private void buildForEachStatement(ForEachStatement tree) { // TODO(npe) One solution is to create a forstatement node depending on type of expression (iterable or array) and build CFG from it. Block afterLoop = currentBlock; Block statementBlock = createBlock(); Block loopback = createBranch(tree, statementBlock, afterLoop); currentBlock = createBlock(loopback); addContinueTarget(loopback); breakTargets.addLast(afterLoop); build(tree.statement()); breakTargets.removeLast(); continueTargets.removeLast(); statementBlock.addSuccessor(currentBlock); currentBlock = loopback; build(tree.variable()); currentBlock = createBlock(currentBlock); build(tree.expression()); currentBlock = createBlock(currentBlock); }
private void buildForEachStatement(ForEachStatement tree) { // TODO(npe) One solution is to create a forstatement node depending on type of expression (iterable or array) and build CFG from it. Block afterLoop = currentBlock; Block statementBlock = createBlock(); Block loopback = createBranch(tree, statementBlock, afterLoop); currentBlock = createBlock(loopback); addContinueTarget(loopback); breakTargets.addLast(afterLoop); build(tree.statement()); breakTargets.removeLast(); continueTargets.removeLast(); statementBlock.addSuccessor(currentBlock); currentBlock = loopback; build(tree.variable()); currentBlock = createBlock(currentBlock); build(tree.expression()); currentBlock = createBlock(currentBlock); }
private void buildDoWhileStatement(DoWhileStatementTree doWhileStatementTree) { Block falseBranch = currentBlock; Block loopback = createBlock(); // process condition currentBlock = createBranch(doWhileStatementTree, loopback, falseBranch); buildCondition(doWhileStatementTree.condition(), loopback, falseBranch); // process body addContinueTarget(currentBlock); currentBlock = createBlock(currentBlock); breakTargets.addLast(falseBranch); build(doWhileStatementTree.statement()); breakTargets.removeLast(); continueTargets.removeLast(); loopback.addSuccessor(currentBlock); currentBlock = createBlock(currentBlock); }
private void buildDoWhileStatement(DoWhileStatementTree doWhileStatementTree) { Block falseBranch = currentBlock; Block loopback = createBlock(); // process condition currentBlock = createBranch(doWhileStatementTree, loopback, falseBranch); buildCondition(doWhileStatementTree.condition(), loopback, falseBranch); // process body currentBlock = createBlock(currentBlock); addContinueTarget(loopback); breakTargets.addLast(falseBranch); build(doWhileStatementTree.statement()); breakTargets.removeLast(); continueTargets.removeLast(); loopback.addSuccessor(currentBlock); currentBlock = createBlock(currentBlock); }
private void buildWhileStatement(WhileStatementTree whileStatement) { Block falseBranch = currentBlock; Block loopback = createBlock(); // process body currentBlock = createBlock(loopback); addContinueTarget(loopback); breakTargets.addLast(falseBranch); build(whileStatement.statement()); breakTargets.removeLast(); continueTargets.removeLast(); Block bodyBlock = currentBlock; // process condition currentBlock = createBranch(whileStatement, bodyBlock, falseBranch); buildCondition(whileStatement.condition(), bodyBlock, falseBranch); loopback.addSuccessor(currentBlock); currentBlock = createBlock(currentBlock); }
private void buildDoWhileStatement(DoWhileStatementTree doWhileStatementTree) { Block falseBranch = currentBlock; Block loopback = createBlock(); // process condition currentBlock = createBranch(doWhileStatementTree, loopback, falseBranch); buildCondition(doWhileStatementTree.condition(), loopback, falseBranch); // process body addContinueTarget(currentBlock); currentBlock = createBlock(currentBlock); breakTargets.addLast(falseBranch); build(doWhileStatementTree.statement()); breakTargets.removeLast(); continueTargets.removeLast(); loopback.addSuccessor(currentBlock); currentBlock = createBlock(currentBlock); }
private void buildWhileStatement(WhileStatementTree whileStatement) { Block falseBranch = currentBlock; Block loopback = createBlock(); // process body currentBlock = createBlock(loopback); addContinueTarget(loopback); breakTargets.addLast(falseBranch); build(whileStatement.statement()); breakTargets.removeLast(); continueTargets.removeLast(); Block bodyBlock = currentBlock; // process condition currentBlock = createBranch(whileStatement, bodyBlock, falseBranch); buildCondition(whileStatement.condition(), bodyBlock, falseBranch); loopback.addSuccessor(currentBlock); currentBlock = createBlock(currentBlock); }
private Block createUnconditionalJump(Tree terminator, @Nullable Block target) { Block result = createBlock(); result.terminator = terminator; if (target != null) { if (target == exitBlock()) { result.addExitSuccessor(target); } else { result.addSuccessor(target); } } return result; }
private Block createBlock(Block successor) { Block result = createBlock(); result.addSuccessor(successor); return result; }
private Block createBlock(Block successor) { Block result = createBlock(); result.addSuccessor(successor); return result; }
private Block createBlock(Block successor) { Block result = createBlock(); result.addSuccessor(successor); return result; }