A macro transform that runs after typer and before pickler to perform
additional Scala.js-specific checks and transformations necessary for
interoperability with JavaScript.
It performs the following functions:
Sanity checks for the js.Any hierarchy
Annotate subclasses of js.Any to be treated specially
Create JSExport methods: Dummy methods that are propagated
through the whole compiler chain to mark exports. This allows
exports to have the same semantics than methods.
This is the equivalent of PrepJSInterop in Scala 2, minus the handling
of scala.Enumeration.
The reason for making this a macro transform is that some functions (in particular
all the checks that behave differently depending on properties of classes in
the enclosing class chain) are naturally top-down and don't lend themselves to the
bottom-up approach of a mini phase.
In addition, the addition of export forwarders must be done before pickling to
be signature-compatible with scalac, and there are only macro transforms before
pickling.
The sequence position of this phase in the given context where 0
is reserved for NoPhase and the first real phase is at position 1.
-1 if the phase is not installed in the context.
The sequence position of this phase in the given context where 0
is reserved for NoPhase and the first real phase is at position 1.
-1 if the phase is not installed in the context.
Is this phase the standard typerphase? True for TyperPhase, but
not for other first phases (such as FromTasty or Parser). The predicate
is tested in some places that perform checks and corrections. It's
different from ctx.isAfterTyper (and cheaper to test).
Is this phase the standard typerphase? True for TyperPhase, but
not for other first phases (such as FromTasty or Parser). The predicate
is tested in some places that perform checks and corrections. It's
different from ctx.isAfterTyper (and cheaper to test).
The phase in which the transformation should be run.
By default this is the phase given by the this macro transformer,
but it could be overridden to be the phase following that one.
The phase in which the transformation should be run.
By default this is the phase given by the this macro transformer,
but it could be overridden to be the phase following that one.