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);