authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2025-08-24 23:21:19 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2025-08-24 23:21:19 -07:00
logfa2b7fe08a7737c859ba2bef0bb3595b25a0ba07
treeaa8c1c03da6c62a4378d575d7d02ebb311f42013
parent10e8df67c534e186d851ed48e8895374d9a454e9

p.next() is always .? so replace it with error.YamlEndOfStream


1 files changed, 19 insertions(+), 18 deletions(-)

yaml.zig+19-18
......@@ -256,9 +256,9 @@ pub const Parser = struct {
256256 return item.stream;
257257 }
258258
259 fn next(self: *Parser) ?Token {
259 fn next(self: *Parser) !Token {
260260 if (self.index >= self.tokens.len) {
261 return null;
261 return error.YamlEndOfStream;
262262 }
263263 defer self.index += 1;
264264 return self.tokens[self.index];
......@@ -267,15 +267,15 @@ pub const Parser = struct {
267267
268268pub const Error =
269269 std.mem.Allocator.Error ||
270 error{YamlUnexpectedToken};
270 error{ YamlUnexpectedToken, YamlEndOfStream };
271271
272272fn parse_item(p: *Parser, start: ?Token) Error!Item {
273 const tok = start orelse p.next();
274 return switch (tok.?.type) {
273 const tok = start orelse try p.next();
274 return switch (tok.type) {
275275 c.YAML_STREAM_START_EVENT => Item{ .stream = try parse_stream(p) },
276276 c.YAML_MAPPING_START_EVENT => Item{ .mapping = try parse_mapping(p) },
277277 c.YAML_SEQUENCE_START_EVENT => Item{ .sequence = try parse_sequence(p) },
278 c.YAML_SCALAR_EVENT => Item{ .string = try get_event_string(tok.?, p) },
278 c.YAML_SCALAR_EVENT => Item{ .string = try get_event_string(tok, p) },
279279 else => unreachable,
280280 };
281281}
......@@ -285,11 +285,11 @@ fn parse_stream(p: *Parser) Error!Stream {
285285 errdefer res.deinit();
286286
287287 while (true) {
288 const tok = p.next();
289 if (tok.?.type == c.YAML_STREAM_END_EVENT) {
288 const tok = try p.next();
289 if (tok.type == c.YAML_STREAM_END_EVENT) {
290290 return Stream{ .docs = try res.toOwnedSlice() };
291291 }
292 if (tok.?.type != c.YAML_DOCUMENT_START_EVENT) {
292 if (tok.type != c.YAML_DOCUMENT_START_EVENT) {
293293 return error.YamlUnexpectedToken;
294294 }
295295 try res.append(try parse_document(p));
......@@ -297,13 +297,14 @@ fn parse_stream(p: *Parser) Error!Stream {
297297}
298298
299299fn parse_document(p: *Parser) Error!Document {
300 const tok = p.next();
301 if (tok.?.type != c.YAML_MAPPING_START_EVENT) {
300 var tok = try p.next();
301 if (tok.type != c.YAML_MAPPING_START_EVENT) {
302302 return error.YamlUnexpectedToken;
303303 }
304304 const item = try parse_item(p, tok);
305305
306 if (p.next().?.type != c.YAML_DOCUMENT_END_EVENT) {
306 tok = try p.next();
307 if (tok.type != c.YAML_DOCUMENT_END_EVENT) {
307308 return error.YamlUnexpectedToken;
308309 }
309310 return Document{ .mapping = item.mapping };
......@@ -314,15 +315,15 @@ fn parse_mapping(p: *Parser) Error!Mapping {
314315 errdefer res.deinit();
315316
316317 while (true) {
317 const tok = p.next();
318 if (tok.?.type == c.YAML_MAPPING_END_EVENT) {
318 const tok = try p.next();
319 if (tok.type == c.YAML_MAPPING_END_EVENT) {
319320 return Mapping{ .items = try res.toOwnedSlice() };
320321 }
321 if (tok.?.type != c.YAML_SCALAR_EVENT) {
322 if (tok.type != c.YAML_SCALAR_EVENT) {
322323 return error.YamlUnexpectedToken;
323324 }
324325 try res.append(Key{
325 .key = try get_event_string(tok.?, p),
326 .key = try get_event_string(tok, p),
326327 .value = try parse_value(p),
327328 });
328329 }
......@@ -343,8 +344,8 @@ fn parse_sequence(p: *Parser) Error!Sequence {
343344 errdefer res.deinit();
344345
345346 while (true) {
346 const tok = p.next();
347 if (tok.?.type == c.YAML_SEQUENCE_END_EVENT) {
347 const tok = try p.next();
348 if (tok.type == c.YAML_SEQUENCE_END_EVENT) {
348349 return try res.toOwnedSlice();
349350 }
350351 try res.append(try parse_item(p, tok));