The set of uninstantiated type variables which have this state as their owning state
Commit typer state so that its information is copied into current typer state In addition (1) the owning state of undetermined or temporarily instantiated type variables changes from this typer state to the current one. (2) Variables that were temporarily instantiated in the current typer state are permanently instantiated instead.
A note on merging: An interesting test case is isApplicableSafe.scala. It turns out that this requires a context merge using the new `&' operator. Sequence of actions: 1) Typecheck argument in typerstate 1. 2) Cache argument. 3) Evolve same typer state (to typecheck other arguments, say) leading to a different constraint. 4) Take typechecked argument in same state.
It turns out that the merge is needed not just for isApplicableSafe but also for (e.g. erased-lubs.scala) as well as many parts of dotty itself.
A fresh typer state with the same constraint as this one.
Make type variable instances permanent by assigning to
inst field if
type variable instantiation cannot be retracted anymore. Then, remove
no-longer needed constraint entries.
Reset constraint to
c and mark current constraint as retracted if it differs from
A fresh type state with the same constraint as this one and the given reporter
op. If current typerstate is shared, run
op in a fresh exploration
typerstate. If it is unshared, run
op in current typerState, restoring typerState
to previous state afterwards.
The closest ancestor of this typer state (including possibly this typer state itself) which is not yet committed, or which does not have a parent.
The uninstantiated variables