Following type aliases and stripping refinements and annotations, if one arrives at a class type reference where the class has a companion module, a reference to that companion module.
Following type aliases and stripping refinements and annotations, if one arrives at a class type reference where the class has a companion module, a reference to that companion module. Otherwise NoType
The fully defined type, where all type variables are forced.
The fully defined type, where all type variables are forced. Throws an error if type contains wildcards.
Instantiate selected type variables tvars
in type tp
Interpolate those undetermined type variables in the widened type of this tree which are introduced by type application contained in the tree.
Interpolate those undetermined type variables in the widened type of this tree
which are introduced by type application contained in the tree.
If such a variable appears covariantly in type tp
or does not appear at all,
approximate it by its lower bound. Otherwise, if it appears contravariantly
in type tp
approximate it by its upper bound.
if it is different from NoSymbol, all type variables owned by
ownedBy
qualify, independent of position.
Without that second condition, it can be that certain variables escape
interpolation, for instance when their tree was eta-lifted, so
the typechecked tree is no longer the tree in which the variable
was declared. A concrete example of this phenomenon can be
observed when compiling core.TypeOps#asSeenFrom.
Is type fully defined, meaning the type does not contain wildcard types or uninstantiated type variables.
Is type fully defined, meaning the type does not contain wildcard types
or uninstantiated type variables. As a side effect, this will minimize
any uninstantiated type variables, according to the given force degree,
but only if the overall result of isFullyDefined
is true
.
Variables that are successfully minimized do not count as uninstantiated.
Instantiate undetermined type variables to that type tp
is
maximized and return None.
Instantiate undetermined type variables to that type tp
is
maximized and return None. If this is not possible, because a non-variant
typevar is not uniquely determined, return that typevar in a Some.
The list of uninstantiated type variables bound by some prefix of type T
which
occur in at least one formal parameter type of a prefix application.
The list of uninstantiated type variables bound by some prefix of type T
which
occur in at least one formal parameter type of a prefix application.
Considered prefixes are:
f
of an application node f(e1, .., en)
f
of a type application node f[T1, ..., Tn]
p
of a selection p.f
.e
of a block {s1; .. sn; e}
.
Recursively widen and also follow type declarations and type aliases.