public abstract class Select extends BranchInstruction implements VariableLengthInstruction, StackConsumer, StackProducer
We use our super's target
property as the default target.
LOOKUPSWITCH
,
TABLESWITCH
,
InstructionList
,
Serialized FormModifier and Type | Field and Description |
---|---|
protected int |
fixed_length |
protected int[] |
indices |
protected int[] |
match |
protected int |
match_length |
protected int |
padding |
protected InstructionHandle[] |
targets |
index, position, target
length, opcode
Modifier and Type | Method and Description |
---|---|
protected Object |
clone() |
boolean |
containsTarget(InstructionHandle ih) |
void |
dump(DataOutputStream out)
Dump instruction as byte code to stream out.
|
int[] |
getIndices() |
int[] |
getMatchs() |
InstructionHandle[] |
getTargets() |
protected void |
initFromFile(ByteSequence bytes,
boolean wide)
Read needed data (e.g.
|
void |
setTarget(int i,
InstructionHandle target)
Set branch target for `i'th case
|
String |
toString(boolean verbose)
Long output format:
<position in byte code>
<name of opcode> "["<opcode number>"]"
"("<length of instruction>")"
"<"<target instruction>">" "@"<branch target offset>
|
protected int |
updatePosition(int offset,
int max_offset)
Since this is a variable length instruction, it may shift the following
instructions which then need to update their position.
|
void |
updateTarget(InstructionHandle old_ih,
InstructionHandle new_ih) |
getIndex, getTarget, getTargetOffset, getTargetOffset, setTarget
accept, consumeStack, copy, equals, getComparator, getLength, getName, getOpcode, hashCode, produceStack, readInstruction, setComparator, toString, toString
finalize, getClass, notify, notifyAll, wait, wait, wait
consumeStack
produceStack
protected int[] match
protected int[] indices
protected InstructionHandle[] targets
protected int fixed_length
protected int match_length
protected int padding
protected int updatePosition(int offset, int max_offset)
updatePosition
in class BranchInstruction
offset
- additional offset caused by preceding (variable length) instructionsmax_offset
- the maximum offset that may be caused by these instructionspublic void dump(DataOutputStream out) throws IOException
dump
in class BranchInstruction
out
- Output streamIOException
protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException
initFromFile
in class BranchInstruction
bytes
- input streamwide
- wide prefix?IOException
- may be thrown if the implementation needs to read data from the fileInstructionList
public String toString(boolean verbose)
BranchInstruction
toString
in class BranchInstruction
verbose
- long/short format switchpublic void setTarget(int i, InstructionHandle target)
public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih)
updateTarget
in interface InstructionTargeter
updateTarget
in class BranchInstruction
old_ih
- old targetnew_ih
- new targetpublic boolean containsTarget(InstructionHandle ih)
containsTarget
in interface InstructionTargeter
containsTarget
in class BranchInstruction
protected Object clone() throws CloneNotSupportedException
clone
in class Object
CloneNotSupportedException
public int[] getMatchs()
public int[] getIndices()
public InstructionHandle[] getTargets()
Copyright © 2017. All rights reserved.