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