commit 01638c250fa270c8cb3b3416ea55e22988cd32a2 (tree)
parent bfff8544e1049fc7aa3310883f619efb3f394948
Author: Andrew Kelley <andrew@ziglang.org>
Date: Sun, 20 Feb 2022 00:08:05 -0700
Sema: implement readFromMemory for arrays
Diffstat:
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/value.zig b/src/value.zig
@@ -1090,7 +1090,12 @@ pub const Value = extern union {
}
}
- pub fn readFromMemory(ty: Type, target: Target, buffer: []const u8, arena: Allocator) !Value {
+ pub fn readFromMemory(
+ ty: Type,
+ target: Target,
+ buffer: []const u8,
+ arena: Allocator,
+ ) Allocator.Error!Value {
switch (ty.zigTypeTag()) {
.Int => {
const int_info = ty.intInfo(target);
@@ -1111,6 +1116,17 @@ pub const Value = extern union {
128 => return Value.Tag.float_128.create(arena, floatReadFromMemory(f128, target, buffer)),
else => unreachable,
},
+ .Array => {
+ const elem_ty = ty.childType();
+ const elem_size = elem_ty.abiSize(target);
+ const elems = try arena.alloc(Value, @intCast(usize, ty.arrayLen()));
+ var offset: usize = 0;
+ for (elems) |*elem| {
+ elem.* = try readFromMemory(elem_ty, target, buffer[offset..], arena);
+ offset += elem_size;
+ }
+ return Tag.array.create(arena, elems);
+ },
else => @panic("TODO implement readFromMemory for more types"),
}
}