Value

dotty.tools.dotc.transform.init.Objects.Value
sealed abstract class Value

Syntax for the data structure abstraction used in abstract domain:

ve ::= ObjectRef(class) // global object | OfClass(class, vs[outer], ctor, args, env) // instance of a class | OfArray(object[owner], regions) | Fun(..., env) // value elements that can be contained in ValueSet vs ::= ValueSet(ve) // set of abstract values Bottom ::= ValueSet(Empty) val ::= ve | Cold | vs // all possible abstract values in domain Ref ::= ObjectRef | OfClass // values that represent a reference to some (global or instance) object ThisValue ::= Ref | Cold // possible values for 'this'

refMap = Ref -> ( valsMap, varsMap, outersMap ) // refMap stores field informations of an object or instance valsMap = valsym -> val // maps immutable fields to their values varsMap = valsym -> addr // each mutable field has an abstract address outersMap = class -> val // maps outer objects to their values

arrayMap = OfArray -> addr // an array has one address that stores the join value of every element

heap = addr -> val // heap is mutable

env = (valsMap, Option[env]) // stores local variables in the residing method, and possibly outer environments

addr ::= localVarAddr(regions, valsym, owner) | fieldVarAddr(regions, valsym, owner) // independent of OfClass/ObjectRef | arrayAddr(regions, owner) // independent of array element type

regions ::= List(sourcePosition)

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
object Cold
class ValueElement
class Fun
class OfArray
class Ref
class ObjectRef
class OfClass
class ValueSet
Show all

Members list

Value members

Abstract methods

def show(using Context): String

Concrete methods

def join(b: Value): Value
Extension method from Objects
def widen(height: Int)(using Context): Value
Extension method from Objects