From c4d2c40f1aafb309ff67441786304796dd9e72fb Mon Sep 17 00:00:00 2001 From: Ben Buhse Date: Tue, 27 Jan 2026 15:13:02 -0600 Subject: [PATCH] Fix Config.skipChildBlock() Before, there would be issues for nested child blocks --- src/Config.zig | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Config.zig b/src/Config.zig index 9a19e6d..0bc177f 100644 --- a/src/Config.zig +++ b/src/Config.zig @@ -139,9 +139,7 @@ fn load(config: *Config, reader: *Io.Reader) !void { try config.skipChildBlock(&parser); } }, - .child_block_end => { - @panic("Reached end of non-existant child block. A bug in zig-kdl?"); - }, + .child_block_end => log.err("Reached unexpected .child_block_end. Ignoring it", .{}), } } } @@ -198,11 +196,21 @@ fn loadBordersChildBlock(config: *Config, parser: *kdl.Parser) !void { /// Skips an entire child block in KDL fn skipChildBlock(_: *Config, parser: *kdl.Parser) !void { log.warn("Unexpected child block. Skipping it", .{}); + + var depth: usize = 0; while (try parser.next()) |event| { switch (event) { - .child_block_end => return, + // Nested child block + .child_block_begin => depth += 1, + .child_block_end => { + if (depth == 0) { + return; + } else { + depth -= 1; + } + }, else => { - // We don't care about anything else in this child block + // We don't care about any nodes in here }, } }