Statement generateJumpStatement(BasicBlock target) { if (nextBlock == target && blockMap[target.getIndex()] == null) { return null; } Decompiler.Block block = blockMap[target.getIndex()]; if (block == null) { throw new IllegalStateException("Could not find block for basic block $" + target.getIndex()); } if (target.getIndex() == indexer.nodeAt(block.end)) { BreakStatement breakStmt = new BreakStatement(); breakStmt.setLocation(currentLocation); breakStmt.setTarget(block.statement); return breakStmt; } else { ContinueStatement contStmt = new ContinueStatement(); contStmt.setLocation(currentLocation); contStmt.setTarget(block.statement); return contStmt; } } private Statement generateJumpStatement(SwitchStatement stmt, int target) {
@Override public void visit(BreakStatement statement) { try { output.writeByte(statement.getTarget() != null && statement.getTarget().getId() != null ? 8 : 9); writeLocation(statement.getLocation()); if (statement.getTarget() != null && statement.getTarget().getId() != null) { output.writeUTF(statement.getTarget().getId()); } } catch (IOException e) { throw new IOExceptionWrapper(e); } }
private Statement generateJumpStatement(SwitchStatement stmt, int target) { Statement body = generateJumpStatement(program.basicBlockAt(target)); if (body == null) { BreakStatement breakStmt = new BreakStatement(); breakStmt.setTarget(stmt); body = breakStmt; } return body; }
@Override public void visit(BreakStatement statement) { if (statement.getTarget() == blockToCount) { ++count; } }
private boolean briefStatementComparison(List<Statement> firstSeq, List<Statement> secondSeq) { if (firstSeq.isEmpty() && secondSeq.isEmpty()) { return true; } if (firstSeq.size() != 1 || secondSeq.size() != 1) { return false; } Statement first = firstSeq.get(0); Statement second = secondSeq.get(0); if (first instanceof BreakStatement && second instanceof BreakStatement) { BreakStatement firstBreak = (BreakStatement) first; BreakStatement secondBreak = (BreakStatement) second; return firstBreak.getTarget() == secondBreak.getTarget(); } return false; }
private Statement generateJumpStatement(SwitchStatement stmt, int target) { Statement body = generateJumpStatement(program.basicBlockAt(target)); if (body == null) { BreakStatement breakStmt = new BreakStatement(); breakStmt.setTarget(stmt); body = breakStmt; } return body; }
BreakStatement stmt = new BreakStatement(); stmt.setLocation(readLocation(input)); stmt.setTarget(statementMap.get(input.readUTF())); return stmt; BreakStatement stmt = new BreakStatement(); stmt.setLocation(readLocation(input)); return stmt;
@Override public void visit(BreakStatement statement) { IdentifiedStatement target = statement.getTarget(); if (target == null) { target = currentBreakTarget; } WasmBlock wasmTarget = breakTargets.get(target); usedBlocks.add(wasmTarget); result = new WasmBreak(wasmTarget); result.setLocation(statement.getLocation()); }
@Override public void visit(BreakStatement statement) { IdentifiedStatement target = statement.getTarget(); if (target == null) { target = currentBlock; } incrementBlock(target); }
Statement generateJumpStatement(BasicBlock target) { if (nextBlock == target && blockMap[target.getIndex()] == null) { return null; } Decompiler.Block block = blockMap[target.getIndex()]; if (block == null) { throw new IllegalStateException("Could not find block for basic block $" + target.getIndex()); } if (target.getIndex() == indexer.nodeAt(block.end)) { BreakStatement breakStmt = new BreakStatement(); breakStmt.setLocation(currentLocation); breakStmt.setTarget(block.statement); return breakStmt; } else { ContinueStatement contStmt = new ContinueStatement(); contStmt.setLocation(currentLocation); contStmt.setTarget(block.statement); return contStmt; } } private Statement generateJumpStatement(SwitchStatement stmt, int target) {
@Override public void visit(BreakStatement statement) { if (statement.getTarget() == replacedBreak) { replaceBy = new ContinueStatement(); replaceBy.setTarget(replacement); replaceBy.setLocation(statement.getLocation()); } }
@Override public void visit(BreakStatement statement) { if (blockSuccessors.containsKey(statement.getTarget())) { if (usageCounter.getCount(statement.getTarget()) == 1) { currentSequence.subList(currentIndex, currentSequence.size()).clear(); List<Statement> successors = blockSuccessors.remove(statement.getTarget()); currentSequence.addAll(successors); successors.clear(); --currentIndex; return; } } currentSequence.subList(currentIndex + 1, currentSequence.size()).clear(); }
BreakStatement stmt = new BreakStatement(); stmt.setLocation(readLocation(input)); stmt.setTarget(statementMap.get(input.readUTF())); return stmt; BreakStatement stmt = new BreakStatement(); stmt.setLocation(readLocation(input)); return stmt;
@Override public void visit(BreakStatement statement) { try { debugEmitter.emitStatementStart(); if (statement.getLocation() != null) { pushLocation(statement.getLocation()); } writer.append("break"); if (statement.getTarget() != null) { writer.append(' ').append(mapBlockId(statement.getTarget().getId())); } writer.append(";").softNewLine(); if (statement.getLocation() != null) { popLocation(); } } catch (IOException e) { throw new RenderingException("IO error occurred", e); } }
@Override public void visit(BreakStatement statement) { try { output.writeByte(statement.getTarget() != null && statement.getTarget().getId() != null ? 8 : 9); writeLocation(statement.getLocation()); if (statement.getTarget() != null && statement.getTarget().getId() != null) { output.writeUTF(statement.getTarget().getId()); } } catch (IOException e) { throw new IOExceptionWrapper(e); } }
private boolean hitsRedundantBreakThreshold(List<Statement> statements, IdentifiedStatement exit) { int count = 0; for (int i = 0; i < statements.size(); ++i) { Statement stmt = statements.get(i); if (!(stmt instanceof ConditionalStatement)) { continue; } ConditionalStatement conditional = (ConditionalStatement) stmt; if (!conditional.getConsequent().isEmpty() && !conditional.getAlternative().isEmpty()) { continue; } List<Statement> innerStatements = !conditional.getConsequent().isEmpty() ? conditional.getConsequent() : conditional.getAlternative(); if (innerStatements.isEmpty()) { continue; } Statement last = innerStatements.get(innerStatements.size() - 1); if (!(last instanceof BreakStatement)) { continue; } BreakStatement breakStmt = (BreakStatement) last; if (exit != null && exit == breakStmt.getTarget() && ++count == 8) { return true; } } return false; }
@Override public void visit(BreakStatement statement) { IdentifiedStatement target = statement.getTarget(); if (target == null) { target = currentBreakTarget; } WasmBlock wasmTarget = breakTargets.get(target); usedBlocks.add(wasmTarget); result = new WasmBreak(wasmTarget); result.setLocation(statement.getLocation()); }