stage2: fix toAllocatedBytes on slices

This commit is contained in:
Veikka Tuominen 2022-02-25 16:20:57 +02:00 committed by Andrew Kelley
parent ee149aaa03
commit bff7714a7c
3 changed files with 20 additions and 15 deletions

View file

@ -791,17 +791,22 @@ pub const Value = extern union {
return decl_val.toAllocatedBytes(decl.ty, allocator); return decl_val.toAllocatedBytes(decl.ty, allocator);
}, },
.the_only_possible_value => return &[_]u8{}, .the_only_possible_value => return &[_]u8{},
.slice => return toAllocatedBytes(val.castTag(.slice).?.data.ptr, ty, allocator), .slice => {
else => { const slice = val.castTag(.slice).?.data;
const result = try allocator.alloc(u8, @intCast(usize, ty.arrayLen())); return arrayToAllocatedBytes(slice.ptr, slice.len.toUnsignedInt(), allocator);
},
else => return arrayToAllocatedBytes(val, ty.arrayLen(), allocator),
}
}
fn arrayToAllocatedBytes(val: Value, len: u64, allocator: Allocator) ![]u8 {
const result = try allocator.alloc(u8, @intCast(usize, len));
var elem_value_buf: ElemValueBuffer = undefined; var elem_value_buf: ElemValueBuffer = undefined;
for (result) |*elem, i| { for (result) |*elem, i| {
const elem_val = val.elemValueBuffer(i, &elem_value_buf); const elem_val = val.elemValueBuffer(i, &elem_value_buf);
elem.* = @intCast(u8, elem_val.toUnsignedInt()); elem.* = @intCast(u8, elem_val.toUnsignedInt());
} }
return result; return result;
},
}
} }
pub const ToTypeBuffer = Type.Payload.Bits; pub const ToTypeBuffer = Type.Payload.Bits;

View file

@ -127,8 +127,11 @@ test {
_ = @import("behavior/bugs/726.zig"); _ = @import("behavior/bugs/726.zig");
_ = @import("behavior/bugs/1421.zig"); _ = @import("behavior/bugs/1421.zig");
_ = @import("behavior/bugs/1442.zig"); _ = @import("behavior/bugs/1442.zig");
_ = @import("behavior/bugs/1607.zig");
_ = @import("behavior/bugs/2114.zig"); _ = @import("behavior/bugs/2114.zig");
_ = @import("behavior/bugs/3384.zig");
_ = @import("behavior/bugs/3742.zig"); _ = @import("behavior/bugs/3742.zig");
_ = @import("behavior/bugs/5398.zig");
_ = @import("behavior/struct_contains_null_ptr_itself.zig"); _ = @import("behavior/struct_contains_null_ptr_itself.zig");
_ = @import("behavior/switch_prong_err_enum.zig"); _ = @import("behavior/switch_prong_err_enum.zig");
_ = @import("behavior/switch_prong_implicit_cast.zig"); _ = @import("behavior/switch_prong_implicit_cast.zig");
@ -147,11 +150,8 @@ test {
_ = @import("behavior/bugs/828.zig"); _ = @import("behavior/bugs/828.zig");
_ = @import("behavior/bugs/920.zig"); _ = @import("behavior/bugs/920.zig");
_ = @import("behavior/bugs/1120.zig"); _ = @import("behavior/bugs/1120.zig");
_ = @import("behavior/bugs/1607.zig");
_ = @import("behavior/bugs/1851.zig"); _ = @import("behavior/bugs/1851.zig");
_ = @import("behavior/bugs/3384.zig");
_ = @import("behavior/bugs/3779.zig"); _ = @import("behavior/bugs/3779.zig");
_ = @import("behavior/bugs/5398.zig");
_ = @import("behavior/bugs/5413.zig"); _ = @import("behavior/bugs/5413.zig");
_ = @import("behavior/bugs/5487.zig"); _ = @import("behavior/bugs/5487.zig");
_ = @import("behavior/bugs/6456.zig"); _ = @import("behavior/bugs/6456.zig");

View file

@ -25,7 +25,7 @@ test "assignment of field with padding" {
.emits_shadows = false, .emits_shadows = false,
}, },
}; };
try testing.expectEqual(false, renderable.material.transparent); try testing.expect(false == renderable.material.transparent);
try testing.expectEqual(false, renderable.material.emits_shadows); try testing.expect(false == renderable.material.emits_shadows);
try testing.expectEqual(true, renderable.material.render_color); try testing.expect(true == renderable.material.render_color);
} }