@@ -249,26 +249,36 @@ const SymbolTree = struct {
249249
250250 /// Useful for debugging
251251 fn dump (tree : * const SymbolTree ) error {WriteFailed }! void {
252- const dumpNode = struct {
252+ const Landfill = struct {
253+ indent_stack : std .bit_set .IntegerBitSet (64 ) = undefined ,
254+ indent_stack_size : u8 = 0 ,
255+
253256 fn dumpNode (
257+ l : * @This (),
254258 children : std .StringArrayHashMapUnmanaged (Node ),
255259 writer : * std.Io.Writer ,
256- indent : usize ,
257260 ) error {WriteFailed }! void {
258261 for (children .keys (), children .values (), 0.. ) | name , child_node , i | {
259262 const is_last = i + 1 == children .count ();
260- try writer .splatBytesAll ("│ " , indent );
261- try writer .print ("{s}── {s} {s}\n " , .{ @as ([]const u8 , if (is_last ) "└" else "├" ), name });
262- try dumpNode (child_node .children , writer , indent + 1 );
263+ for (0.. l .indent_stack_size ) | indent_index | {
264+ try writer .writeAll (if (l .indent_stack .isSet (indent_index )) " " else "| " );
265+ }
266+ try writer .print ("{s}── {s}\n " , .{ @as ([]const u8 , if (is_last ) "└" else "├" ), name });
267+
268+ l .indent_stack .setValue (l .indent_stack_size , is_last );
269+ l .indent_stack_size += 1 ;
270+ defer l .indent_stack_size -= 1 ;
271+ try l .dumpNode (child_node .children , writer );
263272 }
264273 }
265- }. dumpNode ;
274+ };
266275
267276 var buffer : [4096 ]u8 = undefined ;
268- const writer = std .debug .lockStderrWriter (& buffer );
277+ const writer , _ = std .debug .lockStderrWriter (& buffer );
269278 defer std .debug .unlockStderrWriter ();
270279
271- try dumpNode (tree .root , writer , 0 );
280+ var landfill : Landfill = .{};
281+ try landfill .dumpNode (tree .root , writer );
272282 }
273283};
274284
0 commit comments