Port the located value tree onto the hand-rolled engine, reusing the
engine-agnostic located layer (Model.LocatedValue, LocatedPair,
SourcePosition, SourceRange, and the located composer helper) authored
on the conformance branch. The streaming composer now builds a parallel
located tree behind an opt-in tracksLocations flag, exposed as
parseLocated / parseStreamLocated; the plain Value path stays
byte-identical, gated behind the flag.
The scalar event carries the scanner token's end mark, so a located
scalar spans the whole token (end exclusive, one past the last
character) rather than being start-anchored. The hand-rolled scanner
already tracked token end marks, so this surfaces information the engine
was already computing.
Also stop emitting a spurious null document for a comment-only or empty
stream: YAML 1.2 gives such a stream zero documents, while the
single-document value API still maps it to null, so parse("") is
unchanged.
A whole-suite test proves the located projection equals a plain parse
for every passing case; the value, event-dump, and conformance suites
stay green (507 tests).
17 lines
758 B
Swift
17 lines
758 B
Swift
extension PureYAML.Parsing {
|
|
struct EventStreamContainer {
|
|
var kind: EventStreamContainerKind
|
|
var anchor: String?
|
|
var values: [EventStreamComposedNode] = []
|
|
var mergeSources: [[PureYAML.Model.Pair]] = []
|
|
var localPairs: [PureYAML.Model.Pair] = []
|
|
var pendingKey: PureYAML.Parsing.EventComposer.ComposedMappingKey?
|
|
var mark: PureYAML.Parsing.Mark
|
|
// Location tracking (parallel to the above, only when the composer tracks locations).
|
|
var locatedValues: [PureYAML.Model.LocatedValue] = []
|
|
var mergeLocatedSources: [[PureYAML.Model.LocatedPair]] = []
|
|
var localLocatedPairs: [PureYAML.Model.LocatedPair] = []
|
|
var pendingKeyNode: EventStreamComposedNode?
|
|
}
|
|
}
|