sealed trait TACode[P <: AnyRef, V <: Var[V]] extends Attribute with CodeSequence[Stmt[V]]
Contains the 3-address code (like) representation of a method.
OPAL offers multiple 3-address code like representations. One that is a one-to-one conversion of the bytecode and which does not provide higher-level information. Additionally, the (Base)TACAI represtation is offered that is targeted towards static analyses. The base TACAI representation does not preserve all information which would be required to regenerate the original code, but which greatly facilitates static analysis by making the end-to-end def-use chains directly available.
- V
The type of Vars used by the underlying code. Given that the stmts array is conceptually immutable - i.e., no client is allowed to change it(!) - the type V is actually co-variant, but we cannot express this.
- Source
- TACode.scala
- Alphabetic
- By Inheritance
- TACode
- CodeSequence
- Attribute
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
- abstract def cfg: CFG[Stmt[V], TACStmts[V]]
- abstract def exceptionHandlers: ExceptionHandlers
- abstract def params: Parameters[P]
The variables which store the method's explicit and implicit (
this
in case of an instance method) parameters.The variables which store the method's explicit and implicit (
this
in case of an instance method) parameters. In case of the ai-based representation (TACAI - default representation), the variables are returned which store (the initial) parameters. If these variables are written and we have a loop which includes the very first instruction, the value will reflect this usage. In case of the naive representation it "just" contains the names of the registers which store the parameters. - abstract def pcToIndex: Array[Int]
The mapping between the pcs of the original bytecode instructions to the index of the first statement that was generated for the bytecode instruction - if any.
The mapping between the pcs of the original bytecode instructions to the index of the first statement that was generated for the bytecode instruction - if any. For details see
TACNaive
andTACAI
. - abstract def stmts: Array[Stmt[V]]
Concrete 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()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def equals(other: Any): Boolean
- Definition Classes
- TACode → AnyRef → Any
- def firstLineNumber(code: Code): Option[Int]
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- final lazy val hashCode: Int
- Definition Classes
- TACode → AnyRef → Any
- def instructions: Array[Stmt[V]]
- Definition Classes
- TACode → CodeSequence
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def kindId: Int
Returns the unique ID that identifies this kind of attribute (Signature, LineNumberTable, ...)
Returns the unique ID that identifies this kind of attribute (Signature, LineNumberTable, ...)
This id can then be used in a switch statement to efficiently identify the attribute.
(attribute.id : @scala.annotation.switch) match { case Signature.Id => ... }
Associating Unique Id
The unique ids are manually associated with the attributes. The attributes use the following IDs:
- (-1 Unknown Attribute)
- 1-5 The ConstantValue Attribute
- 6 The Code Attribute
- 7 The StackMapTable Attribute
- 8 The Exceptions Attribute
- 9 The InnerClasses Attribute
- 10 The EnclosingMethod Attribute
- 11 The Synthetic Attribute
- 12-16 The Signature Attribute
- 17 The SourceFile Attribute
- 18 The SourceDebugExtension Attribute
- 19 The LineNumberTable Attribute
- 20 The LocalVariableTable Attribute
- 21 The LocalVariableTypeTable Attribute
- 22 The Deprecated Attribute
- 23 The RuntimeVisibleAnnotations Attribute
- 24 The RuntimeInvisibleAnnotations Attribute
- 25 The RuntimeVisibleParameterAnnotations Attribute
- 26 The RuntimeInvisibleParameterAnnotations Attribute
- 27 The RuntimeVisibleTypeAnnotations Attribute
- 28 The RuntimeInvisibleTypeAnnotations Attribute
- 29-41 The AnnotationDefault Attribute
- 42 The BootstrapMethods Attribute
- 43 The MethodParameters Attribute
- 44 The Module Attribute (Java 9)
- 45 The ModuleMainClass Attribute (Java 9)
- 46 The ModulePackages Attribute (Java 9)
- 47 The NestHost Attribute (Java 11)
- 48 The NestMembers Attribute (Java 11)
- 49 The Record Attribute (Java 16)
- 1001 OPAL's VirtualTypeFlag Attribute
- 1002 OPAL's SynthesizedClassFiles Attribute
- 1003 OPAL's TACode Attribute (the 3-Address Code)
- def lineNumber(code: Code, index: Int): Option[Int]
- 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()
- def pcOfNextInstruction(pc: Int): Int
- Definition Classes
- TACode → CodeSequence
- def pcOfPreviousInstruction(pc: Int): Int
Returns the pc of the previous instruction which is always the current pc - 1, because the representation is compact.
Returns the pc of the previous instruction which is always the current pc - 1, because the representation is compact.
- Definition Classes
- TACode → CodeSequence
- def properStmtIndexForPC(pc: PC): Int
Gives for a bytecode program counter the next index in this TACode that is *not* a CaughtException statement.
- def similar(other: Attribute, config: SimilarityTestConfiguration): Boolean
Returns true if this attribute and the given one are guaranteed to be indistinguishable at runtime.
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(taCodeType: String, additionalParameters: String): String
- Attributes
- protected[this]
- def toString(): String
- Definition Classes
- 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