Packages

t

org.opalj.tac

ASTNode

trait ASTNode[+V <: Var[V]] extends AnyRef

Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ASTNode
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Abstract Value Members

  1. 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.

  2. 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.

    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.

  3. abstract def toCanonicalForm(implicit ev: <:<[V, DUVar[ValueInformation]]): ASTNode[DUVar[ValueInformation]]

    See org.opalj.value.ValueInformation.toCanonicalForm for detail.