authorgravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2026-07-09 12:22:54+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-07-09 21:05:03+02:00
logebaa801cdcaf3fd480b4fe6f87136d8ef3a5a0d7
treea991ba585114801cbd457cc2f59a1561335a35cb
parent01b60634c7edecfd4757e12bc5f3b265a2959761

parser: delete consistently out-of-sync comments

We have collectively proved more-or-less incapable of keeping these grammar snippet comments in sync with the canonical grammar. I believe that without automation of some kind this situation will not meaningfully improve, and that the complexity cost of automation for this purpose would outweigh the benefits. Therefore, simply delete them to avoid confusion and clarify the single source of truth for the formal grammar.

1 files changed, 0 insertions(+), 266 deletions(-)

lib/std/zig/Parse.zig-266
...@@ -261,11 +261,6 @@ pub fn parseZon(p: *Parse) Allocator.Error!void {...@@ -261,11 +261,6 @@ pub fn parseZon(p: *Parse) Allocator.Error!void {
261 p.nodes.items(.data)[0] = .{ .node = node_index };261 p.nodes.items(.data)[0] = .{ .node = node_index };
262}262}
263263
264/// ContainerMembers <- container_doc_comment? ContainerDeclaration* (ContainerField COMMA)* (ContainerField / ContainerDeclaration*)
265///
266/// ContainerDeclaration <- TestDecl / ComptimeDecl / doc_comment? KEYWORD_pub? Decl
267///
268/// ComptimeDecl <- KEYWORD_comptime Block
269fn parseContainerMembers(p: *Parse) Error!Members {264fn parseContainerMembers(p: *Parse) Error!Members {
270 const scratch_top = p.scratch.items.len;265 const scratch_top = p.scratch.items.len;
271 defer p.scratch.shrinkRetainingCapacity(scratch_top);266 defer p.scratch.shrinkRetainingCapacity(scratch_top);
...@@ -613,7 +608,6 @@ fn findNextStmt(p: *Parse) void {...@@ -613,7 +608,6 @@ fn findNextStmt(p: *Parse) void {
613 }608 }
614}609}
615610
616/// TestDecl <- KEYWORD_test (STRINGLITERALSINGLE / IDENTIFIER)? Block
617fn expectTestDecl(p: *Parse) Error!Node.Index {611fn expectTestDecl(p: *Parse) Error!Node.Index {
618 const test_token = p.assertToken(.keyword_test);612 const test_token = p.assertToken(.keyword_test);
619 const name_token: OptionalTokenIndex = switch (p.tokenTag(p.tok_i)) {613 const name_token: OptionalTokenIndex = switch (p.tokenTag(p.tok_i)) {
...@@ -643,10 +637,6 @@ fn expectTestDeclRecoverable(p: *Parse) error{OutOfMemory}!?Node.Index {...@@ -643,10 +637,6 @@ fn expectTestDeclRecoverable(p: *Parse) error{OutOfMemory}!?Node.Index {
643 }637 }
644}638}
645639
646/// Decl
647/// <- (KEYWORD_export / KEYWORD_inline / KEYWORD_noinline)? FnProto (SEMICOLON / Block)
648/// / KEYWORD_extern STRINGLITERALSINGLE? FnProto SEMICOLON
649/// / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl
650fn expectTopLevelDecl(p: *Parse) !?Node.Index {640fn expectTopLevelDecl(p: *Parse) !?Node.Index {
651 const extern_export_inline_token = p.nextToken();641 const extern_export_inline_token = p.nextToken();
652 var is_extern: bool = false;642 var is_extern: bool = false;
...@@ -722,7 +712,6 @@ fn expectTopLevelDeclRecoverable(p: *Parse) error{OutOfMemory}!?Node.Index {...@@ -722,7 +712,6 @@ fn expectTopLevelDeclRecoverable(p: *Parse) error{OutOfMemory}!?Node.Index {
722 };712 };
723}713}
724714
725/// FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? AddrSpace? LinkSection? CallConv? EXCLAMATIONMARK? TypeExpr !ExprSuffix
726fn parseFnProto(p: *Parse) !?Node.Index {715fn parseFnProto(p: *Parse) !?Node.Index {
727 const fn_token = p.eatToken(.keyword_fn) orelse return null;716 const fn_token = p.eatToken(.keyword_fn) orelse return null;
728717
...@@ -815,7 +804,6 @@ fn setVarDeclInitExpr(p: *Parse, var_decl: Node.Index, init_expr: Node.OptionalI...@@ -815,7 +804,6 @@ fn setVarDeclInitExpr(p: *Parse, var_decl: Node.Index, init_expr: Node.OptionalI
815 init_expr_result.* = init_expr;804 init_expr_result.* = init_expr;
816}805}
817806
818/// VarDeclProto <- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? AddrSpace? LinkSection?
819/// Returns a `*_var_decl` node with its rhs (init expression) initialized to .none.807/// Returns a `*_var_decl` node with its rhs (init expression) initialized to .none.
820fn parseVarDeclProto(p: *Parse) !?Node.Index {808fn parseVarDeclProto(p: *Parse) !?Node.Index {
821 const mut_token = p.eatToken(.keyword_const) orelse809 const mut_token = p.eatToken(.keyword_const) orelse
...@@ -887,7 +875,6 @@ fn parseVarDeclProto(p: *Parse) !?Node.Index {...@@ -887,7 +875,6 @@ fn parseVarDeclProto(p: *Parse) !?Node.Index {
887 }875 }
888}876}
889877
890/// GlobalVarDecl <- VarDeclProto (EQUAL Expr?) SEMICOLON
891fn parseGlobalVarDecl(p: *Parse) !?Node.Index {878fn parseGlobalVarDecl(p: *Parse) !?Node.Index {
892 const var_decl = try p.parseVarDeclProto() orelse return null;879 const var_decl = try p.parseVarDeclProto() orelse return null;
893880
...@@ -910,7 +897,6 @@ fn parseGlobalVarDecl(p: *Parse) !?Node.Index {...@@ -910,7 +897,6 @@ fn parseGlobalVarDecl(p: *Parse) !?Node.Index {
910 return var_decl;897 return var_decl;
911}898}
912899
913// ContainerField <- doc_comment? KEYWORD_comptime? (IDENTIFIER COLON)? TypeExpr ByteAlign? (EQUAL Expr)?
914fn expectContainerField(p: *Parse) !Node.Index {900fn expectContainerField(p: *Parse) !Node.Index {
915 _ = p.eatToken(.keyword_comptime);901 _ = p.eatToken(.keyword_comptime);
916 const main_token = p.tok_i;902 const main_token = p.tok_i;
...@@ -952,25 +938,6 @@ fn expectContainerField(p: *Parse) !Node.Index {...@@ -952,25 +938,6 @@ fn expectContainerField(p: *Parse) !Node.Index {
952 }938 }
953}939}
954940
955/// BlockStatement
956/// <- Statement
957/// / KEYWORD_defer BlockExprStatement
958/// / KEYWORD_errdefer BlockExprStatement
959/// / !StatementPrefix KEYWORD_comptime? VarAssignStatement
960///
961/// Statement
962/// <- IfStatement
963/// / LabeledStatement
964/// / KEYWORD_nosuspend BlockExprStatement
965/// / KEYWORD_comptime BlockExpr
966/// / KEYWORD_suspend BlockExprStatement
967/// / !StatementPrefix KEYWORD_comptime? AssignExpr SEMICOLON
968///
969/// StatementPrefix
970/// <- KEYWORD_if
971/// / BlockLabel? (LBRACE / KEYWORD_inline? (KEYWORD_for / KEYWORD_while) / KEYWORD_switch)
972/// / KEYWORD_nosuspend
973/// / KEYWORD_comptime BlockExprPrefix
974fn expectStatement(p: *Parse, is_block_level: bool) Error!Node.Index {941fn expectStatement(p: *Parse, is_block_level: bool) Error!Node.Index {
975 if (p.eatToken(.keyword_comptime)) |comptime_token| {942 if (p.eatToken(.keyword_comptime)) |comptime_token| {
976 const opt_block_expr = try p.parseBlockExpr();943 const opt_block_expr = try p.parseBlockExpr();
...@@ -1052,7 +1019,6 @@ fn expectStatement(p: *Parse, is_block_level: bool) Error!Node.Index {...@@ -1052,7 +1019,6 @@ fn expectStatement(p: *Parse, is_block_level: bool) Error!Node.Index {
1052 }1019 }
1053}1020}
10541021
1055/// VarAssignStatement <- (VarDeclProto / Expr) (COMMA (VarDeclProto / Expr))* EQUAL Expr SEMICOLON
1056fn expectVarAssignStatement(p: *Parse, comptime_token: ?TokenIndex) !Node.Index {1022fn expectVarAssignStatement(p: *Parse, comptime_token: ?TokenIndex) !Node.Index {
1057 const scratch_top = p.scratch.items.len;1023 const scratch_top = p.scratch.items.len;
1058 defer p.scratch.shrinkRetainingCapacity(scratch_top);1024 defer p.scratch.shrinkRetainingCapacity(scratch_top);
...@@ -1182,11 +1148,6 @@ fn expectStatementRecoverable(p: *Parse) Error!?Node.Index {...@@ -1182,11 +1148,6 @@ fn expectStatementRecoverable(p: *Parse) Error!?Node.Index {
1182 }1148 }
1183}1149}
11841150
1185/// IfStatement
1186/// <- IfPrefix BlockExpr (KEYWORD_else Payload? Statement / !KEYWORD_else)
1187/// / IfPrefix !BlockExprPrefix AssignExpr (SEMICOLON / KEYWORD_else Payload? Statement)
1188///
1189/// IfPrefix <- KEYWORD_if LPAREN Expr RPAREN PtrPayload?
1190fn expectIfStatement(p: *Parse) !Node.Index {1151fn expectIfStatement(p: *Parse) !Node.Index {
1191 const if_token = p.assertToken(.keyword_if);1152 const if_token = p.assertToken(.keyword_if);
1192 _ = try p.expectToken(.l_paren);1153 _ = try p.expectToken(.l_paren);
...@@ -1244,7 +1205,6 @@ fn expectIfStatement(p: *Parse) !Node.Index {...@@ -1244,7 +1205,6 @@ fn expectIfStatement(p: *Parse) !Node.Index {
1244 });1205 });
1245}1206}
12461207
1247/// LabeledStatement <- BlockLabel? (Block / LoopStatement / SwitchExpr)
1248fn parseLabeledStatement(p: *Parse) !?Node.Index {1208fn parseLabeledStatement(p: *Parse) !?Node.Index {
1249 const opt_label_token = p.parseBlockLabel();1209 const opt_label_token = p.parseBlockLabel();
12501210
...@@ -1271,7 +1231,6 @@ fn parseLabeledStatement(p: *Parse) !?Node.Index {...@@ -1271,7 +1231,6 @@ fn parseLabeledStatement(p: *Parse) !?Node.Index {
1271 return p.failMsg(.{ .tag = .expected_labelable, .token = after_colon });1231 return p.failMsg(.{ .tag = .expected_labelable, .token = after_colon });
1272}1232}
12731233
1274/// LoopStatement <- KEYWORD_inline? (ForStatement / WhileStatement)
1275fn parseLoopStatement(p: *Parse) !?Node.Index {1234fn parseLoopStatement(p: *Parse) !?Node.Index {
1276 const inline_token = p.eatToken(.keyword_inline);1235 const inline_token = p.eatToken(.keyword_inline);
12771236
...@@ -1284,9 +1243,6 @@ fn parseLoopStatement(p: *Parse) !?Node.Index {...@@ -1284,9 +1243,6 @@ fn parseLoopStatement(p: *Parse) !?Node.Index {
1284 return p.fail(.expected_inlinable);1243 return p.fail(.expected_inlinable);
1285}1244}
12861245
1287/// ForStatement
1288/// <- ForPrefix BlockExpr (KEYWORD_else Statement / !KEYWORD_else)
1289/// / ForPrefix !BlockExprPrefix AssignExpr (SEMICOLON / KEYWORD_else Statement)
1290fn parseForStatement(p: *Parse) !?Node.Index {1246fn parseForStatement(p: *Parse) !?Node.Index {
1291 const for_token = p.eatToken(.keyword_for) orelse return null;1247 const for_token = p.eatToken(.keyword_for) orelse return null;
12921248
...@@ -1339,11 +1295,6 @@ fn parseForStatement(p: *Parse) !?Node.Index {...@@ -1339,11 +1295,6 @@ fn parseForStatement(p: *Parse) !?Node.Index {
1339 });1295 });
1340}1296}
13411297
1342/// WhilePrefix <- KEYWORD_while LPAREN Expr RPAREN PtrPayload? WhileContinueExpr?
1343///
1344/// WhileStatement
1345/// <- WhilePrefix BlockExpr (KEYWORD_else Payload? Statement / !KEYWORD_else)
1346/// / WhilePrefix !BlockExprPrefix AssignExpr (SEMICOLON / KEYWORD_else Payload? Statement)
1347fn parseWhileStatement(p: *Parse) !?Node.Index {1298fn parseWhileStatement(p: *Parse) !?Node.Index {
1348 const while_token = p.eatToken(.keyword_while) orelse return null;1299 const while_token = p.eatToken(.keyword_while) orelse return null;
1349 _ = try p.expectToken(.l_paren);1300 _ = try p.expectToken(.l_paren);
...@@ -1431,9 +1382,6 @@ fn parseWhileStatement(p: *Parse) !?Node.Index {...@@ -1431,9 +1382,6 @@ fn parseWhileStatement(p: *Parse) !?Node.Index {
1431 });1382 });
1432}1383}
14331384
1434/// BlockExprStatement
1435/// <- BlockExpr
1436/// / !BlockExprPrefix AssignExpr SEMICOLON
1437fn parseBlockExprStatement(p: *Parse) !?Node.Index {1385fn parseBlockExprStatement(p: *Parse) !?Node.Index {
1438 const block_expr = try p.parseBlockExpr();1386 const block_expr = try p.parseBlockExpr();
1439 if (block_expr) |expr| return expr;1387 if (block_expr) |expr| return expr;
...@@ -1449,7 +1397,6 @@ fn expectBlockExprStatement(p: *Parse) !Node.Index {...@@ -1449,7 +1397,6 @@ fn expectBlockExprStatement(p: *Parse) !Node.Index {
1449 return try p.parseBlockExprStatement() orelse return p.fail(.expected_block_or_expr);1397 return try p.parseBlockExprStatement() orelse return p.fail(.expected_block_or_expr);
1450}1398}
14511399
1452/// BlockExpr <- BlockLabel? Block
1453fn parseBlockExpr(p: *Parse) Error!?Node.Index {1400fn parseBlockExpr(p: *Parse) Error!?Node.Index {
1454 switch (p.tokenTag(p.tok_i)) {1401 switch (p.tokenTag(p.tok_i)) {
1455 .identifier => {1402 .identifier => {
...@@ -1467,33 +1414,11 @@ fn parseBlockExpr(p: *Parse) Error!?Node.Index {...@@ -1467,33 +1414,11 @@ fn parseBlockExpr(p: *Parse) Error!?Node.Index {
1467 }1414 }
1468}1415}
14691416
1470/// AssignExpr <- Expr (AssignOp Expr / (COMMA Expr)+ EQUAL Expr / !AssignOp !COMMA)
1471///
1472/// AssignOp
1473/// <- ASTERISKEQUAL
1474/// / ASTERISKPIPEEQUAL
1475/// / SLASHEQUAL
1476/// / PERCENTEQUAL
1477/// / PLUSEQUAL
1478/// / PLUSPIPEEQUAL
1479/// / MINUSEQUAL
1480/// / MINUSPIPEEQUAL
1481/// / LARROW2EQUAL
1482/// / LARROW2PIPEEQUAL
1483/// / RARROW2EQUAL
1484/// / AMPERSANDEQUAL
1485/// / CARETEQUAL
1486/// / PIPEEQUAL
1487/// / ASTERISKPERCENTEQUAL
1488/// / PLUSPERCENTEQUAL
1489/// / MINUSPERCENTEQUAL
1490/// / EQUAL
1491fn parseAssignExpr(p: *Parse) !?Node.Index {1417fn parseAssignExpr(p: *Parse) !?Node.Index {
1492 const expr = try p.parseExpr() orelse return null;1418 const expr = try p.parseExpr() orelse return null;
1493 return try p.finishAssignExpr(expr);1419 return try p.finishAssignExpr(expr);
1494}1420}
14951421
1496/// SingleAssignExpr <- Expr (AssignOp Expr / !AssignOp)
1497fn parseSingleAssignExpr(p: *Parse) !?Node.Index {1422fn parseSingleAssignExpr(p: *Parse) !?Node.Index {
1498 const lhs = try p.parseExpr() orelse return null;1423 const lhs = try p.parseExpr() orelse return null;
1499 const tag = assignOpNode(p.tokenTag(p.tok_i)) orelse return lhs;1424 const tag = assignOpNode(p.tokenTag(p.tok_i)) orelse return lhs;
...@@ -1708,15 +1633,6 @@ fn parseExprPrecedence(p: *Parse, min_prec: i32) Error!?Node.Index {...@@ -1708,15 +1633,6 @@ fn parseExprPrecedence(p: *Parse, min_prec: i32) Error!?Node.Index {
1708 return node;1633 return node;
1709}1634}
17101635
1711/// PrefixExpr <- PrefixOp* PrimaryExpr / !PrefixOp
1712///
1713/// PrefixOp
1714/// <- EXCLAMATIONMARK
1715/// / MINUS
1716/// / TILDE
1717/// / MINUSPERCENT
1718/// / AMPERSAND
1719/// / KEYWORD_try
1720fn parsePrefixExpr(p: *Parse) Error!?Node.Index {1636fn parsePrefixExpr(p: *Parse) Error!?Node.Index {
1721 const tag: Node.Tag = switch (p.tokenTag(p.tok_i)) {1637 const tag: Node.Tag = switch (p.tokenTag(p.tok_i)) {
1722 .bang => .bool_not,1638 .bang => .bool_not,
...@@ -1738,28 +1654,6 @@ fn expectPrefixExpr(p: *Parse) Error!Node.Index {...@@ -1738,28 +1654,6 @@ fn expectPrefixExpr(p: *Parse) Error!Node.Index {
1738 return try p.parsePrefixExpr() orelse return p.fail(.expected_prefix_expr);1654 return try p.parsePrefixExpr() orelse return p.fail(.expected_prefix_expr);
1739}1655}
17401656
1741/// TypeExpr <- PrefixTypeOp* !PrefixTypeOpPrefix ErrorUnionExpr
1742///
1743/// PrefixTypeOp
1744/// <- QUESTIONMARK
1745/// / KEYWORD_anyframe MINUSRARROW
1746/// / (ManyPtrTypeStart / SliceTypeStart) PtrMods
1747/// / SinglePtrTypeStart SinglePtrMods
1748/// / ArrayTypeStart
1749///
1750/// PrefixTypeOpPrefix
1751/// <- QUESTIONMARK
1752/// / KEYWORD_anyframe MINUSRARROW
1753/// / LBRACKET
1754/// / ASTERISK
1755///
1756/// SliceTypeStart <- LBRACKET (COLON Expr)? RBRACKET
1757///
1758/// SinglePtrTypeStart <- ASTERISK
1759///
1760/// ManyPtrTypeStart <- LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET
1761///
1762/// ArrayTypeStart <- LBRACKET !ASTERISK Expr (COLON Expr)? RBRACKET
1763fn parseTypeExpr(p: *Parse) Error!?Node.Index {1657fn parseTypeExpr(p: *Parse) Error!?Node.Index {
1764 switch (p.tokenTag(p.tok_i)) {1658 switch (p.tokenTag(p.tok_i)) {
1765 .question_mark => return try p.addNode(.{1659 .question_mark => return try p.addNode(.{
...@@ -1957,18 +1851,6 @@ fn expectTypeExpr(p: *Parse) Error!Node.Index {...@@ -1957,18 +1851,6 @@ fn expectTypeExpr(p: *Parse) Error!Node.Index {
1957 return try p.parseTypeExpr() orelse return p.fail(.expected_type_expr);1851 return try p.parseTypeExpr() orelse return p.fail(.expected_type_expr);
1958}1852}
19591853
1960/// PrimaryExpr
1961/// <- AsmExpr
1962/// / IfExpr
1963/// / KEYWORD_break BreakLabel? Expr?
1964/// / KEYWORD_comptime Expr
1965/// / KEYWORD_nosuspend Expr
1966/// / KEYWORD_continue BreakLabel? Expr?
1967/// / KEYWORD_resume Expr
1968/// / KEYWORD_return Expr?
1969/// / BlockLabel? LoopExpr
1970/// / Block
1971/// / CurlySuffixExpr
1972fn parsePrimaryExpr(p: *Parse) !?Node.Index {1854fn parsePrimaryExpr(p: *Parse) !?Node.Index {
1973 switch (p.tokenTag(p.tok_i)) {1855 switch (p.tokenTag(p.tok_i)) {
1974 .keyword_asm => return try p.expectAsmExpr(),1856 .keyword_asm => return try p.expectAsmExpr(),
...@@ -2061,7 +1943,6 @@ fn parsePrimaryExpr(p: *Parse) !?Node.Index {...@@ -2061,7 +1943,6 @@ fn parsePrimaryExpr(p: *Parse) !?Node.Index {
2061 }1943 }
2062}1944}
20631945
2064/// Block <- LBRACE BlockStatement* RBRACE
2065fn parseBlock(p: *Parse) !?Node.Index {1946fn parseBlock(p: *Parse) !?Node.Index {
2066 const lbrace = p.eatToken(.l_brace) orelse return null;1947 const lbrace = p.eatToken(.l_brace) orelse return null;
2067 const scratch_top = p.scratch.items.len;1948 const scratch_top = p.scratch.items.len;
...@@ -2092,11 +1973,6 @@ fn parseBlock(p: *Parse) !?Node.Index {...@@ -2092,11 +1973,6 @@ fn parseBlock(p: *Parse) !?Node.Index {
2092 }1973 }
2093}1974}
20941975
2095/// ForPrefix <- KEYWORD_for LPAREN ForInput (COMMA ForInput)* COMMA? RPAREN ForPayload
2096///
2097/// ForInput <- Expr (DOT2 Expr?)?
2098///
2099/// ForPayload <- PIPE ASTERISK? IDENTIFIER (COMMA ASTERISK? IDENTIFIER)* PIPE
2100fn forPrefix(p: *Parse) Error!usize {1976fn forPrefix(p: *Parse) Error!usize {
2101 const start = p.scratch.items.len;1977 const start = p.scratch.items.len;
2102 _ = try p.expectToken(.l_paren);1978 _ = try p.expectToken(.l_paren);
...@@ -2152,9 +2028,6 @@ fn forPrefix(p: *Parse) Error!usize {...@@ -2152,9 +2028,6 @@ fn forPrefix(p: *Parse) Error!usize {
2152 return inputs;2028 return inputs;
2153}2029}
21542030
2155/// WhilePrefix <- KEYWORD_while LPAREN Expr RPAREN PtrPayload? WhileContinueExpr?
2156///
2157/// WhileExpr <- WhilePrefix Expr (KEYWORD_else Payload? Expr)? !ExprSuffi
2158fn expectWhileExpr(p: *Parse) !Node.Index {2031fn expectWhileExpr(p: *Parse) !Node.Index {
2159 const while_token = p.assertToken(.keyword_while);2032 const while_token = p.assertToken(.keyword_while);
2160 _ = try p.expectToken(.l_paren);2033 _ = try p.expectToken(.l_paren);
...@@ -2204,12 +2077,6 @@ fn expectWhileExpr(p: *Parse) !Node.Index {...@@ -2204,12 +2077,6 @@ fn expectWhileExpr(p: *Parse) !Node.Index {
2204 });2077 });
2205}2078}
22062079
2207/// CurlySuffixExpr <- TypeExpr (InitList / !LBRACE)
2208///
2209/// InitList
2210/// <- LBRACE FieldInit (COMMA FieldInit)* COMMA? RBRACE
2211/// / LBRACE Expr (COMMA Expr)* COMMA? RBRACE
2212/// / LBRACE RBRACE
2213fn parseCurlySuffixExpr(p: *Parse) !?Node.Index {2080fn parseCurlySuffixExpr(p: *Parse) !?Node.Index {
2214 const lhs = try p.parseTypeExpr() orelse return null;2081 const lhs = try p.parseTypeExpr() orelse return null;
2215 const lbrace = p.eatToken(.l_brace) orelse return lhs;2082 const lbrace = p.eatToken(.l_brace) orelse return lhs;
...@@ -2306,7 +2173,6 @@ fn parseCurlySuffixExpr(p: *Parse) !?Node.Index {...@@ -2306,7 +2173,6 @@ fn parseCurlySuffixExpr(p: *Parse) !?Node.Index {
2306 }2173 }
2307}2174}
23082175
2309/// ErrorUnionExpr <- SuffixExpr (EXCLAMATIONMARK TypeExpr / !EXCLAMATIONMARK)
2310fn parseErrorUnionExpr(p: *Parse) !?Node.Index {2176fn parseErrorUnionExpr(p: *Parse) !?Node.Index {
2311 const suffix_expr = try p.parseSuffixExpr() orelse return null;2177 const suffix_expr = try p.parseSuffixExpr() orelse return null;
2312 const bang = p.eatToken(.bang) orelse return suffix_expr;2178 const bang = p.eatToken(.bang) orelse return suffix_expr;
...@@ -2320,7 +2186,6 @@ fn parseErrorUnionExpr(p: *Parse) !?Node.Index {...@@ -2320,7 +2186,6 @@ fn parseErrorUnionExpr(p: *Parse) !?Node.Index {
2320 });2186 });
2321}2187}
23222188
2323/// SuffixExpr <- PrimaryTypeExpr SuffixOp* !SuffixOpPrefix
2324fn parseSuffixExpr(p: *Parse) !?Node.Index {2189fn parseSuffixExpr(p: *Parse) !?Node.Index {
2325 var res = try p.parsePrimaryTypeExpr() orelse return null;2190 var res = try p.parsePrimaryTypeExpr() orelse return null;
2326 while (try p.parseSuffixOp(res)) |suffix_op| {2191 while (try p.parseSuffixOp(res)) |suffix_op| {
...@@ -2329,46 +2194,6 @@ fn parseSuffixExpr(p: *Parse) !?Node.Index {...@@ -2329,46 +2194,6 @@ fn parseSuffixExpr(p: *Parse) !?Node.Index {
2329 return res;2194 return res;
2330}2195}
23312196
2332/// PrimaryTypeExpr
2333/// <- BUILTINIDENTIFIER FnCallArguments
2334/// / CHAR_LITERAL
2335/// / ContainerDecl
2336/// / DOT IDENTIFIER
2337/// / DOT InitList
2338/// / ErrorSetDecl
2339/// / FnProto
2340/// / GroupedExpr
2341/// / LabeledTypeExpr
2342/// / IDENTIFIER
2343/// / IfTypeExpr
2344/// / KEYWORD_comptime TypeExpr
2345/// / KEYWORD_error DOT IDENTIFIER
2346/// / KEYWORD_anyframe
2347/// / KEYWORD_unreachable
2348/// / NUMBERLITERAL
2349/// / STRINGLITERAL
2350///
2351/// ContainerDecl <- (KEYWORD_extern / KEYWORD_packed)? ContainerDeclAuto
2352///
2353/// ContainerDeclAuto <- ContainerDeclType LBRACE ContainerMembers RBRACE
2354///
2355/// InitList
2356/// <- LBRACE FieldInit (COMMA FieldInit)* COMMA? RBRACE
2357/// / LBRACE Expr (COMMA Expr)* COMMA? RBRACE
2358/// / LBRACE RBRACE
2359///
2360/// ErrorSetDecl <- KEYWORD_error LBRACE IdentifierList RBRACE
2361///
2362/// GroupedExpr <- LPAREN Expr RPAREN
2363///
2364/// IfTypeExpr <- IfPrefix TypeExpr (KEYWORD_else Payload? TypeExpr)? !ExprSuffix
2365///
2366/// LabeledTypeExpr
2367/// <- BlockLabel Block
2368/// / BlockLabel? LoopTypeExpr
2369/// / BlockLabel? SwitchExpr
2370///
2371/// LoopTypeExpr <- KEYWORD_inline? (ForTypeExpr / WhileTypeExpr)
2372fn parsePrimaryTypeExpr(p: *Parse) !?Node.Index {2197fn parsePrimaryTypeExpr(p: *Parse) !?Node.Index {
2373 switch (p.tokenTag(p.tok_i)) {2198 switch (p.tokenTag(p.tok_i)) {
2374 .char_literal => return try p.addNode(.{2199 .char_literal => return try p.addNode(.{
...@@ -2637,9 +2462,6 @@ fn expectPrimaryTypeExpr(p: *Parse) !Node.Index {...@@ -2637,9 +2462,6 @@ fn expectPrimaryTypeExpr(p: *Parse) !Node.Index {
2637 return try p.parsePrimaryTypeExpr() orelse return p.fail(.expected_primary_type_expr);2462 return try p.parsePrimaryTypeExpr() orelse return p.fail(.expected_primary_type_expr);
2638}2463}
26392464
2640/// WhilePrefix <- KEYWORD_while LPAREN Expr RPAREN PtrPayload? WhileContinueExpr?
2641///
2642/// WhileTypeExpr <- WhilePrefix TypeExpr (KEYWORD_else Payload? TypeExpr / !KEYWORD_else)
2643fn expectWhileTypeExpr(p: *Parse) !Node.Index {2465fn expectWhileTypeExpr(p: *Parse) !Node.Index {
2644 const while_token = p.assertToken(.keyword_while);2466 const while_token = p.assertToken(.keyword_while);
2645 _ = try p.expectToken(.l_paren);2467 _ = try p.expectToken(.l_paren);
...@@ -2689,7 +2511,6 @@ fn expectWhileTypeExpr(p: *Parse) !Node.Index {...@@ -2689,7 +2511,6 @@ fn expectWhileTypeExpr(p: *Parse) !Node.Index {
2689 });2511 });
2690}2512}
26912513
2692/// SwitchExpr <- KEYWORD_switch LPAREN Expr RPAREN LBRACE SwitchProngList RBRACE
2693fn parseSwitchExpr(p: *Parse, is_labeled: bool) !?Node.Index {2514fn parseSwitchExpr(p: *Parse, is_labeled: bool) !?Node.Index {
2694 const switch_token = p.eatToken(.keyword_switch) orelse return null;2515 const switch_token = p.eatToken(.keyword_switch) orelse return null;
2695 return try p.expectSwitchSuffix(if (is_labeled) switch_token - 2 else switch_token);2516 return try p.expectSwitchSuffix(if (is_labeled) switch_token - 2 else switch_token);
...@@ -2722,19 +2543,6 @@ fn expectSwitchSuffix(p: *Parse, main_token: TokenIndex) !Node.Index {...@@ -2722,19 +2543,6 @@ fn expectSwitchSuffix(p: *Parse, main_token: TokenIndex) !Node.Index {
2722 });2543 });
2723}2544}
27242545
2725/// AsmExpr <- KEYWORD_asm KEYWORD_volatile? LPAREN Expr AsmOutput? RPAREN
2726///
2727/// AsmOutput <- COLON AsmOutputList AsmInput?
2728///
2729/// AsmInput <- COLON AsmInputList AsmClobbers?
2730///
2731/// AsmClobbers <- COLON Expr
2732///
2733/// StringList <- (STRINGLITERAL COMMA)* STRINGLITERAL?
2734///
2735/// AsmOutputList <- (AsmOutputItem COMMA)* AsmOutputItem?
2736///
2737/// AsmInputList <- (AsmInputItem COMMA)* AsmInputItem?
2738fn expectAsmExpr(p: *Parse) !Node.Index {2546fn expectAsmExpr(p: *Parse) !Node.Index {
2739 const asm_token = p.assertToken(.keyword_asm);2547 const asm_token = p.assertToken(.keyword_asm);
2740 _ = p.eatToken(.keyword_volatile);2548 _ = p.eatToken(.keyword_volatile);
...@@ -2804,7 +2612,6 @@ fn expectAsmExpr(p: *Parse) !Node.Index {...@@ -2804,7 +2612,6 @@ fn expectAsmExpr(p: *Parse) !Node.Index {
2804 });2612 });
2805}2613}
28062614
2807/// AsmOutputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERALSINGLE LPAREN (MINUSRARROW TypeExpr / IDENTIFIER) RPAREN
2808fn parseAsmOutputItem(p: *Parse) !?Node.Index {2615fn parseAsmOutputItem(p: *Parse) !?Node.Index {
2809 _ = p.eatToken(.l_bracket) orelse return null;2616 _ = p.eatToken(.l_bracket) orelse return null;
2810 const identifier = try p.expectToken(.identifier);2617 const identifier = try p.expectToken(.identifier);
...@@ -2830,7 +2637,6 @@ fn parseAsmOutputItem(p: *Parse) !?Node.Index {...@@ -2830,7 +2637,6 @@ fn parseAsmOutputItem(p: *Parse) !?Node.Index {
2830 });2637 });
2831}2638}
28322639
2833/// AsmInputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERALSINGLE LPAREN Expr RPAREN
2834fn parseAsmInputItem(p: *Parse) !?Node.Index {2640fn parseAsmInputItem(p: *Parse) !?Node.Index {
2835 _ = p.eatToken(.l_bracket) orelse return null;2641 _ = p.eatToken(.l_bracket) orelse return null;
2836 const identifier = try p.expectToken(.identifier);2642 const identifier = try p.expectToken(.identifier);
...@@ -2849,17 +2655,14 @@ fn parseAsmInputItem(p: *Parse) !?Node.Index {...@@ -2849,17 +2655,14 @@ fn parseAsmInputItem(p: *Parse) !?Node.Index {
2849 });2655 });
2850}2656}
28512657
2852/// BreakLabel <- COLON IDENTIFIER
2853fn parseBreakLabel(p: *Parse) Error!OptionalTokenIndex {2658fn parseBreakLabel(p: *Parse) Error!OptionalTokenIndex {
2854 return if (p.eatTokens(&.{ .colon, .identifier })) |i| .fromToken(i + 1) else .none;2659 return if (p.eatTokens(&.{ .colon, .identifier })) |i| .fromToken(i + 1) else .none;
2855}2660}
28562661
2857/// BlockLabel <- IDENTIFIER COLON
2858fn parseBlockLabel(p: *Parse) ?TokenIndex {2662fn parseBlockLabel(p: *Parse) ?TokenIndex {
2859 return p.eatTokens(&.{ .identifier, .colon });2663 return p.eatTokens(&.{ .identifier, .colon });
2860}2664}
28612665
2862/// FieldInit <- DOT IDENTIFIER EQUAL Expr
2863fn parseFieldInit(p: *Parse) !?Node.Index {2666fn parseFieldInit(p: *Parse) !?Node.Index {
2864 if (p.eatTokens(&.{ .period, .identifier, .equal })) |_| {2667 if (p.eatTokens(&.{ .period, .identifier, .equal })) |_| {
2865 return try p.expectExpr();2668 return try p.expectExpr();
...@@ -2874,7 +2677,6 @@ fn expectFieldInit(p: *Parse) !Node.Index {...@@ -2874,7 +2677,6 @@ fn expectFieldInit(p: *Parse) !Node.Index {
2874 return p.fail(.expected_initializer);2677 return p.fail(.expected_initializer);
2875}2678}
28762679
2877/// WhileContinueExpr <- COLON LPAREN AssignExpr RPAREN
2878fn parseWhileContinueExpr(p: *Parse) !?Node.Index {2680fn parseWhileContinueExpr(p: *Parse) !?Node.Index {
2879 _ = p.eatToken(.colon) orelse return null;2681 _ = p.eatToken(.colon) orelse return null;
2880 _ = try p.expectToken(.l_paren);2682 _ = try p.expectToken(.l_paren);
...@@ -2883,7 +2685,6 @@ fn parseWhileContinueExpr(p: *Parse) !?Node.Index {...@@ -2883,7 +2685,6 @@ fn parseWhileContinueExpr(p: *Parse) !?Node.Index {
2883 return node;2685 return node;
2884}2686}
28852687
2886/// LinkSection <- KEYWORD_linksection LPAREN Expr RPAREN
2887fn parseLinkSection(p: *Parse) !?Node.Index {2688fn parseLinkSection(p: *Parse) !?Node.Index {
2888 _ = p.eatToken(.keyword_linksection) orelse return null;2689 _ = p.eatToken(.keyword_linksection) orelse return null;
2889 _ = try p.expectToken(.l_paren);2690 _ = try p.expectToken(.l_paren);
...@@ -2892,7 +2693,6 @@ fn parseLinkSection(p: *Parse) !?Node.Index {...@@ -2892,7 +2693,6 @@ fn parseLinkSection(p: *Parse) !?Node.Index {
2892 return expr_node;2693 return expr_node;
2893}2694}
28942695
2895/// CallConv <- KEYWORD_callconv LPAREN Expr RPAREN
2896fn parseCallconv(p: *Parse) !?Node.Index {2696fn parseCallconv(p: *Parse) !?Node.Index {
2897 _ = p.eatToken(.keyword_callconv) orelse return null;2697 _ = p.eatToken(.keyword_callconv) orelse return null;
2898 _ = try p.expectToken(.l_paren);2698 _ = try p.expectToken(.l_paren);
...@@ -2901,7 +2701,6 @@ fn parseCallconv(p: *Parse) !?Node.Index {...@@ -2901,7 +2701,6 @@ fn parseCallconv(p: *Parse) !?Node.Index {
2901 return expr_node;2701 return expr_node;
2902}2702}
29032703
2904/// AddrSpace <- KEYWORD_addrspace LPAREN Expr RPAREN
2905fn parseAddrSpace(p: *Parse) !?Node.Index {2704fn parseAddrSpace(p: *Parse) !?Node.Index {
2906 _ = p.eatToken(.keyword_addrspace) orelse return null;2705 _ = p.eatToken(.keyword_addrspace) orelse return null;
2907 _ = try p.expectToken(.l_paren);2706 _ = try p.expectToken(.l_paren);
...@@ -2913,12 +2712,6 @@ fn parseAddrSpace(p: *Parse) !?Node.Index {...@@ -2913,12 +2712,6 @@ fn parseAddrSpace(p: *Parse) !?Node.Index {
2913/// This function can return null nodes and then still return nodes afterwards,2712/// This function can return null nodes and then still return nodes afterwards,
2914/// such as in the case of anytype and `...`. Caller must look for rparen to find2713/// such as in the case of anytype and `...`. Caller must look for rparen to find
2915/// out when there are no more param decls left.2714/// out when there are no more param decls left.
2916///
2917/// ParamDecl <- doc_comment? (KEYWORD_noalias / KEYWORD_comptime / !KEYWORD_comptime) (IDENTIFIER COLON / !(IDENTIFIER COLON)) ParamType
2918///
2919/// ParamType
2920/// <- KEYWORD_anytype
2921/// / TypeExpr
2922fn expectParamDecl(p: *Parse) !?Node.Index {2715fn expectParamDecl(p: *Parse) !?Node.Index {
2923 _ = try p.eatDocComments();2716 _ = try p.eatDocComments();
2924 switch (p.tokenTag(p.tok_i)) {2717 switch (p.tokenTag(p.tok_i)) {
...@@ -2937,7 +2730,6 @@ fn expectParamDecl(p: *Parse) !?Node.Index {...@@ -2937,7 +2730,6 @@ fn expectParamDecl(p: *Parse) !?Node.Index {
2937 }2730 }
2938}2731}
29392732
2940/// Payload <- PIPE IDENTIFIER PIPE
2941fn parsePayload(p: *Parse) Error!OptionalTokenIndex {2733fn parsePayload(p: *Parse) Error!OptionalTokenIndex {
2942 _ = p.eatToken(.pipe) orelse return .none;2734 _ = p.eatToken(.pipe) orelse return .none;
2943 const identifier = try p.expectToken(.identifier);2735 const identifier = try p.expectToken(.identifier);
...@@ -2945,7 +2737,6 @@ fn parsePayload(p: *Parse) Error!OptionalTokenIndex {...@@ -2945,7 +2737,6 @@ fn parsePayload(p: *Parse) Error!OptionalTokenIndex {
2945 return .fromToken(identifier);2737 return .fromToken(identifier);
2946}2738}
29472739
2948/// PtrPayload <- PIPE ASTERISK? IDENTIFIER PIPE
2949fn parsePtrPayload(p: *Parse) Error!OptionalTokenIndex {2740fn parsePtrPayload(p: *Parse) Error!OptionalTokenIndex {
2950 _ = p.eatToken(.pipe) orelse return .none;2741 _ = p.eatToken(.pipe) orelse return .none;
2951 _ = p.eatToken(.asterisk);2742 _ = p.eatToken(.asterisk);
...@@ -2955,8 +2746,6 @@ fn parsePtrPayload(p: *Parse) Error!OptionalTokenIndex {...@@ -2955,8 +2746,6 @@ fn parsePtrPayload(p: *Parse) Error!OptionalTokenIndex {
2955}2746}
29562747
2957/// Returns the first identifier token, if any.2748/// Returns the first identifier token, if any.
2958///
2959/// PtrIndexPayload <- PIPE ASTERISK? IDENTIFIER (COMMA IDENTIFIER)? PIPE
2960fn parsePtrIndexPayload(p: *Parse) Error!OptionalTokenIndex {2749fn parsePtrIndexPayload(p: *Parse) Error!OptionalTokenIndex {
2961 _ = p.eatToken(.pipe) orelse return .none;2750 _ = p.eatToken(.pipe) orelse return .none;
2962 _ = p.eatToken(.asterisk);2751 _ = p.eatToken(.asterisk);
...@@ -2968,11 +2757,6 @@ fn parsePtrIndexPayload(p: *Parse) Error!OptionalTokenIndex {...@@ -2968,11 +2757,6 @@ fn parsePtrIndexPayload(p: *Parse) Error!OptionalTokenIndex {
2968 return .fromToken(identifier);2757 return .fromToken(identifier);
2969}2758}
29702759
2971/// SwitchProng <- KEYWORD_inline? SwitchCase EQUALRARROW PtrIndexPayload? AssignExpr
2972///
2973/// SwitchCase
2974/// <- SwitchItem (COMMA SwitchItem)* COMMA?
2975/// / KEYWORD_else
2976fn parseSwitchProng(p: *Parse) !?Node.Index {2760fn parseSwitchProng(p: *Parse) !?Node.Index {
2977 const scratch_top = p.scratch.items.len;2761 const scratch_top = p.scratch.items.len;
2978 defer p.scratch.shrinkRetainingCapacity(scratch_top);2762 defer p.scratch.shrinkRetainingCapacity(scratch_top);
...@@ -3015,7 +2799,6 @@ fn parseSwitchProng(p: *Parse) !?Node.Index {...@@ -3015,7 +2799,6 @@ fn parseSwitchProng(p: *Parse) !?Node.Index {
3015 }2799 }
3016}2800}
30172801
3018/// SwitchItem <- Expr (DOT3 Expr)?
3019fn parseSwitchItem(p: *Parse) !?Node.Index {2802fn parseSwitchItem(p: *Parse) !?Node.Index {
3020 const expr = try p.parseExpr() orelse return null;2803 const expr = try p.parseExpr() orelse return null;
30212804
...@@ -3043,22 +2826,6 @@ const PtrModifiers = struct {...@@ -3043,22 +2826,6 @@ const PtrModifiers = struct {
3043 bit_range_end: Node.OptionalIndex,2826 bit_range_end: Node.OptionalIndex,
3044};2827};
30452828
3046/// PtrMods
3047/// <- PtrMod* ByteAlign? PtrMod* AddrSpace? PtrMod*
3048/// / PtrMod* AddrSpace? PtrMod* ByteAlign? PtrMod*
3049///
3050/// SinglePtrMods
3051/// <- PtrMod* BitAlign? PtrMod* AddrSpace? PtrMod*
3052/// / PtrMod* AddrSpace? PtrMod* BitAlign? PtrMod*
3053///
3054/// PtrMod
3055/// <- KEYWORD_allowzero
3056/// / KEYWORD_const
3057/// / KEYWORD_volatile
3058///
3059/// AddrSpace <- KEYWORD_addrspace LPAREN Expr RPAREN
3060/// ByteAlign <- KEYWORD_align LPAREN Expr RPAREN
3061/// BitAlign <- KEYWORD_align LPAREN Expr (COLON Expr COLON Expr)? RPAREN
3062fn parsePtrModifiers(p: *Parse, align_type: enum { bit_align, byte_align }) !PtrModifiers {2829fn parsePtrModifiers(p: *Parse, align_type: enum { bit_align, byte_align }) !PtrModifiers {
3063 var result: PtrModifiers = .{2830 var result: PtrModifiers = .{
3064 .align_node = .none,2831 .align_node = .none,
...@@ -3102,16 +2869,6 @@ fn parsePtrModifiers(p: *Parse, align_type: enum { bit_align, byte_align }) !Ptr...@@ -3102,16 +2869,6 @@ fn parsePtrModifiers(p: *Parse, align_type: enum { bit_align, byte_align }) !Ptr
3102 }2869 }
3103}2870}
31042871
3105/// SuffixOp
3106/// <- LBRACKET Expr (DOT2 Expr? (COLON Expr)?)? RBRACKET
3107/// / DOT IDENTIFIER
3108/// / DOTASTERISK
3109/// / DOT QUESTIONMARK
3110/// / FnCallArguments
3111///
3112/// FnCallArguments <- LPAREN ExprList RPAREN
3113///
3114/// ExprList <- (Expr COMMA)* Expr?
3115fn parseSuffixOp(p: *Parse, lhs: Node.Index) !?Node.Index {2872fn parseSuffixOp(p: *Parse, lhs: Node.Index) !?Node.Index {
3116 switch (p.tokenTag(p.tok_i)) {2873 switch (p.tokenTag(p.tok_i)) {
3117 .l_bracket => {2874 .l_bracket => {
...@@ -3246,14 +3003,6 @@ fn parseSuffixOp(p: *Parse, lhs: Node.Index) !?Node.Index {...@@ -3246,14 +3003,6 @@ fn parseSuffixOp(p: *Parse, lhs: Node.Index) !?Node.Index {
3246}3003}
32473004
3248/// Caller must have already verified the first token.3005/// Caller must have already verified the first token.
3249///
3250/// ContainerDeclAuto <- ContainerDeclType LBRACE ContainerMembers RBRACE
3251///
3252/// ContainerDeclType
3253/// <- KEYWORD_struct (LPAREN Expr RPAREN)?
3254/// / KEYWORD_opaque
3255/// / KEYWORD_enum (LPAREN Expr RPAREN)?
3256/// / KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)?
3257fn expectContainerDeclAuto(p: *Parse) !Node.Index {3006fn expectContainerDeclAuto(p: *Parse) !Node.Index {
3258 const main_token = p.nextToken();3007 const main_token = p.nextToken();
3259 const arg_expr = switch (p.tokenTag(main_token)) {3008 const arg_expr = switch (p.tokenTag(main_token)) {
...@@ -3407,8 +3156,6 @@ fn parseCStyleContainer(p: *Parse) Error!bool {...@@ -3407,8 +3156,6 @@ fn parseCStyleContainer(p: *Parse) Error!bool {
3407}3156}
34083157
3409/// Holds temporary data until we are ready to construct the full ContainerDecl AST node.3158/// Holds temporary data until we are ready to construct the full ContainerDecl AST node.
3410///
3411/// ByteAlign <- KEYWORD_align LPAREN Expr RPAREN
3412fn parseByteAlign(p: *Parse) !?Node.Index {3159fn parseByteAlign(p: *Parse) !?Node.Index {
3413 _ = p.eatToken(.keyword_align) orelse return null;3160 _ = p.eatToken(.keyword_align) orelse return null;
3414 _ = try p.expectToken(.l_paren);3161 _ = try p.expectToken(.l_paren);
...@@ -3417,7 +3164,6 @@ fn parseByteAlign(p: *Parse) !?Node.Index {...@@ -3417,7 +3164,6 @@ fn parseByteAlign(p: *Parse) !?Node.Index {
3417 return expr;3164 return expr;
3418}3165}
34193166
3420/// SwitchProngList <- (SwitchProng COMMA)* SwitchProng?
3421fn parseSwitchProngList(p: *Parse) !Node.SubRange {3167fn parseSwitchProngList(p: *Parse) !Node.SubRange {
3422 const scratch_top = p.scratch.items.len;3168 const scratch_top = p.scratch.items.len;
3423 defer p.scratch.shrinkRetainingCapacity(scratch_top);3169 defer p.scratch.shrinkRetainingCapacity(scratch_top);
...@@ -3438,7 +3184,6 @@ fn parseSwitchProngList(p: *Parse) !Node.SubRange {...@@ -3438,7 +3184,6 @@ fn parseSwitchProngList(p: *Parse) !Node.SubRange {
3438 return p.listToSpan(p.scratch.items[scratch_top..]);3184 return p.listToSpan(p.scratch.items[scratch_top..]);
3439}3185}
34403186
3441/// ParamDeclList <- (ParamDecl COMMA)* (ParamDecl / DOT3 COMMA?)?
3442fn parseParamDeclList(p: *Parse) !SmallSpan {3187fn parseParamDeclList(p: *Parse) !SmallSpan {
3443 _ = try p.expectToken(.l_paren);3188 _ = try p.expectToken(.l_paren);
3444 const scratch_top = p.scratch.items.len;3189 const scratch_top = p.scratch.items.len;
...@@ -3475,9 +3220,6 @@ fn parseParamDeclList(p: *Parse) !SmallSpan {...@@ -3475,9 +3220,6 @@ fn parseParamDeclList(p: *Parse) !SmallSpan {
3475 };3220 };
3476}3221}
34773222
3478/// FnCallArguments <- LPAREN ExprList RPAREN
3479///
3480/// ExprList <- (Expr COMMA)* Expr?
3481fn expectBuiltinCall(p: *Parse) !Node.Index {3223fn expectBuiltinCall(p: *Parse) !Node.Index {
3482 const builtin_token = p.assertToken(.builtin);3224 const builtin_token = p.assertToken(.builtin);
3483 _ = p.eatToken(.l_paren) orelse {3225 _ = p.eatToken(.l_paren) orelse {
...@@ -3526,11 +3268,6 @@ fn expectBuiltinCall(p: *Parse) !Node.Index {...@@ -3526,11 +3268,6 @@ fn expectBuiltinCall(p: *Parse) !Node.Index {
3526 }3268 }
3527}3269}
35283270
3529/// IfExpr <- IfPrefix Expr (KEYWORD_else Payload? Expr / !KEYWORD_else)
3530///
3531/// IfTypeExpr <- IfPrefix TypeExpr (KEYWORD_else Payload? TypeExpr / !KEYWORD_else)
3532///
3533/// IfPrefix <- KEYWORD_if LPAREN Expr RPAREN PtrPayload?
3534fn expectIf(p: *Parse, comptime bodyParseFn: fn (p: *Parse) Error!Node.Index) !Node.Index {3271fn expectIf(p: *Parse, comptime bodyParseFn: fn (p: *Parse) Error!Node.Index) !Node.Index {
3535 const if_token = p.assertToken(.keyword_if);3272 const if_token = p.assertToken(.keyword_if);
3536 _ = try p.expectToken(.l_paren);3273 _ = try p.expectToken(.l_paren);
...@@ -3564,9 +3301,6 @@ fn expectIf(p: *Parse, comptime bodyParseFn: fn (p: *Parse) Error!Node.Index) !N...@@ -3564,9 +3301,6 @@ fn expectIf(p: *Parse, comptime bodyParseFn: fn (p: *Parse) Error!Node.Index) !N
3564 });3301 });
3565}3302}
35663303
3567/// ForExpr <- ForPrefix Expr (KEYWORD_else Expr / !KEYWORD_else)
3568///
3569/// ForTypeExpr <- ForPrefix TypeExpr (KEYWORD_else TypeExpr / !KEYWORD_else)
3570fn expectFor(p: *Parse, comptime bodyParseFn: fn (p: *Parse) Error!Node.Index) !Node.Index {3304fn expectFor(p: *Parse, comptime bodyParseFn: fn (p: *Parse) Error!Node.Index) !Node.Index {
3571 const for_token = p.assertToken(.keyword_for);3305 const for_token = p.assertToken(.keyword_for);
35723306