| ... | @@ -2054,7 +2054,8 @@ fn transInitListExprRecord( | ... | @@ -2054,7 +2054,8 @@ fn transInitListExprRecord( |
| 2054 | | 2054 | |
| 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(); |
| 2058 | | 2059 | |
| 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 | }; |
| 2093 | | 2094 | |
| 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 | } |
| 2097 | | 2098 | |
| 2098 | init_node.rtoken = try appendToken(rp.c, .RBrace, "}"); | 2099 | _ = try appendToken(c, .LBrace, "{"); |
| 2099 | | 2100 | |
| 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 | } |
| 2102 | | 2109 | |
| 2103 | fn transCreateNodeArrayType( | 2110 | fn 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 | } |
| 4080 | | 4087 | |
| 4081 | fn 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 | | | |
| 4094 | fn transCreateNodeInt(c: *Context, int: var) !*ast.Node { | 4088 | fn 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( |
| 4405 | fn transCreateNodePtrDeref(c: *Context, lhs: *ast.Node) !*ast.Node { | 4399 | fn 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 | }, |