@@ -61,6 +61,7 @@ pub const Node = extern union {
6161 warning ,
6262 @"struct" ,
6363 @"union" ,
64+ @"enum" ,
6465 @"comptime" ,
6566 @"defer" ,
6667 array_init ,
@@ -360,6 +361,7 @@ pub const Node = extern union {
360361 .var_decl = > Payload .VarDecl ,
361362 .func = > Payload .Func ,
362363 .@"struct" , .@"union" = > Payload .Record ,
364+ .@"enum" = > Payload .Enum ,
363365 .tuple = > Payload .TupleInit ,
364366 .container_init = > Payload .ContainerInit ,
365367 .container_init_dot = > Payload .ContainerInitDot ,
@@ -582,6 +584,11 @@ pub const Payload = struct {
582584 };
583585 };
584586
587+ pub const Enum = struct {
588+ base : Payload ,
589+ data : []const []const u8 ,
590+ };
591+
585592 pub const TupleInit = struct {
586593 base : Payload ,
587594 data : []Node ,
@@ -1935,6 +1942,40 @@ fn renderNode(c: *Context, node: Node) Allocator.Error!NodeIndex {
19351942 return renderFieldAccess (c , lhs , payload .field_name );
19361943 },
19371944 .@"struct" , .@"union" = > return renderRecord (c , node ),
1945+ .@"enum" = > {
1946+ const payload = node .castTag (.@"enum" ).? .data ;
1947+
1948+ const enum_tok = try c .addToken (.keyword_enum , "enum" );
1949+ _ = try c .addToken (.l_brace , "{" );
1950+ const members = try c .gpa .alloc (NodeIndex , payload .len );
1951+ defer c .gpa .free (members );
1952+
1953+ for (payload , members ) | field , * member | {
1954+ const name_tok = try c .addIdentifier (field );
1955+
1956+ member .* = try c .addNode (.{
1957+ .tag = .container_field_init ,
1958+ .main_token = name_tok ,
1959+ .data = .{
1960+ .lhs = 0 ,
1961+ .rhs = 0 ,
1962+ },
1963+ });
1964+ _ = try c .addToken (.comma , "," );
1965+ }
1966+
1967+ _ = try c .addToken (.r_brace , "}" );
1968+
1969+ const span = try c .listToSpan (members );
1970+ return c .addNode (.{
1971+ .tag = .container_decl_trailing ,
1972+ .main_token = enum_tok ,
1973+ .data = .{
1974+ .lhs = span .start ,
1975+ .rhs = span .end ,
1976+ },
1977+ });
1978+ },
19381979 .enum_constant = > {
19391980 const payload = node .castTag (.enum_constant ).? .data ;
19401981
@@ -2441,6 +2482,7 @@ fn renderNodeGrouped(c: *Context, node: Node) !NodeIndex {
24412482 .@"if" ,
24422483 .@"struct" ,
24432484 .@"union" ,
2485+ .@"enum" ,
24442486 .array_init ,
24452487 .vector_zero_init ,
24462488 .tuple ,
0 commit comments