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 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 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); }
finallyBlock.addExitSuccessor(exitBlock()); exitBlocks.push(currentBlock); addContinueTarget(currentBlock); currentBlock.isFinallyBlock = true; breakTargets.addLast(currentBlock);
finallyBlock.addExitSuccessor(exitBlock()); exitBlocks.push(currentBlock); addContinueTarget(currentBlock); currentBlock.isFinallyBlock = true; breakTargets.addLast(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 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); }
build(updateTree); addContinueTarget(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()); }