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.
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user