aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-05-21 00:14:55 -0400
committerAndrew Kelley <andrew@ziglang.org>2020-05-21 00:14:55 -0400
commite694cd265ad762e1db037e191edfa2f0601126a9 (patch)
tree5e53d87037abea98464d5b3b158eedb9bf567f7e
parentd57d9448aa322c1818de110adeb3cc69ac5dbcd9 (diff)
downloadzig-e694cd265ad762e1db037e191edfa2f0601126a9.tar.gz
zig-e694cd265ad762e1db037e191edfa2f0601126a9.zip
more progress on updating translate-c
-rw-r--r--src-self-hosted/translate_c.zig34
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,
},