| ... | @@ -160,103 +160,101 @@ pub const Error = union(enum) { | ... | @@ -160,103 +160,101 @@ pub const Error = union(enum) { |
| 160 | | 160 | |
| 161 | pub fn render(self: *const Error, tokens: *Tree.TokenList, stream: var) !void { | 161 | pub fn render(self: *const Error, tokens: *Tree.TokenList, stream: var) !void { |
| 162 | switch (self.*) { | 162 | switch (self.*) { |
| 163 | // TODO https://github.com/ziglang/zig/issues/683 | 163 | .InvalidToken => |*x| return x.render(tokens, stream), |
| 164 | @TagType(Error).InvalidToken => |*x| return x.render(tokens, stream), | 164 | .InvalidAmpersandAmpersand => |*x| return x.render(tokens, stream), |
| 165 | @TagType(Error).InvalidAmpersandAmpersand => |*x| return x.render(tokens, stream), | 165 | .ExpectedContainerMembers => |*x| return x.render(tokens, stream), |
| 166 | @TagType(Error).ExpectedContainerMembers => |*x| return x.render(tokens, stream), | 166 | .ExpectedStringLiteral => |*x| return x.render(tokens, stream), |
| 167 | @TagType(Error).ExpectedStringLiteral => |*x| return x.render(tokens, stream), | 167 | .ExpectedIntegerLiteral => |*x| return x.render(tokens, stream), |
| 168 | @TagType(Error).ExpectedIntegerLiteral => |*x| return x.render(tokens, stream), | 168 | .ExpectedPubItem => |*x| return x.render(tokens, stream), |
| 169 | @TagType(Error).ExpectedPubItem => |*x| return x.render(tokens, stream), | 169 | .ExpectedIdentifier => |*x| return x.render(tokens, stream), |
| 170 | @TagType(Error).ExpectedIdentifier => |*x| return x.render(tokens, stream), | 170 | .ExpectedStatement => |*x| return x.render(tokens, stream), |
| 171 | @TagType(Error).ExpectedStatement => |*x| return x.render(tokens, stream), | 171 | .ExpectedVarDeclOrFn => |*x| return x.render(tokens, stream), |
| 172 | @TagType(Error).ExpectedVarDeclOrFn => |*x| return x.render(tokens, stream), | 172 | .ExpectedVarDecl => |*x| return x.render(tokens, stream), |
| 173 | @TagType(Error).ExpectedVarDecl => |*x| return x.render(tokens, stream), | 173 | .ExpectedReturnType => |*x| return x.render(tokens, stream), |
| 174 | @TagType(Error).ExpectedReturnType => |*x| return x.render(tokens, stream), | 174 | .ExpectedAggregateKw => |*x| return x.render(tokens, stream), |
| 175 | @TagType(Error).ExpectedAggregateKw => |*x| return x.render(tokens, stream), | 175 | .UnattachedDocComment => |*x| return x.render(tokens, stream), |
| 176 | @TagType(Error).UnattachedDocComment => |*x| return x.render(tokens, stream), | 176 | .ExpectedEqOrSemi => |*x| return x.render(tokens, stream), |
| 177 | @TagType(Error).ExpectedEqOrSemi => |*x| return x.render(tokens, stream), | 177 | .ExpectedSemiOrLBrace => |*x| return x.render(tokens, stream), |
| 178 | @TagType(Error).ExpectedSemiOrLBrace => |*x| return x.render(tokens, stream), | 178 | .ExpectedSemiOrElse => |*x| return x.render(tokens, stream), |
| 179 | @TagType(Error).ExpectedSemiOrElse => |*x| return x.render(tokens, stream), | 179 | .ExpectedLabelOrLBrace => |*x| return x.render(tokens, stream), |
| 180 | @TagType(Error).ExpectedLabelOrLBrace => |*x| return x.render(tokens, stream), | 180 | .ExpectedLBrace => |*x| return x.render(tokens, stream), |
| 181 | @TagType(Error).ExpectedLBrace => |*x| return x.render(tokens, stream), | 181 | .ExpectedColonOrRParen => |*x| return x.render(tokens, stream), |
| 182 | @TagType(Error).ExpectedColonOrRParen => |*x| return x.render(tokens, stream), | 182 | .ExpectedLabelable => |*x| return x.render(tokens, stream), |
| 183 | @TagType(Error).ExpectedLabelable => |*x| return x.render(tokens, stream), | 183 | .ExpectedInlinable => |*x| return x.render(tokens, stream), |
| 184 | @TagType(Error).ExpectedInlinable => |*x| return x.render(tokens, stream), | 184 | .ExpectedAsmOutputReturnOrType => |*x| return x.render(tokens, stream), |
| 185 | @TagType(Error).ExpectedAsmOutputReturnOrType => |*x| return x.render(tokens, stream), | 185 | .ExpectedCall => |*x| return x.render(tokens, stream), |
| 186 | @TagType(Error).ExpectedCall => |*x| return x.render(tokens, stream), | 186 | .ExpectedCallOrFnProto => |*x| return x.render(tokens, stream), |
| 187 | @TagType(Error).ExpectedCallOrFnProto => |*x| return x.render(tokens, stream), | 187 | .ExpectedSliceOrRBracket => |*x| return x.render(tokens, stream), |
| 188 | @TagType(Error).ExpectedSliceOrRBracket => |*x| return x.render(tokens, stream), | 188 | .ExtraAlignQualifier => |*x| return x.render(tokens, stream), |
| 189 | @TagType(Error).ExtraAlignQualifier => |*x| return x.render(tokens, stream), | 189 | .ExtraConstQualifier => |*x| return x.render(tokens, stream), |
| 190 | @TagType(Error).ExtraConstQualifier => |*x| return x.render(tokens, stream), | 190 | .ExtraVolatileQualifier => |*x| return x.render(tokens, stream), |
| 191 | @TagType(Error).ExtraVolatileQualifier => |*x| return x.render(tokens, stream), | 191 | .ExtraAllowZeroQualifier => |*x| return x.render(tokens, stream), |
| 192 | @TagType(Error).ExtraAllowZeroQualifier => |*x| return x.render(tokens, stream), | 192 | .ExpectedTypeExpr => |*x| return x.render(tokens, stream), |
| 193 | @TagType(Error).ExpectedTypeExpr => |*x| return x.render(tokens, stream), | 193 | .ExpectedPrimaryTypeExpr => |*x| return x.render(tokens, stream), |
| 194 | @TagType(Error).ExpectedPrimaryTypeExpr => |*x| return x.render(tokens, stream), | 194 | .ExpectedParamType => |*x| return x.render(tokens, stream), |
| 195 | @TagType(Error).ExpectedParamType => |*x| return x.render(tokens, stream), | 195 | .ExpectedExpr => |*x| return x.render(tokens, stream), |
| 196 | @TagType(Error).ExpectedExpr => |*x| return x.render(tokens, stream), | 196 | .ExpectedPrimaryExpr => |*x| return x.render(tokens, stream), |
| 197 | @TagType(Error).ExpectedPrimaryExpr => |*x| return x.render(tokens, stream), | 197 | .ExpectedToken => |*x| return x.render(tokens, stream), |
| 198 | @TagType(Error).ExpectedToken => |*x| return x.render(tokens, stream), | 198 | .ExpectedCommaOrEnd => |*x| return x.render(tokens, stream), |
| 199 | @TagType(Error).ExpectedCommaOrEnd => |*x| return x.render(tokens, stream), | 199 | .ExpectedParamList => |*x| return x.render(tokens, stream), |
| 200 | @TagType(Error).ExpectedParamList => |*x| return x.render(tokens, stream), | 200 | .ExpectedPayload => |*x| return x.render(tokens, stream), |
| 201 | @TagType(Error).ExpectedPayload => |*x| return x.render(tokens, stream), | 201 | .ExpectedBlockOrAssignment => |*x| return x.render(tokens, stream), |
| 202 | @TagType(Error).ExpectedBlockOrAssignment => |*x| return x.render(tokens, stream), | 202 | .ExpectedBlockOrExpression => |*x| return x.render(tokens, stream), |
| 203 | @TagType(Error).ExpectedBlockOrExpression => |*x| return x.render(tokens, stream), | 203 | .ExpectedExprOrAssignment => |*x| return x.render(tokens, stream), |
| 204 | @TagType(Error).ExpectedExprOrAssignment => |*x| return x.render(tokens, stream), | 204 | .ExpectedPrefixExpr => |*x| return x.render(tokens, stream), |
| 205 | @TagType(Error).ExpectedPrefixExpr => |*x| return x.render(tokens, stream), | 205 | .ExpectedLoopExpr => |*x| return x.render(tokens, stream), |
| 206 | @TagType(Error).ExpectedLoopExpr => |*x| return x.render(tokens, stream), | 206 | .ExpectedDerefOrUnwrap => |*x| return x.render(tokens, stream), |
| 207 | @TagType(Error).ExpectedDerefOrUnwrap => |*x| return x.render(tokens, stream), | 207 | .ExpectedSuffixOp => |*x| return x.render(tokens, stream), |
| 208 | @TagType(Error).ExpectedSuffixOp => |*x| return x.render(tokens, stream), | | |
| 209 | } | 208 | } |
| 210 | } | 209 | } |
| 211 | | 210 | |
| 212 | pub fn loc(self: *const Error) TokenIndex { | 211 | pub fn loc(self: *const Error) TokenIndex { |
| 213 | switch (self.*) { | 212 | switch (self.*) { |
| 214 | // TODO https://github.com/ziglang/zig/issues/683 | 213 | .InvalidToken => |x| return x.token, |
| 215 | @TagType(Error).InvalidToken => |x| return x.token, | 214 | .InvalidAmpersandAmpersand => |x| return x.token, |
| 216 | @TagType(Error).InvalidAmpersandAmpersand => |x| return x.token, | 215 | .ExpectedContainerMembers => |x| return x.token, |
| 217 | @TagType(Error).ExpectedContainerMembers => |x| return x.token, | 216 | .ExpectedStringLiteral => |x| return x.token, |
| 218 | @TagType(Error).ExpectedStringLiteral => |x| return x.token, | 217 | .ExpectedIntegerLiteral => |x| return x.token, |
| 219 | @TagType(Error).ExpectedIntegerLiteral => |x| return x.token, | 218 | .ExpectedPubItem => |x| return x.token, |
| 220 | @TagType(Error).ExpectedPubItem => |x| return x.token, | 219 | .ExpectedIdentifier => |x| return x.token, |
| 221 | @TagType(Error).ExpectedIdentifier => |x| return x.token, | 220 | .ExpectedStatement => |x| return x.token, |
| 222 | @TagType(Error).ExpectedStatement => |x| return x.token, | 221 | .ExpectedVarDeclOrFn => |x| return x.token, |
| 223 | @TagType(Error).ExpectedVarDeclOrFn => |x| return x.token, | 222 | .ExpectedVarDecl => |x| return x.token, |
| 224 | @TagType(Error).ExpectedVarDecl => |x| return x.token, | 223 | .ExpectedReturnType => |x| return x.token, |
| 225 | @TagType(Error).ExpectedReturnType => |x| return x.token, | 224 | .ExpectedAggregateKw => |x| return x.token, |
| 226 | @TagType(Error).ExpectedAggregateKw => |x| return x.token, | 225 | .UnattachedDocComment => |x| return x.token, |
| 227 | @TagType(Error).UnattachedDocComment => |x| return x.token, | 226 | .ExpectedEqOrSemi => |x| return x.token, |
| 228 | @TagType(Error).ExpectedEqOrSemi => |x| return x.token, | 227 | .ExpectedSemiOrLBrace => |x| return x.token, |
| 229 | @TagType(Error).ExpectedSemiOrLBrace => |x| return x.token, | 228 | .ExpectedSemiOrElse => |x| return x.token, |
| 230 | @TagType(Error).ExpectedSemiOrElse => |x| return x.token, | 229 | .ExpectedLabelOrLBrace => |x| return x.token, |
| 231 | @TagType(Error).ExpectedLabelOrLBrace => |x| return x.token, | 230 | .ExpectedLBrace => |x| return x.token, |
| 232 | @TagType(Error).ExpectedLBrace => |x| return x.token, | 231 | .ExpectedColonOrRParen => |x| return x.token, |
| 233 | @TagType(Error).ExpectedColonOrRParen => |x| return x.token, | 232 | .ExpectedLabelable => |x| return x.token, |
| 234 | @TagType(Error).ExpectedLabelable => |x| return x.token, | 233 | .ExpectedInlinable => |x| return x.token, |
| 235 | @TagType(Error).ExpectedInlinable => |x| return x.token, | 234 | .ExpectedAsmOutputReturnOrType => |x| return x.token, |
| 236 | @TagType(Error).ExpectedAsmOutputReturnOrType => |x| return x.token, | 235 | .ExpectedCall => |x| return x.node.firstToken(), |
| 237 | @TagType(Error).ExpectedCall => |x| return x.node.firstToken(), | 236 | .ExpectedCallOrFnProto => |x| return x.node.firstToken(), |
| 238 | @TagType(Error).ExpectedCallOrFnProto => |x| return x.node.firstToken(), | 237 | .ExpectedSliceOrRBracket => |x| return x.token, |
| 239 | @TagType(Error).ExpectedSliceOrRBracket => |x| return x.token, | 238 | .ExtraAlignQualifier => |x| return x.token, |
| 240 | @TagType(Error).ExtraAlignQualifier => |x| return x.token, | 239 | .ExtraConstQualifier => |x| return x.token, |
| 241 | @TagType(Error).ExtraConstQualifier => |x| return x.token, | 240 | .ExtraVolatileQualifier => |x| return x.token, |
| 242 | @TagType(Error).ExtraVolatileQualifier => |x| return x.token, | 241 | .ExtraAllowZeroQualifier => |x| return x.token, |
| 243 | @TagType(Error).ExtraAllowZeroQualifier => |x| return x.token, | 242 | .ExpectedTypeExpr => |x| return x.token, |
| 244 | @TagType(Error).ExpectedTypeExpr => |x| return x.token, | 243 | .ExpectedPrimaryTypeExpr => |x| return x.token, |
| 245 | @TagType(Error).ExpectedPrimaryTypeExpr => |x| return x.token, | 244 | .ExpectedParamType => |x| return x.token, |
| 246 | @TagType(Error).ExpectedParamType => |x| return x.token, | 245 | .ExpectedExpr => |x| return x.token, |
| 247 | @TagType(Error).ExpectedExpr => |x| return x.token, | 246 | .ExpectedPrimaryExpr => |x| return x.token, |
| 248 | @TagType(Error).ExpectedPrimaryExpr => |x| return x.token, | 247 | .ExpectedToken => |x| return x.token, |
| 249 | @TagType(Error).ExpectedToken => |x| return x.token, | 248 | .ExpectedCommaOrEnd => |x| return x.token, |
| 250 | @TagType(Error).ExpectedCommaOrEnd => |x| return x.token, | 249 | .ExpectedParamList => |x| return x.token, |
| 251 | @TagType(Error).ExpectedParamList => |x| return x.token, | 250 | .ExpectedPayload => |x| return x.token, |
| 252 | @TagType(Error).ExpectedPayload => |x| return x.token, | 251 | .ExpectedBlockOrAssignment => |x| return x.token, |
| 253 | @TagType(Error).ExpectedBlockOrAssignment => |x| return x.token, | 252 | .ExpectedBlockOrExpression => |x| return x.token, |
| 254 | @TagType(Error).ExpectedBlockOrExpression => |x| return x.token, | 253 | .ExpectedExprOrAssignment => |x| return x.token, |
| 255 | @TagType(Error).ExpectedExprOrAssignment => |x| return x.token, | 254 | .ExpectedPrefixExpr => |x| return x.token, |
| 256 | @TagType(Error).ExpectedPrefixExpr => |x| return x.token, | 255 | .ExpectedLoopExpr => |x| return x.token, |
| 257 | @TagType(Error).ExpectedLoopExpr => |x| return x.token, | 256 | .ExpectedDerefOrUnwrap => |x| return x.token, |
| 258 | @TagType(Error).ExpectedDerefOrUnwrap => |x| return x.token, | 257 | .ExpectedSuffixOp => |x| return x.token, |
| 259 | @TagType(Error).ExpectedSuffixOp => |x| return x.token, | | |
| 260 | } | 258 | } |
| 261 | } | 259 | } |
| 262 | | 260 | |
| ... | @@ -1712,15 +1710,15 @@ pub const Node = struct { | ... | @@ -1712,15 +1710,15 @@ pub const Node = struct { |
| 1712 | i -= 1; | 1710 | i -= 1; |
| 1713 | | 1711 | |
| 1714 | switch (self.op) { | 1712 | switch (self.op) { |
| 1715 | @TagType(Op).Call => |*call_info| { | 1713 | .Call => |*call_info| { |
| 1716 | if (i < call_info.params.len) return call_info.params.at(i).*; | 1714 | if (i < call_info.params.len) return call_info.params.at(i).*; |
| 1717 | i -= call_info.params.len; | 1715 | i -= call_info.params.len; |
| 1718 | }, | 1716 | }, |
| 1719 | Op.ArrayAccess => |index_expr| { | 1717 | .ArrayAccess => |index_expr| { |
| 1720 | if (i < 1) return index_expr; | 1718 | if (i < 1) return index_expr; |
| 1721 | i -= 1; | 1719 | i -= 1; |
| 1722 | }, | 1720 | }, |
| 1723 | @TagType(Op).Slice => |range| { | 1721 | .Slice => |range| { |
| 1724 | if (i < 1) return range.start; | 1722 | if (i < 1) return range.start; |
| 1725 | i -= 1; | 1723 | i -= 1; |
| 1726 | | 1724 | |
| ... | @@ -1729,16 +1727,16 @@ pub const Node = struct { | ... | @@ -1729,16 +1727,16 @@ pub const Node = struct { |
| 1729 | i -= 1; | 1727 | i -= 1; |
| 1730 | } | 1728 | } |
| 1731 | }, | 1729 | }, |
| 1732 | Op.ArrayInitializer => |*exprs| { | 1730 | .ArrayInitializer => |*exprs| { |
| 1733 | if (i < exprs.len) return exprs.at(i).*; | 1731 | if (i < exprs.len) return exprs.at(i).*; |
| 1734 | i -= exprs.len; | 1732 | i -= exprs.len; |
| 1735 | }, | 1733 | }, |
| 1736 | Op.StructInitializer => |*fields| { | 1734 | .StructInitializer => |*fields| { |
| 1737 | if (i < fields.len) return fields.at(i).*; | 1735 | if (i < fields.len) return fields.at(i).*; |
| 1738 | i -= fields.len; | 1736 | i -= fields.len; |
| 1739 | }, | 1737 | }, |
| 1740 | Op.UnwrapOptional, | 1738 | .UnwrapOptional, |
| 1741 | Op.Deref, | 1739 | .Deref, |
| 1742 | => {}, | 1740 | => {}, |
| 1743 | } | 1741 | } |
| 1744 | | 1742 | |
| ... | @@ -1747,7 +1745,7 @@ pub const Node = struct { | ... | @@ -1747,7 +1745,7 @@ pub const Node = struct { |
| 1747 | | 1745 | |
| 1748 | pub fn firstToken(self: *const SuffixOp) TokenIndex { | 1746 | pub fn firstToken(self: *const SuffixOp) TokenIndex { |
| 1749 | switch (self.op) { | 1747 | switch (self.op) { |
| 1750 | @TagType(Op).Call => |*call_info| if (call_info.async_attr) |async_attr| return async_attr.firstToken(), | 1748 | .Call => |*call_info| if (call_info.async_attr) |async_attr| return async_attr.firstToken(), |
| 1751 | else => {}, | 1749 | else => {}, |
| 1752 | } | 1750 | } |
| 1753 | return self.lhs.firstToken(); | 1751 | return self.lhs.firstToken(); |