authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-28 16:35:34-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-28 16:35:34-07:00
log304a58a2515c19cc719f5a517b0016f82117263e
treee7395b215509fb1e957d9727d930c5fdb498160b
parent8974cee5a1f67db42a83a0907d8b9e842b979072

TypedValue: fix print function

for optional_payload_ptr and eu_payload_ptr

1 files changed, 55 insertions(+), 7 deletions(-)

src/TypedValue.zig+55-7
...@@ -427,15 +427,63 @@ pub fn print(...@@ -427,15 +427,63 @@ pub fn print(
427 },427 },
428 .eu_payload_ptr => {428 .eu_payload_ptr => {
429 try writer.writeAll("&");429 try writer.writeAll("&");
430 val = val.castTag(.eu_payload_ptr).?.data.container_ptr;430
431 ty = ty.elemType2().errorUnionPayload();431 const data = val.castTag(.eu_payload_ptr).?.data;
432
433 var ty_val: Value.Payload.Ty = .{
434 .base = .{ .tag = .ty },
435 .data = ty,
436 };
437
438 try writer.writeAll("@as(");
439 try print(.{
440 .ty = Type.type,
441 .val = Value.initPayload(&ty_val.base),
442 }, writer, level - 1, mod);
443
444 try writer.writeAll(", &(payload of ");
445
446 var ptr_ty: Type.Payload.ElemType = .{
447 .base = .{ .tag = .single_mut_pointer },
448 .data = data.container_ty,
449 };
450
451 try print(.{
452 .ty = Type.initPayload(&ptr_ty.base),
453 .val = data.container_ptr,
454 }, writer, level - 1, mod);
455
456 try writer.writeAll("))");
457 return;
432 },458 },
433 .opt_payload_ptr => {459 .opt_payload_ptr => {
434 try writer.writeAll("&");460 const data = val.castTag(.opt_payload_ptr).?.data;
435 val = val.castTag(.opt_payload).?.data;461
436 var buf: Type.Payload.ElemType = undefined;462 var ty_val: Value.Payload.Ty = .{
437 ty = ty.elemType2().optionalChild(&buf);463 .base = .{ .tag = .ty },
438 return print(.{ .ty = ty, .val = val }, writer, level, mod);464 .data = ty,
465 };
466
467 try writer.writeAll("@as(");
468 try print(.{
469 .ty = Type.type,
470 .val = Value.initPayload(&ty_val.base),
471 }, writer, level - 1, mod);
472
473 try writer.writeAll(", &(payload of ");
474
475 var ptr_ty: Type.Payload.ElemType = .{
476 .base = .{ .tag = .single_mut_pointer },
477 .data = data.container_ty,
478 };
479
480 try print(.{
481 .ty = Type.initPayload(&ptr_ty.base),
482 .val = data.container_ptr,
483 }, writer, level - 1, mod);
484
485 try writer.writeAll("))");
486 return;
439 },487 },
440488
441 // TODO these should not appear in this function489 // TODO these should not appear in this function