Contexts
Members list
Type members
Classlikes
A context is passed basically everywhere in dotc. This is convenient but carries the risk of captured contexts in objects that turn into space leaks. To combat this risk, here are some conventions to follow:
A context is passed basically everywhere in dotc. This is convenient but carries the risk of captured contexts in objects that turn into space leaks. To combat this risk, here are some conventions to follow:
- Never let an implicit context be an argument of a class whose instances live longer than the context.
- Classes that need contexts for their initialization take an explicit parameter
named
initctx
. They pass initctx to all positions where it is needed (and these positions should all be part of the intialization sequence of the class). - Classes that need contexts that survive initialization are instead passed
a "condensed context", typically named
cctx
(or they create one). Condensed contexts just add some basic information to the context base without the risk of capturing complete trees. - To make sure these rules are kept, it would be good to do a sanity check using bytecode inspection with javap or scalap: Keep track of all class fields of type context; allow them only in whitelisted classes (which should be short-lived).
Attributes
- Graph
- Supertypes
- Known subtypes
- class FreshContextobject NoContext.type
- Self type
A context base defines state and associated methods that exist once per compiler run.
A context base defines state and associated methods that exist once per compiler run.
Attributes
- Graph
- Supertypes
The essential mutable state of a context base, collected into a common class
The essential mutable state of a context base, collected into a common class
Attributes
- Graph
- Supertypes
- Known subtypes
- class ContextBase
Value members
Concrete methods
Execute op
at given period
Execute op
at given period
Attributes
Execute op
at given phase id
Execute op
at given phase id
Attributes
Execute op
at given phase
Execute op
at given phase
Attributes
Execute op
at the current phase if it's before the first transform phase,
otherwise at the last phase before the first transform phase.
Execute op
at the current phase if it's before the first transform phase,
otherwise at the last phase before the first transform phase.
Note: this should be used instead of atPhaseNoLater(ctx.picklerPhase)
because the later won't work if the Pickler
phase is not present (for example,
when using QuoteCompiler
).
Attributes
Run op
with given context
Run op
with given context
Attributes
Run op
in current context, with a mode is temporarily set as specified.
Run op
in current context, with a mode is temporarily set as specified.