From 8ebfdc14f68521ac129ee7d2c3f4e7250e4e7418 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 1 Apr 2021 22:34:40 -0700 Subject: stage2: implement structs in the frontend New ZIR instructions: * struct_decl_packed * struct_decl_extern New TZIR instruction: struct_field_ptr Introduce `Module.Struct`. It uses `Value` to store default values and abi alignments. Implemented Sema.analyzeStructFieldPtr and zirStructDecl. Some stuff I changed from `@panic("TODO")` to `log.warn("TODO")`. It's becoming more clear that we need the lazy value mechanism soon; Type is becoming unruly, and some of these functions have too much logic given that they don't have any context for memory management or error reporting. --- src/codegen.zig | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/codegen.zig') diff --git a/src/codegen.zig b/src/codegen.zig index d27122efc9..35ddd000fb 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -910,6 +910,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { .ret => return self.genRet(inst.castTag(.ret).?), .retvoid => return self.genRetVoid(inst.castTag(.retvoid).?), .store => return self.genStore(inst.castTag(.store).?), + .struct_field_ptr => return self.genStructFieldPtr(inst.castTag(.struct_field_ptr).?), .sub => return self.genSub(inst.castTag(.sub).?), .subwrap => return self.genSubWrap(inst.castTag(.subwrap).?), .switchbr => return self.genSwitch(inst.castTag(.switchbr).?), @@ -1403,6 +1404,10 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { return .none; } + fn genStructFieldPtr(self: *Self, inst: *ir.Inst.StructFieldPtr) !MCValue { + return self.fail(inst.base.src, "TODO implement codegen struct_field_ptr", .{}); + } + fn genSub(self: *Self, inst: *ir.Inst.BinOp) !MCValue { // No side effects, so if it's unreferenced, do nothing. if (inst.base.isUnused()) -- cgit v1.2.3