sealed abstract class Stmt[+V <: Var[V]] extends ASTNode[V]
Super trait of all three-address code/quadruple statements.
- Source
- Stmt.scala
- Alphabetic
- By Inheritance
- Stmt
- ASTNode
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
- abstract def astID: Int
Each type of node is assigned a different
id
to make it easily possible to do a switch over all nodes.Each type of node is assigned a different
id
to make it easily possible to do a switch over all nodes.- Definition Classes
- ASTNode
- abstract def forallSubExpressions[W >: V <: Var[W]](p: (Expr[W]) => Boolean): Boolean
- abstract 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
- 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.
- abstract def pc: UShort
The program counter of the original underyling bytecode instruction.
The program counter of the original underyling bytecode instruction.
This
pc
is independent of the (implicit)index
of the statement in the generated statements array! This pc is, e.g., useful for getting line number information. - abstract def toCanonicalForm(implicit ev: <:<[V, DUVar[ValueInformation]]): Stmt[DUVar[ValueInformation]]
See org.opalj.value.ValueInformation.toCanonicalForm for detail.
See org.opalj.value.ValueInformation.toCanonicalForm for detail.
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
- def asArrayStore: ArrayStore[V]
- def asAssignment: Assignment[V]
- def asAssignmentLike: AssignmentLikeStmt[V]
- def asCaughtException: CaughtException[V]
- def asCheckcast: Checkcast[V]
- def asExprStmt: ExprStmt[V]
- def asFieldWriteAccessStmt: FieldWriteAccessStmt[V]
- def asGoto: Goto
- def asIf: If[V]
- def asInstanceMethodCall: InstanceMethodCall[V]
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def asInvokedynamicMethodCall: InvokedynamicMethodCall[V]
- def asJSR: JSR
- def asMethodCall: MethodCall[V]
- def asMonitorEnter: MonitorEnter[V]
- def asMonitorExit: MonitorExit[V]
- def asNonVirtualMethodCall: NonVirtualMethodCall[V]
- def asNop: Nop
- def asPutField: PutField[V]
- def asPutStatic: PutStatic[V]
- def asRet: Ret
- def asReturn: Return
- def asReturnValue: ReturnValue[V]
- def asStaticMethodCall: StaticMethodCall[V]
- def asSwitch: Switch[V]
- def asSynchronizationStmt: SynchronizationStmt[V]
- def asThrow: Throw[V]
- def asVirtualMethodCall: VirtualMethodCall[V]
- 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
- 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 isArrayStore: Boolean
- def isAssignment: Boolean
- def isCaughtException: Boolean
- def isCheckcast: Boolean
- def isExprStmt: Boolean
- def isIf: Boolean
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def isMethodCall: Boolean
- def isMonitorEnter: Boolean
- def isMonitorExit: Boolean
- def isNonVirtualMethodCall: Boolean
- def isNop: Boolean
- def isPutField: Boolean
- def isPutStatic: Boolean
- def isReturnValue: Boolean
- def isStaticMethodCall: Boolean
- def isThrow: Boolean
- def isVirtualMethodCall: Boolean
- 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()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- 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