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