Commit 515945f
committed
[Parse] Avoid skipping bodies with
While skipping, if we encounter a token that looks
like it could be the start of a `/.../` regex
literal, fall back to parsing the function or type
body normally, as such a token could become a
regex literal. As such, it could treat `{` and
`}` as literal, or otherwise have contents that
would be lexically invalid Swift.
To avoid falling back in too many cases, we apply
the existing regex literal heuristics. Cases that
pass the heuristic fall back to regular parsing.
Cases that fail the heuristic are further checked
to make sure they wouldn't contain an unbalanced
`{` or `}`, but otherwise are allowed to be
skipped. This allows us to continue skipping for
most occurrences of infix and prefix `/`.
This is meant as a lower risk workaround to fix the
the issue, we ought to go back to handling regex
literals in the lexer.
Resolves rdar://95354010/.../ regex literals1 parent 325ba43 commit 515945f
File tree
8 files changed
+402
-51
lines changed- include/swift/Parse
- lib/Parse
- test/StringProcessing/Parse
8 files changed
+402
-51
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
580 | 580 | | |
581 | 581 | | |
582 | 582 | | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
583 | 590 | | |
584 | 591 | | |
585 | 592 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
718 | 718 | | |
719 | 719 | | |
720 | 720 | | |
721 | | - | |
722 | | - | |
723 | | - | |
724 | | - | |
725 | | - | |
726 | | - | |
727 | | - | |
728 | 721 | | |
729 | 722 | | |
730 | 723 | | |
| |||
1001 | 994 | | |
1002 | 995 | | |
1003 | 996 | | |
| 997 | + | |
| 998 | + | |
1004 | 999 | | |
1005 | 1000 | | |
1006 | 1001 | | |
| |||
1211 | 1206 | | |
1212 | 1207 | | |
1213 | 1208 | | |
1214 | | - | |
1215 | | - | |
1216 | | - | |
| 1209 | + | |
1217 | 1210 | | |
1218 | 1211 | | |
1219 | 1212 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1980 | 1980 | | |
1981 | 1981 | | |
1982 | 1982 | | |
| 1983 | + | |
| 1984 | + | |
| 1985 | + | |
| 1986 | + | |
| 1987 | + | |
| 1988 | + | |
| 1989 | + | |
| 1990 | + | |
| 1991 | + | |
| 1992 | + | |
| 1993 | + | |
| 1994 | + | |
| 1995 | + | |
| 1996 | + | |
| 1997 | + | |
| 1998 | + | |
| 1999 | + | |
| 2000 | + | |
| 2001 | + | |
| 2002 | + | |
| 2003 | + | |
| 2004 | + | |
| 2005 | + | |
| 2006 | + | |
| 2007 | + | |
| 2008 | + | |
| 2009 | + | |
| 2010 | + | |
| 2011 | + | |
| 2012 | + | |
| 2013 | + | |
| 2014 | + | |
| 2015 | + | |
| 2016 | + | |
| 2017 | + | |
| 2018 | + | |
| 2019 | + | |
| 2020 | + | |
| 2021 | + | |
| 2022 | + | |
| 2023 | + | |
| 2024 | + | |
| 2025 | + | |
| 2026 | + | |
| 2027 | + | |
| 2028 | + | |
| 2029 | + | |
| 2030 | + | |
| 2031 | + | |
| 2032 | + | |
| 2033 | + | |
| 2034 | + | |
| 2035 | + | |
| 2036 | + | |
| 2037 | + | |
| 2038 | + | |
| 2039 | + | |
| 2040 | + | |
1983 | 2041 | | |
1984 | 2042 | | |
1985 | 2043 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4121 | 4121 | | |
4122 | 4122 | | |
4123 | 4123 | | |
4124 | | - | |
| 4124 | + | |
| 4125 | + | |
4125 | 4126 | | |
4126 | 4127 | | |
4127 | 4128 | | |
4128 | 4129 | | |
| 4130 | + | |
4129 | 4131 | | |
4130 | 4132 | | |
4131 | 4133 | | |
| |||
4148 | 4150 | | |
4149 | 4151 | | |
4150 | 4152 | | |
| 4153 | + | |
| 4154 | + | |
| 4155 | + | |
| 4156 | + | |
| 4157 | + | |
| 4158 | + | |
| 4159 | + | |
| 4160 | + | |
| 4161 | + | |
| 4162 | + | |
| 4163 | + | |
| 4164 | + | |
4151 | 4165 | | |
4152 | 4166 | | |
4153 | 4167 | | |
| |||
5456 | 5470 | | |
5457 | 5471 | | |
5458 | 5472 | | |
| 5473 | + | |
5459 | 5474 | | |
5460 | 5475 | | |
5461 | 5476 | | |
5462 | 5477 | | |
5463 | | - | |
5464 | | - | |
| 5478 | + | |
| 5479 | + | |
| 5480 | + | |
5465 | 5481 | | |
5466 | 5482 | | |
5467 | 5483 | | |
| |||
6137 | 6153 | | |
6138 | 6154 | | |
6139 | 6155 | | |
6140 | | - | |
| 6156 | + | |
| 6157 | + | |
| 6158 | + | |
| 6159 | + | |
| 6160 | + | |
6141 | 6161 | | |
6142 | 6162 | | |
6143 | | - | |
6144 | 6163 | | |
6145 | | - | |
6146 | | - | |
| 6164 | + | |
| 6165 | + | |
| 6166 | + | |
| 6167 | + | |
6147 | 6168 | | |
6148 | 6169 | | |
6149 | 6170 | | |
| 6171 | + | |
| 6172 | + | |
| 6173 | + | |
| 6174 | + | |
| 6175 | + | |
| 6176 | + | |
6150 | 6177 | | |
6151 | | - | |
6152 | | - | |
6153 | | - | |
6154 | | - | |
6155 | | - | |
6156 | | - | |
6157 | | - | |
6158 | | - | |
| 6178 | + | |
| 6179 | + | |
| 6180 | + | |
6159 | 6181 | | |
6160 | 6182 | | |
6161 | 6183 | | |
| |||
7145 | 7167 | | |
7146 | 7168 | | |
7147 | 7169 | | |
7148 | | - | |
7149 | | - | |
7150 | | - | |
7151 | | - | |
7152 | | - | |
7153 | | - | |
7154 | | - | |
7155 | | - | |
7156 | | - | |
7157 | | - | |
7158 | | - | |
7159 | | - | |
7160 | | - | |
7161 | | - | |
7162 | | - | |
7163 | | - | |
7164 | | - | |
7165 | | - | |
7166 | | - | |
7167 | | - | |
7168 | | - | |
7169 | | - | |
7170 | | - | |
7171 | | - | |
7172 | 7170 | | |
7173 | 7171 | | |
7174 | 7172 | | |
| |||
7481 | 7479 | | |
7482 | 7480 | | |
7483 | 7481 | | |
7484 | | - | |
7485 | | - | |
| 7482 | + | |
| 7483 | + | |
| 7484 | + | |
| 7485 | + | |
| 7486 | + | |
| 7487 | + | |
| 7488 | + | |
| 7489 | + | |
| 7490 | + | |
| 7491 | + | |
| 7492 | + | |
| 7493 | + | |
| 7494 | + | |
| 7495 | + | |
| 7496 | + | |
| 7497 | + | |
| 7498 | + | |
| 7499 | + | |
| 7500 | + | |
| 7501 | + | |
| 7502 | + | |
| 7503 | + | |
| 7504 | + | |
| 7505 | + | |
| 7506 | + | |
| 7507 | + | |
| 7508 | + | |
7486 | 7509 | | |
7487 | 7510 | | |
7488 | 7511 | | |
7489 | 7512 | | |
| 7513 | + | |
| 7514 | + | |
| 7515 | + | |
| 7516 | + | |
7490 | 7517 | | |
7491 | 7518 | | |
7492 | 7519 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
887 | 887 | | |
888 | 888 | | |
889 | 889 | | |
| 890 | + | |
| 891 | + | |
890 | 892 | | |
891 | 893 | | |
892 | 894 | | |
| |||
Lines changed: 62 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
0 commit comments