Typer

class Typer(erasurePhase: DenotTransformer) extends ReTyper with NoChecking
class ReTyper
class Typer
trait Deriving
trait Checking
trait Dynamic
trait Implicits
class Namer
class Object
trait Matchable
class Any

Type members

Inherited classlikes

class ApplicableToTrees(methRef: TermRef, args: List[Tree], resultType: Type, argMatch: ArgMatch)(using `x$5`: Context)

Subclass of Application for applicability tests with type arguments and value argument trees.

Subclass of Application for applicability tests with type arguments and value argument trees.

Inherited from
Applications
class ApplicableToTypes(methRef: TermRef, args: List[Type], resultType: Type, argMatch: ArgMatch)(using `x$5`: Context)

Subclass of Application for applicability tests with value argument types.

Subclass of Application for applicability tests with value argument types.

Inherited from
Applications
abstract class Application[Arg](methRef: TermRef, funType: Type, args: List[Arg], resultType: Type)(using `x$5`: Context)
Type Params
Arg

the type of arguments, could be tpd.Tree, untpd.Tree, or Type

Value Params
args

the arguments of the application

funType

the type of the function part of the application

methRef

the reference to the method of the application

resultType

the expected result type of the application

Inherited from
Applications
class ApplyToTyped(app: Apply, fun: Tree, methRef: TermRef, args: List[Tree], resultType: Type, applyKind: ApplyKind)(using `x$7`: Context)

Subclass of Application for type checking an Apply node with typed arguments.

Subclass of Application for type checking an Apply node with typed arguments.

Inherited from
Applications
class ApplyToUntyped(app: Apply, fun: Tree, methRef: TermRef, proto: FunProto, resultType: Type)(using `x$6`: Context)

Subclass of Application for type checking an Apply node with untyped arguments.

Subclass of Application for type checking an Apply node with untyped arguments.

Inherited from
Applications
enum ArgMatch

The degree to which an argument has to match a formal parameter

The degree to which an argument has to match a formal parameter

Inherited from
Applications
class ClassCompleter(cls: ClassSymbol, original: TypeDef)(ictx: Context)
Inherited from
Namer
class Completer(val original: Tree)(ictx: Context)

The completer of a symbol defined by a member def or import (except ClassSymbols)

The completer of a symbol defined by a member def or import (except ClassSymbols)

Inherited from
Namer
class Deriver(cls: ClassSymbol, codePos: SrcPos)(using `x$3`: Context)

A helper class to derive type class instances for one class or object

A helper class to derive type class instances for one class or object

Value Params
cls

The class symbol of the class or object with a derives clause

codePos

The default position that should be given to generic synthesized infrastructure code that is not connected with a derives instance.

Inherited from
Deriving
class ImplicitSearch(val pt: Type, val argument: Tree, span: Span)(using `x$4`: Context)

An implicit search; parameters as in inferImplicit

An implicit search; parameters as in inferImplicit

Inherited from
Implicits
Inherited from
Namer
abstract class TestApplication[Arg](methRef: TermRef, funType: Type, args: List[Arg], resultType: Type, argMatch: ArgMatch)(using `x$6`: Context)

Subclass of Application for the cases where we are interested only in a "can/cannot apply" answer, without needing to construct trees or issue error messages.

Subclass of Application for the cases where we are interested only in a "can/cannot apply" answer, without needing to construct trees or issue error messages.

Inherited from
Applications
class TypeDefCompleter(original: TypeDef)(ictx: Context)
Inherited from
Namer
abstract class TypedApply[T >: Untyped](app: Apply, fun: Tree, methRef: TermRef, args: List[Tree[T]], resultType: Type, val applyKind: ApplyKind)(using `x$7`: Context)

Subclass of Application for type checking an Apply node, where types of arguments are either known or unknown.

Subclass of Application for type checking an Apply node, where types of arguments are either known or unknown.

Inherited from
Applications
object hasSkolem
Inherited from
Implicits

Value members

Concrete methods

override def adapt(tree: Tree, pt: Type, locked: TypeVars, tryGadtHealing: Boolean)(using Context): Tree
Definition Classes
def erasedDef(sym: Symbol)(using Context): Tree
def erasedType(tree: Tree)(using Context): Type
def isErased(tree: Tree)(using Context): Boolean
override def promote(tree: Tree)(using Context): ThisTree[Type]
Definition Classes
override def simplify(tree: Tree, pt: Type, locked: TypeVars)(using Context): tree
Definition Classes
override def typedAnnotated(tree: Annotated, pt: Type)(using Context): Tree
Definition Classes
override def typedApply(tree: Apply, pt: Type)(using Context): Tree

Besides normal typing, this method does uncurrying and collects parameters to anonymous functions of arity > 22.

Besides normal typing, this method does uncurrying and collects parameters to anonymous functions of arity > 22.

Definition Classes
override def typedClassDef(cdef: TypeDef, cls: ClassSymbol)(using Context): Tree
Definition Classes
override def typedClosure(tree: Closure, pt: Type)(using Context): Tree
Definition Classes
override def typedDefDef(ddef: DefDef, sym: Symbol)(using Context): Tree

Besides normal typing, this function also compacts anonymous functions with more than MaxImplementedFunctionArity parameters to use a single parameter of type []Object.

Besides normal typing, this function also compacts anonymous functions with more than MaxImplementedFunctionArity parameters to use a single parameter of type []Object.

Definition Classes
override def typedIdent(tree: Ident, pt: Type)(using Context): Tree
Definition Classes
override def typedIf(tree: If, pt: Type)(using Context): Tree
Definition Classes
override def typedInlined(tree: Inlined, pt: Type)(using Context): Tree
Definition Classes
override def typedLiteral(tree: Literal)(using Context): Tree
Definition Classes
override def typedMatch(tree: Match, pt: Type)(using Context): Tree
Definition Classes
override def typedNew(tree: New, pt: Type)(using Context): Tree
Definition Classes
override def typedSelect(tree: Select, pt: Type)(using Context): Tree

Type check select nodes, applying the following rewritings exhaustively on selections e.m, where OT is the type of the owner of m and ET is the erased type of the selection's original qualifier expression.

Type check select nodes, applying the following rewritings exhaustively on selections e.m, where OT is the type of the owner of m and ET is the erased type of the selection's original qualifier expression.

e.m1 -> e.m2          if `m1` is a member of a class that erases to Object and `m2` is
                      the same-named member in Object.
e.m -> box(e).m       if `e` is primitive and `m` is a member or a reference class
                      or `e` has an erased value class type.
e.m -> unbox(e).m     if `e` is not primitive and `m` is a member of a primtive type.
e.m -> cast(e, OT).m  if the type of `e` does not conform to OT and `m`
                      is not an array operation.

If m is an array operation, i.e. one of the members apply, update, length, clone, and of class Array, we additionally try the following rewritings:

e.m -> runtime.array_m(e)   if ET is Object
e.m -> cast(e, ET).m        if the type of `e` does not conform to ET
e.clone -> e.clone'         where clone' is Object's clone method
e.m -> e.[]m                if `m` is an array operation other than `clone`.
Definition Classes
override def typedSeqLiteral(tree: SeqLiteral, pt: Type)(using Context): SeqLiteral
Definition Classes
override def typedStats(stats: List[Tree], exprOwner: Symbol)(using Context): (List[Tree], Context)
Definition Classes
override def typedThis(tree: This)(using Context): Tree
Definition Classes
override def typedTry(tree: Try, pt: Type)(using Context): Try
Definition Classes
override def typedTypeApply(tree: TypeApply, pt: Type)(using Context): Tree
Definition Classes
override def typedTypeDef(tdef: TypeDef, sym: Symbol)(using Context): Tree
Definition Classes
override def typedTypeTree(tree: TypeTree, pt: Type)(using Context): TypeTree

