@ enum type
This commit is contained in:
@@ -389,6 +389,12 @@ pub const Parser = struct {
|
||||
self.advance();
|
||||
}
|
||||
|
||||
// Check for optional backing type: enum u8 { ... } or enum flags u32 { ... }
|
||||
var backing_type: ?*Node = null;
|
||||
if (self.current.tag != .l_brace) {
|
||||
backing_type = try self.parseTypeExpr();
|
||||
}
|
||||
|
||||
try self.expect(.l_brace);
|
||||
var variant_names = std.ArrayList([]const u8).empty;
|
||||
var variant_types = std.ArrayList(?*Node).empty;
|
||||
@@ -438,6 +444,7 @@ pub const Parser = struct {
|
||||
.variant_types = if (has_any_type) try variant_types.toOwnedSlice(self.allocator) else &.{},
|
||||
.is_flags = is_flags,
|
||||
.variant_values = if (has_any_value) try variant_values.toOwnedSlice(self.allocator) else &.{},
|
||||
.backing_type = backing_type,
|
||||
} });
|
||||
}
|
||||
|
||||
@@ -974,7 +981,7 @@ pub const Parser = struct {
|
||||
const operand = try self.parseUnary();
|
||||
return try self.createNode(start, .{ .unary_op = .{ .op = .xx, .operand = operand } });
|
||||
}
|
||||
if (self.current.tag == .ampersand) {
|
||||
if (self.current.tag == .at) {
|
||||
const start = self.current.loc.start;
|
||||
self.advance();
|
||||
const operand = try self.parseUnary();
|
||||
|
||||
Reference in New Issue
Block a user