aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/c.zig
diff options
context:
space:
mode:
authorCody Tapscott <cody+topolarity@tapscott.me>2022-01-24 11:30:09 -0700
committerCody Tapscott <cody+topolarity@tapscott.me>2022-01-24 11:58:43 -0700
commit799bd81b080cebd246698f054cb3c243d39ab4f9 (patch)
treed03f2a3abb4956968978c0e832c40837560ba36f /src/codegen/c.zig
parenta0732117d07f9dc9b8afb457d935ca84411ec233 (diff)
downloadzig-799bd81b080cebd246698f054cb3c243d39ab4f9.tar.gz
zig-799bd81b080cebd246698f054cb3c243d39ab4f9.zip
Add support for rendering `.elem_ptr`
Diffstat (limited to 'src/codegen/c.zig')
-rw-r--r--src/codegen/c.zig12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index de1636cd96..b545b64059 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -408,6 +408,18 @@ pub const DeclGen = struct {
try dg.renderValue(writer, Type.usize, slice.len);
try writer.writeAll("}");
},
+ .elem_ptr => {
+ const elem_ptr = val.castTag(.elem_ptr).?.data;
+ var arena = std.heap.ArenaAllocator.init(dg.module.gpa);
+ defer arena.deinit();
+ const elem_ptr_ty = try ty.elemPtrType(arena.allocator());
+
+ try writer.writeAll("(&((");
+ try dg.renderType(writer, ty);
+ try writer.writeByte(')');
+ try dg.renderValue(writer, elem_ptr_ty, elem_ptr.array_ptr);
+ try writer.print(")[{d}])", .{elem_ptr.index});
+ },
.function => {
const func = val.castTag(.function).?.data;
try dg.renderDeclName(func.owner_decl, writer);