aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-04-01 22:34:40 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-04-01 22:39:09 -0700
commit8ebfdc14f68521ac129ee7d2c3f4e7250e4e7418 (patch)
tree7a20ca7752b10da7e811a52927b6d1ba0869e893 /src/codegen.zig
parentc66b48194ff83eb5b1774a1428461f5fc94dcd7d (diff)
downloadzig-8ebfdc14f68521ac129ee7d2c3f4e7250e4e7418.tar.gz
zig-8ebfdc14f68521ac129ee7d2c3f4e7250e4e7418.zip
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.
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig5
1 files changed, 5 insertions, 0 deletions
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())