authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-05-21 00:14:55-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-05-21 00:14:55-04:00
loge694cd265ad762e1db037e191edfa2f0601126a9
tree5e53d87037abea98464d5b3b158eedb9bf567f7e
parentd57d9448aa322c1818de110adeb3cc69ac5dbcd9

more progress on updating translate-c


1 files changed, 14 insertions(+), 20 deletions(-)

src-self-hosted/translate_c.zig+14-20
......@@ -2054,7 +2054,8 @@ fn transInitListExprRecord(
20542054
20552055 const ty_node = try transType(rp, ty, loc);
20562056 const init_count = ZigClangInitListExpr_getNumInits(expr);
2057 var init_node = try transCreateNodeStructInitializer(rp.c, ty_node);
2057 var field_inits = std.ArrayList(*ast.Node).init(rp.c.gpa);
2058 defer field_inits.deinit();
20582059
20592060 var init_i: c_uint = 0;
20602061 var it = ZigClangRecordDecl_field_begin(record_def);
......@@ -2091,13 +2092,19 @@ fn transInitListExprRecord(
20912092 .expr = try transExpr(rp, scope, elem_expr, .used, .r_value),
20922093 };
20932094
2094 try init_node.op.StructInitializer.push(&field_init_node.base);
2095 try field_inits.append(&field_init_node.base);
20952096 _ = try appendToken(rp.c, .Comma, ",");
20962097 }
20972098
2098 init_node.rtoken = try appendToken(rp.c, .RBrace, "}");
2099 _ = try appendToken(c, .LBrace, "{");
20992100
2100 return &init_node.base;
2101 const node = try rp.c.arena.create(ast.Node.StructInitializer);
2102 node.* = .{
2103 .lhs = ty,
2104 .rtoken = try appendToken(rp.c, .RBrace, "}"),
2105 .list = try rp.c.arena.dupe(*ast.Node, field_inits.items),
2106 };
2107 return &node.base;
21012108}
21022109
21032110fn transCreateNodeArrayType(
......@@ -4069,7 +4076,7 @@ fn transCreateNodeArrayInitializer(c: *Context, ty: *ast.Node) !*ast.Node.Suffix
40694076 _ = try appendToken(c, .LBrace, "{");
40704077 const node = try c.arena.create(ast.Node.SuffixOp);
40714078 node.* = .{
4072 .lhs = .{ .node = ty },
4079 .lhs = ty,
40734080 .op = .{
40744081 .ArrayInitializer = ast.Node.SuffixOp.Op.InitList{},
40754082 },
......@@ -4078,19 +4085,6 @@ fn transCreateNodeArrayInitializer(c: *Context, ty: *ast.Node) !*ast.Node.Suffix
40784085 return node;
40794086}
40804087
4081fn transCreateNodeStructInitializer(c: *Context, ty: *ast.Node) !*ast.Node.SuffixOp {
4082 _ = try appendToken(c, .LBrace, "{");
4083 const node = try c.arena.create(ast.Node.SuffixOp);
4084 node.* = .{
4085 .lhs = .{ .node = ty },
4086 .op = .{
4087 .StructInitializer = ast.Node.SuffixOp.Op.InitList{},
4088 },
4089 .rtoken = undefined, // set after appending values
4090 };
4091 return node;
4092}
4093
40944088fn transCreateNodeInt(c: *Context, int: var) !*ast.Node {
40954089 const token = try appendTokenFmt(c, .IntegerLiteral, "{}", .{int});
40964090 const node = try c.arena.create(ast.Node.IntegerLiteral);
......@@ -4405,7 +4399,7 @@ fn transCreateNodeShiftOp(
44054399fn transCreateNodePtrDeref(c: *Context, lhs: *ast.Node) !*ast.Node {
44064400 const node = try c.arena.create(ast.Node.SuffixOp);
44074401 node.* = .{
4408 .lhs = .{ .node = lhs },
4402 .lhs = lhs,
44094403 .op = .Deref,
44104404 .rtoken = try appendToken(c, .PeriodAsterisk, ".*"),
44114405 };
......@@ -4416,7 +4410,7 @@ fn transCreateNodeArrayAccess(c: *Context, lhs: *ast.Node) !*ast.Node.SuffixOp {
44164410 _ = try appendToken(c, .LBrace, "[");
44174411 const node = try c.arena.create(ast.Node.SuffixOp);
44184412 node.* = .{
4419 .lhs = .{ .node = lhs },
4413 .lhs = lhs,
44204414 .op = .{
44214415 .ArrayAccess = undefined,
44224416 },