zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 1bc3bfc04b51af8a00999fc4bf766a202dcc7384 (tree)
parent 480242b78a5018bbe28824eb3549bfa86126a6e8
Author: Luuk de Gram <luuk@degram.dev>
Date:   Sun, 18 Jul 2021 17:10:33 +0200

Implement switch_br dump

Diffstat:
Msrc/print_air.zig | 33++++++++++++++++++++++++++++++---
1 file changed, 30 insertions(+), 3 deletions(-)

diff --git a/src/print_air.zig b/src/print_air.zig @@ -299,9 +299,36 @@ const Writer = struct { } fn writeSwitchBr(w: *Writer, s: anytype, inst: Air.Inst.Index) @TypeOf(s).Error!void { - _ = w; - _ = inst; - try s.writeAll("TODO"); + const pl_op = w.air.instructions.items(.data)[inst].pl_op; + const extra = w.air.extraData(Air.SwitchBr, pl_op.payload); + const cases = w.air.extra[extra.end..][0..extra.data.cases_len]; + const else_body = w.air.extra[extra.end + cases.len ..][0..extra.data.else_body_len]; + + try w.writeInstRef(s, pl_op.operand); + try s.writeAll(", {\n"); + + const old_indent = w.indent; + if (else_body.len != 0) { + w.indent += 2; + try w.writeBody(s, else_body); + try s.writeByteNTimes(' ', old_indent); + try s.writeAll("}, {\n"); + w.indent = old_indent; + } + + for (cases) |case_index| { + const case = w.air.extraData(Air.SwitchBr.Case, case_index); + const case_body = w.air.extra[case.end..][0..case.data.body_len]; + + w.indent += 2; + try w.writeBody(s, case_body); + try s.writeByteNTimes(' ', old_indent); + try s.writeAll("}, {\n"); + w.indent = old_indent; + } + + try s.writeByteNTimes(' ', old_indent); + try s.writeAll("}"); } fn writeInstRef(w: *Writer, s: anytype, inst: Air.Inst.Ref) @TypeOf(s).Error!void {