| ... | @@ -661,17 +661,53 @@ const Parser = struct { | ... | @@ -661,17 +661,53 @@ const Parser = struct { |
| 661 | p.i = pos_0; | 661 | p.i = pos_0; |
| 662 | if (p.parseIfExpr()) break :blk_0 true; | 662 | if (p.parseIfExpr()) break :blk_0 true; |
| 663 | p.i = pos_0; | 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 | p.i = pos_0; | 677 | p.i = pos_0; |
| 666 | if (p.parseKEYWORD_comptime() and p.parseExpr()) break :blk_0 true; | 678 | if (p.parseKEYWORD_comptime() and p.parseExpr()) break :blk_0 true; |
| 667 | p.i = pos_0; | 679 | p.i = pos_0; |
| 668 | if (p.parseKEYWORD_nosuspend() and p.parseExpr()) break :blk_0 true; | 680 | if (p.parseKEYWORD_nosuspend() and p.parseExpr()) break :blk_0 true; |
| 669 | p.i = pos_0; | 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 | p.i = pos_0; | 695 | p.i = pos_0; |
| 672 | if (p.parseKEYWORD_resume() and p.parseExpr()) break :blk_0 true; | 696 | if (p.parseKEYWORD_resume() and p.parseExpr()) break :blk_0 true; |
| 673 | p.i = pos_0; | 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 | p.i = pos_0; | 711 | p.i = pos_0; |
| 676 | if ((p.parseBlockLabel() or true) and p.parseLoopExpr()) break :blk_0 true; | 712 | if ((p.parseBlockLabel() or true) and p.parseLoopExpr()) break :blk_0 true; |
| 677 | p.i = pos_0; | 713 | p.i = pos_0; |
| ... | @@ -1314,12 +1350,31 @@ const Parser = struct { | ... | @@ -1314,12 +1350,31 @@ const Parser = struct { |
| 1314 | pub fn parseForItem(p: *Parser) bool { | 1350 | pub fn parseForItem(p: *Parser) bool { |
| 1315 | return blk_0: { | 1351 | return blk_0: { |
| 1316 | const pos_0 = p.i; | 1352 | const pos_0 = p.i; |
| 1317 | if (p.parseExpr() and (blk_3: { | 1353 | if (p.parseExpr() and blk_2: { |
| 1318 | const pos_3 = p.i; | 1354 | const pos_2 = p.i; |
| 1319 | if (p.parseDOT2() and (p.parseExpr() or true)) break :blk_3 true; | 1355 | if (p.parseDOT2() and blk_4: { |
| 1320 | p.i = pos_3; | 1356 | const pos_4 = p.i; |
| 1321 | break :blk_3 false; | 1357 | if (p.parseExpr()) break :blk_4 true; |
| 1322 | } or true)) break :blk_0 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 | p.i = pos_0; | 1378 | p.i = pos_0; |
| 1324 | break :blk_0 false; | 1379 | break :blk_0 false; |
| 1325 | }; | 1380 | }; |
| ... | @@ -1662,7 +1717,19 @@ const Parser = struct { | ... | @@ -1662,7 +1717,19 @@ const Parser = struct { |
| 1662 | const pos_0 = p.i; | 1717 | const pos_0 = p.i; |
| 1663 | if (p.parseLBRACKET() and p.parseExpr() and (blk_3: { | 1718 | if (p.parseLBRACKET() and p.parseExpr() and (blk_3: { |
| 1664 | const pos_3 = p.i; | 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 | const pos_6 = p.i; | 1733 | const pos_6 = p.i; |
| 1667 | if (p.parseCOLON() and p.parseExpr()) break :blk_6 true; | 1734 | if (p.parseCOLON() and p.parseExpr()) break :blk_6 true; |
| 1668 | p.i = pos_6; | 1735 | p.i = pos_6; |
| ... | @@ -1934,7 +2001,27 @@ const Parser = struct { | ... | @@ -1934,7 +2001,27 @@ const Parser = struct { |
| 1934 | break :blk_3 false; | 2001 | break :blk_3 false; |
| 1935 | }) {} | 2002 | }) {} |
| 1936 | break :blk_1 true; | 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 | p.i = pos_0; | 2025 | p.i = pos_0; |
| 1939 | break :blk_0 false; | 2026 | break :blk_0 false; |
| 1940 | }; | 2027 | }; |