authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-06-03 14:29:24+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-06-03 14:29:24+03:00
log5c65b086d68280d49037ae316db0aba76fe5cd72
treebdaf7c0fb22c2d94b4c843e92cf9b70cfcbaf440
parent3db4513b33425d34ad9def8af8bd52536a85fecd

Value: implement {read,write}Value for more types


1 files changed, 13 insertions(+), 1 deletions(-)

src/value.zig+13-1
......@@ -1174,6 +1174,10 @@ pub const Value = extern union {
11741174 return;
11751175 }
11761176 switch (ty.zigTypeTag()) {
1177 .Void => {},
1178 .Bool => {
1179 buffer[0] = @boolToInt(val.toBool());
1180 },
11771181 .Int => {
11781182 var bigint_buffer: BigIntSpace = undefined;
11791183 const bigint = val.toBigInt(&bigint_buffer, target);
......@@ -1291,6 +1295,14 @@ pub const Value = extern union {
12911295 ) Allocator.Error!Value {
12921296 const target = mod.getTarget();
12931297 switch (ty.zigTypeTag()) {
1298 .Void => return Value.@"void",
1299 .Bool => {
1300 if (buffer[0] == 0) {
1301 return Value.@"false";
1302 } else {
1303 return Value.@"true";
1304 }
1305 },
12941306 .Int => {
12951307 if (buffer.len == 0) return Value.zero;
12961308 const int_info = ty.intInfo(target);
......@@ -1311,7 +1323,7 @@ pub const Value = extern union {
13111323 128 => return Value.Tag.float_128.create(arena, floatReadFromMemory(f128, target, buffer)),
13121324 else => unreachable,
13131325 },
1314 .Array => {
1326 .Array, .Vector => {
13151327 const elem_ty = ty.childType();
13161328 const elem_size = elem_ty.abiSize(target);
13171329 const elems = try arena.alloc(Value, @intCast(usize, ty.arrayLen()));