From 69d03d3a297809d1bc91ed5848501c64666244a1 Mon Sep 17 00:00:00 2001 From: joachimschmidt557 Date: Thu, 30 Dec 2021 14:39:06 +0100 Subject: stage2 ARM: implement struct_field_ptr and struct_field_val --- src/codegen.zig | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/codegen.zig') diff --git a/src/codegen.zig b/src/codegen.zig index f93c53804b..fdbdb7d5c1 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -372,11 +372,32 @@ pub fn generateSymbol( return Result{ .appended = {} }; }, .Struct => { + // TODO debug info + // TODO padding of struct members const field_vals = typed_value.val.castTag(.@"struct").?.data; - _ = field_vals; // TODO write the fields for real + for (field_vals) |field_val, index| { + const field_ty = typed_value.ty.structFieldType(index); + if (!field_ty.hasCodeGenBits()) continue; + switch (try generateSymbol(bin_file, src_loc, .{ + .ty = field_ty, + .val = field_val, + }, code, debug_output)) { + .appended => {}, + .externally_managed => |external_slice| { + code.appendSliceAssumeCapacity(external_slice); + }, + .fail => |em| return Result{ .fail = em }, + } + } + + return Result{ .appended = {} }; + }, + .Union => { + // TODO generateSymbol for unions const target = bin_file.options.target; const abi_size = try math.cast(usize, typed_value.ty.abiSize(target)); try code.writer().writeByteNTimes(0xaa, abi_size); + return Result{ .appended = {} }; }, else => |t| { -- cgit v1.2.3