Value
Syntax for the data structure abstraction used in abstract domain:
ve ::= ObjectRef(class) // global object | OfClass(class, ownerObject, ctor, regions) // instance of a class | OfArray(ownerObject, regions) // represents values of native array class in Array.scala | Fun(code, LocalEnv) // value elements that can be contained in ValueSet | SafeValue // values on which method calls and field accesses won't cause warnings. Int, String, etc. | UnknownValue // values whose source are unknown at compile time vs ::= ValueSet(ve) // set of abstract values Bottom ::= ValueSet(Empty) // unreachable code val ::= ve | vs | Package Ref ::= ObjectRef | OfClass | OfArray // values that represent a reference to some (global or instance) object ThisValue ::= Ref | Set(Ref) // possible values for 'this' LocalEnv(meth, ownerObject) // represents environments for methods or functions Scope ::= Ref | LocalEnv ScopeSet ::= Set(Scope)
valsMap = sym -> val // maps variables to their values outersMap = sym -> ScopeSet // maps the possible outer scopes for a corresponding (parent) class heap.MutableData = Scope -> (valsMap, outersMap) // heap is mutable
regions ::= List(sourcePosition)
Attributes
- Graph
-
- Supertypes
- Known subtypes
-
class Packagetrait ValueElementclass Funclass Refclass ObjectRefclass OfArrayclass OfClassclass SafeValueobject UnknownValueclass ValueSet