jaxp/src/com/sun/org/apache/bcel/internal/generic/Select.java

Print this page

        

*** 95,106 **** Select(short opcode, int[] match, InstructionHandle[] targets, InstructionHandle target) { super(opcode, target); this.targets = targets; ! for(int i=0; i < targets.length; i++) ! notifyTarget(null, targets[i], this); this.match = match; if((match_length = match.length) != targets.length) throw new ClassGenException("Match and target array have not the same length"); --- 95,107 ---- Select(short opcode, int[] match, InstructionHandle[] targets, InstructionHandle target) { super(opcode, target); this.targets = targets; ! for(int i=0; i < targets.length; i++) { ! BranchInstruction.notifyTargetChanged(targets[i], this); ! } this.match = match; if((match_length = match.length) != targets.length) throw new ClassGenException("Match and target array have not the same length");
*** 119,128 **** --- 120,130 ---- * * @param offset additional offset caused by preceding (variable length) instructions * @param max_offset the maximum offset that may be caused by these instructions * @return additional offset caused by possible change of this instruction's length */ + @Override protected int updatePosition(int offset, int max_offset) { position += offset; // Additional offset caused by preceding SWITCHs, GOTOs, etc. short old_length = length;
*** 136,145 **** --- 138,148 ---- /** * Dump instruction as byte code to stream out. * @param out Output stream */ + @Override public void dump(DataOutputStream out) throws IOException { out.writeByte(opcode); for(int i=0; i < padding; i++) // Padding bytes out.writeByte(0);
*** 149,158 **** --- 152,162 ---- } /** * Read needed data (e.g. index) from file. */ + @Override protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException { padding = (4 - (bytes.getIndex() % 4)) % 4; // Compute number of pad bytes for(int i=0; i < padding; i++) {
*** 164,184 **** } /** * @return mnemonic for instruction */ public String toString(boolean verbose) { ! StringBuffer buf = new StringBuffer(super.toString(verbose)); if(verbose) { for(int i=0; i < match_length; i++) { String s = "null"; if(targets[i] != null) s = targets[i].getInstruction().toString(); ! buf.append("(" + match[i] + ", " + s + " = {" + indices[i] + "})"); } } else buf.append(" ..."); --- 168,190 ---- } /** * @return mnemonic for instruction */ + @Override public String toString(boolean verbose) { ! final StringBuilder buf = new StringBuilder(super.toString(verbose)); if(verbose) { for(int i=0; i < match_length; i++) { String s = "null"; if(targets[i] != null) s = targets[i].getInstruction().toString(); ! buf.append("(").append(match[i]).append(", ") ! .append(s).append(" = {").append(indices[i]).append("})"); } } else buf.append(" ...");
*** 186,204 **** } /** * Set branch target for `i'th case */ ! public void setTarget(int i, InstructionHandle target) { ! notifyTarget(targets[i], target, this); targets[i] = target; } /** * @param old_ih old target * @param new_ih new target */ public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { boolean targeted = false; if(target == old_ih) { targeted = true; --- 192,212 ---- } /** * Set branch target for `i'th case */ ! public final void setTarget(int i, InstructionHandle target) { ! notifyTargetChanging(targets[i], this); targets[i] = target; + notifyTargetChanged(targets[i], this); } /** * @param old_ih old target * @param new_ih new target */ + @Override public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { boolean targeted = false; if(target == old_ih) { targeted = true;
*** 217,226 **** --- 225,235 ---- } /** * @return true, if ih is target of this instruction */ + @Override public boolean containsTarget(InstructionHandle ih) { if(target == ih) return true; for(int i=0; i < targets.length; i++)
*** 231,240 **** --- 240,250 ---- } /** * Inform targets that they're not targeted anymore. */ + @Override void dispose() { super.dispose(); for(int i=0; i < targets.length; i++) targets[i].removeTargeter(this);