/** * Simulates the effect of executing the given basic block. This modifies * the passed-in frame to represent the end result. * * @param bb {@code non-null;} the basic block * @param frame {@code non-null;} frame to operate on */ public void simulate(ByteBlock bb, Frame frame) { int end = bb.getEnd(); visitor.setFrame(frame); try { for (int off = bb.getStart(); off < end; /*off*/) { int length = code.parseInstruction(off, visitor); visitor.setPreviousOffset(off); off += length; } } catch (SimException ex) { frame.annotate(ex); throw ex; } }
for (int i = 0; i < sz; i++) { ByteBlock bb = list.get(i); int start = bb.getStart(); int end = bb.getEnd(); "block " + Hex.u2(bb.getLabel()) + ": " + Hex.u2(start) + ".." + Hex.u2(end)); changeIndent(1); IntList successors = bb.getSuccessors(); int ssz = successors.size(); if (ssz == 0) { ByteCatchList catches = bb.getCatches(); int csz = catches.size(); for (int j = 0; j < csz; j++) {
ByteCatchList catches = block.getCatches(); machine.startBlock(catches.toRopCatchList()); IntList successors = block.getSuccessors(); subroutines[subroutineLabel].addCallerBlock(block.getLabel()); = new Subroutine (subroutineLabel, block.getLabel()); } else { subroutines[subroutineLabel].addRetBlock(block.getLabel()); int succ = successors.get(i); try { mergeAndWorkAsNecessary(succ, block.getLabel(), calledSubroutine, frame, workSet); } catch (SimException ex) { mergeAndWorkAsNecessary(targ, block.getLabel(), null, f, workSet); } catch (SimException ex) { new BasicBlock(block.getLabel(), il, successors, primarySucc); addOrReplaceBlock(bb, frame.getSubroutines());
new ByteBlock(at, at, next, targets, blockCatches); count++;
for (int i = 0; i < sz; i++) { ByteBlock bb = list.get(i); int start = bb.getStart(); int end = bb.getEnd(); "block " + Hex.u2(bb.getLabel()) + ": " + Hex.u2(start) + ".." + Hex.u2(end)); changeIndent(1); IntList successors = bb.getSuccessors(); int ssz = successors.size(); if (ssz == 0) { ByteCatchList catches = bb.getCatches(); int csz = catches.size(); for (int j = 0; j < csz; j++) {
ByteCatchList catches = block.getCatches(); machine.startBlock(catches.toRopCatchList()); IntList successors = block.getSuccessors(); subroutines[subroutineLabel].addCallerBlock(block.getLabel()); = new Subroutine (subroutineLabel, block.getLabel()); } else { subroutines[subroutineLabel].addRetBlock(block.getLabel()); int succ = successors.get(i); try { mergeAndWorkAsNecessary(succ, block.getLabel(), calledSubroutine, frame, workSet); } catch (SimException ex) { mergeAndWorkAsNecessary(targ, block.getLabel(), null, f, workSet); } catch (SimException ex) { new BasicBlock(block.getLabel(), il, successors, primarySucc); addOrReplaceBlock(bb, frame.getSubroutines());
new ByteBlock(at, at, next, targets, blockCatches); count++;
for (int i = 0; i < sz; i++) { ByteBlock bb = list.get(i); int start = bb.getStart(); int end = bb.getEnd(); "block " + Hex.u2(bb.getLabel()) + ": " + Hex.u2(start) + ".." + Hex.u2(end)); changeIndent(1); IntList successors = bb.getSuccessors(); int ssz = successors.size(); if (ssz == 0) { ByteCatchList catches = bb.getCatches(); int csz = catches.size(); for (int j = 0; j < csz; j++) {
ByteCatchList catches = block.getCatches(); machine.startBlock(catches.toRopCatchList()); IntList successors = block.getSuccessors(); subroutines[subroutineLabel].addCallerBlock(block.getLabel()); = new Subroutine (subroutineLabel, block.getLabel()); } else { subroutines[subroutineLabel].addRetBlock(block.getLabel()); int succ = successors.get(i); try { mergeAndWorkAsNecessary(succ, block.getLabel(), calledSubroutine, frame, workSet); } catch (SimException ex) { mergeAndWorkAsNecessary(targ, block.getLabel(), null, f, workSet); } catch (SimException ex) { new BasicBlock(block.getLabel(), il, successors, primarySucc); addOrReplaceBlock(bb, frame.getSubroutines());
/** * Simulates the effect of executing the given basic block. This modifies * the passed-in frame to represent the end result. * * @param bb {@code non-null;} the basic block * @param frame {@code non-null;} frame to operate on */ public void simulate(ByteBlock bb, Frame frame) { int end = bb.getEnd(); visitor.setFrame(frame); try { for (int off = bb.getStart(); off < end; /*off*/) { int length = code.parseInstruction(off, visitor); visitor.setPreviousOffset(off); off += length; } } catch (SimException ex) { frame.annotate(ex); throw ex; } }
new ByteBlock(at, at, next, targets, blockCatches); count++;
for (int i = 0; i < sz; i++) { ByteBlock bb = list.get(i); int start = bb.getStart(); int end = bb.getEnd(); "block " + Hex.u2(bb.getLabel()) + ": " + Hex.u2(start) + ".." + Hex.u2(end)); changeIndent(1); IntList successors = bb.getSuccessors(); int ssz = successors.size(); if (ssz == 0) { ByteCatchList catches = bb.getCatches(); int csz = catches.size(); for (int j = 0; j < csz; j++) {
ByteCatchList catches = block.getCatches(); machine.startBlock(catches.toRopCatchList()); IntList successors = block.getSuccessors(); subroutines[subroutineLabel].addCallerBlock(block.getLabel()); = new Subroutine (subroutineLabel, block.getLabel()); } else { subroutines[subroutineLabel].addRetBlock(block.getLabel()); int succ = successors.get(i); try { mergeAndWorkAsNecessary(succ, block.getLabel(), calledSubroutine, frame, workSet); } catch (SimException ex) { mergeAndWorkAsNecessary(targ, block.getLabel(), null, f, workSet); } catch (SimException ex) { new BasicBlock(block.getLabel(), il, successors, primarySucc); addOrReplaceBlock(bb, frame.getSubroutines());
/** * Simulates the effect of executing the given basic block. This modifies * the passed-in frame to represent the end result. * * @param bb {@code non-null;} the basic block * @param frame {@code non-null;} frame to operate on */ public void simulate(ByteBlock bb, Frame frame) { int end = bb.getEnd(); visitor.setFrame(frame); try { for (int off = bb.getStart(); off < end; /*off*/) { int length = code.parseInstruction(off, visitor); visitor.setPreviousOffset(off); off += length; } } catch (SimException ex) { frame.annotate(ex); throw ex; } }
new ByteBlock(at, at, next, targets, blockCatches); count++;
for (int i = 0; i < sz; i++) { ByteBlock bb = list.get(i); int start = bb.getStart(); int end = bb.getEnd(); "block " + Hex.u2(bb.getLabel()) + ": " + Hex.u2(start) + ".." + Hex.u2(end)); changeIndent(1); IntList successors = bb.getSuccessors(); int ssz = successors.size(); if (ssz == 0) { ByteCatchList catches = bb.getCatches(); int csz = catches.size(); for (int j = 0; j < csz; j++) {
ByteCatchList catches = block.getCatches(); machine.startBlock(catches.toRopCatchList()); IntList successors = block.getSuccessors(); subroutines[subroutineLabel].addCallerBlock(block.getLabel()); = new Subroutine (subroutineLabel, block.getLabel()); } else { subroutines[subroutineLabel].addRetBlock(block.getLabel()); int succ = successors.get(i); try { mergeAndWorkAsNecessary(succ, block.getLabel(), calledSubroutine, frame, workSet); } catch (SimException ex) { mergeAndWorkAsNecessary(targ, block.getLabel(), null, f, workSet); } catch (SimException ex) { new BasicBlock(block.getLabel(), il, successors, primarySucc); addOrReplaceBlock(bb, frame.getSubroutines());
/** * Simulates the effect of executing the given basic block. This modifies * the passed-in frame to represent the end result. * * @param bb {@code non-null;} the basic block * @param frame {@code non-null;} frame to operate on */ public void simulate(ByteBlock bb, Frame frame) { int end = bb.getEnd(); visitor.setFrame(frame); try { for (int off = bb.getStart(); off < end; /*off*/) { int length = code.parseInstruction(off, visitor); visitor.setPreviousOffset(off); off += length; } } catch (SimException ex) { frame.annotate(ex); throw ex; } }
new ByteBlock(at, at, next, targets, blockCatches); count++;
ByteCatchList catches = block.getCatches(); machine.startBlock(catches.toRopCatchList()); IntList successors = block.getSuccessors(); subroutines[subroutineLabel].addCallerBlock(block.getLabel()); = new Subroutine (subroutineLabel, block.getLabel()); } else { subroutines[subroutineLabel].addRetBlock(block.getLabel()); int succ = successors.get(i); try { mergeAndWorkAsNecessary(succ, block.getLabel(), calledSubroutine, frame, workSet); } catch (SimException ex) { mergeAndWorkAsNecessary(targ, block.getLabel(), null, f, workSet); } catch (SimException ex) { new BasicBlock(block.getLabel(), il, successors, primarySucc); addOrReplaceBlock(bb, frame.getSubroutines());