When erasing most TypeTrees we should not semi-erase value types. This is not the case for DefDef#tpt, ValDef#tpt and Typed#tpt, they are handled separately by typedDefDef, typedValDef and typedTyped.

When erasing most TypeTrees we should not semi-erase value types. This is not the case for DefDef#tpt, ValDef#tpt and Typed#tpt, they are handled separately by typedDefDef, typedValDef and typedTyped.

Definition Classes
override def typedTyped(tree: Typed, pt: Type)(using Context): Tree

This override is only needed to semi-erase type ascriptions

This override is only needed to semi-erase type ascriptions

Definition Classes
override def typedValDef(vdef: ValDef, sym: Symbol)(using Context): Tree
Definition Classes

Inherited methods

def ApplyTo(app: Apply, fun: Tree, methRef: TermRef, proto: FunProto, resultType: Type)(using Context): Tree

Typecheck an Apply node with a typed function and possibly-typed arguments coming from proto

Typecheck an Apply node with a typed function and possibly-typed arguments coming from proto

Inherited from
Applications
def accessibleType(tpe: Type, superAccess: Boolean)(using Context): Type

If tpe is a named type, return the type with those alternatives as denotations which are accessible (or NoType, if no alternatives are accessible).

If tpe is a named type, return the type with those alternatives as denotations which are accessible (or NoType, if no alternatives are accessible).

Also performs the following normalizations on the type tpe. (1) if the owner of the denotation is a package object, it is assured that the package object shows up as the prefix. (2) in Java compilation units, Object is replaced by defn.FromJavaObjectType

Inherited from
TypeAssigner
final def adapt(tree: Tree, pt: Type)(using Context): Tree
Inherited from
Typer

Tries to adapt NotNullInfos from creation context to the DefTree, returns whether the adaption took place. An adaption only takes place if the DefTree has a symbol and it has not been completed (is not forward referenced).

Tries to adapt NotNullInfos from creation context to the DefTree, returns whether the adaption took place. An adaption only takes place if the DefTree has a symbol and it has not been completed (is not forward referenced).

Inherited from
Typer
final def addChild(cls: Symbol, child: Symbol)(using Context): Unit

Add child annotation for child to annotations of cls. The annotation is added at the correct insertion point, so that Child annotations appear in reverse order of their start positions.

Add child annotation for child to annotations of cls. The annotation is added at the correct insertion point, so that Child annotations appear in reverse order of their start positions.

Inherited from
Namer
def addEnumConstants(mdef: DefTree, sym: Symbol)(using Context): Unit

Add java enum constants

Add java enum constants

Inherited from
Namer
def annotContext(mdef: Tree, sym: Symbol)(using Context): Context

The context to be used for an annotation of mdef. This should be the context enclosing mdef, or if mdef defines a parameter the context enclosing the owner of mdef. Furthermore, we need to evaluate annotation arguments in an expression context, since classes defined in a such arguments should not be entered into the enclosing class.

The context to be used for an annotation of mdef. This should be the context enclosing mdef, or if mdef defines a parameter the context enclosing the owner of mdef. Furthermore, we need to evaluate annotation arguments in an expression context, since classes defined in a such arguments should not be entered into the enclosing class.

Inherited from
Typer
def argCtx(app: Tree)(using Context): Context

If app is a this(...) constructor call, the this-call argument context, otherwise the current context.

If app is a this(...) constructor call, the this-call argument context, otherwise the current context.

Inherited from
Applications
def arrayToRepeated(tree: Tree)(using Context): Tree
Inherited from
TypeAssigner
Inherited from
TypeAssigner
def assignType(tree: PackageDef, pid: Tree)(using Context): PackageDef
Inherited from
TypeAssigner
def assignType(tree: Annotated, arg: Tree, annot: Tree)(using Context): Annotated
Inherited from
TypeAssigner
def assignType(tree: Export)(using Context): Export
Inherited from
TypeAssigner
def assignType(tree: Import, sym: Symbol)(using Context): Import
Inherited from
TypeAssigner
def assignType(tree: TypeDef, sym: Symbol)(using Context): TypeDef
Inherited from
TypeAssigner
def assignType(tree: DefDef, sym: Symbol)(using Context): DefDef
Inherited from
TypeAssigner
def assignType(tree: ValDef, sym: Symbol)(using Context): ValDef
Inherited from
TypeAssigner
def assignType(tree: UnApply, proto: Type)(using Context): UnApply
Inherited from
TypeAssigner
def assignType(tree: Alternative, trees: List[Tree])(using Context): Alternative
Inherited from
TypeAssigner
def assignType(tree: Bind, sym: Symbol)(using Context): Bind
Inherited from
TypeAssigner
def assignType(tree: TypeBoundsTree, lo: Tree, hi: Tree, alias: Tree)(using Context): TypeBoundsTree
Inherited from
TypeAssigner
def assignType(tree: ByNameTypeTree, result: Tree)(using Context): ByNameTypeTree
Inherited from
TypeAssigner
def assignType(tree: MatchTypeTree, bound: Tree, scrutinee: Tree, cases: List[CaseDef])(using Context): MatchTypeTree
Inherited from
TypeAssigner
def assignType(tree: LambdaTypeTree, tparamDefs: List[TypeDef], body: Tree)(using Context): LambdaTypeTree
Inherited from
TypeAssigner
def assignType(tree: AppliedTypeTree, tycon: Tree, args: List[Tree])(using Context): AppliedTypeTree
Inherited from
TypeAssigner
def assignType(tree: RefinedTypeTree, parent: Tree, refinements: List[Tree], refineCls: ClassSymbol)(using Context): RefinedTypeTree

Assign type of RefinedType. Refinements are typed as if they were members of refinement class refineCls.

Assign type of RefinedType. Refinements are typed as if they were members of refinement class refineCls.

Inherited from
TypeAssigner
def assignType(tree: SeqLiteral, elems: List[Tree], elemtpt: Tree)(using Context): SeqLiteral
Inherited from
TypeAssigner
def assignType(tree: Try, expr: Tree, cases: List[CaseDef])(using Context): Try
Inherited from
TypeAssigner
def assignType(tree: WhileDo)(using Context): WhileDo
Inherited from
TypeAssigner
def assignType(tree: Return)(using Context): Return
Inherited from
TypeAssigner
def assignType(tree: Labeled)(using Context): Labeled
Inherited from
TypeAssigner
def assignType(tree: Match, scrutinee: Tree, cases: List[CaseDef])(using Context): Match
Inherited from
TypeAssigner
def assignType(tree: CaseDef, pat: Tree, body: Tree)(using Context): CaseDef
Inherited from
TypeAssigner
def assignType(tree: Closure, meth: Tree, target: Tree)(using Context): Closure
Inherited from
TypeAssigner
def assignType(tree: If, thenp: Tree, elsep: Tree)(using Context): If
Inherited from
TypeAssigner
def assignType(tree: Inlined, bindings: List[Tree], expansion: Tree)(using Context): Inlined
Inherited from
TypeAssigner
def assignType(tree: Block, stats: List[Tree], expr: Tree)(using Context): Block
Inherited from
TypeAssigner
def assignType(tree: Assign)(using Context): Assign
Inherited from
TypeAssigner
def assignType(tree: NamedArg, arg: Tree)(using Context): NamedArg
Inherited from
TypeAssigner
def assignType(tree: Typed, tpt: Tree)(using Context): Typed
Inherited from
TypeAssigner
def assignType(tree: TypeApply, fn: Tree, args: List[Tree])(using Context): TypeApply
Inherited from
TypeAssigner
def assignType(tree: Apply, fn: Tree, args: List[Tree])(using Context): Apply
Inherited from
TypeAssigner
def assignType(tree: Super, qual: Tree, mixinClass: Symbol)(using Context): Super
Inherited from
TypeAssigner
def assignType(tree: This)(using Context): This
Inherited from
TypeAssigner
def assignType(tree: Literal)(using Context): Literal
Inherited from
TypeAssigner
def assignType(tree: New, tpt: Tree)(using Context): New
Inherited from
TypeAssigner
def assignType(tree: Select, qual: Tree)(using Context): Select
Inherited from
TypeAssigner
def assignType(tree: Select, tp: Type)(using Context): Select
Inherited from
TypeAssigner
def assignType(tree: Ident, tp: Type)(using Context): Ident

