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(...@@ -2054,7 +2054,8 @@ fn transInitListExprRecord(
20542054
2055 const ty_node = try transType(rp, ty, loc);2055 const ty_node = try transType(rp, ty, loc);
2056 const init_count = ZigClangInitListExpr_getNumInits(expr);2056 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
2059 var init_i: c_uint = 0;2060 var init_i: c_uint = 0;
2060 var it = ZigClangRecordDecl_field_begin(record_def);2061 var it = ZigClangRecordDecl_field_begin(record_def);
...@@ -2091,13 +2092,19 @@ fn transInitListExprRecord(...@@ -2091,13 +2092,19 @@ fn transInitListExprRecord(
2091 .expr = try transExpr(rp, scope, elem_expr, .used, .r_value),2092 .expr = try transExpr(rp, scope, elem_expr, .used, .r_value),
2092 };2093 };
20932094
2094 try init_node.op.StructInitializer.push(&field_init_node.base);2095 try field_inits.append(&field_init_node.base);
2095 _ = try appendToken(rp.c, .Comma, ",");2096 _ = try appendToken(rp.c, .Comma, ",");
2096 }2097 }
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;
2101}2108}
21022109
2103fn transCreateNodeArrayType(2110fn transCreateNodeArrayType(
...@@ -4069,7 +4076,7 @@ fn transCreateNodeArrayInitializer(c: *Context, ty: *ast.Node) !*ast.Node.Suffix...@@ -4069,7 +4076,7 @@ fn transCreateNodeArrayInitializer(c: *Context, ty: *ast.Node) !*ast.Node.Suffix
4069 _ = try appendToken(c, .LBrace, "{");4076 _ = try appendToken(c, .LBrace, "{");
4070 const node = try c.arena.create(ast.Node.SuffixOp);4077 const node = try c.arena.create(ast.Node.SuffixOp);
4071 node.* = .{4078 node.* = .{
4072 .lhs = .{ .node = ty },4079 .lhs = ty,
4073 .op = .{4080 .op = .{
4074 .ArrayInitializer = ast.Node.SuffixOp.Op.InitList{},4081 .ArrayInitializer = ast.Node.SuffixOp.Op.InitList{},
4075 },4082 },
...@@ -4078,19 +4085,6 @@ fn transCreateNodeArrayInitializer(c: *Context, ty: *ast.Node) !*ast.Node.Suffix...@@ -4078,19 +4085,6 @@ fn transCreateNodeArrayInitializer(c: *Context, ty: *ast.Node) !*ast.Node.Suffix
4078 return node;4085 return node;
4079}4086}
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
4094fn transCreateNodeInt(c: *Context, int: var) !*ast.Node {4088fn transCreateNodeInt(c: *Context, int: var) !*ast.Node {
4095 const token = try appendTokenFmt(c, .IntegerLiteral, "{}", .{int});4089 const token = try appendTokenFmt(c, .IntegerLiteral, "{}", .{int});
4096 const node = try c.arena.create(ast.Node.IntegerLiteral);4090 const node = try c.arena.create(ast.Node.IntegerLiteral);
...@@ -4405,7 +4399,7 @@ fn transCreateNodeShiftOp(...@@ -4405,7 +4399,7 @@ fn transCreateNodeShiftOp(
4405fn transCreateNodePtrDeref(c: *Context, lhs: *ast.Node) !*ast.Node {4399fn transCreateNodePtrDeref(c: *Context, lhs: *ast.Node) !*ast.Node {
4406 const node = try c.arena.create(ast.Node.SuffixOp);4400 const node = try c.arena.create(ast.Node.SuffixOp);
4407 node.* = .{4401 node.* = .{
4408 .lhs = .{ .node = lhs },4402 .lhs = lhs,
4409 .op = .Deref,4403 .op = .Deref,
4410 .rtoken = try appendToken(c, .PeriodAsterisk, ".*"),4404 .rtoken = try appendToken(c, .PeriodAsterisk, ".*"),
4411 };4405 };
...@@ -4416,7 +4410,7 @@ fn transCreateNodeArrayAccess(c: *Context, lhs: *ast.Node) !*ast.Node.SuffixOp {...@@ -4416,7 +4410,7 @@ fn transCreateNodeArrayAccess(c: *Context, lhs: *ast.Node) !*ast.Node.SuffixOp {
4416 _ = try appendToken(c, .LBrace, "[");4410 _ = try appendToken(c, .LBrace, "[");
4417 const node = try c.arena.create(ast.Node.SuffixOp);4411 const node = try c.arena.create(ast.Node.SuffixOp);
4418 node.* = .{4412 node.* = .{
4419 .lhs = .{ .node = lhs },4413 .lhs = lhs,
4420 .op = .{4414 .op = .{
4421 .ArrayAccess = undefined,4415 .ArrayAccess = undefined,
4422 },4416 },