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
- Known subtypes