Type assignment method. Each method takes as parameters

Type assignment method. Each method takes as parameters

  • an untpd.Tree to which it assigns a type,
  • typed child trees it needs to access to cpmpute that type,
  • any further information it needs to access to compute that type.
Inherited from
TypeAssigner
def assumedCanEqual(ltp: Type, rtp: Type)(using Context): Boolean

A CanEqual[T, U] instance is assumed

A CanEqual[T, U] instance is assumed

  • if one of T, U is an error type, or
  • if one of T, U is a subtype of the lifted version of the other, unless strict equality is set.
Inherited from
Implicits
Inherited from
TypeAssigner
def avoidingType(expr: Tree, bindings: List[Tree])(using Context): Type
Inherited from
TypeAssigner
override def checkAnnotApplicable(annot: Tree, sym: Symbol)(using Context): Boolean
Definition Classes
Inherited from
ReChecking
override def checkAnnotArgs(tree: Tree)(using Context): tree
Definition Classes
Inherited from
NoChecking
override def checkCanEqual(ltp: Type, rtp: Type, span: Span)(using Context): Unit
Definition Classes
Inherited from
ReTyper
override def checkCaseInheritance(parentSym: Symbol, caseCls: ClassSymbol, pos: SrcPos)(using Context): Unit
Definition Classes
Inherited from
NoChecking
override def checkClassType(tp: Type, pos: SrcPos, traitReq: Boolean, stablePrefixReq: Boolean)(using Context): Type
Definition Classes
Inherited from
NoChecking
override def checkDerivedValueClass(clazz: Symbol, stats: List[Tree])(using Context): Unit
Definition Classes
Inherited from
NoChecking
override def checkEnum(cdef: TypeDef, cls: Symbol, firstParent: Symbol)(using Context): Unit
Definition Classes
Inherited from
ReChecking
override def checkEnumCaseRefsLegal(cdef: TypeDef, enumCtx: Context)(using Context): Unit
Definition Classes
Inherited from
ReChecking
override def checkEnumParent(cls: Symbol, firstParent: Symbol)(using Context): Unit
Definition Classes
Inherited from
ReChecking
override def checkFeasibleParent(tp: Type, pos: SrcPos, where: => String)(using Context): Type
Definition Classes
Inherited from
NoChecking
override def checkFeature(name: TermName, description: => String, featureUseSite: Symbol, pos: SrcPos)(using Context): Unit
Definition Classes
Inherited from
NoChecking
override def checkFullyAppliedType(tree: Tree)(using Context): Unit
Definition Classes
Inherited from
ReChecking
override def checkImplicitConversionDefOK(sym: Symbol)(using Context): Unit
Definition Classes
Inherited from
NoChecking
override def checkImplicitConversionUseOK(tree: Tree)(using Context): Unit
Definition Classes
Inherited from
NoChecking
override def checkInInlineContext(what: String, pos: SrcPos)(using Context): Unit
Definition Classes
Inherited from
NoChecking
def checkIrrefutable(sel: Tree, pat: Tree, isPatDef: Boolean)(using Context): Boolean

Check that pattern pat is irrefutable for scrutinee type sel.tpe. This means sel is either marked @unchecked or sel.tpe conforms to the pattern's type. If pattern is an UnApply, do the check recursively.

Check that pattern pat is irrefutable for scrutinee type sel.tpe. This means sel is either marked @unchecked or sel.tpe conforms to the pattern's type. If pattern is an UnApply, do the check recursively.

Inherited from
Checking
def checkLegalExportPath(path: Tree, selectors: List[ImportSelector])(using Context): Unit

Check that path is a legal prefix for an export clause

Check that path is a legal prefix for an export clause

Inherited from
Checking

Check that path is a legal prefix for an import clause

Check that path is a legal prefix for an import clause

Inherited from
Checking
override def checkMatchable(tp: Type, pos: SrcPos, pattern: Boolean)(using Context): Unit
Definition Classes
Inherited from
ReChecking
override def checkMembersOK(tp: Type, pos: SrcPos)(using Context): Type
Definition Classes
Inherited from
NoChecking
def checkNoConflict(name: Name, isPrivate: Boolean, span: Span)(using Context): Name

Check that a new definition with given name and privacy status in current context would not conflict with existing currently compiled definitions. The logic here is very subtle and fragile due to the fact that we are not allowed to force anything.

Check that a new definition with given name and privacy status in current context would not conflict with existing currently compiled definitions. The logic here is very subtle and fragile due to the fact that we are not allowed to force anything.

Inherited from
Namer

Check that class does not declare same symbol twice

Check that class does not declare same symbol twice

Inherited from
Checking
override def checkNoForwardDependencies(vparams: List[ValDef])(using Context): Unit
Definition Classes
Inherited from
NoChecking
override def checkNoModuleClash(sym: Symbol)(using Context): Unit
Definition Classes
Inherited from
ReChecking
override def checkNoTargetNameConflict(stats: List[Tree])(using Context): Unit
Definition Classes
Inherited from
NoChecking
override def checkNonCyclic(sym: Symbol, info: TypeBounds, reportErrors: Boolean)(using Context): Type
Definition Classes
Inherited from
NoChecking
override def checkNonCyclicInherited(joint: Type, parents: List[Type], decls: Scope, pos: SrcPos)(using Context): Unit
Definition Classes
Inherited from
NoChecking
override def checkParentCall(call: Tree, caller: ClassSymbol)(using Context): Unit
Definition Classes
Inherited from
NoChecking

Check that all type members of tp have realizable bounds

Check that all type members of tp have realizable bounds

Inherited from
Checking
override def checkRefsLegal(tree: Tree, badOwner: Symbol, allowed: (Name, Symbol) => Boolean, where: String)(using Context): Unit
Definition Classes
Inherited from
ReChecking
override def checkSimpleKinded(tpt: Tree)(using Context): Tree
Definition Classes
Inherited from
NoChecking
override def checkStable(tp: Type, pos: SrcPos, kind: String)(using Context): Unit
Definition Classes
Inherited from
NoChecking
override def checkTraitInheritance(parentSym: Symbol, cls: ClassSymbol, pos: SrcPos)(using Context): Unit
Definition Classes
Inherited from
NoChecking
override def checkValidInfix(tree: InfixOp, meth: Symbol)(using Context): Unit
Definition Classes
Inherited from
NoChecking
def compare(alt1: TermRef, alt2: TermRef)(using Context): Int

Compare to alternatives of an overloaded call or an implicit search.

Compare to alternatives of an overloaded call or an implicit search.

Value Params
alt1,

alt2 Non-overloaded references indicating the two choices

Returns

1 if 1st alternative is preferred over 2nd -1 if 2nd alternative is preferred over 1st 0 if neither alternative is preferred over the other Normal symbols are always preferred over constructor proxies. Otherwise, an alternative A1 is preferred over an alternative A2 if it wins in a tournament that awards one point for each of the following:

  • A1's owner derives from A2's owner.
  • A1's type is more specific than A2's type. If that tournament yields a draw, a tiebreak is applied where an alternative that takes more implicit parameters wins over one that takes fewer.
