Symbol is a specialized abstract method, either specialized or original.
This duplicator additionally performs casts of expressions if that is allowed by the casts
map.
Symbol is a method that should be forwarded to 't'
Symbol is a specialized method whose body should be the target's method body.
A tree symbol substituter that substitutes on type skolems.
Symbol is a normalized member obtained by specializing 'target'.
The phase defined by this transform
Symbol is a special overloaded method of 'original', in the environment env.
Symbol is a specialized override paired with target
.
Symbol is a special overload of the super accessor.
Symbol is a specialized accessor for the target
field.
A specialized inner class that specializes original inner class target
on a type parameter of the enclosing class, in the typeenv env
.
A standard phase template
Add method m to the set of symbols for which we need an implementation tree in the tree transformer.
Add method m to the set of symbols for which we need an implementation tree in the tree transformer.
This field is part of the specializeTypes subcomponent, so any symbols that here are not garbage collected at the end of a compiler run!
This phase changes base classes.
This phase changes base classes.
Return the types sym
should be specialized at.
Return the types sym
should be specialized at. This may be some of the primitive types
or AnyRef. AnyRef means that a new type parameter T will be generated later, known to be a
subtype of AnyRef (T <: AnyRef).
These are in a meaningful order for stability purposes.
The global environment; overridden by instantiation in Global.
The global environment; overridden by instantiation in Global.
Has clazz
any type parameters that need be specialized?
Has clazz
any type parameters that need be specialized?
SubComponent are added to a HashSet and two phases are the same if they have the same name
SubComponent are added to a HashSet and two phases are the same if they have the same name
Internal flag to tell external from internal phases
Internal flag to tell external from internal phases
Just to mark uncheckable
Just to mark uncheckable
The transformer factory
The transformer factory
Is any type variable in env
conflicting with any if its type bounds, when
type bindings in env
are taken into account?
Is any type variable in env
conflicting with any if its type bounds, when
type bindings in env
are taken into account?
A conflicting type environment could still be satisfiable.
Return the generic class corresponding to this specialized class.
Return the generic class corresponding to this specialized class.
The phase corresponding to this subcomponent in the current compiler run
The phase corresponding to this subcomponent in the current compiler run
the name of the phase:
the name of the phase:
The following flags may be set by this phase:
The following flags may be set by this phase:
New flags defined by the phase which are not valid until immediately after it
New flags defined by the phase which are not valid until immediately after it
Produces the symbols from type parameters syms
of the original owner,
in the given type environment env
.
Produces the symbols from type parameters syms
of the original owner,
in the given type environment env
. The new owner is nowner
.
Non-specialized type parameters are cloned into new ones. Type parameters specialized on AnyRef have preexisting symbols.
For instance, a @specialized(AnyRef) T, will become T$sp <: AnyRef.
List of phase names, this phase should run after
List of phase names, this phase should run after
List of phase names, this phase should run before
List of phase names, this phase should run before
Phase name this phase will attach itself to, not allowing any phase to come between it and the phase name declared
Phase name this phase will attach itself to, not allowing any phase to come between it and the phase name declared
The type environment is sound w.
The type environment is sound w.r.t. to all type bounds or only soft conflicts appear. An environment is sound if all bindings are within the bounds of the given type variable. A soft conflict is a binding that does not fall within the bounds, but whose bounds contain type variables that are @specialized, (that could become satisfiable).
Specialize 'clazz', in the environment outerEnv
.
Specialize 'clazz', in the environment outerEnv
. The outer
environment contains bindings for specialized types of enclosing
classes.
A class C is specialized w.r.t to its own specialized type params
stps
, by specializing its members, and creating a new class for
each combination of stps
.
For a given class and concrete type arguments, give its specialized class
For a given class and concrete type arguments, give its specialized class
Return specialized type parameters.
Return specialized type parameters.
Return the set of @specialized type variables mentioned by the given type.
Return the set of @specialized type variables mentioned by the given type. It only counts type variables that appear:
If the symbol is the companion of a value class, the value class.
If the symbol is the companion of a value class, the value class. Otherwise, AnyRef.
Given an original class symbol and a list of types its type parameters are instantiated at returns a list of type parameters that should remain in the TypeRef when instantiating a specialized type.
Given an original class symbol and a list of types its type parameters are instantiated at returns a list of type parameters that should remain in the TypeRef when instantiating a specialized type.
Type parameters that survive when specializing in the specified environment.
Type parameters that survive when specializing in the specified environment.
Type transformation.
Type transformation. It is applied to all symbols, compiled or loaded. If it is a 'no-specialization' run, it is applied only to loaded symbols.