| ... | ... | @@ -238,8 +238,8 @@ pub const Parser = struct { |
| 238 | 238 | |
| 239 | 239 | ExprListItemOrEnd: ExprListCtx, |
| 240 | 240 | ExprListCommaOrEnd: ExprListCtx, |
| 241 | | FieldInitListItemOrEnd: ListSave(&ast.Node.FieldInitializer), |
| 242 | | FieldInitListCommaOrEnd: ListSave(&ast.Node.FieldInitializer), |
| 241 | FieldInitListItemOrEnd: ListSave(&ast.Node), |
| 242 | FieldInitListCommaOrEnd: ListSave(&ast.Node), |
| 243 | 243 | FieldListCommaOrEnd: &ast.Node.ContainerDecl, |
| 244 | 244 | FieldInitValue: OptionalCtx, |
| 245 | 245 | ErrorTagListItemOrEnd: ListSave(&ast.Node), |
| ... | ... | @@ -1510,6 +1510,10 @@ pub const Parser = struct { |
| 1510 | 1510 | } |
| 1511 | 1511 | }, |
| 1512 | 1512 | State.FieldInitListItemOrEnd => |list_state| { |
| 1513 | while (try self.eatLineComment(arena)) |line_comment| { |
| 1514 | try list_state.list.append(&line_comment.base); |
| 1515 | } |
| 1516 | |
| 1513 | 1517 | if (self.eatToken(Token.Id.RBrace)) |rbrace| { |
| 1514 | 1518 | *list_state.ptr = rbrace; |
| 1515 | 1519 | continue; |
| ... | ... | @@ -1524,7 +1528,7 @@ pub const Parser = struct { |
| 1524 | 1528 | .name_token = undefined, |
| 1525 | 1529 | .expr = undefined, |
| 1526 | 1530 | }); |
| 1527 | | try list_state.list.append(node); |
| 1531 | try list_state.list.append(&node.base); |
| 1528 | 1532 | |
| 1529 | 1533 | stack.append(State { .FieldInitListCommaOrEnd = list_state }) catch unreachable; |
| 1530 | 1534 | try stack.append(State { .Expression = OptionalCtx{ .Required = &node.expr } }); |
| ... | ... | @@ -2346,7 +2350,7 @@ pub const Parser = struct { |
| 2346 | 2350 | .base = undefined, |
| 2347 | 2351 | .lhs = lhs, |
| 2348 | 2352 | .op = ast.Node.SuffixOp.Op { |
| 2349 | | .StructInitializer = ArrayList(&ast.Node.FieldInitializer).init(arena), |
| 2353 | .StructInitializer = ArrayList(&ast.Node).init(arena), |
| 2350 | 2354 | }, |
| 2351 | 2355 | .rtoken = undefined, |
| 2352 | 2356 | } |
| ... | ... | @@ -2354,7 +2358,7 @@ pub const Parser = struct { |
| 2354 | 2358 | stack.append(State { .CurlySuffixExpressionEnd = opt_ctx.toRequired() }) catch unreachable; |
| 2355 | 2359 | try stack.append(State { .IfToken = Token.Id.LBrace }); |
| 2356 | 2360 | try stack.append(State { |
| 2357 | | .FieldInitListItemOrEnd = ListSave(&ast.Node.FieldInitializer) { |
| 2361 | .FieldInitListItemOrEnd = ListSave(&ast.Node) { |
| 2358 | 2362 | .list = &node.op.StructInitializer, |
| 2359 | 2363 | .ptr = &node.rtoken, |
| 2360 | 2364 | } |
| ... | ... | @@ -3452,7 +3456,6 @@ pub const Parser = struct { |
| 3452 | 3456 | Expression: &ast.Node, |
| 3453 | 3457 | VarDecl: &ast.Node.VarDecl, |
| 3454 | 3458 | Statement: &ast.Node, |
| 3455 | | FieldInitializer: &ast.Node.FieldInitializer, |
| 3456 | 3459 | PrintIndent, |
| 3457 | 3460 | Indent: usize, |
| 3458 | 3461 | PrintSameLineComment: ?&Token, |
| ... | ... | @@ -3584,12 +3587,6 @@ pub const Parser = struct { |
| 3584 | 3587 | } |
| 3585 | 3588 | }, |
| 3586 | 3589 | |
| 3587 | | RenderState.FieldInitializer => |field_init| { |
| 3588 | | try stream.print(".{}", self.tokenizer.getTokenSlice(field_init.name_token)); |
| 3589 | | try stream.print(" = "); |
| 3590 | | try stack.append(RenderState { .Expression = field_init.expr }); |
| 3591 | | }, |
| 3592 | | |
| 3593 | 3590 | RenderState.VarDecl => |var_decl| { |
| 3594 | 3591 | try stack.append(RenderState { .Text = ";" }); |
| 3595 | 3592 | if (var_decl.init_node) |init_node| { |
| ... | ... | @@ -3888,7 +3885,7 @@ pub const Parser = struct { |
| 3888 | 3885 | const field_init = field_inits.at(0); |
| 3889 | 3886 | |
| 3890 | 3887 | try stack.append(RenderState { .Text = " }" }); |
| 3891 | | try stack.append(RenderState { .FieldInitializer = field_init }); |
| 3888 | try stack.append(RenderState { .Expression = field_init }); |
| 3892 | 3889 | try stack.append(RenderState { .Text = "{ " }); |
| 3893 | 3890 | try stack.append(RenderState { .Expression = suffix_op.lhs }); |
| 3894 | 3891 | continue; |
| ... | ... | @@ -3896,13 +3893,26 @@ pub const Parser = struct { |
| 3896 | 3893 | try stack.append(RenderState { .Text = "}"}); |
| 3897 | 3894 | try stack.append(RenderState.PrintIndent); |
| 3898 | 3895 | try stack.append(RenderState { .Indent = indent }); |
| 3896 | try stack.append(RenderState { .Text = "\n" }); |
| 3899 | 3897 | var i = field_inits.len; |
| 3900 | 3898 | while (i != 0) { |
| 3901 | 3899 | i -= 1; |
| 3902 | 3900 | const field_init = field_inits.at(i); |
| 3903 | | try stack.append(RenderState { .Text = ",\n" }); |
| 3904 | | try stack.append(RenderState { .FieldInitializer = field_init }); |
| 3901 | if (field_init.id != ast.Node.Id.LineComment) { |
| 3902 | try stack.append(RenderState { .Text = "," }); |
| 3903 | } |
| 3904 | try stack.append(RenderState { .Expression = field_init }); |
| 3905 | 3905 | try stack.append(RenderState.PrintIndent); |
| 3906 | if (i != 0) { |
| 3907 | try stack.append(RenderState { .Text = blk: { |
| 3908 | const prev_node = field_inits.at(i - 1); |
| 3909 | const loc = self.tokenizer.getTokenLocation(prev_node.lastToken().end, field_init.firstToken()); |
| 3910 | if (loc.line >= 2) { |
| 3911 | break :blk "\n\n"; |
| 3912 | } |
| 3913 | break :blk "\n"; |
| 3914 | }}); |
| 3915 | } |
| 3906 | 3916 | } |
| 3907 | 3917 | try stack.append(RenderState { .Indent = indent + indent_delta }); |
| 3908 | 3918 | try stack.append(RenderState { .Text = "{\n"}); |