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: () => Result
Extension method from Semantic
Extension method from Semantic
def instantiate: () => Result
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: Value
Extension method from Semantic
def promote: () => List[Error]
Extension method from Semantic

Promotion of values to hot

Promotion of values to hot

def select: () => Result
Extension method from Semantic
Extension method from Semantic

Conservatively approximate the value with Cold or Hot

Conservatively approximate the value with Cold or Hot