Class Subroutine
java.lang.Object
EDU.purdue.cs.bloat.cfg.Subroutine
Subroutine represents a subroutine (target of a jsr instruction) in
java bytecode. Subroutines are used to implement the finally part of a
try-catch-finally block.
Each Subroutine belongs in a control flow graph, has an entry and exit block, and has a local variable that contains its return address. Additionally, it maintains a list of paths from blocks in which the subroutine is called to block that is executed after the subroutine returns.
Note that it is assumed that each subroutine ends with a ret. While this is true for bytecode generated by javac, it is not required.
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidAdds a path from the block before a Subroutine is called to a block after the subroutine is called.entry()Returns the first Block in the subroutine.exit()Returns the last Block in the subroutine.graph()Returns the CFG that contains this subroutine.intnumPaths()Returns the number of places that this subroutine is called.paths()Returns the paths (a Collection of two-element arrays of Blocks) that represent the Blocks that end in a call to this subroutine and the block that begin with the return address from this subroutine.pathSource(Block block) Returns the "caller block" for a given "return block".pathTarget(Block block) Returns the "return block" for a given "caller block".voidprint(PrintStream out) Prints a textual representation of this Subroutine.voidRemoves all caller-return paths.voidremovePath(Block callerBlock, Block returnBlock) Removes a path between a caller Block and a return Block.voidremovePathsContaining(Block block) Removes all paths involving block regardless of whether it is a calling (source) block or a returning (target) block.Returns the local variable containing the return address of this subroutine.voidSets the entry Block for this Subroutine.voidSets the exit Block for this Subroutine.voidsetReturnAddress(LocalVariable returnAddress) Sets the address (stored in a LocalVariable) to which this subroutine will return once it is finished.toString()
-
Constructor Details
-
Subroutine
-
-
Method Details
-
returnAddress
Returns the local variable containing the return address of this subroutine. -
setReturnAddress
Sets the address (stored in a LocalVariable) to which this subroutine will return once it is finished.- Parameters:
returnAddress- Local variable that stores the address to which the subroutine returns when it is completed.- See Also:
-
numPaths
public int numPaths()Returns the number of places that this subroutine is called. -
paths
Returns the paths (a Collection of two-element arrays of Blocks) that represent the Blocks that end in a call to this subroutine and the block that begin with the return address from this subroutine. -
graph
Returns the CFG that contains this subroutine. -
removePathsContaining
Removes all paths involving block regardless of whether it is a calling (source) block or a returning (target) block. -
removePath
-
removeAllPaths
public void removeAllPaths()Removes all caller-return paths. -
addPath
Adds a path from the block before a Subroutine is called to a block after the subroutine is called. If the callerBlock is already associated with a returnBlock, the old returnBlock is replaced.- Parameters:
callerBlock- The block in which the subroutine is called. This Block ends with a jsr to this subroutine.returnBlock- The block to which the subroutine returns. This Block begins at the return address of this subroutine.
-
pathTarget
-
pathSource
-
setEntry
Sets the entry Block for this Subroutine. -
setExit
Sets the exit Block for this Subroutine. -
entry
Returns the first Block in the subroutine. -
exit
Returns the last Block in the subroutine. -
print
Prints a textual representation of this Subroutine.- Parameters:
out- The PrintStream to which to print.
-
toString
-