Value

sealed abstract class Value

Abstract values

Value = Hot | Cold | Warm | ThisRef | Fun | RefSet

           Cold
  ┌──────►  ▲  ◄────┐  ◄────┐
  │         │       │       │
  │         │       │       │
  |         │       │       │
  |         │       │       │

ThisRef Warm Fun RefSet │ ▲ ▲ ▲ │ │ │ │ | │ │ │ ▲ │ │ │ │ │ │ │ └─────────┴───────┴───────┘ Hot

The diagram above does not reflect relationship between RefSet and other values. RefSet represents a set of values which could be ThisRef, Warm or Fun. The following ordering applies for RefSet:

   R_a ⊑ R_b if R_a ⊆ R_b

   V ⊑ R if V ∈ R
class Object
trait Matchable
class Any
object Cold.type
class Fun
object Hot.type
class Ref
class ThisRef
class Warm
class RefSet

Value members

Concrete methods

def call(meth: Symbol, args: List[ArgInfo], receiver: Type, superType: Type, needResolve: Boolean): () ?=> Value
Extension method from Semantic
def callConstructor(ctor: Symbol, args: List[ArgInfo]): () ?=> Value
Extension method from Semantic
def ensureHot(msg: String): () ?=> Value
Extension method from Semantic
def instantiate(klass: ClassSymbol, ctor: Symbol, args: List[ArgInfo]): () ?=> Value
Extension method from Semantic

Handle a new expression new p.C where p is abstracted by value

Handle a new expression new p.C where p is abstracted by value

def join(b: Value): Value
Extension method from Semantic
def promote(msg: String): () ?=> Unit
Extension method from Semantic

Promotion of values to hot

Promotion of values to hot

def select(field: Symbol, needResolve: Boolean): () ?=> Value
Extension method from Semantic
def widenArg: () ?=> Value
Extension method from Semantic

Conservatively approximate the value with Cold or Hot

Conservatively approximate the value with Cold or Hot