class LabeledCode extends AnyRef
Mutable container for some labeled code. We will use org.opalj.br.instructions.PCLabel labels for those labels which were created based on the original code. This enables the computation ofa mapping from old pcs to new pcs.
- Source
- LabeledCode.scala
- Note
Using
LabeledCode
is NOT thread safe.
- Alphabetic
- By Inheritance
- LabeledCode
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new LabeledCode(originalCode: Code, instructions: ArrayBuffer[CodeElement[AnyRef]])
- originalCode
The original code.
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- def codeElements: Iterator[CodeElement[AnyRef]]
Returns a view of the current code elements.
Returns a view of the current code elements.
This iterator is not fail-fast and the result is undetermined if – while the iteration is not completed – a change of the code is performed.
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def insert(insertionPC: PC, insertionPosition: InsertionPosition.Value, newInstructions: Seq[CodeElement[AnyRef]]): Unit
Inserts the given sequence of instructions before, at or after the instruction - identified by a org.opalj.br.instructions.PCLabel - with the given pc.
Inserts the given sequence of instructions before, at or after the instruction - identified by a org.opalj.br.instructions.PCLabel - with the given pc. CODE objects created by
Code.toLabeldCode
generally creates org.opalj.br.instructions.PCLabel.Here, before means that those instruction which currently jump to the instruction with the given pc, will jump to the first instruction of the given sequence of instructions.
- insertionPC
The pc of an instruction.
- insertionPosition
Given an instruction I which is a jump target and which has the pc
insertionPC
. In this case, the effect of the (insertion) position is: BeforeinsertionPC:
// the jump target will be the newly inserted instructions<new instructions>
<remaining original instructions>
AfterinsertionPC:
<original instruction with program counter insertionPC>
newJumpTarget(insertionPC+1):
// i.e., an instruction which jumps to the original // instruction which follows the instruction with // insertionPC will still jump to that instruction // and not the new one. // Additionally, existing exception handlers which // included the specified instruction will also // include this instruction.<new instructions>
pcOfNextInstruction(insertionPC):
<remaining original instructions>
AtnewJumpTarget(insertionPC):
<new instructions>
insertionPC:
<remaining original instructions>
(W.r.t. labeled code the effect can also be described as shown next: Let's assume that: EH ... code elements modelling exception handlers (TRY|TRYEND|CATCH) I ... the (implicitly referenced) instruction L ... the (implicit) label of the instruction CE ... the new CodeElements Given: EH | L | I // EH can be empty, L is (for original instructions) always existing! Before: EH | L | CE | I At: EH | CE | L | I // existing exception handlers w.r.t. L are effective After: EH | L | I | CE | EH | L+1 // i.e., the insertion position depends on L+1(!) ) Hence,At
andAfter
can be used interchangeably except when an instruction should be added at the very beginning or after the end.- newInstructions
The sequence of instructions that will be added at the specified position relative to the instruction with the given pc. If this list of instructions contains instructions which have jump targets then these jump targets have to use
InstructionLabel
s which are not used by the code (which are the program counters of the code's instructions). E.g., by using name based labels we will get unique jump targets for instructions.
- Note
The instructions are only considered to be prototypes and are adapted (in case of jump instructions) if necessary.
,This method does not provide support for methods that will - if too many instructions are added - exceed the maximum allowed length of methods.
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- val originalCode: Code
- def removedDeadCode(): Unit
- def replace(pc: PC, newInstructions: Seq[CodeElement[AnyRef]]): Unit
Replaces the InstructionLikeElement associate with the given pc by the given instruction sequence.
Replaces the InstructionLikeElement associate with the given pc by the given instruction sequence. I.e., only the InstructionLikeElement is replaced; all other information associated with the respective program counter (e.g., line number or exception handling related markers) is kept.
The instruction sequence has to process the values on the stack that would have been processed. Overall the sequence has to be stack-neutral.
- def result: CodeAttributeBuilder[AnyRef]
Creates a new CodeAttributeBuilder based on this
LabeledCode
; that builder can then be used to construct a valid org.opalj.br.Code attribute. - final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- LabeledCode → AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated