@@ -576,6 +576,7 @@ pub const Payload = struct {
576
576
name : []const u8 ,
577
577
type : Node ,
578
578
alignment : ? c_uint ,
579
+ default_value : ? Node ,
579
580
};
580
581
};
581
582
@@ -2095,34 +2096,47 @@ fn renderRecord(c: *Context, node: Node) !NodeIndex {
2095
2096
_ = try c .addToken (.colon , ":" );
2096
2097
const type_expr = try renderNode (c , field .type );
2097
2098
2098
- const alignment = field .alignment orelse {
2099
- members [i ] = try c .addNode (.{
2100
- .tag = .container_field_init ,
2101
- .main_token = name_tok ,
2102
- .data = .{
2103
- .lhs = type_expr ,
2104
- .rhs = 0 ,
2105
- },
2099
+ const align_expr = if (field .alignment ) | alignment | blk : {
2100
+ _ = try c .addToken (.keyword_align , "align" );
2101
+ _ = try c .addToken (.l_paren , "(" );
2102
+ const align_expr = try c .addNode (.{
2103
+ .tag = .number_literal ,
2104
+ .main_token = try c .addTokenFmt (.number_literal , "{d}" , .{alignment }),
2105
+ .data = undefined ,
2106
2106
});
2107
- _ = try c .addToken (.comma , "," );
2108
- continue ;
2109
- };
2110
- _ = try c .addToken (.keyword_align , "align" );
2111
- _ = try c .addToken (.l_paren , "(" );
2112
- const align_expr = try c .addNode (.{
2113
- .tag = .number_literal ,
2114
- .main_token = try c .addTokenFmt (.number_literal , "{d}" , .{alignment }),
2115
- .data = undefined ,
2116
- });
2117
- _ = try c .addToken (.r_paren , ")" );
2107
+ _ = try c .addToken (.r_paren , ")" );
2108
+ break :blk align_expr ;
2109
+ } else 0 ;
2118
2110
2119
- members [i ] = try c .addNode (.{
2111
+ const value_expr = if (field .default_value ) | value | blk : {
2112
+ _ = try c .addToken (.equal , "=" );
2113
+ break :blk try renderNode (c , value );
2114
+ } else 0 ;
2115
+
2116
+ members [i ] = try c .addNode (if (align_expr == 0 ) .{
2117
+ .tag = .container_field_init ,
2118
+ .main_token = name_tok ,
2119
+ .data = .{
2120
+ .lhs = type_expr ,
2121
+ .rhs = value_expr ,
2122
+ },
2123
+ } else if (value_expr == 0 ) .{
2120
2124
.tag = .container_field_align ,
2121
2125
.main_token = name_tok ,
2122
2126
.data = .{
2123
2127
.lhs = type_expr ,
2124
2128
.rhs = align_expr ,
2125
2129
},
2130
+ } else .{
2131
+ .tag = .container_field ,
2132
+ .main_token = name_tok ,
2133
+ .data = .{
2134
+ .lhs = type_expr ,
2135
+ .rhs = try c .addExtra (std.zig.Ast.Node.ContainerField {
2136
+ .align_expr = align_expr ,
2137
+ .value_expr = value_expr ,
2138
+ }),
2139
+ },
2126
2140
});
2127
2141
_ = try c .addToken (.comma , "," );
2128
2142
}
0 commit comments