| ... | ... | @@ -661,17 +661,53 @@ const Parser = struct { |
| 661 | 661 | p.i = pos_0; |
| 662 | 662 | if (p.parseIfExpr()) break :blk_0 true; |
| 663 | 663 | p.i = pos_0; |
| 664 | | if (p.parseKEYWORD_break() and (p.parseBreakLabel() or true) and (p.parseExpr() or true)) break :blk_0 true; |
| 664 | if (p.parseKEYWORD_break() and (p.parseBreakLabel() or true) and blk_2: { |
| 665 | const pos_2 = p.i; |
| 666 | if (p.parseExpr()) break :blk_2 true; |
| 667 | p.i = pos_2; |
| 668 | if (blk_3: { |
| 669 | const pos_3 = p.i; |
| 670 | const match_3 = p.parseExprPrefix(); |
| 671 | p.i = pos_3; |
| 672 | break :blk_3 !match_3; |
| 673 | }) break :blk_2 true; |
| 674 | p.i = pos_2; |
| 675 | break :blk_2 false; |
| 676 | }) break :blk_0 true; |
| 665 | 677 | p.i = pos_0; |
| 666 | 678 | if (p.parseKEYWORD_comptime() and p.parseExpr()) break :blk_0 true; |
| 667 | 679 | p.i = pos_0; |
| 668 | 680 | if (p.parseKEYWORD_nosuspend() and p.parseExpr()) break :blk_0 true; |
| 669 | 681 | p.i = pos_0; |
| 670 | | if (p.parseKEYWORD_continue() and (p.parseBreakLabel() or true) and (p.parseExpr() or true)) break :blk_0 true; |
| 682 | if (p.parseKEYWORD_continue() and (p.parseBreakLabel() or true) and blk_2: { |
| 683 | const pos_2 = p.i; |
| 684 | if (p.parseExpr()) break :blk_2 true; |
| 685 | p.i = pos_2; |
| 686 | if (blk_3: { |
| 687 | const pos_3 = p.i; |
| 688 | const match_3 = p.parseExprPrefix(); |
| 689 | p.i = pos_3; |
| 690 | break :blk_3 !match_3; |
| 691 | }) break :blk_2 true; |
| 692 | p.i = pos_2; |
| 693 | break :blk_2 false; |
| 694 | }) break :blk_0 true; |
| 671 | 695 | p.i = pos_0; |
| 672 | 696 | if (p.parseKEYWORD_resume() and p.parseExpr()) break :blk_0 true; |
| 673 | 697 | p.i = pos_0; |
| 674 | | if (p.parseKEYWORD_return() and (p.parseExpr() or true)) break :blk_0 true; |
| 698 | if (p.parseKEYWORD_return() and blk_2: { |
| 699 | const pos_2 = p.i; |
| 700 | if (p.parseExpr()) break :blk_2 true; |
| 701 | p.i = pos_2; |
| 702 | if (blk_3: { |
| 703 | const pos_3 = p.i; |
| 704 | const match_3 = p.parseExprPrefix(); |
| 705 | p.i = pos_3; |
| 706 | break :blk_3 !match_3; |
| 707 | }) break :blk_2 true; |
| 708 | p.i = pos_2; |
| 709 | break :blk_2 false; |
| 710 | }) break :blk_0 true; |
| 675 | 711 | p.i = pos_0; |
| 676 | 712 | if ((p.parseBlockLabel() or true) and p.parseLoopExpr()) break :blk_0 true; |
| 677 | 713 | p.i = pos_0; |
| ... | ... | @@ -1314,12 +1350,31 @@ const Parser = struct { |
| 1314 | 1350 | pub fn parseForItem(p: *Parser) bool { |
| 1315 | 1351 | return blk_0: { |
| 1316 | 1352 | const pos_0 = p.i; |
| 1317 | | if (p.parseExpr() and (blk_3: { |
| 1318 | | const pos_3 = p.i; |
| 1319 | | if (p.parseDOT2() and (p.parseExpr() or true)) break :blk_3 true; |
| 1320 | | p.i = pos_3; |
| 1321 | | break :blk_3 false; |
| 1322 | | } or true)) break :blk_0 true; |
| 1353 | if (p.parseExpr() and blk_2: { |
| 1354 | const pos_2 = p.i; |
| 1355 | if (p.parseDOT2() and blk_4: { |
| 1356 | const pos_4 = p.i; |
| 1357 | if (p.parseExpr()) break :blk_4 true; |
| 1358 | p.i = pos_4; |
| 1359 | if (blk_5: { |
| 1360 | const pos_5 = p.i; |
| 1361 | const match_5 = p.parseExprPrefix(); |
| 1362 | p.i = pos_5; |
| 1363 | break :blk_5 !match_5; |
| 1364 | }) break :blk_4 true; |
| 1365 | p.i = pos_4; |
| 1366 | break :blk_4 false; |
| 1367 | }) break :blk_2 true; |
| 1368 | p.i = pos_2; |
| 1369 | if (blk_3: { |
| 1370 | const pos_3 = p.i; |
| 1371 | const match_3 = p.parseDOT2(); |
| 1372 | p.i = pos_3; |
| 1373 | break :blk_3 !match_3; |
| 1374 | }) break :blk_2 true; |
| 1375 | p.i = pos_2; |
| 1376 | break :blk_2 false; |
| 1377 | }) break :blk_0 true; |
| 1323 | 1378 | p.i = pos_0; |
| 1324 | 1379 | break :blk_0 false; |
| 1325 | 1380 | }; |
| ... | ... | @@ -1662,7 +1717,19 @@ const Parser = struct { |
| 1662 | 1717 | const pos_0 = p.i; |
| 1663 | 1718 | if (p.parseLBRACKET() and p.parseExpr() and (blk_3: { |
| 1664 | 1719 | const pos_3 = p.i; |
| 1665 | | if (p.parseDOT2() and (p.parseExpr() or true) and (blk_6: { |
| 1720 | if (p.parseDOT2() and blk_5: { |
| 1721 | const pos_5 = p.i; |
| 1722 | if (p.parseExpr()) break :blk_5 true; |
| 1723 | p.i = pos_5; |
| 1724 | if (blk_6: { |
| 1725 | const pos_6 = p.i; |
| 1726 | const match_6 = p.parseExprPrefix(); |
| 1727 | p.i = pos_6; |
| 1728 | break :blk_6 !match_6; |
| 1729 | }) break :blk_5 true; |
| 1730 | p.i = pos_5; |
| 1731 | break :blk_5 false; |
| 1732 | } and (blk_6: { |
| 1666 | 1733 | const pos_6 = p.i; |
| 1667 | 1734 | if (p.parseCOLON() and p.parseExpr()) break :blk_6 true; |
| 1668 | 1735 | p.i = pos_6; |
| ... | ... | @@ -1934,7 +2001,27 @@ const Parser = struct { |
| 1934 | 2001 | break :blk_3 false; |
| 1935 | 2002 | }) {} |
| 1936 | 2003 | break :blk_1 true; |
| 1937 | | } and (p.parseExpr() or true)) break :blk_0 true; |
| 2004 | } and blk_2: { |
| 2005 | const pos_2 = p.i; |
| 2006 | if (p.parseExpr()) break :blk_2 true; |
| 2007 | p.i = pos_2; |
| 2008 | if (blk_3: { |
| 2009 | const pos_3 = p.i; |
| 2010 | const match_3 = p.parseExprPrefix(); |
| 2011 | p.i = pos_3; |
| 2012 | break :blk_3 !match_3; |
| 2013 | }) break :blk_2 true; |
| 2014 | p.i = pos_2; |
| 2015 | break :blk_2 false; |
| 2016 | }) break :blk_0 true; |
| 2017 | p.i = pos_0; |
| 2018 | break :blk_0 false; |
| 2019 | }; |
| 2020 | } |
| 2021 | pub fn parseExprPrefix(p: *Parser) bool { |
| 2022 | return blk_0: { |
| 2023 | const pos_0 = p.i; |
| 2024 | if (p.parseASTERISK()) break :blk_0 true; |
| 1938 | 2025 | p.i = pos_0; |
| 1939 | 2026 | break :blk_0 false; |
| 1940 | 2027 | }; |