| ... | ... | @@ -86,9 +86,7 @@ fn renderType( |
| 86 | 86 | }, |
| 87 | 87 | .Array => { |
| 88 | 88 | try renderType(ctx, writer, t.elemType()); |
| 89 | | const sentinel_bit = @boolToInt(t.sentinel() != null); |
| 90 | | const c_len = t.arrayLen() + sentinel_bit; |
| 91 | | try writer.print("[{d}]", .{c_len}); |
| 89 | try writer.writeAll(" *"); |
| 92 | 90 | }, |
| 93 | 91 | else => |e| return ctx.fail(ctx.decl.src(), "TODO: C backend: implement type {s}", .{ |
| 94 | 92 | @tagName(e), |
| ... | ... | @@ -254,8 +252,21 @@ pub fn generate(file: *C, decl: *Decl) !void { |
| 254 | 252 | // TODO ask the Decl if it is const |
| 255 | 253 | // https://github.com/ziglang/zig/issues/7582 |
| 256 | 254 | |
| 257 | | try renderType(&ctx, writer, tv.ty); |
| 258 | | try writer.print(" {s} = ", .{decl.name}); |
| 255 | var suffix = std.ArrayList(u8).init(file.base.allocator); |
| 256 | defer suffix.deinit(); |
| 257 | |
| 258 | var render_ty = tv.ty; |
| 259 | while (render_ty.zigTypeTag() == .Array) { |
| 260 | const sentinel_bit = @boolToInt(render_ty.sentinel() != null); |
| 261 | const c_len = render_ty.arrayLen() + sentinel_bit; |
| 262 | try suffix.writer().print("[{d}]", .{c_len}); |
| 263 | render_ty = render_ty.elemType(); |
| 264 | } |
| 265 | |
| 266 | try renderType(&ctx, writer, render_ty); |
| 267 | try writer.print(" {s}{s}", .{ decl.name, suffix.items }); |
| 268 | |
| 269 | try writer.writeAll(" = "); |
| 259 | 270 | try renderValue(&ctx, writer, tv.ty, tv.val); |
| 260 | 271 | try writer.writeAll(";\n"); |
| 261 | 272 | } |