Value
Syntax for the data structure abstraction used in abstract domain:
ve ::= ObjectRef(class) // global object | InstanceRef(class, ownerObject, ctor, regions) // instance of a class | ArrayRef(ownerObject, regions) // represents values of native array class in Array.scala | Fun(code, thisV, scope) // 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(Set(ve)) // set of abstract values Value ::= ve | vs | Package Ref ::= ObjectRef | InstanceRef | ArrayRef // values that represent a reference to some (global or instance) object RefSet ::= Set(ref) // set of refs Bottom ::= RefSet(Empty) // unreachable code ThisValue ::= Ref | RefSet // possible values for 'this' EnvRef(meth, ownerObject) // represents environments for methods or functions EnvSet ::= Set(EnvRef) InstanceBody ::= (valsMap: Map[Symbol, Value], outersMap: Map[ClassSymbol, Value], outerEnv: EnvSet) // represents combined information of all instances represented by a ref Heap ::= Ref -> InstanceBody // heap is mutable EnvBody ::= (valsMap: Map[Symbol, Value], thisV: Value, outerEnv: EnvSet) // represents combined information of all instances represented by an env EnvMap ::= EnvRef -> EnvBody Scope ::= Ref | EnvRef Config ::= (thisV: Value, scope: Scope, Heap, EnvMap) Cache ::= Config -> (Heap, EnvMap)
regions ::= List(sourcePosition)
Attributes
- Graph
-
- Supertypes
- Known subtypes
-