case class Nop(pc: Int) extends SimpleStmt with Product with Serializable
Models a no-operation. In general, a NOP (no operation) can be pruned; however, in the TACAI representation, if a NOP is the last statement of a basic block where the previous basic block has multiple-successors then it may be the case that the NOP cannot be pruned, because it it is required to keep the path alive. For example, given the following code:
public int m(int i, int j, boolean z){ int r = 0; if (z) { r = i; } else { r = j; } return r; }
In this case, the returned value is either i or j and therefore the UVar would directly encode that information and therefore the assignments would be ignored. (The information cannot be recovered! If needed a complete SSA representation would be required; TACAI only provides only an SSA-like representation!)
- Source
- Stmt.scala
- Alphabetic
- By Inheritance
- Nop
- Serializable
- Product
- Equals
- SimpleStmt
- VariableFreeStmt
- Stmt
- ASTNode
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new Nop(pc: Int)
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
- def asArrayStore: ArrayStore[Nothing]
- Definition Classes
- Stmt
- def asAssignment: Assignment[Nothing]
- Definition Classes
- Stmt
- def asAssignmentLike: AssignmentLikeStmt[Nothing]
- Definition Classes
- Stmt
- def asCaughtException: CaughtException[Nothing]
- Definition Classes
- Stmt
- def asCheckcast: Checkcast[Nothing]
- Definition Classes
- Stmt
- def asExprStmt: ExprStmt[Nothing]
- Definition Classes
- Stmt
- def asFieldWriteAccessStmt: FieldWriteAccessStmt[Nothing]
- Definition Classes
- Stmt
- def asGoto: Goto
- Definition Classes
- Stmt
- def asIf: If[Nothing]
- Definition Classes
- Stmt
- def asInstanceMethodCall: InstanceMethodCall[Nothing]
- Definition Classes
- Stmt
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def asInvokedynamicMethodCall: InvokedynamicMethodCall[Nothing]
- Definition Classes
- Stmt
- def asJSR: JSR
- Definition Classes
- Stmt
- def asMethodCall: MethodCall[Nothing]
- Definition Classes
- Stmt
- def asMonitorEnter: MonitorEnter[Nothing]
- Definition Classes
- Stmt
- def asMonitorExit: MonitorExit[Nothing]
- Definition Classes
- Stmt
- def asNonVirtualMethodCall: NonVirtualMethodCall[Nothing]
- Definition Classes
- Stmt
- final def asNop: Nop.this.type
- def asPutField: PutField[Nothing]
- Definition Classes
- Stmt
- def asPutStatic: PutStatic[Nothing]
- Definition Classes
- Stmt
- def asRet: Ret
- Definition Classes
- Stmt
- def asReturn: Return
- Definition Classes
- Stmt
- def asReturnValue: ReturnValue[Nothing]
- Definition Classes
- Stmt
- def asStaticMethodCall: StaticMethodCall[Nothing]
- Definition Classes
- Stmt
- def asSwitch: Switch[Nothing]
- Definition Classes
- Stmt
- def asSynchronizationStmt: SynchronizationStmt[Nothing]
- Definition Classes
- Stmt
- def asThrow: Throw[Nothing]
- Definition Classes
- Stmt
- def asVirtualMethodCall: VirtualMethodCall[Nothing]
- Definition Classes
- Stmt
- final def astID: Int
Each type of node is assigned a different
id
to make it easily possible to do a switch over all nodes. - 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 forallSubExpressions[W <: Var[W]](p: (Expr[W]) => Boolean): Boolean
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def isArrayStore: Boolean
- Definition Classes
- Stmt
- def isAssignment: Boolean
- Definition Classes
- Stmt
- def isCaughtException: Boolean
- Definition Classes
- Stmt
- def isCheckcast: Boolean
- Definition Classes
- Stmt
- def isExprStmt: Boolean
- Definition Classes
- Stmt
- def isIf: Boolean
- Definition Classes
- Stmt
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def isMethodCall: Boolean
- Definition Classes
- Stmt
- def isMonitorEnter: Boolean
- Definition Classes
- Stmt
- def isMonitorExit: Boolean
- Definition Classes
- Stmt
- def isNonVirtualMethodCall: Boolean
- Definition Classes
- Stmt
- final def isNop: Boolean
- def isPutField: Boolean
- Definition Classes
- Stmt
- def isPutStatic: Boolean
- Definition Classes
- Stmt
- def isReturnValue: Boolean
- Definition Classes
- Stmt
- final def isSideEffectFree: Boolean
true
if the statement/expression is GUARANTEED to have no externally observable effect if it is not executed.true
if the statement/expression is GUARANTEED to have no externally observable effect if it is not executed. Sideeffect free instructions can be removed if the result of the evaluation of the expression/statement is not used. For those instructions, which may result in an exception, it has to be guaranteed that the exception is NEVER thrown. For example, a div instruction is sideeffect free if it is (statically) known that the divisor is always not equal to zero; otherwise, even if the result value is not used, the expression is not (potentially) side effect free. An array load is only side effect free if the array reference is non-null and if the index is valid.- returns
true
if the expression is GUARENTEED to have no side effect other than wasting some CPU cycles if it is not executed.
- Definition Classes
- Nop → ASTNode
- Note
Deeply nested expressions are not supported; i.e. an expression's sub-expressions have to be Var or Const expressions. Generally, a statements expressions have to to simple expressions too - except of the Assignment statement; in the latter case the right-expression can have references to simple expressions. Hence, in case of Assignment statements the side-effect freenes is determined by the referenced expression; in all other cases the side-effect freeness is determined directly by the statement/expression.
- def isStaticMethodCall: Boolean
- Definition Classes
- Stmt
- def isThrow: Boolean
- Definition Classes
- Stmt
- def isVirtualMethodCall: Boolean
- Definition Classes
- Stmt
- 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 pc: Int
The program counter of the original underyling bytecode instruction.
- def productElementNames: Iterator[String]
- Definition Classes
- Product
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- final def toCanonicalForm(implicit ev: <:<[Nothing, DUVar[ValueInformation]]): Stmt[DUVar[ValueInformation]]
See org.opalj.value.ValueInformation.toCanonicalForm for detail.
See org.opalj.value.ValueInformation.toCanonicalForm for detail.
- Definition Classes
- VariableFreeStmt → Stmt → ASTNode
- def toString(): String
- Definition Classes
- Nop → 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