Translates selection that does not typecheck according to the scala.Dynamic rules: foo.bar(baz) = quux ~~> foo.selectDynamic(bar).update(baz, quux) foo.bar = baz ~~> foo.updateDynamic("bar")(baz) foo.bar(x = bazX, y = bazY, baz, ...) ~~> foo.applyDynamicNamed("bar")(("x", bazX), ("y", bazY), ("", baz), ...) foo.bar(baz0, baz1, ...) ~~> foo.applyDynamic(bar)(baz0, baz1, ...) foo.bar ~~> foo.selectDynamic(bar)
Info relating to implicits that is kept for one run
The implicit resolution part of type checking
Info relating to an import clause
Produces an inlined version of call
via its inlined
method.
This class creates symbols from definitions and imports and gives them lazy types.
This class creates symbols from definitions and imports and gives them lazy types.
Timeline:
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.
A version of Typer that keeps all symbols defined and referenced in a previously typed tree.
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.
Post-attribution checking and transformation, which fulfills the following roles
Post-attribution checking and transformation, which fulfills the following roles
checkAllOverrides
.checkDerivedValueClass
.2. It warns about references to symbols labeled deprecated or migration.
3. It performs the following transformations:
4. It makes members not private where necessary. The following members cannot be private in the Java model:
todo: But RefChecks is not done yet. It's still a somewhat dirty port from the Scala 2 version. todo: move untrivial logic to their own mini-phases
Records the history of currently open implicit searches
A set of term references where equality is =:=
An enumeration controlling the degree of forcing in "is-dully-defined" checks.
An enumeration controlling the degree of forcing in "is-dully-defined" checks.
Implicit resolution
Provides check
method to check that all top-level definitions
in tree are variance correct.
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.
Translates selection that does not typecheck according to the scala.Dynamic rules: foo.bar(baz) = quux ~~> foo.selectDynamic(bar).update(baz, quux) foo.bar = baz ~~> foo.updateDynamic("bar")(baz) foo.bar(x = bazX, y = bazY, baz, ...) ~~> foo.applyDynamicNamed("bar")(("x", bazX), ("y", bazY), ("", baz), ...) foo.bar(baz0, baz1, ...) ~~> foo.applyDynamic(bar)(baz0, baz1, ...) foo.bar ~~> foo.selectDynamic(bar)
The first matching rule of is applied.