Switch old switch / @TagType() to use inferred enums
parent
4708fb23c0
commit
484f8a4cc2
198
std/zig/ast.zig
198
std/zig/ast.zig
|
@ -160,103 +160,101 @@ pub const Error = union(enum) {
|
|||
|
||||
pub fn render(self: *const Error, tokens: *Tree.TokenList, stream: var) !void {
|
||||
switch (self.*) {
|
||||
// TODO https://github.com/ziglang/zig/issues/683
|
||||
@TagType(Error).InvalidToken => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).InvalidAmpersandAmpersand => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedContainerMembers => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedStringLiteral => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedIntegerLiteral => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedPubItem => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedIdentifier => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedStatement => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedVarDeclOrFn => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedVarDecl => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedReturnType => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedAggregateKw => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).UnattachedDocComment => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedEqOrSemi => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedSemiOrLBrace => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedSemiOrElse => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedLabelOrLBrace => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedLBrace => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedColonOrRParen => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedLabelable => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedInlinable => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedAsmOutputReturnOrType => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedCall => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedCallOrFnProto => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedSliceOrRBracket => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExtraAlignQualifier => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExtraConstQualifier => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExtraVolatileQualifier => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExtraAllowZeroQualifier => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedTypeExpr => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedPrimaryTypeExpr => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedParamType => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedExpr => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedPrimaryExpr => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedToken => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedCommaOrEnd => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedParamList => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedPayload => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedBlockOrAssignment => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedBlockOrExpression => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedExprOrAssignment => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedPrefixExpr => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedLoopExpr => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedDerefOrUnwrap => |*x| return x.render(tokens, stream),
|
||||
@TagType(Error).ExpectedSuffixOp => |*x| return x.render(tokens, stream),
|
||||
.InvalidToken => |*x| return x.render(tokens, stream),
|
||||
.InvalidAmpersandAmpersand => |*x| return x.render(tokens, stream),
|
||||
.ExpectedContainerMembers => |*x| return x.render(tokens, stream),
|
||||
.ExpectedStringLiteral => |*x| return x.render(tokens, stream),
|
||||
.ExpectedIntegerLiteral => |*x| return x.render(tokens, stream),
|
||||
.ExpectedPubItem => |*x| return x.render(tokens, stream),
|
||||
.ExpectedIdentifier => |*x| return x.render(tokens, stream),
|
||||
.ExpectedStatement => |*x| return x.render(tokens, stream),
|
||||
.ExpectedVarDeclOrFn => |*x| return x.render(tokens, stream),
|
||||
.ExpectedVarDecl => |*x| return x.render(tokens, stream),
|
||||
.ExpectedReturnType => |*x| return x.render(tokens, stream),
|
||||
.ExpectedAggregateKw => |*x| return x.render(tokens, stream),
|
||||
.UnattachedDocComment => |*x| return x.render(tokens, stream),
|
||||
.ExpectedEqOrSemi => |*x| return x.render(tokens, stream),
|
||||
.ExpectedSemiOrLBrace => |*x| return x.render(tokens, stream),
|
||||
.ExpectedSemiOrElse => |*x| return x.render(tokens, stream),
|
||||
.ExpectedLabelOrLBrace => |*x| return x.render(tokens, stream),
|
||||
.ExpectedLBrace => |*x| return x.render(tokens, stream),
|
||||
.ExpectedColonOrRParen => |*x| return x.render(tokens, stream),
|
||||
.ExpectedLabelable => |*x| return x.render(tokens, stream),
|
||||
.ExpectedInlinable => |*x| return x.render(tokens, stream),
|
||||
.ExpectedAsmOutputReturnOrType => |*x| return x.render(tokens, stream),
|
||||
.ExpectedCall => |*x| return x.render(tokens, stream),
|
||||
.ExpectedCallOrFnProto => |*x| return x.render(tokens, stream),
|
||||
.ExpectedSliceOrRBracket => |*x| return x.render(tokens, stream),
|
||||
.ExtraAlignQualifier => |*x| return x.render(tokens, stream),
|
||||
.ExtraConstQualifier => |*x| return x.render(tokens, stream),
|
||||
.ExtraVolatileQualifier => |*x| return x.render(tokens, stream),
|
||||
.ExtraAllowZeroQualifier => |*x| return x.render(tokens, stream),
|
||||
.ExpectedTypeExpr => |*x| return x.render(tokens, stream),
|
||||
.ExpectedPrimaryTypeExpr => |*x| return x.render(tokens, stream),
|
||||
.ExpectedParamType => |*x| return x.render(tokens, stream),
|
||||
.ExpectedExpr => |*x| return x.render(tokens, stream),
|
||||
.ExpectedPrimaryExpr => |*x| return x.render(tokens, stream),
|
||||
.ExpectedToken => |*x| return x.render(tokens, stream),
|
||||
.ExpectedCommaOrEnd => |*x| return x.render(tokens, stream),
|
||||
.ExpectedParamList => |*x| return x.render(tokens, stream),
|
||||
.ExpectedPayload => |*x| return x.render(tokens, stream),
|
||||
.ExpectedBlockOrAssignment => |*x| return x.render(tokens, stream),
|
||||
.ExpectedBlockOrExpression => |*x| return x.render(tokens, stream),
|
||||
.ExpectedExprOrAssignment => |*x| return x.render(tokens, stream),
|
||||
.ExpectedPrefixExpr => |*x| return x.render(tokens, stream),
|
||||
.ExpectedLoopExpr => |*x| return x.render(tokens, stream),
|
||||
.ExpectedDerefOrUnwrap => |*x| return x.render(tokens, stream),
|
||||
.ExpectedSuffixOp => |*x| return x.render(tokens, stream),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn loc(self: *const Error) TokenIndex {
|
||||
switch (self.*) {
|
||||
// TODO https://github.com/ziglang/zig/issues/683
|
||||
@TagType(Error).InvalidToken => |x| return x.token,
|
||||
@TagType(Error).InvalidAmpersandAmpersand => |x| return x.token,
|
||||
@TagType(Error).ExpectedContainerMembers => |x| return x.token,
|
||||
@TagType(Error).ExpectedStringLiteral => |x| return x.token,
|
||||
@TagType(Error).ExpectedIntegerLiteral => |x| return x.token,
|
||||
@TagType(Error).ExpectedPubItem => |x| return x.token,
|
||||
@TagType(Error).ExpectedIdentifier => |x| return x.token,
|
||||
@TagType(Error).ExpectedStatement => |x| return x.token,
|
||||
@TagType(Error).ExpectedVarDeclOrFn => |x| return x.token,
|
||||
@TagType(Error).ExpectedVarDecl => |x| return x.token,
|
||||
@TagType(Error).ExpectedReturnType => |x| return x.token,
|
||||
@TagType(Error).ExpectedAggregateKw => |x| return x.token,
|
||||
@TagType(Error).UnattachedDocComment => |x| return x.token,
|
||||
@TagType(Error).ExpectedEqOrSemi => |x| return x.token,
|
||||
@TagType(Error).ExpectedSemiOrLBrace => |x| return x.token,
|
||||
@TagType(Error).ExpectedSemiOrElse => |x| return x.token,
|
||||
@TagType(Error).ExpectedLabelOrLBrace => |x| return x.token,
|
||||
@TagType(Error).ExpectedLBrace => |x| return x.token,
|
||||
@TagType(Error).ExpectedColonOrRParen => |x| return x.token,
|
||||
@TagType(Error).ExpectedLabelable => |x| return x.token,
|
||||
@TagType(Error).ExpectedInlinable => |x| return x.token,
|
||||
@TagType(Error).ExpectedAsmOutputReturnOrType => |x| return x.token,
|
||||
@TagType(Error).ExpectedCall => |x| return x.node.firstToken(),
|
||||
@TagType(Error).ExpectedCallOrFnProto => |x| return x.node.firstToken(),
|
||||
@TagType(Error).ExpectedSliceOrRBracket => |x| return x.token,
|
||||
@TagType(Error).ExtraAlignQualifier => |x| return x.token,
|
||||
@TagType(Error).ExtraConstQualifier => |x| return x.token,
|
||||
@TagType(Error).ExtraVolatileQualifier => |x| return x.token,
|
||||
@TagType(Error).ExtraAllowZeroQualifier => |x| return x.token,
|
||||
@TagType(Error).ExpectedTypeExpr => |x| return x.token,
|
||||
@TagType(Error).ExpectedPrimaryTypeExpr => |x| return x.token,
|
||||
@TagType(Error).ExpectedParamType => |x| return x.token,
|
||||
@TagType(Error).ExpectedExpr => |x| return x.token,
|
||||
@TagType(Error).ExpectedPrimaryExpr => |x| return x.token,
|
||||
@TagType(Error).ExpectedToken => |x| return x.token,
|
||||
@TagType(Error).ExpectedCommaOrEnd => |x| return x.token,
|
||||
@TagType(Error).ExpectedParamList => |x| return x.token,
|
||||
@TagType(Error).ExpectedPayload => |x| return x.token,
|
||||
@TagType(Error).ExpectedBlockOrAssignment => |x| return x.token,
|
||||
@TagType(Error).ExpectedBlockOrExpression => |x| return x.token,
|
||||
@TagType(Error).ExpectedExprOrAssignment => |x| return x.token,
|
||||
@TagType(Error).ExpectedPrefixExpr => |x| return x.token,
|
||||
@TagType(Error).ExpectedLoopExpr => |x| return x.token,
|
||||
@TagType(Error).ExpectedDerefOrUnwrap => |x| return x.token,
|
||||
@TagType(Error).ExpectedSuffixOp => |x| return x.token,
|
||||
.InvalidToken => |x| return x.token,
|
||||
.InvalidAmpersandAmpersand => |x| return x.token,
|
||||
.ExpectedContainerMembers => |x| return x.token,
|
||||
.ExpectedStringLiteral => |x| return x.token,
|
||||
.ExpectedIntegerLiteral => |x| return x.token,
|
||||
.ExpectedPubItem => |x| return x.token,
|
||||
.ExpectedIdentifier => |x| return x.token,
|
||||
.ExpectedStatement => |x| return x.token,
|
||||
.ExpectedVarDeclOrFn => |x| return x.token,
|
||||
.ExpectedVarDecl => |x| return x.token,
|
||||
.ExpectedReturnType => |x| return x.token,
|
||||
.ExpectedAggregateKw => |x| return x.token,
|
||||
.UnattachedDocComment => |x| return x.token,
|
||||
.ExpectedEqOrSemi => |x| return x.token,
|
||||
.ExpectedSemiOrLBrace => |x| return x.token,
|
||||
.ExpectedSemiOrElse => |x| return x.token,
|
||||
.ExpectedLabelOrLBrace => |x| return x.token,
|
||||
.ExpectedLBrace => |x| return x.token,
|
||||
.ExpectedColonOrRParen => |x| return x.token,
|
||||
.ExpectedLabelable => |x| return x.token,
|
||||
.ExpectedInlinable => |x| return x.token,
|
||||
.ExpectedAsmOutputReturnOrType => |x| return x.token,
|
||||
.ExpectedCall => |x| return x.node.firstToken(),
|
||||
.ExpectedCallOrFnProto => |x| return x.node.firstToken(),
|
||||
.ExpectedSliceOrRBracket => |x| return x.token,
|
||||
.ExtraAlignQualifier => |x| return x.token,
|
||||
.ExtraConstQualifier => |x| return x.token,
|
||||
.ExtraVolatileQualifier => |x| return x.token,
|
||||
.ExtraAllowZeroQualifier => |x| return x.token,
|
||||
.ExpectedTypeExpr => |x| return x.token,
|
||||
.ExpectedPrimaryTypeExpr => |x| return x.token,
|
||||
.ExpectedParamType => |x| return x.token,
|
||||
.ExpectedExpr => |x| return x.token,
|
||||
.ExpectedPrimaryExpr => |x| return x.token,
|
||||
.ExpectedToken => |x| return x.token,
|
||||
.ExpectedCommaOrEnd => |x| return x.token,
|
||||
.ExpectedParamList => |x| return x.token,
|
||||
.ExpectedPayload => |x| return x.token,
|
||||
.ExpectedBlockOrAssignment => |x| return x.token,
|
||||
.ExpectedBlockOrExpression => |x| return x.token,
|
||||
.ExpectedExprOrAssignment => |x| return x.token,
|
||||
.ExpectedPrefixExpr => |x| return x.token,
|
||||
.ExpectedLoopExpr => |x| return x.token,
|
||||
.ExpectedDerefOrUnwrap => |x| return x.token,
|
||||
.ExpectedSuffixOp => |x| return x.token,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1712,15 +1710,15 @@ pub const Node = struct {
|
|||
i -= 1;
|
||||
|
||||
switch (self.op) {
|
||||
@TagType(Op).Call => |*call_info| {
|
||||
.Call => |*call_info| {
|
||||
if (i < call_info.params.len) return call_info.params.at(i).*;
|
||||
i -= call_info.params.len;
|
||||
},
|
||||
Op.ArrayAccess => |index_expr| {
|
||||
.ArrayAccess => |index_expr| {
|
||||
if (i < 1) return index_expr;
|
||||
i -= 1;
|
||||
},
|
||||
@TagType(Op).Slice => |range| {
|
||||
.Slice => |range| {
|
||||
if (i < 1) return range.start;
|
||||
i -= 1;
|
||||
|
||||
|
@ -1729,16 +1727,16 @@ pub const Node = struct {
|
|||
i -= 1;
|
||||
}
|
||||
},
|
||||
Op.ArrayInitializer => |*exprs| {
|
||||
.ArrayInitializer => |*exprs| {
|
||||
if (i < exprs.len) return exprs.at(i).*;
|
||||
i -= exprs.len;
|
||||
},
|
||||
Op.StructInitializer => |*fields| {
|
||||
.StructInitializer => |*fields| {
|
||||
if (i < fields.len) return fields.at(i).*;
|
||||
i -= fields.len;
|
||||
},
|
||||
Op.UnwrapOptional,
|
||||
Op.Deref,
|
||||
.UnwrapOptional,
|
||||
.Deref,
|
||||
=> {},
|
||||
}
|
||||
|
||||
|
@ -1747,7 +1745,7 @@ pub const Node = struct {
|
|||
|
||||
pub fn firstToken(self: *const SuffixOp) TokenIndex {
|
||||
switch (self.op) {
|
||||
@TagType(Op).Call => |*call_info| if (call_info.async_attr) |async_attr| return async_attr.firstToken(),
|
||||
.Call => |*call_info| if (call_info.async_attr) |async_attr| return async_attr.firstToken(),
|
||||
else => {},
|
||||
}
|
||||
return self.lhs.firstToken();
|
||||
|
|
Loading…
Reference in New Issue