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.
A path of outer accessors starting from node start. start defaults to the context owner's this node. There are two alternative conditions that determine where the path ends:
A path of outer accessors starting from node start. start defaults to the context owner's this node. There are two alternative conditions that determine where the path ends:
if the initial count parameter is non-negative: where the number of outer accessors reaches count.
if the initial count parameter is negative: where the class symbol of the type of the reached tree matches toCls.