From 304a58a2515c19cc719f5a517b0016f82117263e Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 28 Jun 2022 16:35:34 -0700 Subject: [PATCH] TypedValue: fix print function for optional_payload_ptr and eu_payload_ptr --- src/TypedValue.zig | 62 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 7 deletions(-) diff --git a/src/TypedValue.zig b/src/TypedValue.zig index 3c1b28e544..b00600d37a 100644 --- a/src/TypedValue.zig +++ b/src/TypedValue.zig @@ -427,15 +427,63 @@ pub fn print( }, .eu_payload_ptr => { try writer.writeAll("&"); - val = val.castTag(.eu_payload_ptr).?.data.container_ptr; - ty = ty.elemType2().errorUnionPayload(); + + const data = val.castTag(.eu_payload_ptr).?.data; + + var ty_val: Value.Payload.Ty = .{ + .base = .{ .tag = .ty }, + .data = ty, + }; + + try writer.writeAll("@as("); + try print(.{ + .ty = Type.type, + .val = Value.initPayload(&ty_val.base), + }, writer, level - 1, mod); + + try writer.writeAll(", &(payload of "); + + var ptr_ty: Type.Payload.ElemType = .{ + .base = .{ .tag = .single_mut_pointer }, + .data = data.container_ty, + }; + + try print(.{ + .ty = Type.initPayload(&ptr_ty.base), + .val = data.container_ptr, + }, writer, level - 1, mod); + + try writer.writeAll("))"); + return; }, .opt_payload_ptr => { - try writer.writeAll("&"); - val = val.castTag(.opt_payload).?.data; - var buf: Type.Payload.ElemType = undefined; - ty = ty.elemType2().optionalChild(&buf); - return print(.{ .ty = ty, .val = val }, writer, level, mod); + const data = val.castTag(.opt_payload_ptr).?.data; + + var ty_val: Value.Payload.Ty = .{ + .base = .{ .tag = .ty }, + .data = ty, + }; + + try writer.writeAll("@as("); + try print(.{ + .ty = Type.type, + .val = Value.initPayload(&ty_val.base), + }, writer, level - 1, mod); + + try writer.writeAll(", &(payload of "); + + var ptr_ty: Type.Payload.ElemType = .{ + .base = .{ .tag = .single_mut_pointer }, + .data = data.container_ty, + }; + + try print(.{ + .ty = Type.initPayload(&ptr_ty.base), + .val = data.container_ptr, + }, writer, level - 1, mod); + + try writer.writeAll("))"); + return; }, // TODO these should not appear in this function