diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-05-21 00:14:55 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-05-21 00:14:55 -0400 |
| commit | e694cd265ad762e1db037e191edfa2f0601126a9 (patch) | |
| tree | 5e53d87037abea98464d5b3b158eedb9bf567f7e | |
| parent | d57d9448aa322c1818de110adeb3cc69ac5dbcd9 (diff) | |
| download | zig-e694cd265ad762e1db037e191edfa2f0601126a9.tar.gz zig-e694cd265ad762e1db037e191edfa2f0601126a9.zip | |
more progress on updating translate-c
| -rw-r--r-- | src-self-hosted/translate_c.zig | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/src-self-hosted/translate_c.zig b/src-self-hosted/translate_c.zig index a93973eb36..e0c2b44f42 100644 --- a/src-self-hosted/translate_c.zig +++ b/src-self-hosted/translate_c.zig @@ -2054,7 +2054,8 @@ fn transInitListExprRecord( const ty_node = try transType(rp, ty, loc); const init_count = ZigClangInitListExpr_getNumInits(expr); - var init_node = try transCreateNodeStructInitializer(rp.c, ty_node); + var field_inits = std.ArrayList(*ast.Node).init(rp.c.gpa); + defer field_inits.deinit(); var init_i: c_uint = 0; var it = ZigClangRecordDecl_field_begin(record_def); @@ -2091,13 +2092,19 @@ fn transInitListExprRecord( .expr = try transExpr(rp, scope, elem_expr, .used, .r_value), }; - try init_node.op.StructInitializer.push(&field_init_node.base); + try field_inits.append(&field_init_node.base); _ = try appendToken(rp.c, .Comma, ","); } - init_node.rtoken = try appendToken(rp.c, .RBrace, "}"); + _ = try appendToken(c, .LBrace, "{"); - return &init_node.base; + const node = try rp.c.arena.create(ast.Node.StructInitializer); + node.* = .{ + .lhs = ty, + .rtoken = try appendToken(rp.c, .RBrace, "}"), + .list = try rp.c.arena.dupe(*ast.Node, field_inits.items), + }; + return &node.base; } fn transCreateNodeArrayType( @@ -4069,7 +4076,7 @@ fn transCreateNodeArrayInitializer(c: *Context, ty: *ast.Node) !*ast.Node.Suffix _ = try appendToken(c, .LBrace, "{"); const node = try c.arena.create(ast.Node.SuffixOp); node.* = .{ - .lhs = .{ .node = ty }, + .lhs = ty, .op = .{ .ArrayInitializer = ast.Node.SuffixOp.Op.InitList{}, }, @@ -4078,19 +4085,6 @@ fn transCreateNodeArrayInitializer(c: *Context, ty: *ast.Node) !*ast.Node.Suffix return node; } -fn transCreateNodeStructInitializer(c: *Context, ty: *ast.Node) !*ast.Node.SuffixOp { - _ = try appendToken(c, .LBrace, "{"); - const node = try c.arena.create(ast.Node.SuffixOp); - node.* = .{ - .lhs = .{ .node = ty }, - .op = .{ - .StructInitializer = ast.Node.SuffixOp.Op.InitList{}, - }, - .rtoken = undefined, // set after appending values - }; - return node; -} - fn transCreateNodeInt(c: *Context, int: var) !*ast.Node { const token = try appendTokenFmt(c, .IntegerLiteral, "{}", .{int}); const node = try c.arena.create(ast.Node.IntegerLiteral); @@ -4405,7 +4399,7 @@ fn transCreateNodeShiftOp( fn transCreateNodePtrDeref(c: *Context, lhs: *ast.Node) !*ast.Node { const node = try c.arena.create(ast.Node.SuffixOp); node.* = .{ - .lhs = .{ .node = lhs }, + .lhs = lhs, .op = .Deref, .rtoken = try appendToken(c, .PeriodAsterisk, ".*"), }; @@ -4416,7 +4410,7 @@ fn transCreateNodeArrayAccess(c: *Context, lhs: *ast.Node) !*ast.Node.SuffixOp { _ = try appendToken(c, .LBrace, "["); const node = try c.arena.create(ast.Node.SuffixOp); node.* = .{ - .lhs = .{ .node = lhs }, + .lhs = lhs, .op = .{ .ArrayAccess = undefined, }, |
