Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The task encoder framework now supports cyclic dependencies (better).
Previously, requesting the same task key that is already higher up the call stack would crash with a "cyclic error". There are situations (as happened with a recursive type) where this is not good enough.
Now, the repeated request will restart the encoder. The inner invocation should be able to progress further due to the intermediate dependency calls, since additional output refs will be available. The outer invocation will be aborted. This may result in some data being allocated multiple times, but it is hard to measure the cost here. However, the overhead in implementation is minor:
deps.emit_ouput_ref
and anydeps.require_*
call simply needs to be handled with a try operator?
to propagate errors.Other changes:
do_encode_full
, calledEncodeFullResult<'vir, E>
, where the generic type parameter is the encoder itself.'tcx
lifetime,'vir
suffices.