- Companion
- class
Type members
Classlikes
The operations in this class
The operations in this class
- add outer parameters
- pass outer arguments to these parameters
- replace outer this references by outer paths. They are called from erasure. There are two constraints which suggest these operations should be done in erasure.
- Replacing this references with outer paths loses aliasing information, so programs will not typecheck with unerased types unless a lot of type refinements are added. Therefore, outer paths should be computed no earlier than erasure.
- outer parameters should not show up in signatures, so again they cannot be added before erasure.
- outer arguments need access to outer parameters as well as to the original type prefixes of types in New expressions. These prefixes get erased during erasure. Therefore, outer arguments have to be passed no later than erasure.
Value members
Concrete methods
Class needs an outer pointer, provided there is a reference to an outer this in it.
Class needs an outer pointer, provided there is a reference to an outer this in it.
Class constructor needs an outer argument. Can be called only after phase ExplicitOuter.
Class constructor needs an outer argument. Can be called only after phase ExplicitOuter.
The outer accessor of class cls
. To find it is a bit tricky. The
class might have been moved with new owners between ExplicitOuter and Erasure,
where the method is also called. For instance, it might have been part
of a by-name argument, and therefore be moved under a closure method
by ElimByName. In that case looking up the method again at Erasure with the
fully qualified name outerAccName
will fail, because the outerAccName
's
result is phase dependent. In that case we use a backup strategy where we search all
definitions in the class to find the one with the OuterAccessor flag.
The outer accessor of class cls
. To find it is a bit tricky. The
class might have been moved with new owners between ExplicitOuter and Erasure,
where the method is also called. For instance, it might have been part
of a by-name argument, and therefore be moved under a closure method
by ElimByName. In that case looking up the method again at Erasure with the
fully qualified name outerAccName
will fail, because the outerAccName
's
result is phase dependent. In that case we use a backup strategy where we search all
definitions in the class to find the one with the OuterAccessor flag.