Class BasicBlock<InsnType extends ILocatedInstruction>
- Type Parameters:
InsnType
-
- All Implemented Interfaces:
IBasicBlock<InsnType>
,Iterable<InsnType>
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionCreate a new empty basic block.BasicBlock
(Collection<InsnType> insnlist) Create a new basic block with the provided instructions. -
Method Summary
Modifier and TypeMethodDescriptionvoid
DANGEROUS! Add an instruction to the block.void
DANGEROUS! Append an instruction to the block.void
addAll
(Collection<InsnType> insnlist) DANGEROUS! Append instructions to the block.int
Get the total number of input edges to this block.int
boolean
canThrow()
get
(int index) Get the instruction at the specified index.long
long
getAddressOfInstruction
(int index) Retrieve a read-only iterable of regular and irregular input blocks.Get regular and irregular output blocks.Retrieve a read-only iterable of regular and irregular output blocks.long
getBase()
Address of first instruction in the block.long
Address following the last instruction of the block (ie, last exclusive address).long
Address of first instruction in the block.int
getIndexOfInstruction
(long address) int
getIndexOfInstruction
(long address, boolean precise) getInputBlock
(int index) Get a regular input block.Get the regular input blocks.Retrieve a read-only list of input blocks (regular).getInstruction
(long address) Get the instruction located at the exact address.Get a copy of the list of instructions that make up this basic block.getIrregularInputBlock
(int index) Get an irregular input block.Retrieve a read-only list of irregular input blocks.getIrregularOutputBlock
(int index) Get an irregular output block.Get irregular output blocks.Retrieve a read-only list of irregular output blocks.getLast()
Get the last instruction of the block.long
Address of last instruction in the block.getOutputBlock
(int index) Get a regular output block.Get the regular output blocks.Retrieve a read-only list of output blocks (regular).int
int
insize()
Get the number of regular input edges to this block.int
Get the number of irregular input edges to this block.int
boolean
isEmpty()
Determine if the block has 0 instruction.iterator()
int
outsize()
remove
(int index) DANGEROUS! Remove an instruction from the block.void
DANGEROUS! Remove all instructions from the block.Replace an instruction.Replace an instruction.int
size()
Get the number of instructions in the block.toString()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Constructor Details
-
BasicBlock
public BasicBlock()Create a new empty basic block. -
BasicBlock
Create a new basic block with the provided instructions.
-
-
Method Details
-
size
public int size()Description copied from interface:IBasicBlock
Get the number of instructions in the block.- Specified by:
size
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
isEmpty
public boolean isEmpty()Description copied from interface:IBasicBlock
Determine if the block has 0 instruction.- Specified by:
isEmpty
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
get
Description copied from interface:IBasicBlock
Get the instruction at the specified index.- Specified by:
get
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getLast
Description copied from interface:IBasicBlock
Get the last instruction of the block.- Specified by:
getLast
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getInstructions
Description copied from interface:IBasicBlock
Get a copy of the list of instructions that make up this basic block.- Specified by:
getInstructions
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getSizeOfInstructions
public int getSizeOfInstructions()- Specified by:
getSizeOfInstructions
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
-
getBase
public long getBase()Description copied from interface:IBasicBlock
Address of first instruction in the block.- Specified by:
getBase
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getAddress
public long getAddress() -
getFirstAddress
public long getFirstAddress()Description copied from interface:IBasicBlock
Address of first instruction in the block.- Specified by:
getFirstAddress
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getLastAddress
public long getLastAddress()Description copied from interface:IBasicBlock
Address of last instruction in the block.- Specified by:
getLastAddress
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getEndAddress
public long getEndAddress()Description copied from interface:IBasicBlock
Address following the last instruction of the block (ie, last exclusive address).- Specified by:
getEndAddress
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getAddressOfInstruction
public long getAddressOfInstruction(int index) - Specified by:
getAddressOfInstruction
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
-
getIndexOfInstruction
public int getIndexOfInstruction(long address) - Specified by:
getIndexOfInstruction
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Parameters:
address
- instruction address- Returns:
- -1 if there is no instruction starting at the provided address
-
getIndexOfInstruction
public int getIndexOfInstruction(long address, boolean precise) -
getInstruction
Description copied from interface:IBasicBlock
Get the instruction located at the exact address.- Specified by:
getInstruction
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
canThrow
public boolean canThrow()- Specified by:
canThrow
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
-
remove
DANGEROUS! Remove an instruction from the block.The instruction is removed from the block. The edges are not updated. The block may end up empty.
- Parameters:
index
-- Returns:
- true if the CFG need refreshing
-
removeAll
public void removeAll()DANGEROUS! Remove all instructions from the block.The edges are not updated. The block may end up empty.
-
add
DANGEROUS! Append an instruction to the block.The instruction is appended to the block. The edges are not updated.
The caller is responsible for maintaining the consistency of the block and of the CFG.- Parameters:
insn
- the instruction to be appended
-
addAll
DANGEROUS! Append instructions to the block.The instructions are appended to the block. The edges are not updated.
The caller is responsible for maintaining the consistency of the block and of the CFG.- Parameters:
insnlist
- the collection of instructions to be appended
-
add
DANGEROUS! Add an instruction to the block.The instruction is inserted in the block. The edges are not updated.
The caller is responsible for maintaining the consistency of the block and of the CFG.- Parameters:
index
- insertion indexinsn
- the instruction to be inserted
-
set
Replace an instruction. The size is validated, the offset is not validated.- Parameters:
index
- index in the blockinsn
- instruction to set at index- Returns:
- the instruction that was replaced
-
set
Replace an instruction. The size and offset may be validated.- Parameters:
index
- index in the blockinsn
- instruction to set at indexverifySize
- if false, validating and updating the instruction size is the responsibility of the caller; else, the size is validated and must match the replaced instruction'sverifyOffset
- if false, validating and updating the instruction offset is the responsibility of the caller; else, the offset is validated and must match the replaced instruction's- Returns:
- the instruction that was replaced
-
insize
public int insize()Description copied from interface:IBasicBlock
Get the number of regular input edges to this block.- Specified by:
insize
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
irrinsize
public int irrinsize()Description copied from interface:IBasicBlock
Get the number of irregular input edges to this block.- Specified by:
irrinsize
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
allinsize
public int allinsize()Description copied from interface:IBasicBlock
Get the total number of input edges to this block.- Specified by:
allinsize
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getInputBlock
Description copied from interface:IBasicBlock
Get a regular input block.- Specified by:
getInputBlock
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Parameters:
index
- block index- Returns:
- a block
-
getInputBlocks
Description copied from interface:IBasicBlock
Get the regular input blocks.- Specified by:
getInputBlocks
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
- a copy of the list of regular input blocks
-
getInputOffsets
-
getIrregularInputBlock
Description copied from interface:IBasicBlock
Get an irregular input block.- Specified by:
getIrregularInputBlock
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Parameters:
index
- block index- Returns:
- a block
-
getIrregularInputBlocks
- Specified by:
getIrregularInputBlocks
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
-
getIrregularInputOffsets
-
getAllInputBlocks
- Specified by:
getAllInputBlocks
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
-
outsize
public int outsize()- Specified by:
outsize
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
-
irroutsize
public int irroutsize()- Specified by:
irroutsize
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
-
alloutsize
public int alloutsize()- Specified by:
alloutsize
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
-
getOutputBlock
Description copied from interface:IBasicBlock
Get a regular output block.- Specified by:
getOutputBlock
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getOutputBlocks
Description copied from interface:IBasicBlock
Get the regular output blocks.- Specified by:
getOutputBlocks
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
- a copy of the list of regular output blocks
-
getOutputOffsets
-
getIrregularOutputBlock
Description copied from interface:IBasicBlock
Get an irregular output block.- Specified by:
getIrregularOutputBlock
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getIrregularOutputBlocks
Description copied from interface:IBasicBlock
Get irregular output blocks.- Specified by:
getIrregularOutputBlocks
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
- a copy of the list of irregular output blocks
-
getIrregularOutputOffsets
-
getAllOutputBlocks
Description copied from interface:IBasicBlock
Get regular and irregular output blocks.- Specified by:
getAllOutputBlocks
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
- a copy of the list of all output blocks
-
getInputs
Retrieve a read-only list of input blocks (regular).NOTE: This method is faster than
getInputBlocks()
since it does not provide a copy of the list.- Specified by:
getInputs
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getIrregularInputs
Retrieve a read-only list of irregular input blocks.NOTE: This method is faster than
getIrregularInputBlocks()
since it does not provide a copy of the list.- Specified by:
getIrregularInputs
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getOutputs
Retrieve a read-only list of output blocks (regular).NOTE: This method is faster than
getOutputBlocks()
since it does not provide a copy of the list.- Specified by:
getOutputs
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getIrregularOutputs
Retrieve a read-only list of irregular output blocks.NOTE: This method is faster than
getIrregularOutputBlocks()
since it does not provide a copy of the list.- Specified by:
getIrregularOutputs
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getAllInputs
Description copied from interface:IBasicBlock
Retrieve a read-only iterable of regular and irregular input blocks.NOTE: This method is faster than
IBasicBlock.getAllInputBlocks()
since it does not provide a copy of the list.- Specified by:
getAllInputs
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
getAllOutputs
Description copied from interface:IBasicBlock
Retrieve a read-only iterable of regular and irregular output blocks.NOTE: This method is faster than
IBasicBlock.getAllOutputBlocks()
since it does not provide a copy of the list.- Specified by:
getAllOutputs
in interfaceIBasicBlock<InsnType extends ILocatedInstruction>
- Returns:
-
iterator
- Specified by:
iterator
in interfaceIterable<InsnType extends ILocatedInstruction>
-
toString
-