Perform Step 1 in the inline classes SIP: Creates extension methods for all methods in a value class, except parameter or super accessors, or constructors.
Additionally, for a value class V, let U be the underlying type after erasure. We add
to the companion module of V two cast methods:
def u2evt$(x0: U): ErasedValueType(V, U)
def evt2u$(x0: ErasedValueType(V, U)): U
The casts are used in [[Erasure]] to make it typecheck, they are then removed
in [[ElimErasedValueType]].
This is different from the implementation of value classes in Scala 2
(see SIP-15) which uses asInstanceOf
which does not typecheck.
Finally, if the constructor of a value class is private pr protected it is widened to public.
Constructors
Members
the following two members override abstract members in Transform
the following two members override abstract members in Transform
If references to original symbol referenced
from within fully parameterized method
derived
should be rewired to some fully parameterized method, the re...
If references to original symbol referenced
from within fully parameterized method
derived
should be rewired to some fully parameterized method, the rewiring target symbol,
otherwise NoSymbol.
List of names of phases that should precede this phase
List of names of phases that should precede this phase
List of names of phases that should have finished their processing of all compilation units before this phase starts
List of names of phases that should have finished their processing of all compilation units before this phase starts
The transformation method
The transformation method