Commit aede1f7
committed
Change matching option scoping behavior to match PCRE
Previously we would always parse a
"change matching option" sequence as a group, and
for the isolated syntax e.g `(?x)`, we would have
it implicitly wrap everything after in the same
group by having it do a recursive parse.
This matched the Oniguruma behavior for such
isolated groups, and was easy to implement, but
its behavior is quite unintuitive when it comes
to alternations, as e.g `a(?x)b|c` becomes
`a(?x:b|c)`, which may not be expected.
Instead, let's follow PCRE's behavior by having
such isolated cases affect the syntax options for
the remainder of the current group, including
across alternation branches. This is done by
lexing such cases as atoms (as they aren't really
group-like anymore), and having them change the
syntax options when we encounter them. The existing
scoping rules around groups take care of resetting
the options when we exit the scope.1 parent 6f7ab96 commit aede1f7
File tree
14 files changed
+404
-346
lines changed- Sources
- _RegexParser/Regex
- AST
- Parse
- Printing
- _StringProcessing
- Regex
- Utility
- Tests/RegexTests
14 files changed
+404
-346
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
72 | 72 | | |
73 | 73 | | |
74 | 74 | | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
75 | 78 | | |
76 | 79 | | |
77 | 80 | | |
| |||
91 | 94 | | |
92 | 95 | | |
93 | 96 | | |
| 97 | + | |
94 | 98 | | |
95 | 99 | | |
96 | 100 | | |
| |||
691 | 695 | | |
692 | 696 | | |
693 | 697 | | |
694 | | - | |
| 698 | + | |
695 | 699 | | |
696 | 700 | | |
697 | 701 | | |
| |||
731 | 735 | | |
732 | 736 | | |
733 | 737 | | |
734 | | - | |
| 738 | + | |
735 | 739 | | |
736 | 740 | | |
737 | 741 | | |
| |||
740 | 744 | | |
741 | 745 | | |
742 | 746 | | |
| 747 | + | |
| 748 | + | |
743 | 749 | | |
744 | 750 | | |
745 | 751 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
68 | 68 | | |
69 | 69 | | |
70 | 70 | | |
71 | | - | |
72 | | - | |
73 | | - | |
| 71 | + | |
74 | 72 | | |
75 | 73 | | |
76 | 74 | | |
| |||
87 | 85 | | |
88 | 86 | | |
89 | 87 | | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | 88 | | |
106 | 89 | | |
107 | 90 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
712 | 712 | | |
713 | 713 | | |
714 | 714 | | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
715 | 731 | | |
716 | 732 | | |
717 | 733 | | |
| |||
852 | 868 | | |
853 | 869 | | |
854 | 870 | | |
855 | | - | |
| 871 | + | |
856 | 872 | | |
857 | 873 | | |
858 | 874 | | |
| |||
877 | 893 | | |
878 | 894 | | |
879 | 895 | | |
880 | | - | |
881 | | - | |
882 | | - | |
883 | | - | |
884 | | - | |
885 | | - | |
886 | | - | |
887 | | - | |
888 | | - | |
889 | | - | |
| 896 | + | |
890 | 897 | | |
891 | 898 | | |
892 | 899 | | |
893 | 900 | | |
894 | 901 | | |
895 | | - | |
| 902 | + | |
896 | 903 | | |
897 | 904 | | |
898 | 905 | | |
| |||
1041 | 1048 | | |
1042 | 1049 | | |
1043 | 1050 | | |
1044 | | - | |
1045 | | - | |
1046 | | - | |
1047 | | - | |
1048 | | - | |
1049 | | - | |
1050 | | - | |
1051 | | - | |
1052 | | - | |
1053 | | - | |
1054 | | - | |
1055 | | - | |
| 1051 | + | |
| 1052 | + | |
1056 | 1053 | | |
1057 | 1054 | | |
1058 | 1055 | | |
| |||
1239 | 1236 | | |
1240 | 1237 | | |
1241 | 1238 | | |
1242 | | - | |
1243 | | - | |
1244 | | - | |
1245 | | - | |
1246 | | - | |
1247 | | - | |
1248 | | - | |
1249 | | - | |
1250 | | - | |
| 1239 | + | |
| 1240 | + | |
| 1241 | + | |
| 1242 | + | |
| 1243 | + | |
| 1244 | + | |
| 1245 | + | |
| 1246 | + | |
| 1247 | + | |
| 1248 | + | |
| 1249 | + | |
| 1250 | + | |
1251 | 1251 | | |
1252 | | - | |
1253 | 1252 | | |
1254 | 1253 | | |
1255 | 1254 | | |
| |||
1478 | 1477 | | |
1479 | 1478 | | |
1480 | 1479 | | |
| 1480 | + | |
| 1481 | + | |
| 1482 | + | |
| 1483 | + | |
| 1484 | + | |
| 1485 | + | |
| 1486 | + | |
| 1487 | + | |
| 1488 | + | |
| 1489 | + | |
| 1490 | + | |
| 1491 | + | |
| 1492 | + | |
1481 | 1493 | | |
1482 | | - | |
| 1494 | + | |
1483 | 1495 | | |
1484 | 1496 | | |
1485 | 1497 | | |
| |||
1493 | 1505 | | |
1494 | 1506 | | |
1495 | 1507 | | |
| 1508 | + | |
| 1509 | + | |
| 1510 | + | |
1496 | 1511 | | |
1497 | 1512 | | |
1498 | 1513 | | |
| |||
1753 | 1768 | | |
1754 | 1769 | | |
1755 | 1770 | | |
1756 | | - | |
| 1771 | + | |
| 1772 | + | |
| 1773 | + | |
1757 | 1774 | | |
1758 | 1775 | | |
1759 | 1776 | | |
1760 | 1777 | | |
1761 | 1778 | | |
1762 | 1779 | | |
| 1780 | + | |
| 1781 | + | |
| 1782 | + | |
| 1783 | + | |
| 1784 | + | |
1763 | 1785 | | |
1764 | 1786 | | |
1765 | 1787 | | |
| |||
1828 | 1850 | | |
1829 | 1851 | | |
1830 | 1852 | | |
1831 | | - | |
1832 | | - | |
| 1853 | + | |
| 1854 | + | |
1833 | 1855 | | |
1834 | 1856 | | |
1835 | 1857 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
282 | 282 | | |
283 | 283 | | |
284 | 284 | | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
285 | 318 | | |
286 | 319 | | |
287 | 320 | | |
288 | 321 | | |
289 | 322 | | |
290 | 323 | | |
291 | | - | |
292 | | - | |
293 | | - | |
294 | | - | |
295 | | - | |
296 | | - | |
297 | | - | |
298 | 324 | | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
309 | | - | |
310 | | - | |
311 | | - | |
| 325 | + | |
312 | 326 | | |
313 | 327 | | |
314 | 328 | | |
315 | 329 | | |
316 | 330 | | |
317 | | - | |
318 | | - | |
319 | | - | |
320 | | - | |
| 331 | + | |
321 | 332 | | |
322 | 333 | | |
323 | 334 | | |
| |||
409 | 420 | | |
410 | 421 | | |
411 | 422 | | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
412 | 428 | | |
413 | 429 | | |
414 | 430 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
156 | 156 | | |
157 | 157 | | |
158 | 158 | | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
159 | 162 | | |
160 | 163 | | |
161 | 164 | | |
| |||
225 | 228 | | |
226 | 229 | | |
227 | 230 | | |
228 | | - | |
229 | | - | |
230 | | - | |
231 | | - | |
232 | | - | |
233 | | - | |
234 | | - | |
235 | | - | |
236 | | - | |
237 | | - | |
238 | | - | |
239 | | - | |
240 | | - | |
241 | | - | |
242 | | - | |
243 | | - | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
244 | 246 | | |
245 | 247 | | |
246 | 248 | | |
| |||
0 commit comments