Handles the case where a partially buffered nested value is skipped; ensures that fully-buffered containers do not cause the cursor to enter unchecked mode unless stepped into. #692
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.
Description of changes:
The two issues mentioned in the PR title can be considered separately:
InputStream.skip
. Whenever bytes are skipped directly from the input source without being buffered, the marked end indices for any parent containers need to be shifted left (since the indices refer to positions in the buffer, which will no longer contain all of the container's bytes). Before this fix,shiftContainerEnds
was not being called in the case where a nested container was skipped before being fully buffered. After this fix,shiftContainerEnds
is moved intoslowSeek
, allowing for individual invocations to be removed. This fix is covered by the following new tests:shouldNotFailWhenAnUnbufferedNestedContainerIsSkipped
,shouldNotFailWhenAnUnbufferedNestedContainerIsSteppedOutEarly
.nestedNullContainerIsParsedSuccessfully
,nestedEmptyContainerIsParsedSuccessfully
,nestedContainerIsSkippedSuccessfully
,nestedContainerIsSteppedOutEarlySuccessfully
.These fixes are performance-neutral.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.