Symbol is a specialized abstract method, either specialized or original.
Symbol is a specialized abstract method, either specialized or original. The original t
is abstract.
This duplicator additionally performs casts of expressions if that is allowed by the casts
map.
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 method that should be forwarded to 't'
Symbol is a specialized method whose body should be the target's method body.
Symbol is a specialized method whose body should be the target's method body.
A tree symbol substituter that substitutes on type skolems.
A tree symbol substituter that substitutes on type skolems. If a type parameter is a skolem, it looks for the original symbol in the 'from' and maps it to the corresponding new symbol. The new symbol should probably be a type skolem as well (not enforced).
All private members are made protected in order to be accessible from specialized classes.
Symbol is a normalized member obtained by specializing 'target'.
Symbol is a normalized member obtained by specializing 'target'.
Symbol is a special overloaded method of 'original', in the environment env.
Symbol is a special overloaded method of 'original', in the environment env.
Symbol is a specialized override paired with target
.
Symbol is a specialized override paired with target
.
Symbol is a special overload of the super accessor.
Symbol is a special overload of the super accessor.
Introduced to fix SI-7343: Phase ordering problem between Duplicators and Specialization.
Introduced to fix SI-7343: Phase ordering problem between Duplicators and Specialization.
brief explanation: specialization rewires class parents during info transformation, and
the new info then guides the tree changes. But if a symbol is created during duplication,
which runs after specialization, its info is not visited and thus the corresponding tree
is not specialized. One manifestation is the following:
object Test {
class Parent[@specialized(Int) T]
def spec_method[@specialized(Int) T](t: T, expectedXSuper: String) = {
class X extends Parent[T]()
// even in the specialized variant, the local X class
// doesn't extend Parent$mcI$sp, since its symbol has
// been created after specialization and was not seen
// by specialization's info transformer.
...
}
}
We fix this by forcing duplication to take place before specialization.
Note: The constructors phase (which also uses duplication) comes after erasure and uses the post-erasure typer => we must protect it from the beforeSpecialization phase shifting.
Symbol is a specialized accessor for the target
field.
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 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
A standard phase template
Test two objects for inequality.
Test two objects for inequality.
true
if !(this == that), false otherwise.
Equivalent to x.hashCode
except for boxed numeric types and null
.
Equivalent to x.hashCode
except for boxed numeric types and null
.
For numerics, it returns a hash value which is consistent
with value equality: if two value type instances compare
as true, then ## will produce the same hash value for each
of them.
For null
returns a hashcode where null.hashCode
throws a
NullPointerException
.
a hash value consistent with ==
The expression x == that
is equivalent to if (x eq null) that eq null else x.equals(that)
.
The expression x == that
is equivalent to if (x eq null) that eq null else x.equals(that)
.
true
if the receiver object is equivalent to the argument; false
otherwise.
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!
Cast the receiver object to be of type T0
.
Cast the receiver object to be of type T0
.
Note that the success of a cast at runtime is modulo Scala's erasure semantics.
Therefore the expression 1.asInstanceOf[String]
will throw a ClassCastException
at
runtime, while the expression List(1).asInstanceOf[List[String]]
will not.
In the latter example, because the type argument is erased as part of compilation it is
not possible to check whether the contents of the list are of the requested type.
the receiver object.
ClassCastException
if the receiver object is not an instance of the erasure of type T0
.
This phase changes base classes.
This phase changes base classes.
Create a copy of the receiver object.
Create a copy of the receiver object.
The default implementation of the clone
method is platform dependent.
a copy of the receiver object.
not specified by SLS as a member of AnyRef
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.
Is this component enabled? Default is true.
Is this component enabled? Default is true.
Tests whether the argument (that
) is a reference to the receiver object (this
).
Tests whether the argument (that
) is a reference to the receiver object (this
).
The eq
method implements an equivalence relation on
non-null instances of AnyRef
, and has three additional properties:
x
and y
of type AnyRef
, multiple invocations of
x.eq(y)
consistently returns true
or consistently returns false
.x
of type AnyRef
, x.eq(null)
and null.eq(x)
returns false
.null.eq(null)
returns true
. When overriding the equals
or hashCode
methods, it is important to ensure that their behavior is
consistent with reference equality. Therefore, if two objects are references to each other (o1 eq o2
), they
should be equal to each other (o1 == o2
) and they should hash to the same value (o1.hashCode == o2.hashCode
).
true
if the argument is a reference to the receiver object; false
otherwise.
The equality method for reference types.
Called by the garbage collector on the receiver object when there are no more references to the object.
Called by the garbage collector on the receiver object when there are no more references to the object.
The details of when and if the finalize
method is invoked, as
well as the interaction between finalize
and non-local returns
and exceptions, are all platform dependent.
not specified by SLS as a member of AnyRef
Returns the runtime class representation of the object.
Returns the runtime class representation of the object.
a class object corresponding to the runtime type of the receiver.
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
the hash code value for this object.
True if this phase runs before all other phases.
True if this phase runs before all other phases. Usually, parser
.
True if this phase is not provided by a plug-in.
True if this phase is not provided by a plug-in.
Test whether the dynamic type of the receiver object is T0
.
Test whether the dynamic type of the receiver object is T0
.
Note that the result of the test is modulo Scala's erasure semantics.
Therefore the expression 1.isInstanceOf[String]
will return false
, while the
expression List(1).isInstanceOf[List[String]]
will return true
.
In the latter example, because the type argument is erased as part of compilation it is
not possible to check whether the contents of the list are of the specified type.
true
if the receiver object is an instance of erasure of type T0
; false
otherwise.
Equivalent to !(this eq that)
.
Equivalent to !(this eq that)
.
true
if the argument is not a reference to the receiver object; false
otherwise.
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.
Wakes up a single thread that is waiting on the receiver object's monitor.
Wakes up a single thread that is waiting on the receiver object's monitor.
not specified by SLS as a member of AnyRef
Wakes up all threads that are waiting on the receiver object's monitor.
Wakes up all threads that are waiting on the receiver object's monitor.
not specified by SLS as a member of AnyRef
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.
Names of phases required by this component.
Names of phases required by this component. Default is Nil
.
Names of phases that must run before this phase.
Names of phases that must run before this phase.
Names of phases that must run after this phase.
Names of phases that must run after this phase. Default is Nil
.
Name of the phase that this phase must follow immediately.
Name of the phase that this phase must follow immediately.
The type environment is sound w.r.t.
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.
True if this phase runs after all other phases.
True if this phase runs after all other phases. Usually, terminal
.
Creates a String representation of this object.
Creates a String representation of this object. The default representation is platform dependent. On the java platform it is the concatenation of the class name, "@", and the object's hashcode in hexadecimal.
a String representation of the object.
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.