TypedValue: fix print function

for optional_payload_ptr and eu_payload_ptr
This commit is contained in:
Andrew Kelley 2022-06-28 16:35:34 -07:00
parent 8974cee5a1
commit 304a58a251

View File

@ -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