@Override public Node leaveIfNode(final IfNode ifNode) { final Node test = ifNode.getTest(); if (test instanceof LiteralNode.PrimitiveLiteralNode) { final boolean isTrue = ((LiteralNode.PrimitiveLiteralNode<?>)test).isTrue(); final Block executed = isTrue ? ifNode.getPass() : ifNode.getFail(); final Block dropped = isTrue ? ifNode.getFail() : ifNode.getPass(); final List<Statement> statements = new ArrayList<>(); if (executed != null) { statements.addAll(executed.getStatements()); // Get statements form executed branch } if (dropped != null) { extractVarNodes(dropped, statements); // Get var-nodes from non-executed branch } if (statements.isEmpty()) { return new EmptyNode(ifNode); } return BlockStatement.createReplacement(ifNode, ifNode.getFinish(), statements); } return ifNode; }
@Override public boolean enterBlockStatement(final BlockStatement blockStatement) { if (blockStatement.isSynthetic()) { final Block blk = blockStatement.getBlock(); blk.getStatements().get(0).accept(this); return false; } enterDefault(blockStatement); type("BlockStatement"); comma(); array("body", blockStatement.getBlock().getStatements()); return leave(); }
@Override public Node leaveIfNode(final IfNode ifNode) { final Node test = ifNode.getTest(); if (test instanceof LiteralNode.PrimitiveLiteralNode) { final boolean isTrue = ((LiteralNode.PrimitiveLiteralNode<?>)test).isTrue(); final Block executed = isTrue ? ifNode.getPass() : ifNode.getFail(); final Block dropped = isTrue ? ifNode.getFail() : ifNode.getPass(); final List<Statement> statements = new ArrayList<>(); if (executed != null) { statements.addAll(executed.getStatements()); // Get statements form executed branch } if (dropped != null) { extractVarNodesFromDeadCode(dropped, statements); // Get var-nodes from non-executed branch } if (statements.isEmpty()) { return new EmptyNode(ifNode); } return BlockStatement.createReplacement(ifNode, ifNode.getFinish(), statements); } return ifNode; }
@Override public boolean enterBlockStatement(final BlockStatement blockStatement) { enterDefault(blockStatement); type("BlockStatement"); comma(); property("block"); blockStatement.getBlock().accept(this); return leave(); }
private void addStatementEnclosedInBlock(final Statement stmt) { BlockStatement b = BlockStatement.createReplacement(stmt, Collections.<Statement>singletonList(stmt)); if(stmt.isTerminal()) { b = b.setBlock(b.getBlock().setIsTerminal(null, true)); } addStatement(b); }
@Override public boolean enterBlockStatement(final BlockStatement blockStatement) { if(!method.isReachable()) { return false; } enterStatement(blockStatement); blockStatement.getBlock().accept(this); return false; }
@Override public boolean enterBlockStatement(final BlockStatement blockStatement) { final Block block = blockStatement.getBlock(); if (blockStatement.isSynthetic()) { assert block != null && block.getStatements() != null && block.getStatements().size() == 1; curStat = translateStat(block.getStatements().get(0)); } else { curStat = new BlockTreeImpl(blockStatement, translateStats(block != null? block.getStatements() : null)); } return false; }
@Override public boolean enterBlockStatement(BlockStatement blockStatement) { enterDefault(blockStatement); type("BlockStatement"); comma(); property("block"); blockStatement.getBlock().accept(this); return leave(); }
@Override public boolean enterBlockStatement(final BlockStatement blockStatement) { lineNumber(blockStatement); blockStatement.getBlock().accept(this); return false; }
@Override public Node leaveIfNode(final IfNode ifNode) { final Node test = ifNode.getTest(); if (test instanceof LiteralNode) { final Block shortCut = ((LiteralNode<?>)test).isTrue() ? ifNode.getPass() : ifNode.getFail(); if (shortCut != null) { return new BlockStatement(ifNode.getLineNumber(), shortCut); } return new EmptyNode(ifNode); } return ifNode; }
@Override public boolean enterBlockStatement(final BlockStatement statement) { statement.getBlock().accept(this); return false; }