| ... | ... | @@ -5211,21 +5211,26 @@ fn parseCPostfixExpr(c: *Context, m: *MacroCtx, scope: *Scope) ParseError!Node { |
| 5211 | 5211 | } |
| 5212 | 5212 | }, |
| 5213 | 5213 | .LParen => { |
| 5214 | | var args = std.ArrayList(Node).init(c.gpa); |
| 5215 | | defer args.deinit(); |
| 5216 | | while (true) { |
| 5217 | | const arg = try parseCCondExpr(c, m, scope); |
| 5218 | | try args.append(arg); |
| 5219 | | switch (m.next().?) { |
| 5220 | | .Comma => {}, |
| 5221 | | .RParen => break, |
| 5222 | | else => { |
| 5223 | | try m.fail(c, "unable to translate C expr: expected ',' or ')'", .{}); |
| 5224 | | return error.ParseError; |
| 5225 | | }, |
| 5214 | if (m.peek().? == .RParen) { |
| 5215 | m.i += 1; |
| 5216 | node = try Tag.call.create(c.arena, .{ .lhs = node, .args = &[0]Node{} }); |
| 5217 | } else { |
| 5218 | var args = std.ArrayList(Node).init(c.gpa); |
| 5219 | defer args.deinit(); |
| 5220 | while (true) { |
| 5221 | const arg = try parseCCondExpr(c, m, scope); |
| 5222 | try args.append(arg); |
| 5223 | switch (m.next().?) { |
| 5224 | .Comma => {}, |
| 5225 | .RParen => break, |
| 5226 | else => { |
| 5227 | try m.fail(c, "unable to translate C expr: expected ',' or ')'", .{}); |
| 5228 | return error.ParseError; |
| 5229 | }, |
| 5230 | } |
| 5226 | 5231 | } |
| 5232 | node = try Tag.call.create(c.arena, .{ .lhs = node, .args = try c.arena.dupe(Node, args.items) }); |
| 5227 | 5233 | } |
| 5228 | | node = try Tag.call.create(c.arena, .{ .lhs = node, .args = try c.arena.dupe(Node, args.items) }); |
| 5229 | 5234 | }, |
| 5230 | 5235 | .LBrace => { |
| 5231 | 5236 | var init_vals = std.ArrayList(Node).init(c.gpa); |