zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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:
Msrc/value.zig | 18+++++++++++++++++-
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"), } }