Value

dotty.tools.dotc.transform.init.Semantic$.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

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
object Cold.type
class Fun
object Hot.type
class Ref
class ThisRef
class Warm
class RefSet

Members list

Concise view

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

Attributes

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

Attributes

def select(field: Symbol, receiver: Type, needResolve: Boolean): () ?=> Value
Extension method from Semantic
def show(using Context): String
def widenArg: () ?=> Value
Extension method from Semantic

Conservatively approximate the value with Cold or Hot

Conservatively approximate the value with Cold or Hot

Attributes