LocalChecker
Tree checker that can be applied to a local tree.
Attributes
- Graph
-
- Supertypes
-
class Checkerclass ReTypertrait ReCheckingclass Typertrait Migrationstrait Derivingtrait QuotesAndSplicestrait Checkingtrait Dynamictrait Inferencingtrait ImportSuggestionstrait Implicitstrait Applicationstrait Compatibilitytrait TypeAssignerclass Namerclass Objecttrait Matchableclass AnyShow all
Members list
Type members
Inherited classlikes
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.
Attributes
- Inherited from:
- Applications
- Supertypes
Subclass of Application for applicability tests with value argument types.
Subclass of Application for applicability tests with value argument types.
Attributes
- Inherited from:
- Applications
- Supertypes
Subclass of Application for type checking an Apply node with typed arguments.
Subclass of Application for type checking an Apply node with typed arguments.
Attributes
- Inherited from:
- Applications
- Supertypes
Subclass of Application for type checking an Apply node with untyped arguments.
Subclass of Application for type checking an Apply node with untyped arguments.
Attributes
- Inherited from:
- Applications
- Supertypes
The degree to which an argument has to match a formal parameter
The degree to which an argument has to match a formal parameter
Attributes
- Inherited from:
- Applications
- Supertypes
-
trait Enumtrait Serializabletrait Producttrait Equalsclass Objecttrait Matchableclass AnyShow all
Attributes
- Inherited from:
- Namer
- Supertypes
-
class Completertrait SecondCompleterclass LazyTypeclass UncachedGroundTypeclass Typetrait Showabletrait Hashableclass Objecttrait Matchableclass AnyShow all
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)
Attributes
- Inherited from:
- Namer
- Supertypes
-
trait SecondCompleterclass LazyTypeclass UncachedGroundTypeclass Typetrait Showabletrait Hashableclass Objecttrait Matchableclass AnyShow all
- Known subtypes
-
class ClassCompleterclass TypeDefCompleter
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 parameters
- 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.
Attributes
- Inherited from:
- Deriving
- Supertypes
Attributes
- Inherited from:
- Namer
- Supertypes
-
trait SecondCompleterclass LazyTypeclass UncachedGroundTypeclass Typetrait Showabletrait Hashableclass Objecttrait Matchableclass AnyShow all
Attributes
- Inherited from:
- Namer
- Supertypes
-
trait TypeParamsCompleterclass Completertrait SecondCompleterclass LazyTypeclass UncachedGroundTypeclass Typetrait Showabletrait Hashableclass Objecttrait Matchableclass AnyShow all
Attributes
- Inherited from:
- Implicits
- Supertypes
Inherited and Abstract classlikes
Type parameters
- Arg
-
the type of arguments, could be tpd.Tree, untpd.Tree, or Type
Value parameters
- 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
Attributes
- Inherited from:
- Applications
- Supertypes
- Known subtypes
-
class TestApplication[Arg]class ApplicableToTreesclass ApplicableToTypesclass TypedApply[T]class ApplyToTypedclass ApplyToUntypedShow all
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.
Attributes
- Inherited from:
- Applications
- Supertypes
- Known subtypes
-
class ApplicableToTreesclass ApplicableToTypes
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.
Attributes
- Inherited from:
- Applications
- Supertypes
- Known subtypes
-
class ApplyToTypedclass ApplyToUntyped
Value members
Concrete methods
Attributes
- Definition Classes
Inherited methods
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
Attributes
- Inherited from:
- Applications
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
Attributes
- Inherited from:
- TypeAssigner
Perform the following adaptations of expression, pattern or type tree
wrt to given prototype pt
: (1) Resolve overloading (2) Apply parameterless functions (3) Apply polymorphic types to fresh instances of their type parameters and store these instances in context.undetparams, unless followed by explicit type application. (4) Do the following to unapplied methods used as values: (4.1) If the method has only implicit parameters pass implicit arguments (4.2) otherwise, if pt
is a function type and method is not a constructor, convert to function by eta-expansion, (4.3) otherwise, if the method is nullary with a result type compatible to pt
and it is not a constructor, apply it to () otherwise issue an error (5) Convert constructors in a pattern as follows: (5.1) If constructor refers to a case class factory, set tree's type to the unique instance of its primary constructor that is a subtype of the expected type. (5.2) If constructor refers to an extractor, convert to application of unapply or unapplySeq method.
Perform the following adaptations of expression, pattern or type tree
wrt to given prototype pt
: (1) Resolve overloading (2) Apply parameterless functions (3) Apply polymorphic types to fresh instances of their type parameters and store these instances in context.undetparams, unless followed by explicit type application. (4) Do the following to unapplied methods used as values: (4.1) If the method has only implicit parameters pass implicit arguments (4.2) otherwise, if pt
is a function type and method is not a constructor, convert to function by eta-expansion, (4.3) otherwise, if the method is nullary with a result type compatible to pt
and it is not a constructor, apply it to () otherwise issue an error (5) Convert constructors in a pattern as follows: (5.1) If constructor refers to a case class factory, set tree's type to the unique instance of its primary constructor that is a subtype of the expected type. (5.2) If constructor refers to an extractor, convert to application of unapply or unapplySeq method.
(6) Convert all other types to TypeTree nodes. (7) When in TYPEmode but not FUNmode or HKmode, check that types are fully parameterized (7.1) In HKmode, higher-kinded types are allowed, but they must have the expected kind-arity (8) When in both EXPRmode and FUNmode, add apply method calls to values of object type. (9) If there are undetermined type variables and not POLYmode, infer expression instance Then, if tree's type is not a subtype of expected type, try the following adaptations: (10) If the expected type is Byte, Short or Char, and the expression is an integer fitting in the range of that type, convert it to that type. (11) Widen numeric literals to their expected type, if necessary (12) When in mode EXPRmode, convert E to { E; () } if expected type is scala.Unit. (13) When in mode EXPRmode, apply AnnotationChecker conversion if expected type is annotated. (14) When in mode EXPRmode, apply a view If all this fails, error Parameters as for typedUnadapted
.
Attributes
- Definition Classes
- Inherited from:
- Checker
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).
Attributes
- Inherited from:
- Typer
Add givens reflecting CanThrow
capabilities for all checked exceptions matched by cases
. The givens appear in nested blocks with earlier cases leading to more deeply nested givens. This way, given priority will be the same as pattern priority. The functionality is enabled if the experimental.saferExceptions language feature is enabled.
Add givens reflecting CanThrow
capabilities for all checked exceptions matched by cases
. The givens appear in nested blocks with earlier cases leading to more deeply nested givens. This way, given priority will be the same as pattern priority. The functionality is enabled if the experimental.saferExceptions language feature is enabled.
Attributes
- Definition Classes
- Inherited from:
- ReTyper
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.
Attributes
- Inherited from:
- Namer
Add java enum constants
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 make sure that annotation trees are evaluated with an owner that is not the enclosing class since otherwise locally defined symbols would be entered as class members.
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 make sure that annotation trees are evaluated with an owner that is not the enclosing class since otherwise locally defined symbols would be entered as class members.
Attributes
- Inherited from:
- Typer
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.
Attributes
- Inherited from:
- Applications
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
assert Java classes are not used as objects
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
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
.
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
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.
Attributes
- Inherited from:
- TypeAssigner
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.
Attributes
- Inherited from:
- Implicits
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- Applications
check that annotation annot
is applicable to symbol sym
check that annotation annot
is applicable to symbol sym
Attributes
- Definition Classes
- Inherited from:
- ReChecking
Check arguments of compiler-defined annotations
Check that the class corresponding to this tree is either a Scala or Java annotation.
Check that the class corresponding to this tree is either a Scala or Java annotation.
Attributes
- Returns
-
The original tree or an error tree in case
tree
isn't a valid annotation or already an error tree. - Inherited from:
- Checking
Check that there is an implicit capability to throw a checked exception if the saferExceptions feature is turned on. Return that capability is it exists, EmptyTree otherwise.
Check that there is an implicit capability to throw a checked exception if the saferExceptions feature is turned on. Return that capability is it exists, EmptyTree otherwise.
Attributes
- Definition Classes
- Inherited from:
- ReChecking
Check that case classes are not inherited by case classes.
Check that catch can generate a good CanThrow exception
Check that catch can generate a good CanThrow exception
Attributes
- Definition Classes
- Inherited from:
- ReChecking
Check that tp
is a class type. Also, if traitReq
is true, check that tp
is a trait. Also, if stablePrefixReq
is true and phase is not after RefChecks, check that class prefix is stable.
Check that tp
is a class type. Also, if traitReq
is true, check that tp
is a trait. Also, if stablePrefixReq
is true and phase is not after RefChecks, check that class prefix is stable.
Attributes
- Returns
-
tp
itself if it is a class or trait ref, ObjectType if not. - Inherited from:
- Checking
- Check that all case classes that extend
scala.reflect.Enum
areenum
cases - Check that parameterised
enum
cases do not extend java.lang.Enum. - Check that only a static
enum
base class can extend java.lang.Enum. - Check that user does not implement an
ordinal
method in the body of an enum class.
Attributes
- Definition Classes
- Inherited from:
- ReChecking
Check that all references coming from enum cases in an enum companion object are legal.
Check that all references coming from enum cases in an enum companion object are legal.
Value parameters
- cdef
-
the enum companion object class
- enumCtx
-
the context immediately enclosing the corresponding enum
Attributes
- Definition Classes
- Inherited from:
- ReChecking
Check that the firstParent for an enum case derives from the declaring enum class, if not, adds it as a parent after emitting an error.
Check that the firstParent for an enum case derives from the declaring enum class, if not, adds it as a parent after emitting an error.
This check will have no effect on simple enum cases as their parents are inferred by the compiler.
Attributes
- Definition Classes
- Inherited from:
- ReChecking
Check that tp
is a class type and that any top-level type arguments in this type are feasible, i.e. that their lower bound conforms to their upper bound. If a type argument is infeasible, issue and error and continue with upper bound.
Check that tp
is a class type and that any top-level type arguments in this type are feasible, i.e. that their lower bound conforms to their upper bound. If a type argument is infeasible, issue and error and continue with upper bound.
Attributes
- Inherited from:
- Checking
Issue a feature warning if feature is not enabled
Issue a feature warning if feature is not enabled
Attributes
- Definition Classes
- Inherited from:
- ReChecking
Check that user-defined (result) type is fully applied
Check that user-defined (result) type is fully applied
Attributes
- Definition Classes
- Inherited from:
- ReChecking
check Java classes are not used as objects
If sym
is an old-style implicit conversion, check that implicit conversions are enabled.
If sym
is an old-style implicit conversion, check that implicit conversions are enabled.
Attributes
- Inherited from:
- Checking
If tree
is an application of a new-style implicit conversion (using the apply method of a scala.Conversion
instance), check that the expected type is annotated with @$into or that implicit conversions are enabled.
If tree
is an application of a new-style implicit conversion (using the apply method of a scala.Conversion
instance), check that the expected type is annotated with @$into or that implicit conversions are enabled.
Attributes
- Inherited from:
- Checking
(1) Check that every named import selector refers to a type or value member of the qualifier type. (2) Check that no import selector is renamed more than once.
(1) Check that every named import selector refers to a type or value member of the qualifier type. (2) Check that no import selector is renamed more than once.
Attributes
- Inherited from:
- Checking
Check that we are in an inline context (inside an inline method or in inline code)
Check that we are in an inline context (inside an inline method or in inline code)
Attributes
- Inherited from:
- Checking
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, also check that the extractor is irrefutable, and 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, also check that the extractor is irrefutable, and do the check recursively.
Attributes
- Inherited from:
- Checking
Check that path
is a legal prefix for an export clause
Check that path
is a legal prefix for an import clause
Attributes
- Definition Classes
- Inherited from:
- ReChecking
Check that all named types that form part of this type have a denotation. Called on inferred (result) types of ValDefs and DefDefs. This could fail for types where the member was originally available as part of the self type, yet is no longer visible once the this
has been replaced by some other prefix. See neg/i3083.scala
Check that all named types that form part of this type have a denotation. Called on inferred (result) types of ValDefs and DefDefs. This could fail for types where the member was originally available as part of the self type, yet is no longer visible once the this
has been replaced by some other prefix. See neg/i3083.scala
Attributes
- Inherited from:
- Checking
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.
Attributes
- Inherited from:
- Namer
Check that tree does not define a context function type
Check that tree does not define a context function type
Attributes
- Definition Classes
- Inherited from:
- ReChecking
Check that class does not declare same symbol twice
Check that method parameter types do not reference their own parameter or later parameters in the same parameter section.
Check that method parameter types do not reference their own parameter or later parameters in the same parameter section.
Attributes
- Inherited from:
- Checking
Check that module sym
does not clash with a class of the same name that is concurrently compiled in another source file.
Check that module sym
does not clash with a class of the same name that is concurrently compiled in another source file.
Attributes
- Definition Classes
- Inherited from:
- ReChecking
Check that symbol's external name does not clash with symbols defined in the same scope
Check that symbol's external name does not clash with symbols defined in the same scope
Attributes
- Inherited from:
- Checking
Attributes
- Inherited from:
- Checking
Attributes
- Inherited from:
- Checking
Check that the definition name isn't root.
Attributes
- Inherited from:
- Checker
Attributes
- Inherited from:
- Checking
Check that all type members of tp
have realizable bounds
Check that all non-synthetic references of the form <ident>
or this.<ident>
in tree
that refer to a member of badOwner
are allowed
. Also check that there are no other explicit this
references to badOwner
.
Check that all non-synthetic references of the form <ident>
or this.<ident>
in tree
that refer to a member of badOwner
are allowed
. Also check that there are no other explicit this
references to badOwner
.
Attributes
- Definition Classes
- Inherited from:
- ReChecking
Check that tpt
does not define a higher-kinded type
Check that type tp
is stable.
Check that all invariants related to Super and SuperType are met
Check that tree
is a valid infix operation. That is, if the operator is alphanumeric, it must be declared infix
.
Check that tree
is a valid infix operation. That is, if the operator is alphanumeric, it must be declared infix
.
Attributes
- Inherited from:
- Checking
Compare two alternatives of an overloaded call or an implicit search.
Compare two alternatives of an overloaded call or an implicit search.
Value parameters
- alt1,
-
alt2 Non-overloaded references indicating the two choices
Attributes
- 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
Compare owner inheritance level.
Compare owner inheritance level.
Value parameters
- sym1
-
The first owner
- sym2
-
The second owner
Attributes
- Returns
-
1 if
sym1
properly derives fromsym2
-1 ifsym2
properly derives fromsym1
0 otherwise Module classes also inherit the relationship from their companions. This means, if no direct derivation exists betweensym1
andsym2
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 compareb
withc
first, we pickb
. Then, if we comparea
andb
, we picka
as solution of the search. But if we start with comparinga
withc
, we get an ambiguity. With the added condition (#), compareOwner(A$, B$) == 0. This means we get an ambiguity betweena
andb
in all cases.
- Inherited from:
- Applications
Enter and typecheck parameter list
Attributes
- Inherited from:
- Typer
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.
Attributes
- Inherited from:
- Compatibility
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.
Attributes
- Inherited from:
- Compatibility
Flag & migrate explicit normal arguments to parameters coming from context bounds Warning in 3.4, error in 3.5, rewrite in 3.5-migration.
Flag & migrate explicit normal arguments to parameters coming from context bounds Warning in 3.4, error in 3.5, rewrite in 3.5-migration.
Attributes
- Inherited from:
- Migrations
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.
Attributes
- Inherited from:
- Applications
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.
Attributes
- Inherited from:
- Namer
The type signature of a DefDef with given symbol
The enclosing class with given name; error if none exists
Try to make tpe
accessible, emit error if not possible
Turn a parent type into a constructor call where needed. This is the case where
Turn a parent type into a constructor call where needed. This is the case where
- we are in a Scala class or module (not a Java class, nor a trait), and
- the parent symbol is a non-trait class, or
- the parent symbol is a trait that takes at least one (explicit or implicit) parameter and the parent symbol is directly extended by the current class (i.e. not extended by the superclass).
Attributes
- Definition Classes
- Inherited from:
- ReTyper
Ensure that the first type in a list of parent types Ps points to a non-trait class. If that's not already the case, add one. The added class type CT is determined as follows. First, let C be the unique class such that
Ensure that the first type in a list of parent types Ps points to a non-trait class. If that's not already the case, add one. The added class type CT is determined as follows. First, let C be the unique class such that
- there is a parent P_i such that P_i derives from C, and
- for every class D: If some parent P_j, j <= i derives from D, then C derives from D. Then, let CT be the smallest type which
- has C as its class symbol, and
- for all parents P_i: If P_i derives from C then P_i <:< CT.
Tweak: It could be that at the point where the method is called, some superclass is still missing its parents. Parents are set to Nil when completion starts and are set to the actual parents later. If a superclass completes a subclass in one of its parents, the parents of the superclass or some intervening class might not yet be set. This situation can be detected by asking for the baseType of Any - if that type does not exist, one of the base classes of this class misses its parents. If this situation arises, the computation of the superclass might be imprecise. For instance, in i12722.scala, the superclass of IPersonalCoinOps
is computed as Object
, where JsObject
would be correct. The problem cannot be solved locally, but we detect the situaton and mark the superclass with a @ProvisionalSuperClass
annotation in this case. When typechecking the class, we then run ensureFirstIsClass again and possibly improve the computed super class. An alternatiev fix would compute superclasses at typer instead at completion. But that breaks too many invariants. For instance, we rely on correct @Child annotations after completion, and these in turn need the superclass.
Attributes
- Inherited from:
- Namer
Ensure that an expression's type can be expressed without references to locally defined symbols. This is done by adding a type ascription of a widened type that does not refer to the locally defined symbols. The widened type is computed using TyperAssigner#avoid
. However, if the expected type is fully defined and not a supertype of the widened type, we ascribe with the expected type instead.
Ensure that an expression's type can be expressed without references to locally defined symbols. This is done by adding a type ascription of a widened type that does not refer to the locally defined symbols. The widened type is computed using TyperAssigner#avoid
. However, if the expected type is fully defined and not a supertype of the widened type, we ascribe with the expected type instead.
There's a special case having to do with anonymous classes. Sometimes the expected type of a block is the anonymous class defined inside it. In that case there's technically a leak which is not removed by the ascription.
Attributes
- Definition Classes
- Inherited from:
- Checker
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.
Attributes
- Inherited from:
- Namer
Attributes
- Inherited from:
- Typer
Exclude from double definition checks any erased symbols that were made private
in phase UnlinkErasedDecls
. These symbols will be removed completely in phase Erasure
if they are defined in a currently compiled unit.
Expand tree and store in expandedTree
The expanded version of this tree, or tree itself if not expanded
The typed application
Attributes
- Inherited from:
- Applications
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 parameters
- altImports
-
a ListBuffer in which alternative imported references are collected in case
findRef
is called from an expansion of an extension method, i.e. whene.m
is expanded tom(e)
and a reference form
is searched.null
in all other situations. - 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
Attributes
- Inherited from:
- Typer
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
Attributes
- Inherited from:
- Dynamic
Overridden in ReTyper to handle primitive operations that can be generated after erasure
Overridden in ReTyper to handle primitive operations that can be generated after erasure
Attributes
- Definition Classes
- Inherited from:
- ReTyper
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 harmonization will be compared again with the expected type. Test cases where this matters are in neg/harmomize.scala and run/weak-conformance.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 harmonization will be compared again with the expected type. Test cases where this matters are in neg/harmomize.scala and run/weak-conformance.scala.
Note: this assumes that the internal typing of the arguments using op
does not leave any constraints, so the only info that is reset is the relationship between the argument's types and the expected type. I am not sure this will always be the case. If that property does not hold, we risk forgetting constraints which could lead to unsoundness.
Attributes
- Inherited from:
- Applications
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.
Attributes
- Inherited from:
- Applications
Attributes
- Inherited from:
- Namer
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
?
Attributes
- Inherited from:
- Applications
True if this inline typer has already issued errors
Search an implicit argument and report error if not found
A string indicating the formal parameter corresponding to a missing argument
A string indicating the formal parameter corresponding to a missing argument
Attributes
- Inherited from:
- Implicits
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
Attributes
- Inherited from:
- Namer
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.
Attributes
- Definition Classes
- Inherited from:
- ImportSuggestions
Attributes
- Inherited from:
- TypeAssigner
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
Attributes
- Inherited from:
- Namer
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
Attributes
- Inherited from:
- Namer
Find an implicit parameter or conversion.
Find an implicit parameter or conversion.
Value parameters
- 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.
Attributes
- Inherited from:
- Implicits
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.
Attributes
- Inherited from:
- Implicits
The parameter type for a parameter in a lambda that does not have an explicit type given, and where the type is not known from the context. In this case the parameter type needs to be inferred the "target type" T known from the callee f
if the lambda is of a form like x => f(x)
. If T
exists, we know that S <: I <: T
.
The parameter type for a parameter in a lambda that does not have an explicit type given, and where the type is not known from the context. In this case the parameter type needs to be inferred the "target type" T known from the callee f
if the lambda is of a form like x => f(x)
. If T
exists, we know that S <: I <: T
.
The inference makes two attempts:
- Compute the target type
T
and make it known thatS <: T
. If the expected typeS
can be fully defined under ForceDegree.flipBottom, pick this one (this might use the fact that S <: T for an upper approximation). - Otherwise, if the target type
T
can be fully defined under ForceDegree.flipBottom, pick this one.
If both attempts fail, return NoType
.
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Namer
Given an inline method mdef
, the method rewritten so that its body uses accessors to access non-public members. Also, if the inline method is retained, add a method to record the retained version of the body. Overwritten in Retyper to return mdef
unchanged.
Given an inline method mdef
, the method rewritten so that its body uses accessors to access non-public members. Also, if the inline method is retained, add a method to record the retained version of the body. Overwritten in Retyper to return mdef
unchanged.
Attributes
- 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
.
Attributes
- Inherited from:
- Typer
Interpolate undetermined type variables in the widened type of this tree.
Interpolate undetermined type variables in the widened type of this tree.
Value parameters
- 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
and whosenestingLevel
is>= ctx.nestingLevel
. Type variables occurring co- (respectively, contra-) variantly in the tree type or expected type are minimized (respectively, 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 ifX
occurs co-variantly inT
and we have a constraint Y <: X ThenY
also occurs co-variantly inT
because it needs to be minimized in order to constrainT
the least. Seevariances
for more detail. - pt
-
the expected result type
- tree
-
the tree whose type is interpolated
Attributes
- Inherited from:
- Inferencing
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.
Attributes
- Inherited from:
- Namer
Attributes
- Inherited from:
- Applications
Is given method reference applicable to argument types args
?
Is given method reference applicable to argument types args
?
Value parameters
- resultType
-
The expected result type of the application
Attributes
- Inherited from:
- Applications
Is given method reference applicable to argument trees args
?
Is given method reference applicable to argument trees args
?
Value parameters
- resultType
-
The expected result type of the application
Attributes
- Inherited from:
- Applications
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 parameters
- resultType
-
The expected result type of the application
Attributes
- Inherited from:
- Applications
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 parameters
- resultType
-
The expected result type of the application
Attributes
- Inherited from:
- Applications
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?
Attributes
- Inherited from:
- Typer
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:
tp
is a subtype ofpt
pt
is by name parameter type, andtp
is compatible with its underlying type- there is an implicit conversion from
tp
topt
. tp
is a numeric subtype ofpt
(this case applies even if implicit conversions are disabled) Ifpt
is a by-name type, we compare against the underlying type instead.
Attributes
- Inherited from:
- Compatibility
Determines whether this field holds an enum constant.
Check that all methods have MethodicType
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?
Attributes
- Inherited from:
- Applications
Flag & migrate ?
used as a higher-kinded type parameter Warning in 3.0-migration, error from 3.0
Flag & migrate ?
used as a higher-kinded type parameter Warning in 3.0-migration, error from 3.0
Attributes
- Inherited from:
- Migrations
Parse the source and index symbols in the compilation unit's untpdTree 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.
Parse the source and index symbols in the compilation unit's untpdTree 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.
Will call the callback with an implementation of type checking That will set the tpdTree and root tree for the compilation unit.
Attributes
- Inherited from:
- Namer
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
.
Attributes
- See also
-
QualSkolemType, TypeOps#asSeenFrom
- Inherited from:
- TypeAssigner
Run migration
, provided we are in the proper Typer (not a ReTyper)
Run migration
, provided we are in the proper Typer (not a ReTyper)
Attributes
- Inherited from:
- Migrations
Run migration
, asserting we are in the proper Typer (not a ReTyper)
Run migration
, asserting we are in the proper Typer (not a ReTyper)
Attributes
- Inherited from:
- Migrations
Value parameters
- 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
Attributes
- Inherited from:
- Implicits
Attributes
- Inherited from:
- Namer
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.
Attributes
- Inherited from:
- Namer
Attributes
- 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.
Attributes
- Inherited from:
- Compatibility
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.
Attributes
- Inherited from:
- Applications
Attributes
- Inherited from:
- Typer
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.
Attributes
- Inherited from:
- Compatibility
Attributes
- Inherited from:
- TypeAssigner
Prepare a GADT-aware context used to type the RHS of a ValOrDefDef.
Prepare a GADT-aware context used to type the RHS of a ValOrDefDef.
Attributes
- Inherited from:
- Namer
Attributes
- Inherited from:
- TypeAssigner
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 parameters
- packageOK
-
The qualifier may refer to a package.
Attributes
- Inherited from:
- TypeAssigner
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.
Attributes
- Inherited from:
- TypeAssigner
Record sym
as the symbol defined by tree
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.
Attributes
- 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.
Attributes
- Inherited from:
- Applications
Attributes
- Inherited from:
- TypeAssigner
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
.
Attributes
- Inherited from:
- TypeAssigner
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.
Attributes
- Inherited from:
- TypeAssigner
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.
Attributes
- Inherited from:
- Applications
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.
Attributes
- Inherited from:
- TypeAssigner
Attributes
- Inherited from:
- TypeAssigner
Drop any leading implicit parameter sections
Drop any leading type or implicit parameter sections
Attributes
- Inherited from:
- TypeAssigner
If tree
's type is a TermRef
identified by flow typing to be non-null, then cast away tree
s nullability. Otherwise, tree
remains unchanged.
If tree
's type is a TermRef
identified by flow typing to be non-null, then cast away tree
s 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]
Attributes
- Inherited from:
- Typer
The largest suffix of paramss
that has the same first parameter name as t
, plus the number of term parameters in paramss
that come before that suffix.
The largest suffix of paramss
that has the same first parameter name as t
, plus the number of term parameters in paramss
that come before that suffix.
Attributes
- Inherited from:
- Applications
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
.
Attributes
- Inherited from:
- Typer
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 proceeding implicits). No implicit search is tried for implicits following the receiver or for parameters of the def (D, E).
Attributes
- Inherited from:
- Applications
Attributes
- Inherited from:
- Typer
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
.
Attributes
- Returns
-
The converted tree, or
EmptyTree
is not successful. - Inherited from:
- Typer
Potentially add apply node or implicit conversions. Before trying either, if the function is applied to an empty parameter list (), we try
Potentially add apply node or implicit conversions. Before trying either, if the function is applied to an empty parameter list (), we try
0th strategy: If tree
overrides a nullary method, mark the prototype so that the argument is dropped and return tree
itself. (but do this at most once per tree).
After that, two strategies are tried, and the first that is successful is picked.
1st strategy: Try to insert .apply
so that the result conforms to prototype pt
. This strategy is not tried if the prototype represents already another .apply
or .apply()
selection.
2nd strategy: If tree is a select qual.name
, try to insert an implicit conversion around the qualifier part qual
so that the result conforms to the expected type with wildcard result type.
If neither of the strategies are successful, continues with the apply
result if an apply insertion was tried and tree
has an apply
method, or continues with fallBack
otherwise. fallBack
is supposed to always give an error.
Attributes
- Definition Classes
- Inherited from:
- ReTyper
If this tree is a select node qual.name
(possibly applied to type variables) that does not conform to pt
, try two mitigations:
If this tree is a select node qual.name
(possibly applied to type variables) that does not conform to pt
, try two mitigations:
- Instantiate any TypeVars in the widened type of
tree
with their lower bounds. - Try to insert an implicit conversion
c
aroundqual
so thatc(qual).name
conforms topt
.
Attributes
- Inherited from:
- Typer
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)
.
Attributes
- Inherited from:
- Typer
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.
Attributes
- Inherited from:
- TypeAssigner
Typecheck and adapt tree, returning a typed tree. Parameters as for typedUnadapted
Typecheck and adapt tree, returning a typed tree. Parameters as for typedUnadapted
Attributes
- Inherited from:
- Typer
Typecheck tree
during completion using typed
, and remember result in TypedAhead map
Typecheck tree
during completion using typed
, and remember result in TypedAhead map
Attributes
- Inherited from:
- Namer
Attributes
- Inherited from:
- Namer
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
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
.
Attributes
- Inherited from:
- QuotesAndSplices
Attributes
- Inherited from:
- Typer
Typecheck application. Result could be an Apply
node, or, if application is an operator assignment, also an Assign
or Block node.
Typecheck application. Result could be an Apply
node, or, if application is an operator assignment, also an Assign
or Block node.
Attributes
- Definition Classes
- Inherited from:
- Checker
Attributes
- Definition Classes
-
Typer -> Migrations
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
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.
Attributes
- Inherited from:
- Typer
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), ...)
Attributes
- Inherited from:
- Dynamic
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)
Attributes
- Inherited from:
- Dynamic
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)].
Attributes
- Inherited from:
- Dynamic
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
Attributes
- Definition Classes
- Inherited from:
- Checker
Attribute an identifier consisting of a simple name or wildcard
Attribute an identifier consisting of a simple name or wildcard
Value parameters
- tree
-
The tree representing the identifier. Transformations: (1) Prefix class members with this. (2) Change imported symbols to selections. (3) Change pattern Idents id (but not wildcards) to id @ _
Attributes
- Definition Classes
- Inherited from:
- Checker
Try to typecheck an implicit reference
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
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, and not in a quote pattern r.op(l) if op
is right-associative call-by-name, or l
is pure, or in a quote pattern
Translate infix type l op r
to op[l, r]
Translate infix pattern l op r
to op(l, r)
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Applications
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
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.
Attributes
- Definition Classes
- Inherited from:
- Checker
Attributes
- Definition Classes
- Inherited from:
- Checker
Type check a type binding reference in a quoted pattern.
Type check a type binding reference in a quoted pattern.
If no binding exists with that name, this becomes the definition of a new type binding.
Attributes
- Inherited from:
- QuotesAndSplices
Makes sure the symbol in the tree can be approximately reconstructed by calling member
on the qualifier type. Approximately means: The two symbols might be different but one still overrides the other.
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
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
Attributes
- Definition Classes
- Inherited from:
- Checker
Attributes
- Definition Classes
- Inherited from:
- Checker
Check that all defined symbols have legal owners. An owner is legal if it is either the same as the context's owner or there's an owner chain of valdefs starting at the context's owner and reaching up to the symbol's owner. The reason for this relaxed matching is that we should be able to pull out an expression as an initializer of a helper value without having to do a change owner traversal of the expression.
Check that all defined symbols have legal owners. An owner is legal if it is either the same as the context's owner or there's an owner chain of valdefs starting at the context's owner and reaching up to the symbol's owner. The reason for this relaxed matching is that we should be able to pull out an expression as an initializer of a helper value without having to do a change owner traversal of the expression.
Attributes
- Definition Classes
- Inherited from:
- Checker
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Typer
Translate tuples of all arities
Attributes
- Inherited from:
- Typer
Attributes
- Inherited from:
- Applications
Attributes
- Inherited from:
- Typer
Type a case of a type match
Attributes
- Inherited from:
- Typer
Attributes
- Definition Classes
- Inherited from:
- ReTyper
A typed unapply hook, can be overridden by re any-typers between frontend and pattern matcher.
A typed unapply hook, can be overridden by re any-typers between frontend and pattern matcher.
Attributes
- Definition Classes
- Inherited from:
- ReTyper
Typecheck tree without adapting it, returning a typed tree.
Typecheck tree without adapting it, returning a typed tree.
Value parameters
- initTree
-
the untyped tree
- locked
-
the set of type variables of the current typer state that cannot be interpolated at the present time
- pt
-
the expected result type
Attributes
- Definition Classes
- Inherited from:
- Checker
The type signature of a ValDef or DefDef
The type signature of a ValDef or DefDef
Value parameters
- mdef
-
The definition
- paramFn
-
A wrapping function that produces the type of the defined symbol, given its final return type
- sym
-
Its symbol
Attributes
- Inherited from:
- Namer
If tree
is a complete application of a compiler-generated apply
or copy
method of an enum case, widen its type to the underlying type by means of a type ascription, as long as the widened type is still compatible with the expected type. The underlying type is the intersection of all class parents of the original type.
If tree
is a complete application of a compiler-generated apply
or copy
method of an enum case, widen its type to the underlying type by means of a type ascription, as long as the widened type is still compatible with the expected type. The underlying type is the intersection of all class parents of the original type.
Attributes
- Definition Classes
- Inherited from:
- ReTyper
Attributes
- Inherited from:
- Checker
The following invariant holds:
The following invariant holds:
patBoundSyms.contains(sym) <=> sym.isPatternBound
Attributes
- Inherited from:
- Checker
Inherited fields
Attributes
- Inherited from:
- Namer
Attributes
- Inherited from:
- Namer
Attributes
- Inherited from:
- Namer
The maximal number of suggested imports to make
Attributes
- 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.
Attributes
- Inherited from:
- Namer
Attributes
- Inherited from:
- Checker
The scope of the typer. For nested typers (cf Namer#nestedTyper
), 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 (cf Namer#nestedTyper
), this is a place parameters are entered during completion and where they survive until typechecking. A context with this typer also has this scope.
Attributes
- Inherited from:
- Typer
Extensions
Inherited extensions
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.
Attributes
- Inherited from:
- ImportSuggestions
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.
Attributes
- Inherited from:
- ImportSuggestions