| ... | ... | @@ -2054,7 +2054,8 @@ fn transInitListExprRecord( |
| 2054 | 2054 | |
| 2055 | 2055 | const ty_node = try transType(rp, ty, loc); |
| 2056 | 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 | 2060 | var init_i: c_uint = 0; |
| 2060 | 2061 | var it = ZigClangRecordDecl_field_begin(record_def); |
| ... | ... | @@ -2091,13 +2092,19 @@ fn transInitListExprRecord( |
| 2091 | 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 | 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 | 2110 | fn transCreateNodeArrayType( |
| ... | ... | @@ -4069,7 +4076,7 @@ fn transCreateNodeArrayInitializer(c: *Context, ty: *ast.Node) !*ast.Node.Suffix |
| 4069 | 4076 | _ = try appendToken(c, .LBrace, "{"); |
| 4070 | 4077 | const node = try c.arena.create(ast.Node.SuffixOp); |
| 4071 | 4078 | node.* = .{ |
| 4072 | | .lhs = .{ .node = ty }, |
| 4079 | .lhs = ty, |
| 4073 | 4080 | .op = .{ |
| 4074 | 4081 | .ArrayInitializer = ast.Node.SuffixOp.Op.InitList{}, |
| 4075 | 4082 | }, |
| ... | ... | @@ -4078,19 +4085,6 @@ fn transCreateNodeArrayInitializer(c: *Context, ty: *ast.Node) !*ast.Node.Suffix |
| 4078 | 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 | 4088 | fn transCreateNodeInt(c: *Context, int: var) !*ast.Node { |
| 4095 | 4089 | const token = try appendTokenFmt(c, .IntegerLiteral, "{}", .{int}); |
| 4096 | 4090 | const node = try c.arena.create(ast.Node.IntegerLiteral); |
| ... | ... | @@ -4405,7 +4399,7 @@ fn transCreateNodeShiftOp( |
| 4405 | 4399 | fn transCreateNodePtrDeref(c: *Context, lhs: *ast.Node) !*ast.Node { |
| 4406 | 4400 | const node = try c.arena.create(ast.Node.SuffixOp); |
| 4407 | 4401 | node.* = .{ |
| 4408 | | .lhs = .{ .node = lhs }, |
| 4402 | .lhs = lhs, |
| 4409 | 4403 | .op = .Deref, |
| 4410 | 4404 | .rtoken = try appendToken(c, .PeriodAsterisk, ".*"), |
| 4411 | 4405 | }; |
| ... | ... | @@ -4416,7 +4410,7 @@ fn transCreateNodeArrayAccess(c: *Context, lhs: *ast.Node) !*ast.Node.SuffixOp { |
| 4416 | 4410 | _ = try appendToken(c, .LBrace, "["); |
| 4417 | 4411 | const node = try c.arena.create(ast.Node.SuffixOp); |
| 4418 | 4412 | node.* = .{ |
| 4419 | | .lhs = .{ .node = lhs }, |
| 4413 | .lhs = lhs, |
| 4420 | 4414 | .op = .{ |
| 4421 | 4415 | .ArrayAccess = undefined, |
| 4422 | 4416 | }, |