Inherited from
Applications
def compareOwner(sym1: Symbol, sym2: Symbol)(using Context): Int

Compare owner inheritance level.

Compare owner inheritance level.

Value Params
sym1

The first owner

sym2

The second owner

Returns

1 if sym1 properly derives from sym2 -1 if sym2 properly derives from sym1 0 otherwise Module classes also inherit the relationship from their companions. This means, if no direct derivation exists between sym1 and sym2 also perform the following tests:

  • If both sym1 and sym1 are module classes that have companion classes, and sym2 does not inherit implicit members from a base class (#), compare the companion classes.
  • If sym1 is a module class with a companion, and sym2 is a normal class or trait, compare the companion with sym2. Condition (#) is necessary to make compareOwner(_, _) > 0 a transitive relation. For instance: class A extends B object A { given a ... } class B object B extends C { given b ... } class C { given c } Then without (#), and taking A$ for the module class of A, compareOwner(A$, B$) = 1 and compareOwner(B$, C) == 1, but compareOwner(A$, C) == 0. Violating transitivity in this way is bad, since it makes implicit search outcomes compilation order dependent. E.g. if we compare b with c first, we pick b. Then, if we compare a and b, we pick a as solution of the search. But if we start with comparing a with c, we get an ambiguity. With the added condition (#), compareOwner(A$, B$) == 0. This means we get an ambiguity between a and b in all cases.
Inherited from
Applications
override def completeAnnotations(mdef: MemberDef, sym: Symbol)(using Context): Unit
Definition Classes
Inherited from
ReTyper
def completeParams(params: List[MemberDef])(using Context): Unit

Enter and typecheck parameter list

Enter and typecheck parameter list

Inherited from
Namer
def constrainResult(meth: Symbol, mt: Type, pt: Type)(using Context): Boolean

Constrain result with special case if meth is an inlineable method in an inlineable context. In that case, we should always succeed and not constrain type parameters in the expected type, because the actual return type can be a subtype of the currently known return type. However, we should constrain parameters of the declared return type. This distinction is achieved by replacing expected type parameters with wildcards.

Constrain result with special case if meth is an inlineable method in an inlineable context. In that case, we should always succeed and not constrain type parameters in the expected type, because the actual return type can be a subtype of the currently known return type. However, we should constrain parameters of the declared return type. This distinction is achieved by replacing expected type parameters with wildcards.

Inherited from
Compatibility
def constrainResult(mt: Type, pt: Type)(using Context): Boolean

Check that the result type of the current method fits the given expected result type.

Check that the result type of the current method fits the given expected result type.

Inherited from
Compatibility

Rewrite new Array[T](....) if T is an unbounded generic to calls to newGenericArray. It is performed during typer as creation of generic arrays needs a classTag. we rely on implicit search to find one.

Rewrite new Array[T](....) if T is an unbounded generic to calls to newGenericArray. It is performed during typer as creation of generic arrays needs a classTag. we rely on implicit search to find one.

Inherited from
Applications
def createSymbol(tree: Tree)(using Context): Symbol

If this tree is a member def or an import, create a symbol of it and store in symOfTree map.

If this tree is a member def or an import, create a symbol of it and store in symOfTree map.

Inherited from
Namer
def defDefSig(ddef: DefDef, sym: Symbol)(using Context): Type

The type signature of a DefDef with given symbol

The type signature of a DefDef with given symbol

Inherited from
Namer
def enclosingClassNamed(name: TypeName, span: Span)(using Context): Symbol

The enclosing class with given name; error if none exists

The enclosing class with given name; error if none exists

Inherited from
Namer
def ensureAccessible(tpe: Type, superAccess: Boolean, pos: SrcPos)(using Context): Type

Try to make tpe accessible, emit error if not possible

Try to make tpe accessible, emit error if not possible

Inherited from
TypeAssigner
override def ensureConstrCall(cls: ClassSymbol, parent: Tree)(using Context): Tree
Definition Classes
Inherited from
ReTyper
def ensureConstrCall(cls: ClassSymbol, parents: List[Tree])(using Context): List[Tree]

If this is a real class, make sure its first parent is a constructor call. Cannot simply use a type. Overridden in ReTyper.

If this is a real class, make sure its first parent is a constructor call. Cannot simply use a type. Overridden in ReTyper.

Inherited from
Typer
def enterSymbol(sym: Symbol)(using Context): Unit

If sym exists, enter it in effective scope. Check that package members are not entered twice in the same run.

If sym exists, enter it in effective scope. Check that package members are not entered twice in the same run.

Inherited from
Namer
def escapingRefs(block: Tree, localSyms: => List[Symbol])(using Context): List[NamedType]
Inherited from
Typer

A hook to exclude selected symbols from double declaration check

A hook to exclude selected symbols from double declaration check

Inherited from
Checking
def expand(tree: Tree)(using Context): Unit

Expand tree and store in expandedTree

Expand tree and store in expandedTree

Inherited from
Namer
def expanded(tree: Tree)(using Context): Tree

The expanded version of this tree, or tree itself if not expanded

The expanded version of this tree, or tree itself if not expanded

Inherited from
Namer
def extMethodApply(methodRef: Tree, receiver: Tree, pt: Type)(using Context): Tree

The typed application

The typed application

() or

where comes from pt if it is a (possibly ignored) PolyProto.

Inherited from
Applications
def findRef(name: Name, pt: Type, required: FlagSet, excluded: FlagSet, pos: SrcPos)(using Context): Type

Find the type of an identifier with given name in given context ctx.

Find the type of an identifier with given name in given context ctx.

Value Params
excluded

flags the result's symbol must not have

name

the name of the identifier

pos

indicates position to use for error reporting

pt

the expected type

required

flags the result's symbol must have

Inherited from
Typer
def handleStructural(tree: Tree)(using Context): Tree

Handle reflection-based dispatch for members of structural types.

Handle reflection-based dispatch for members of structural types.

Given x.a, where x is of (widened) type T (a value type or a nullary method type), and x.a is of type U, map x.a to the equivalent of:

x1.selectDynamic("a").asInstanceOf[U]

where x1 is x adapted to Selectable.

Given x.a(a11, ..., a1n)...(aN1, ..., aNn), where x.a is of (widened) type (T11, ..., T1n)...(TN1, ..., TNn): R, it is desugared to:

x1.applyDynamic("a")(a11, ..., a1n, ..., aN1, ..., aNn)
  .asInstanceOf[R]

If this call resolves to an applyDynamic method that takes a Class[?]* as second parameter, we further rewrite this call to scala``` x1.applyDynamic("a", c11, ..., c1n, ..., cN1, ... cNn) (a11, ..., a1n, ..., aN1, ..., aNn) .asInstanceOf[R]

where c11, ..., cNn are the classOf constants representing the erasures of T11, ..., TNn.

It's an error if U is neither a value nor a method type, or a dependent method
type
Inherited from
Dynamic
override def handleUnexpectedFunType(tree: Apply, fun: Tree)(using Context): Tree
Definition Classes
Inherited from
ReTyper
def harmonic[T](harmonize: List[T] => List[T], pt: Type)(op: => List[T])(using Context): List[T]

Apply a transformation harmonize on the results of operation op, unless the expected type pt is fully defined. If the result is different (wrt eq) from the original results of op, revert back to the constraint in force before computing op. This reset is needed because otherwise the original results might have added constraints to type parameters which are no longer implied after harmonization. No essential constraints are lost by this because the result of harmomization will be compared again with the expected type. Test cases where this matters are in pos/harmomize.scala.

Apply a transformation harmonize on the results of operation op, unless the expected type pt is fully defined. If the result is different (wrt eq) from the original results of op, revert back to the constraint in force before computing op. This reset is needed because otherwise the original results might have added constraints to type parameters which are no longer implied after harmonization. No essential constraints are lost by this because the result of harmomization will be compared again with the expected type. Test cases where this matters are in pos/harmomize.scala.

Inherited from
Applications
def harmonize(trees: List[Tree])(using Context): List[Tree]

If trees all have numeric value types, and they do not have all the same type, pick a common numeric supertype and try to convert all constant Int literals to this type. If the resulting trees all have the same type, return them instead of the original ones.

If trees all have numeric value types, and they do not have all the same type, pick a common numeric supertype and try to convert all constant Int literals to this type. If the resulting trees all have the same type, return them instead of the original ones.

Inherited from
Applications
def hasExtensionMethodNamed(tp: Type, xname: TermName, argType: Type, resultType: Type)(using Context): Boolean

Does tp have an extension method named xname with this-argument argType and result matching resultType?

Does tp have an extension method named xname with this-argument argType and result matching resultType?

Inherited from
Applications

True if this inline typer has already issued errors

True if this inline typer has already issued errors

Inherited from
Typer
def implicitArgTree(formal: Type, span: Span)(using Context): Tree

Search an implicit argument and report error if not found

Search an implicit argument and report error if not found

Inherited from
Implicits
def implicitParamString(paramName: TermName, methodStr: String, tree: Tree)(using Context): String

A string indicating the formal parameter corresponding to a missing argument

A string indicating the formal parameter corresponding to a missing argument

Inherited from
Implicits
def importBound(sels: List[ImportSelector], isGiven: Boolean)(using Context): Type

The type bound on wildcard imports of an import list, with special values Nothing if no wildcard imports of this kind exist Any if there are unbounded wildcard imports of this kind

The type bound on wildcard imports of an import list, with special values Nothing if no wildcard imports of this kind exist Any if there are unbounded wildcard imports of this kind

Inherited from
Namer
override def importSuggestionAddendum(pt: Type)(using Context): String

An addendum to an error message where the error might be fixed by some implicit value of type pt that is however not found. The addendum suggests given imports that might fix the problem. If there's nothing to suggest, an empty string is returned.

An addendum to an error message where the error might be fixed by some implicit value of type pt that is however not found. The addendum suggests given imports that might fix the problem. If there's nothing to suggest, an empty string is returned.

Definition Classes
Inherited from
ImportSuggestions
def inaccessibleErrorType(tpe: NamedType, superAccess: Boolean, pos: SrcPos)(using Context): Type
Inherited from
TypeAssigner
override def index(trees: List[Tree])(using Context): Context
Definition Classes
Inherited from
ReTyper
def index(stat: Tree)(using Context): Context

Expand tree and create top-level symbols for statement and enter them into symbol table

Expand tree and create top-level symbols for statement and enter them into symbol table

Inherited from
Namer
def indexExpanded(origStat: Tree)(using Context): Context

Create top-level symbols for all statements in the expansion of this statement and enter them into symbol table

Create top-level symbols for all statements in the expansion of this statement and enter them into symbol table

Inherited from
Namer
def inferImplicit(pt: Type, argument: Tree, span: Span)(using Context): SearchResult

Find an implicit parameter or conversion.

Find an implicit parameter or conversion.

Value Params
argument

If an implicit conversion is searched, the argument to which it should be applied, EmptyTree otherwise.

pt

The expected type of the parameter or conversion.

span

The position where errors should be reported.

Inherited from
Implicits
def inferImplicitArg(formal: Type, span: Span)(using Context): Tree

Find an implicit argument for parameter formal. Return a failure as a SearchFailureType in the type of the returned tree.

Find an implicit argument for parameter formal. Return a failure as a SearchFailureType in the type of the returned tree.

Inherited from
Implicits
override def inferView(from: Tree, to: Type)(using Context): SearchResult
Definition Classes
Inherited from
ReTyper
override def inlineExpansion(mdef: DefDef)(using Context): List[Tree]
Definition Classes
Inherited from
ReTyper

If the prototype pt is the type lambda (when doing a dependent typing of a match), instantiate that type lambda with the pattern variables found in the pattern pat.

If the prototype pt is the type lambda (when doing a dependent typing of a match), instantiate that type lambda with the pattern variables found in the pattern pat.

Inherited from
Typer
def interpolateTypeVars(tree: Tree, pt: Type, locked: TypeVars)(using Context): tree

Interpolate undetermined type variables in the widened type of this tree.

Interpolate undetermined type variables in the widened type of this tree.

Value Params
locked

the set of type variables of the current typer state that cannot be interpolated at the present time Eligible for interpolation are all type variables owned by the current typerstate that are not in locked. Type variables occurring co- (respectively, contra-) variantly in the type are minimized (respectvely, maximized). Non occurring type variables are minimized if they have a lower bound different from Nothing, maximized otherwise. Type variables appearing non-variantly in the type are left untouched. Note that even type variables that do not appear directly in a type, can occur with some variance in the type, because of the constraints. E.g if X occurs co-variantly in T and we have a constraint Y <: X Then Y also occurs co-variantly in T because it needs to be minimized in order to constrain T the least. See variances for more detail.

pt

the expected result type

tree

the tree whose type is interpolated

Inherited from
Inferencing
def invalidateCompanions(pkg: Symbol, xstats: List[Tree])(using Context): Unit

For all class definitions stat in xstats: If the companion class is not also defined in xstats, invalidate it by setting its info to NoType.

For all class definitions stat in xstats: If the companion class is not also defined in xstats, invalidate it by setting its info to NoType.

Inherited from
Namer
def isApplicableExtensionMethod(methodRef: TermRef, receiverType: Type)(using Context): Boolean
Inherited from
Applications
def isApplicableMethodRef(methRef: TermRef, args: List[Type], resultType: Type, argMatch: ArgMatch)(using Context): Boolean

Is given method reference applicable to argument types args?

Is given method reference applicable to argument types args?

Value Params
resultType

The expected result type of the application

Inherited from
Applications
def isApplicableMethodRef(methRef: TermRef, args: List[Tree], resultType: Type, keepConstraint: Boolean, argMatch: ArgMatch)(using Context): Boolean

Is given method reference applicable to argument trees args?

Is given method reference applicable to argument trees args?

Value Params
resultType

The expected result type of the application

Inherited from
Applications
def isApplicableType(tp: Type, args: List[Type], resultType: Type)(using Context): Boolean

Is given type applicable to argument types args, possibly after inserting an apply?

Is given type applicable to argument types args, possibly after inserting an apply?

Value Params
resultType

The expected result type of the application

Inherited from
Applications
def isApplicableType(tp: Type, args: List[Tree], resultType: Type, keepConstraint: Boolean)(using Context): Boolean

Is given type applicable to argument trees args, possibly after inserting an apply?

Is given type applicable to argument trees args, possibly after inserting an apply?

Value Params
resultType

The expected result type of the application

Inherited from
Applications
def isApplyProto(pt: Type)(using Context): Boolean

Is pt a prototype of an apply selection, or a parameterless function yielding one?

Is pt a prototype of an apply selection, or a parameterless function yielding one?

Inherited from
Typer
def isCompatible(tp: Type, pt: Type)(using Context): Boolean

A type tp is compatible with a type pt if one of the following holds:

A type tp is compatible with a type pt if one of the following holds:

  1. tp is a subtype of pt
  2. pt is by name parameter type, and tp is compatible with its underlying type
  3. there is an implicit conversion from tp to pt.
  4. tp is a numeric subtype of pt (this case applies even if implicit conversions are disabled) If pt is a by-name type, we compare against the underlying type instead.
Inherited from
Compatibility

Determines whether this field holds an enum constant.

Determines whether this field holds an enum constant.

Inherited from
Namer
def isUnary(tp: Type)(using Context): Boolean

Is tp a unary function type or an overloaded type with with only unary function types as alternatives?

Is tp a unary function type or an overloaded type with with only unary function types as alternatives?

Inherited from
Applications
def lateEnter(tree: Tree)(using Context): Context

Index symbols in tree while asserting the lateCompile flag. This will cause any old top-level symbol with the same fully qualified name as a newly created symbol to be replaced.

Index symbols in tree while asserting the lateCompile flag. This will cause any old top-level symbol with the same fully qualified name as a newly created symbol to be replaced.

Inherited from
Namer
override def localDummy(cls: ClassSymbol, impl: Template)(using Context): Symbol
Definition Classes
Inherited from
ReTyper
override def localTyper(sym: Symbol): Typer
Definition Classes
Inherited from
ReTyper
def maybeSkolemizePrefix(qualType: Type, name: Name)(using Context): Type

Return a potentially skolemized version of qualTpe to be used as a prefix when selecting name.

Return a potentially skolemized version of qualTpe to be used as a prefix when selecting name.

See also

QualSkolemType, TypeOps#asSeenFrom

Inherited from
TypeAssigner
def missingArgMsg(arg: Tree, pt: Type, where: String, paramSymWithMethodCallTree: Option[(Symbol, Tree)])(using Context): String
Value Params
arg

Tree representing a failed result of implicit search

paramSymWithMethodCallTree

Symbol of the parameter for which the implicit was searched and tree of the method call that triggered the implicit search

pt

Type for which an implicit value was searched

where

Description of where the search was performed. Might be empty

Inherited from
Implicits
def missingType(sym: Symbol, modifier: String)(using Context): Unit
Inherited from
Namer
def moduleValSig(sym: Symbol)(using Context): Type

The signature of a module valdef. This will compute the corresponding module class TypeRef immediately without going through the defined type of the ValDef. This is necessary to avoid cyclic references involving imports and module val defs.

The signature of a module valdef. This will compute the corresponding module class TypeRef immediately without going through the defined type of the ValDef. This is necessary to avoid cyclic references involving imports and module val defs.

Inherited from
Namer
Inherited from
Applications

Like normalize and then isCompatible, but using a subtype comparison with necessary eithers that does not unnecessarily truncate the constraint space, returning false instead.

Like normalize and then isCompatible, but using a subtype comparison with necessary eithers that does not unnecessarily truncate the constraint space, returning false instead.

Inherited from
Compatibility
def needsTupledDual(funType: Type, pt: FunProto)(using Context): Boolean

Should we tuple or untuple the argument before application? If auto-tupling is enabled then

Should we tuple or untuple the argument before application? If auto-tupling is enabled then

  • we tuple n-ary arguments where n > 0 if the function consists only of unary alternatives
  • we untuple tuple arguments of infix operations if the function does not consist only of unary alternatives.
Inherited from
Applications
Inherited from
Typer
def normalizedCompatible(tp: Type, pt: Type, keepConstraint: Boolean)(using Context): Boolean

Test compatibility after normalization. If keepConstraint is false, the current constraint set will not be modified by this call.

Test compatibility after normalization. If keepConstraint is false, the current constraint set will not be modified by this call.

Inherited from
Compatibility
def notAMemberErrorType(tree: Select, qual: Tree)(using Context): ErrorType
Inherited from
TypeAssigner
def qualifyingClass(tree: Tree, qual: Name, packageOK: Boolean)(using Context): Symbol

The qualifying class of a this or super with prefix qual (which might be empty).

The qualifying class of a this or super with prefix qual (which might be empty).

Value Params
packageOk

The qualifier may refer to a package.

Inherited from
TypeAssigner
final def reallyExists(denot: Denotation)(using Context): Boolean

A denotation exists really if it exists and does not point to a stale symbol.

A denotation exists really if it exists and does not point to a stale symbol.

Inherited from
TypeAssigner
def recordSym(sym: Symbol, tree: Tree)(using Context): Symbol

Record sym as the symbol defined by tree

Record sym as the symbol defined by tree

Inherited from
Namer
def resolveMapped(alts: List[TermRef], f: TermRef => Type, pt: Type)(using Context): List[TermRef]

Resolve overloading by mapping to a different problem where each alternative's type is mapped with f, alternatives with non-existing types are dropped, and the expected type is pt. Map the results back to the original alternatives.

Resolve overloading by mapping to a different problem where each alternative's type is mapped with f, alternatives with non-existing types are dropped, and the expected type is pt. Map the results back to the original alternatives.

Inherited from
Applications

Resolve overloaded alternative alts, given expected type pt. Two trials: First, without implicits or SAM conversions enabled. Then, if the first finds no eligible candidates, with implicits and SAM conversions enabled.

Resolve overloaded alternative alts, given expected type pt. Two trials: First, without implicits or SAM conversions enabled. Then, if the first finds no eligible candidates, with implicits and SAM conversions enabled.

Inherited from
Applications
override def retrieveSym(tree: Tree)(using Context): Symbol
Definition Classes
Inherited from
ReTyper
def safeSubstParam(tp: Type, pref: ParamRef, argType: Type)(using Context): Type

Substitute argument type argType for parameter pref in type tp, skolemizing the argument type if it is not stable and pref occurs in tp.

Substitute argument type argType for parameter pref in type tp, skolemizing the argument type if it is not stable and pref occurs in tp.

Inherited from
TypeAssigner
def safeSubstParams(tp: Type, params: List[ParamRef], argTypes: List[Type])(using Context): Type

Substitute types of all arguments args for corresponding params in tp. The number of parameters params may exceed the number of arguments. In this case, only the common prefix is substituted.

Substitute types of all arguments args for corresponding params in tp. The number of parameters params may exceed the number of arguments. In this case, only the common prefix is substituted.

Inherited from
TypeAssigner
def saysNotFound(state: TyperState, memberName: Name)(using Context): Boolean

Does state contain a "NotAMember" or "MissingIdent" message as first pending error message? That message would be $memberName is not a member of ... or Not found: $memberName. If memberName is empty, any name will do.

Does state contain a "NotAMember" or "MissingIdent" message as first pending error message? That message would be $memberName is not a member of ... or Not found: $memberName. If memberName is empty, any name will do.

Inherited from
Applications
def selectionType(tree: RefTree, qual1: Tree)(using Context): Type

The type of the selection tree, where qual1 is the typed qualifier part.

The type of the selection tree, where qual1 is the typed qualifier part.

Inherited from
TypeAssigner
def seqToRepeated(tree: Tree)(using Context): Tree
Inherited from
TypeAssigner
def setDocstring(sym: Symbol, tree: Tree)(using Context): Unit
Inherited from
Namer
def stripImplicit(tp: Type)(using Context): Type

Drop any implicit parameter section

Drop any implicit parameter section

Inherited from
Applications
override def symbolOfTree(tree: Tree)(using Context): Symbol
Definition Classes
Inherited from
ReTyper
def toNotNullTermRef(tree: Tree, pt: Type)(using Context): Tree

If tree's type is a TermRef identified by flow typing to be non-null, then cast away trees nullability. Otherwise, tree remains unchanged.

If tree's type is a TermRef identified by flow typing to be non-null, then cast away trees nullability. Otherwise, tree remains unchanged.

Example: If x is a trackable reference and we know x is not null at this point, (x: T | Null) => x.$asInstanceOf$[x.type & T]

Inherited from
Typer
def tryAlternatively[T](op1: Context => T)(op2: Context => T)(using Context): T

Try op1, if there are errors, try op2, if op2 also causes errors, fall back to errors and result of op1.

Try op1, if there are errors, try op2, if op2 also causes errors, fall back to errors and result of op1.

Inherited from
Typer
def tryApplyingExtensionMethod(methodRef: TermRef, receiver: Tree)(using Context): Option[Tree]

Assuming methodRef is a reference to an extension method defined e.g. as

Assuming methodRef is a reference to an extension method defined e.g. as

extension [T1, T2](using A)(using B, C)(receiver: R)(using D) def foo[T3](using E)(f: F): G = ???

return the tree representing methodRef partially applied to the receiver and all the implicit parameters preceding it (A, B, C) with the type parameters of the extension (T1, T2) inferred. None is returned if the implicit search fails for any of the leading implicit parameters or if the receiver has a wrong type (note that in general the type of the receiver might depend on the exact types of the found instances of the proceding implicits). No implicit search is tried for implicits following the receiver or for parameters of the def (D, E).

Inherited from
Applications
def tryEither[T](op: Context => T)(fallBack: (T, TyperState) => T)(using Context): T
Inherited from
Typer
def tryExtensionOrConversion(tree: Select, pt: Type, mbrProto: Type, qual: Tree, locked: TypeVars, compat: Compatibility, privateOK: Boolean)(using Context): Tree

Given a selection qual.name, try to convert to an extension method application name(qual) or insert an implicit conversion c(qual).name.

Given a selection qual.name, try to convert to an extension method application name(qual) or insert an implicit conversion c(qual).name.

Returns

The converted tree, or EmptyTree is not successful.

Inherited from
Typer
override def tryInsertApplyOrImplicit(tree: Tree, pt: ProtoType, locked: TypeVars)(fallBack: => Tree)(using Context): Tree
Definition Classes
Inherited from
ReTyper
def tryInsertImplicitOnQualifier(tree: Tree, pt: Type, locked: TypeVars)(using Context): Option[Tree]

If this tree is a select node qual.name that does not conform to pt, try to insert an implicit conversion c around qual so that c(qual).name conforms to pt.

If this tree is a select node qual.name that does not conform to pt, try to insert an implicit conversion c around qual so that c(qual).name conforms to pt.

Inherited from
Typer
def tryWithTypeTest(tree: Typed, pt: Type)(using Context): Tree

For a typed tree e: T, if T is an abstract type for which an implicit type test or class tag tt exists, rewrite to tt(e).

For a typed tree e: T, if T is an abstract type for which an implicit type test or class tag tt exists, rewrite to tt(e).

Inherited from
Typer
def typeOfNew(tpt: Tree)(using Context): Type

Normalize type T appearing in a new T by following eta expansions to avoid higher-kinded types.

Normalize type T appearing in a new T by following eta expansions to avoid higher-kinded types.

Inherited from
TypeAssigner
def typed(tree: Tree, pt: Type)(using Context): Tree
Inherited from
Typer
def typed(tree: Tree, pt: Type, locked: TypeVars)(using Context): Tree

Typecheck and adapt tree, returning a typed tree. Parameters as for typedUnadapted

Typecheck and adapt tree, returning a typed tree. Parameters as for typedUnadapted

Inherited from
Typer
def typedAhead(tree: Tree, typed: Tree => Tree)(using Context): Tree

Typecheck tree during completion using typed, and remember result in TypedAhead map

Typecheck tree during completion using typed, and remember result in TypedAhead map

Inherited from
Namer
Inherited from
Namer
Inherited from
Namer
def typedAheadExpr(tree: Tree, pt: Type)(using Context): Tree
Inherited from
Namer
def typedAheadType(tree: Tree, pt: Type)(using Context): Tree
Inherited from
Namer
Inherited from
Typer
def typedAnnotation(annot: Tree)(using Context): Tree
Inherited from
Typer
def typedAppliedSplice(tree: Apply, pt: Type)(using Context): Tree

Types a splice applied to some arguments $f(arg1, ..., argn) in a quote pattern.

Types a splice applied to some arguments $f(arg1, ..., argn) in a quote pattern.

The tree is desugared into $f.apply(arg1, ..., argn) where the expression $f is expected to type as a function type (T1, ..., Tn) => R. Ti is the type of the argument argi and R if the type of the prototype. The prototype must be fully defined to be able to infer the type of R.

Inherited from
QuotesAndSplices
Inherited from
Typer
def typedAsFunction(tree: PostfixOp, pt: Type)(using Context): Tree
Inherited from
Typer
def typedAssign(tree: Assign, pt: Type)(using Context): Tree
Inherited from
Typer
override def typedBind(tree: Bind, pt: Type)(using Context): Bind
Definition Classes
Inherited from
ReTyper
def typedBlock(tree: Block, pt: Type)(using Context): Tree
Inherited from
Typer
def typedBlockStats(stats: List[Tree])(using Context): (List[Tree], Context)
Inherited from
Typer
def typedCase(tree: CaseDef, sel: Tree, wideSelType: Type, pt: Type)(using Context): CaseDef

Type a case.

Type a case.

Inherited from
Typer
def typedCases(cases: List[CaseDef], sel: Tree, wideSelType: Type, pt: Type)(using Context): List[CaseDef]
Inherited from
Typer
def typedDependentMatchFinish(tree: Match, sel: Tree, wideSelType: Type, cases: List[CaseDef], pt: MatchType)(using Context): Tree

Special typing of Match tree when the expected type is a MatchType, and the patterns of the Match tree and the MatchType correspond.

Special typing of Match tree when the expected type is a MatchType, and the patterns of the Match tree and the MatchType correspond.

Inherited from
Typer
def typedDynamicApply(tree: Apply, isInsertedApply: Boolean, pt: Type)(using Context): Tree

Translate selection that does not typecheck according to the normal rules into a applyDynamic/applyDynamicNamed. foo.bar(baz0, baz1, ...) ~~> foo.applyDynamic(bar)(baz0, baz1, ...) foo.bar[T0, ...](baz0, baz1, ...) ~~> foo.applyDynamicT0, ...(baz0, baz1, ...) foo.bar(x = bazX, y = bazY, baz, ...) ~~> foo.applyDynamicNamed("bar")(("x", bazX), ("y", bazY), ("", baz), ...) foo.bar[T0, ...](x = bazX, y = bazY, baz, ...) ~~> foo.applyDynamicNamedT0, ...(("x", bazX), ("y", bazY), ("", baz), ...)

Translate selection that does not typecheck according to the normal rules into a applyDynamic/applyDynamicNamed. foo.bar(baz0, baz1, ...) ~~> foo.applyDynamic(bar)(baz0, baz1, ...) foo.bar[T0, ...](baz0, baz1, ...) ~~> foo.applyDynamicT0, ...(baz0, baz1, ...) foo.bar(x = bazX, y = bazY, baz, ...) ~~> foo.applyDynamicNamed("bar")(("x", bazX), ("y", bazY), ("", baz), ...) foo.bar[T0, ...](x = bazX, y = bazY, baz, ...) ~~> foo.applyDynamicNamedT0, ...(("x", bazX), ("y", bazY), ("", baz), ...)

Inherited from
Dynamic
def typedDynamicAssign(tree: Assign, pt: Type)(using Context): Tree

Translate selection that does not typecheck according to the normal rules into a updateDynamic. foo.bar = baz ~~> foo.updateDynamic(bar)(baz)

Translate selection that does not typecheck according to the normal rules into a updateDynamic. foo.bar = baz ~~> foo.updateDynamic(bar)(baz)

Inherited from
Dynamic
def typedDynamicSelect(tree: Select, targs: List[Tree], pt: Type)(using Context): Tree

Translate selection that does not typecheck according to the normal rules into a selectDynamic. foo.bar ~~> foo.selectDynamic(bar) foo.bar[T0, ...] ~~> foo.selectDynamicT0, ...

Translate selection that does not typecheck according to the normal rules into a selectDynamic. foo.bar ~~> foo.selectDynamic(bar) foo.bar[T0, ...] ~~> foo.selectDynamicT0, ...

Note: inner part of translation foo.bar(baz) = quux ~~> foo.selectDynamic(bar).update(baz, quux) is achieved through an existing transformation of in typedAssign [foo.bar(baz) = quux ~~> foo.bar.update(baz, quux)].

Inherited from
Dynamic
def typedExport(exp: Export)(using Context): Export
Inherited from
Typer
def typedExpr(tree: Tree, pt: Type)(using Context): Tree
Inherited from
Typer
def typedFunction(tree: Function, pt: Type)(using Context): Tree
Inherited from
Typer
def typedFunctionType(tree: Function, pt: Type)(using Context): Tree
Inherited from
Typer
def typedFunctionValue(tree: Function, pt: Type)(using Context): Tree
Inherited from
Typer
def typedImplicit(cand: Candidate, pt: Type, argument: Tree, span: Span)(using Context): SearchResult

Try to typecheck an implicit reference

Try to typecheck an implicit reference

Inherited from
Implicits
def typedImport(imp: Import, sym: Symbol)(using Context): Import
Inherited from
Typer
def typedImportQualifier(imp: Import, typd: (Tree, Type) => Tree)(using Context): Tree
Inherited from
Typer
def typedInfixOp(tree: InfixOp, pt: Type)(using Context): Tree

Translate infix operation expression l op r to

Translate infix operation expression l op r to

l.op(r) if op is left-associative { val x = l; r.op(x) } if op is right-associative call-by-value and l is impure r.op(l) if op is right-associative call-by-name or l is pure

Translate infix type l op r to op[l, r] Translate infix pattern l op r to op(l, r)

Inherited from
Typer
def typedLabeled(tree: Labeled)(using Context): Labeled
Inherited from
Typer
Inherited from
Typer
def typedMatchFinish(tree: Match, sel: Tree, wideSelType: Type, cases: List[CaseDef], pt: Type)(using Context): Tree
Inherited from
Typer
Inherited from
Typer
def typedNamedArg(tree: NamedArg, pt: Type)(using Context): NamedArg
Inherited from
Typer
Inherited from
Applications
def typedNumber(tree: Number, pt: Type)(using Context): Tree
Inherited from
Typer
Inherited from
Typer
def typedPattern(tree: Tree, selType: Type)(using Context): Tree
Inherited from
Typer
def typedQuote(tree: Quote, pt: Type)(using Context): Tree

Translate '{ e } into scala.quoted.Expr.apply(e) and '[T] into scala.quoted.Type.apply[T] while tracking the quotation level in the context.

Translate '{ e } into scala.quoted.Expr.apply(e) and '[T] into scala.quoted.Type.apply[T] while tracking the quotation level in the context.

Inherited from
QuotesAndSplices
def typedQuotedTypeVar(tree: Ident, pt: Type)(using Context): Tree

Type a pattern variable name t in quote pattern as ${given t$giveni: Type[t @ _]}. The resulting pattern is the split in splitQuotePattern.

Type a pattern variable name t in quote pattern as ${given t$giveni: Type[t @ _]}. The resulting pattern is the split in splitQuotePattern.

Inherited from
QuotesAndSplices
Definition Classes
Inherited from
ReTyper
def typedReturn(tree: Return)(using Context): Return
Inherited from
Typer
def typedSelect(tree0: Select, pt: Type, qual: Tree)(using Context): Tree
Inherited from
Typer
def typedSplice(tree: Splice, pt: Type)(using Context): Tree

Translate ${ t: Expr[T] } into expression t.splice while tracking the quotation level in the context

Translate ${ t: Expr[T] } into expression t.splice while tracking the quotation level in the context

Inherited from
QuotesAndSplices
override def typedSuper(tree: Super, pt: Type)(using Context): Tree
Definition Classes
Inherited from
ReTyper
def typedThrow(tree: Throw)(using Context): Tree
Inherited from
Typer
def typedTrees(trees: List[Tree])(using Context): List[Tree]
Inherited from
Typer
def typedTry(tree: ParsedTry, pt: Type)(using Context): Try
Inherited from
Typer
def typedTuple(tree: Tuple, pt: Type)(using Context): Tree

Translate tuples of all arities

Translate tuples of all arities

Inherited from
Typer
def typedTypSplice(tree: TypSplice, pt: Type)(using Context): Tree

Translate ${ t: Type[T] }into typet.splice` while tracking the quotation level in the context

Translate ${ t: Type[T] }into typet.splice` while tracking the quotation level in the context

Inherited from
QuotesAndSplices
def typedType(tree: Tree, pt: Type)(using Context): Tree
Inherited from
Typer
Inherited from
Typer
def typedTypeCase(cdef: CaseDef, selType: Type, pt: Type)(using Context): CaseDef

Type a case of a type match

Type a case of a type match

Inherited from
Typer
Inherited from
Typer
override def typedUnApply(tree: Apply, selType: Type)(using Context): Tree
Definition Classes
Inherited from
ReTyper
override def typedUnApply(tree: UnApply, selType: Type)(using Context): UnApply
Definition Classes
Inherited from
ReTyper
override def typedUnadapted(tree: Tree, pt: Type, locked: TypeVars)(using Context): Tree
Definition Classes
Inherited from
ReTyper
def typedUnadapted(initTree: Tree, pt: Type)(using Context): Tree
Inherited from
Typer
def typedWhileDo(tree: WhileDo)(using Context): Tree
Inherited from
Typer
def valOrDefDefSig(mdef: ValOrDefDef, sym: Symbol, paramss: List[List[Symbol]], paramFn: Type => Type)(using Context): Type

The type signature of a ValDef or DefDef

The type signature of a ValDef or DefDef

Value Params
mdef

The definition

paramFn

A wrapping function that produces the type of the defined symbol, given its final return type

sym

Its symbol

Inherited from
Namer
override def viewExists(from: Type, to: Type)(using Context): Boolean
Definition Classes
Inherited from
Implicits
override def widenEnumCase(tree: Tree, pt: Type)(using Context): Tree
Definition Classes
Inherited from
ReTyper

Inherited fields

Inherited from
Namer
Inherited from
Namer
Inherited from
Namer
inline val MaxSuggestions: 10

The maximal number of suggested imports to make

The maximal number of suggested imports to make

Inherited from
ImportSuggestions
Inherited from
Namer
Inherited from
Namer

A map from method symbols to nested typers. Populated when methods are completed. Emptied when they are typechecked. The nested typer contains new versions of the four maps above including this one, so that trees that are shared between different DefDefs can be independently used as indices. It also contains a scope that contains nested parameters.

A map from method symbols to nested typers. Populated when methods are completed. Emptied when they are typechecked. The nested typer contains new versions of the four maps above including this one, so that trees that are shared between different DefDefs can be independently used as indices. It also contains a scope that contains nested parameters.

Inherited from
Namer

The scope of the typer. For nested typers this is a place parameters are entered during completion and where they survive until typechecking. A context with this typer also has this scope.

The scope of the typer. For nested typers this is a place parameters are entered during completion and where they survive until typechecking. A context with this typer also has this scope.

Inherited from
Namer

Extensions

Inherited extensions

extension (refs: List[TermRef])
def best(n: Int)(using Context): List[TermRef]

The best n references in refs, according to compare compare is a partial order. If there's a tie, we take elements in the order thy appear in the list.

The best n references in refs, according to compare compare is a partial order. If there's a tie, we take elements in the order thy appear in the list.

Inherited from
ImportSuggestions
extension (refs: List[(TermRef, String)])

The ref parts of this list of pairs, discarding subsequent elements that have the same String part. Elements are sorted by their String parts.

The ref parts of this list of pairs, discarding subsequent elements that have the same String part. Elements are sorted by their String parts.

Inherited from
ImportSuggestions