| 3501 | |
| 3502 | @support.skip_wasi_stack_overflow() |
| 3503 | def test_parser_deeply_nested_patterns(self): |
| 3504 | # Deeply nested patterns can cause exponential backtracking when parsing. |
| 3505 | # See gh-93671 for more information. |
| 3506 | |
| 3507 | levels = 100 |
| 3508 | |
| 3509 | patterns = [ |
| 3510 | "A" + "(" * levels + ")" * levels, |
| 3511 | "{1:" * levels + "1" + "}" * levels, |
| 3512 | "[" * levels + "1" + "]" * levels, |
| 3513 | ] |
| 3514 | |
| 3515 | for pattern in patterns: |
| 3516 | with self.subTest(pattern): |
| 3517 | code = inspect.cleandoc(""" |
| 3518 | match None: |
| 3519 | case {}: |
| 3520 | pass |
| 3521 | """.format(pattern)) |
| 3522 | compile(code, "<string>", "exec") |
| 3523 | |
| 3524 | |
| 3525 | if __name__ == "__main__": |