diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-04-01 22:34:40 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-04-01 22:39:09 -0700 |
| commit | 8ebfdc14f68521ac129ee7d2c3f4e7250e4e7418 (patch) | |
| tree | 7a20ca7752b10da7e811a52927b6d1ba0869e893 /src/codegen.zig | |
| parent | c66b48194ff83eb5b1774a1428461f5fc94dcd7d (diff) | |
| download | zig-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.zig | 5 |
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()) |
