authorgravatar for luuk@degram.devLuuk de Gram <luuk@degram.dev> 2021-07-18 17:10:33+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-07-20 12:19:16-07:00
log1bc3bfc04b51af8a00999fc4bf766a202dcc7384
tree8d5a060bc24493f1424df274d0eb9dd57f7e254d
parent480242b78a5018bbe28824eb3549bfa86126a6e8

Implement switch_br dump


1 files changed, 30 insertions(+), 3 deletions(-)

src/print_air.zig+30-3
...@@ -299,9 +299,36 @@ const Writer = struct {...@@ -299,9 +299,36 @@ const Writer = struct {
299 }299 }
300300
301 fn writeSwitchBr(w: *Writer, s: anytype, inst: Air.Inst.Index) @TypeOf(s).Error!void {301 fn writeSwitchBr(w: *Writer, s: anytype, inst: Air.Inst.Index) @TypeOf(s).Error!void {
302 _ = w;302 const pl_op = w.air.instructions.items(.data)[inst].pl_op;
303 _ = inst;303 const extra = w.air.extraData(Air.SwitchBr, pl_op.payload);
304 try s.writeAll("TODO");304 const cases = w.air.extra[extra.end..][0..extra.data.cases_len];
305 const else_body = w.air.extra[extra.end + cases.len ..][0..extra.data.else_body_len];
306
307 try w.writeInstRef(s, pl_op.operand);
308 try s.writeAll(", {\n");
309
310 const old_indent = w.indent;
311 if (else_body.len != 0) {
312 w.indent += 2;
313 try w.writeBody(s, else_body);
314 try s.writeByteNTimes(' ', old_indent);
315 try s.writeAll("}, {\n");
316 w.indent = old_indent;
317 }
318
319 for (cases) |case_index| {
320 const case = w.air.extraData(Air.SwitchBr.Case, case_index);
321 const case_body = w.air.extra[case.end..][0..case.data.body_len];
322
323 w.indent += 2;
324 try w.writeBody(s, case_body);
325 try s.writeByteNTimes(' ', old_indent);
326 try s.writeAll("}, {\n");
327 w.indent = old_indent;
328 }
329
330 try s.writeByteNTimes(' ', old_indent);
331 try s.writeAll("}");
305 }332 }
306333
307 fn writeInstRef(w: *Writer, s: anytype, inst: Air.Inst.Ref) @TypeOf(s).Error!void {334 fn writeInstRef(w: *Writer, s: anytype, inst: Air.Inst.Ref) @TypeOf(s).Error!void {