Dotty Documentation



[-] Constructors

[-] Members

[+] object Applications
[+] trait Applications
[+] object Checking
[+] trait Checking
[+] object ConstFold
[+] object Docstrings
[+] object Dynamic
[+] trait Dynamic

Handles programmable member selections of Dynamic instances and values with structural types. Two functionalities:

  1. Translates selection that does not typecheck according to the scala.Dynamic rules: = quux ~~> foo.selectDynamic(bar).update(baz, quux) = baz ~~> foo.updateDynamic("bar")(baz) = bazX, y = bazY, baz, ...) ~~> foo.applyDynamicNamed("bar")(("x", bazX), ("y", bazY), ("", baz), ...), baz1, ...) ~~> foo.applyDynamic(bar)(baz0, baz1, ...) ~~> foo.selectDynamic(bar)

The first matching rule of is applied.

  1. Translates member selections on structural types to calls of selectDynamic or applyDynamic on a Selectable instance. @See handleStructural.
[+] @sharable object EmptyTermRefSet
[+] object ErrorReporting
[+] object EtaExpansion

Lifter for eta expansion

[+] @sharable object ForceDegree

An enumeration controlling the degree of forcing in "is-dully-defined" checks.

[+] class FrontEnd
[+] object FrontEnd
[+] trait ImplicitRunInfo

Info relating to implicits that is kept for one run

[+] object Implicits

Implicit resolution

[+] trait Implicits

The implicit resolution part of type checking

[+] class ImportInfo

Info relating to an import clause

[+] object ImportInfo
[+] object Inferencing
[+] trait Inferencing
[+] class Inliner

Produces an inlined version of call via its inlined method.

[+] object Inliner
[+] class LiftComplex

Lift all impure or complex arguments

[+] object LiftComplex
[+] class LiftImpure

Lift all impure arguments

[+] object LiftImpure
[+] object LiftToDefs

Lift all impure or complex arguments to defs

[+] abstract class Lifter

A class that handles argument lifting. Argument lifting is needed in the following scenarios: - eta expansion - applications with default arguments - applications with out-of-order named arguments Lifting generally lifts impure expressions only, except in the case of possible default arguments, where we lift also complex pure expressions, since in that case arguments can be duplicated as arguments to default argument methods.

[+] class Namer

This class creates symbols from definitions and imports and gives them lazy types.


During enter, trees are expanded as necessary, populating the expandedTree map. Symbols are created, and the symOfTree map is set up.

Symbol completion causes some trees to be already typechecked and typedTree entries are created to associate the typed trees with the untyped expanded originals.

During typer, original trees are first expanded using expandedTree. For each expanded member definition or import we extract and remove the corresponding symbol from the symOfTree map and complete it. We then consult the typedTree map to see whether a typed tree exists already. If yes, the typed tree is returned as result. Otherwise, we proceed with regular type checking.

The scheme is designed to allow sharing of nodes, as long as each duplicate appears in a different method.

[+] object NamerContextOps
[+] trait NamerContextOps
[+] trait NoChecking
[+] object NoLift

No lifting at all

[+] object PrepareInlineable
[+] object ProtoTypes
[+] trait ReChecking
[+] class ReTyper

A version of Typer that keeps all symbols defined and referenced in a previously typed tree.

All definition nodes keep their symbols. All leaf nodes for idents, selects, and TypeTrees keep their types. Indexing is a no-op.

Otherwise, everything is as in Typer.

[+] class RefChecks
[+] object RefChecks
[+] class SearchHistory

Records the history of currently open implicit searches

[+] class TermRefSet

A set of term references where equality is =:=

[+] object TypeAssigner
[+] trait TypeAssigner
[+] class Typer
[+] object Typer
[+] class VarianceChecker
[+] object VarianceChecker

Provides check method to check that all top-level definitions in tree are variance correct. Does not recurse inside methods. The method should be invoked once for each Template.

[+] object Variances