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 {...@@ -256,9 +256,9 @@ pub const Parser = struct {
256 return item.stream;256 return item.stream;
257 }257 }
258258
259 fn next(self: *Parser) ?Token {259 fn next(self: *Parser) !Token {
260 if (self.index >= self.tokens.len) {260 if (self.index >= self.tokens.len) {
261 return null;261 return error.YamlEndOfStream;
262 }262 }
263 defer self.index += 1;263 defer self.index += 1;
264 return self.tokens[self.index];264 return self.tokens[self.index];
...@@ -267,15 +267,15 @@ pub const Parser = struct {...@@ -267,15 +267,15 @@ pub const Parser = struct {
267267
268pub const Error =268pub const Error =
269 std.mem.Allocator.Error ||269 std.mem.Allocator.Error ||
270 error{YamlUnexpectedToken};270 error{ YamlUnexpectedToken, YamlEndOfStream };
271271
272fn parse_item(p: *Parser, start: ?Token) Error!Item {272fn parse_item(p: *Parser, start: ?Token) Error!Item {
273 const tok = start orelse p.next();273 const tok = start orelse try p.next();
274 return switch (tok.?.type) {274 return switch (tok.type) {
275 c.YAML_STREAM_START_EVENT => Item{ .stream = try parse_stream(p) },275 c.YAML_STREAM_START_EVENT => Item{ .stream = try parse_stream(p) },
276 c.YAML_MAPPING_START_EVENT => Item{ .mapping = try parse_mapping(p) },276 c.YAML_MAPPING_START_EVENT => Item{ .mapping = try parse_mapping(p) },
277 c.YAML_SEQUENCE_START_EVENT => Item{ .sequence = try parse_sequence(p) },277 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) },
279 else => unreachable,279 else => unreachable,
280 };280 };
281}281}
...@@ -285,11 +285,11 @@ fn parse_stream(p: *Parser) Error!Stream {...@@ -285,11 +285,11 @@ fn parse_stream(p: *Parser) Error!Stream {
285 errdefer res.deinit();285 errdefer res.deinit();
286286
287 while (true) {287 while (true) {
288 const tok = p.next();288 const tok = try p.next();
289 if (tok.?.type == c.YAML_STREAM_END_EVENT) {289 if (tok.type == c.YAML_STREAM_END_EVENT) {
290 return Stream{ .docs = try res.toOwnedSlice() };290 return Stream{ .docs = try res.toOwnedSlice() };
291 }291 }
292 if (tok.?.type != c.YAML_DOCUMENT_START_EVENT) {292 if (tok.type != c.YAML_DOCUMENT_START_EVENT) {
293 return error.YamlUnexpectedToken;293 return error.YamlUnexpectedToken;
294 }294 }
295 try res.append(try parse_document(p));295 try res.append(try parse_document(p));
...@@ -297,13 +297,14 @@ fn parse_stream(p: *Parser) Error!Stream {...@@ -297,13 +297,14 @@ fn parse_stream(p: *Parser) Error!Stream {
297}297}
298298
299fn parse_document(p: *Parser) Error!Document {299fn parse_document(p: *Parser) Error!Document {
300 const tok = p.next();300 var tok = try p.next();
301 if (tok.?.type != c.YAML_MAPPING_START_EVENT) {301 if (tok.type != c.YAML_MAPPING_START_EVENT) {
302 return error.YamlUnexpectedToken;302 return error.YamlUnexpectedToken;
303 }303 }
304 const item = try parse_item(p, tok);304 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) {
307 return error.YamlUnexpectedToken;308 return error.YamlUnexpectedToken;
308 }309 }
309 return Document{ .mapping = item.mapping };310 return Document{ .mapping = item.mapping };
...@@ -314,15 +315,15 @@ fn parse_mapping(p: *Parser) Error!Mapping {...@@ -314,15 +315,15 @@ fn parse_mapping(p: *Parser) Error!Mapping {
314 errdefer res.deinit();315 errdefer res.deinit();
315316
316 while (true) {317 while (true) {
317 const tok = p.next();318 const tok = try p.next();
318 if (tok.?.type == c.YAML_MAPPING_END_EVENT) {319 if (tok.type == c.YAML_MAPPING_END_EVENT) {
319 return Mapping{ .items = try res.toOwnedSlice() };320 return Mapping{ .items = try res.toOwnedSlice() };
320 }321 }
321 if (tok.?.type != c.YAML_SCALAR_EVENT) {322 if (tok.type != c.YAML_SCALAR_EVENT) {
322 return error.YamlUnexpectedToken;323 return error.YamlUnexpectedToken;
323 }324 }
324 try res.append(Key{325 try res.append(Key{
325 .key = try get_event_string(tok.?, p),326 .key = try get_event_string(tok, p),
326 .value = try parse_value(p),327 .value = try parse_value(p),
327 });328 });
328 }329 }
...@@ -343,8 +344,8 @@ fn parse_sequence(p: *Parser) Error!Sequence {...@@ -343,8 +344,8 @@ fn parse_sequence(p: *Parser) Error!Sequence {
343 errdefer res.deinit();344 errdefer res.deinit();
344345
345 while (true) {346 while (true) {
346 const tok = p.next();347 const tok = try p.next();
347 if (tok.?.type == c.YAML_SEQUENCE_END_EVENT) {348 if (tok.type == c.YAML_SEQUENCE_END_EVENT) {
348 return try res.toOwnedSlice();349 return try res.toOwnedSlice();
349 }350 }
350 try res.append(try parse_item(p, tok));351 try res.append(try parse_item(p, tok));