diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 71ccf1bcbe..b2681cec59 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -42,7 +42,7 @@ jobs: - "!crates/ruff_formatter/**" - "!crates/ruff_dev/**" - "!crates/ruff_shrinking/**" - - scripts/check_ecosystem.py + - scripts/* formatter: - Cargo.toml @@ -56,6 +56,7 @@ jobs: - crates/ruff_text_size/** - crates/ruff_python_parser/** - crates/ruff_dev/** + - scripts/* cargo-fmt: name: "cargo fmt" @@ -327,7 +328,7 @@ jobs: name: "Formatter ecosystem and progress checks" runs-on: ubuntu-latest needs: determine_changes - if: needs.determine_changes.outputs.formatter == 'true' + if: needs.determine_changes.outputs.formatter == 'true' || github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v3 - name: "Install Rust toolchain" @@ -337,9 +338,6 @@ jobs: - name: "Formatter progress" run: scripts/formatter_ecosystem_checks.sh - name: "Github step summary" - run: grep "similarity index" target/progress_projects_log.txt | sort > $GITHUB_STEP_SUMMARY - # CPython is not black formatted, so we run only the stability check - - name: "Clone CPython 3.10" - run: git clone --branch 3.10 --depth 1 https://github.com/python/cpython.git crates/ruff/resources/test/cpython - - name: "Check CPython stability" - run: cargo run --bin ruff_dev -- format-dev --stability-check crates/ruff/resources/test/cpython + run: cat target/progress_projects_stats.txt > $GITHUB_STEP_SUMMARY + - name: "Remove checkouts from cache" + run: rm -r target/progress_projects diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 146ce520a1..8a691c0290 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -40,7 +40,7 @@ jobs: run: mkdocs build --strict -f mkdocs.generated.yml - name: "Deploy to Cloudflare Pages" if: ${{ env.CF_API_TOKEN_EXISTS == 'true' }} - uses: cloudflare/wrangler-action@2.0.0 + uses: cloudflare/wrangler-action@3.0.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} accountId: ${{ secrets.CF_ACCOUNT_ID }} diff --git a/.github/workflows/playground.yaml b/.github/workflows/playground.yaml index 819ade66b2..ee0e6f65bf 100644 --- a/.github/workflows/playground.yaml +++ b/.github/workflows/playground.yaml @@ -40,7 +40,7 @@ jobs: working-directory: playground - name: "Deploy to Cloudflare Pages" if: ${{ env.CF_API_TOKEN_EXISTS == 'true' }} - uses: cloudflare/wrangler-action@2.0.0 + uses: cloudflare/wrangler-action@3.0.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} accountId: ${{ secrets.CF_ACCOUNT_ID }} diff --git a/BREAKING_CHANGES.md b/BREAKING_CHANGES.md index f8c7b7913b..c10e07250f 100644 --- a/BREAKING_CHANGES.md +++ b/BREAKING_CHANGES.md @@ -1,5 +1,15 @@ # Breaking Changes +## 0.0.283 / 0.284 + +### The target Python version now defaults to 3.8 instead of 3.10 ([#6397](https://github.com/astral-sh/ruff/pull/6397)) + +Previously, when a target Python version was not specified, Ruff would use a default of Python 3.10. However, it is safer to default to an _older_ Python version to avoid assuming the availability of new features. We now default to the oldest supported Python version which is currently Python 3.8. + +(We still support Python 3.7 but since [it has reached EOL](https://devguide.python.org/versions/#unsupported-versions) we've decided not to make it the default here.) + +Note this change was announced in 0.0.283 but not active until 0.0.284. + ## 0.0.277 ### `.ipynb_checkpoints`, `.pyenv`, `.pytest_cache`, and `.vscode` are now excluded by default ([#5513](https://github.com/astral-sh/ruff/pull/5513)) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cc73c69cbb..6250515efd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -131,7 +131,6 @@ At time of writing, the repository includes the following crates: - `crates/ruff_macros`: proc macro crate containing macros used by Ruff. - `crates/ruff_python_ast`: library crate containing Python-specific AST types and utilities. - `crates/ruff_python_codegen`: library crate containing utilities for generating Python source code. -- `crates/ruff_python_codegen`: library crate containing utilities for generating Python source code. - `crates/ruff_python_formatter`: library crate implementing the Python formatter. Emits an intermediate representation for each node, which `ruff_formatter` prints based on the configured line length. @@ -572,7 +571,7 @@ An alternative is to convert the perf data to `flamegraph.svg` using [flamegraph](https://github.com/flamegraph-rs/flamegraph) (`cargo install flamegraph`): ```shell -flamegraph --perfdata perf.data +flamegraph --perfdata perf.data --no-inline ``` #### Mac diff --git a/Cargo.lock b/Cargo.lock index 622032c09a..64150585ee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,6 +14,18 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "0.7.20" @@ -800,7 +812,7 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flake8-to-ruff" -version = "0.0.282" +version = "0.0.284" dependencies = [ "anyhow", "clap", @@ -991,6 +1003,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "imara-diff" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e98c1d0ad70fc91b8b9654b1f33db55e59579d3b3de2bffdced0fdb810570cb8" +dependencies = [ + "ahash", + "hashbrown 0.12.3", +] + [[package]] name = "imperative" version = "1.0.4" @@ -2042,7 +2064,7 @@ dependencies = [ [[package]] name = "ruff" -version = "0.0.282" +version = "0.0.284" dependencies = [ "annotate-snippets 0.9.1", "anyhow", @@ -2119,6 +2141,7 @@ dependencies = [ "ruff", "ruff_python_ast", "ruff_python_formatter", + "ruff_python_index", "ruff_python_parser", "serde", "serde_json", @@ -2141,7 +2164,7 @@ dependencies = [ [[package]] name = "ruff_cli" -version = "0.0.282" +version = "0.0.284" dependencies = [ "annotate-snippets 0.9.1", "anyhow", @@ -2197,6 +2220,7 @@ dependencies = [ "anyhow", "clap", "ignore", + "imara-diff", "indicatif", "indoc", "itertools", @@ -2330,6 +2354,7 @@ dependencies = [ "similar", "smallvec", "thiserror", + "unicode-width", ] [[package]] @@ -2353,7 +2378,6 @@ dependencies = [ "is-macro", "itertools", "lexical-parse-float", - "num-bigint", "num-traits", "rand", "unic-ucd-category", @@ -2400,6 +2424,7 @@ dependencies = [ "num-traits", "ruff_index", "ruff_python_ast", + "ruff_python_parser", "ruff_python_stdlib", "ruff_source_file", "ruff_text_size", diff --git a/Cargo.toml b/Cargo.toml index f8c0a066de..7100aeec35 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -49,6 +49,7 @@ toml = { version = "0.7.2" } tracing = "0.1.37" tracing-indicatif = "0.3.4" tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } +unicode-width = "0.1.10" wsl = { version = "0.1.0" } # v1.0.1 diff --git a/README.md b/README.md index 67ac480f6a..84f754de3d 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ An extremely fast Python linter, written in Rust. - 🤝 Python 3.11 compatibility - 📦 Built-in caching, to avoid re-analyzing unchanged files - 🔧 Autofix support, for automatic error correction (e.g., automatically remove unused imports) -- 📏 Over [500 built-in rules](https://beta.ruff.rs/docs/rules/) +- 📏 Over [600 built-in rules](https://beta.ruff.rs/docs/rules/) - ⚖️ [Near-parity](https://beta.ruff.rs/docs/faq/#how-does-ruff-compare-to-flake8) with the built-in Flake8 rule set - 🔌 Native re-implementations of dozens of Flake8 plugins, like flake8-bugbear @@ -140,7 +140,7 @@ Ruff can also be used as a [pre-commit](https://pre-commit.com) hook: ```yaml - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: v0.0.282 + rev: v0.0.284 hooks: - id: ruff ``` @@ -211,8 +211,8 @@ line-length = 88 # Allow unused variables when underscore-prefixed. dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" -# Assume Python 3.10. -target-version = "py310" +# Assume Python 3.8 +target-version = "py38" [tool.ruff.mccabe] # Unlike Flake8, default to a complexity level of 10. @@ -233,7 +233,7 @@ linting command. -**Ruff supports over 500 lint rules**, many of which are inspired by popular tools like Flake8, +**Ruff supports over 600 lint rules**, many of which are inspired by popular tools like Flake8, isort, pyupgrade, and others. Regardless of the rule's origin, Ruff re-implements every rule in Rust as a first-party feature. diff --git a/crates/flake8_to_ruff/Cargo.toml b/crates/flake8_to_ruff/Cargo.toml index 662ee703e4..d14ebcc308 100644 --- a/crates/flake8_to_ruff/Cargo.toml +++ b/crates/flake8_to_ruff/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "flake8-to-ruff" -version = "0.0.282" +version = "0.0.284" description = """ Convert Flake8 configuration files to Ruff configuration files. """ diff --git a/crates/ruff/Cargo.toml b/crates/ruff/Cargo.toml index fe8fa3e225..dd8f42778b 100644 --- a/crates/ruff/Cargo.toml +++ b/crates/ruff/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ruff" -version = "0.0.282" +version = "0.0.284" publish = false authors = { workspace = true } edition = { workspace = true } @@ -62,8 +62,6 @@ quick-junit = { version = "0.3.2" } regex = { workspace = true } result-like = { version = "0.4.6" } rustc-hash = { workspace = true } - - schemars = { workspace = true, optional = true } semver = { version = "1.0.16" } serde = { workspace = true } @@ -77,7 +75,7 @@ strum_macros = { workspace = true } thiserror = { version = "1.0.43" } toml = { workspace = true } typed-arena = { version = "2.0.2" } -unicode-width = { version = "0.1.10" } +unicode-width = { workspace = true } unicode_names2 = { version = "0.6.0", git = "https://github.com/youknowone/unicode_names2.git", rev = "4ce16aa85cbcdd9cc830410f1a72ef9a235f2fde" } wsl = { version = "0.1.0" } diff --git a/crates/ruff/resources/test/fixtures/flake8_bandit/S108.py b/crates/ruff/resources/test/fixtures/flake8_bandit/S108.py index d60b808cb5..1689af66e6 100644 --- a/crates/ruff/resources/test/fixtures/flake8_bandit/S108.py +++ b/crates/ruff/resources/test/fixtures/flake8_bandit/S108.py @@ -14,3 +14,19 @@ with open("/dev/shm/unit/test", "w") as f: # not ok by config with open("/foo/bar", "w") as f: f.write("def") + +# Using `tempfile` module should be ok +import tempfile +from tempfile import TemporaryDirectory + +with tempfile.NamedTemporaryFile(dir="/tmp") as f: + f.write(b"def") + +with tempfile.NamedTemporaryFile(dir="/var/tmp") as f: + f.write(b"def") + +with tempfile.TemporaryDirectory(dir="/dev/shm") as d: + pass + +with TemporaryDirectory(dir="/tmp") as d: + pass diff --git a/crates/ruff/resources/test/fixtures/flake8_bugbear/B006_B008.py b/crates/ruff/resources/test/fixtures/flake8_bugbear/B006_B008.py index e104189015..4b3492bb4c 100644 --- a/crates/ruff/resources/test/fixtures/flake8_bugbear/B006_B008.py +++ b/crates/ruff/resources/test/fixtures/flake8_bugbear/B006_B008.py @@ -68,6 +68,20 @@ def this_is_also_wrong(value={}): ... +class Foo: + @staticmethod + def this_is_also_wrong_and_more_indented(value={}): + pass + + +def multiline_arg_wrong(value={ + +}): + ... + +def single_line_func_wrong(value = {}): ... + + def and_this(value=set()): ... @@ -261,3 +275,32 @@ def mutable_annotations( d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), ): pass + + +def single_line_func_wrong(value: dict[str, str] = {}): + """Docstring""" + + +def single_line_func_wrong(value: dict[str, str] = {}): + """Docstring""" + ... + + +def single_line_func_wrong(value: dict[str, str] = {}): + """Docstring"""; ... + + +def single_line_func_wrong(value: dict[str, str] = {}): + """Docstring"""; \ + ... + + +def single_line_func_wrong(value: dict[str, str] = { + # This is a comment +}): + """Docstring""" + + +def single_line_func_wrong(value: dict[str, str] = {}) \ + : \ + """Docstring""" diff --git a/crates/ruff/resources/test/fixtures/flake8_bugbear/B014.py b/crates/ruff/resources/test/fixtures/flake8_bugbear/B014.py index 38473457b3..8a03e75121 100644 --- a/crates/ruff/resources/test/fixtures/flake8_bugbear/B014.py +++ b/crates/ruff/resources/test/fixtures/flake8_bugbear/B014.py @@ -74,3 +74,10 @@ try: except (ValueError, binascii.Error): # binascii.Error is a subclass of ValueError. pass + + +# https://github.com/astral-sh/ruff/issues/6412 +try: + pass +except (ValueError, ValueError, TypeError): + pass diff --git a/crates/ruff/resources/test/fixtures/flake8_pyi/PYI016.py b/crates/ruff/resources/test/fixtures/flake8_pyi/PYI016.py index 9c3b530edf..6b11efb181 100644 --- a/crates/ruff/resources/test/fixtures/flake8_pyi/PYI016.py +++ b/crates/ruff/resources/test/fixtures/flake8_pyi/PYI016.py @@ -1,20 +1,19 @@ +import typing + # Shouldn't affect non-union field types. field1: str # Should emit for duplicate field types. field2: str | str # PYI016: Duplicate union member `str` - # Should emit for union types in arguments. def func1(arg1: int | int): # PYI016: Duplicate union member `int` print(arg1) - # Should emit for unions in return types. def func2() -> str | str: # PYI016: Duplicate union member `str` return "my string" - # Should emit in longer unions, even if not directly adjacent. field3: str | str | int # PYI016: Duplicate union member `str` field4: int | int | str # PYI016: Duplicate union member `int` @@ -33,3 +32,55 @@ field10: (str | int) | str # PYI016: Duplicate union member `str` # Should emit for nested unions. field11: dict[int | int, str] + +# Should emit for unions with more than two cases +field12: int | int | int # Error +field13: int | int | int | int # Error + +# Should emit for unions with more than two cases, even if not directly adjacent +field14: int | int | str | int # Error + +# Should emit for duplicate literal types; also covered by PYI030 +field15: typing.Literal[1] | typing.Literal[1] # Error + +# Shouldn't emit if in new parent type +field16: int | dict[int, str] # OK + +# Shouldn't emit if not in a union parent +field17: dict[int, int] # OK + +# Should emit in cases with newlines +field18: typing.Union[ + set[ + int # foo + ], + set[ + int # bar + ], +] # Error, newline and comment will not be emitted in message + +# Should emit in cases with `typing.Union` instead of `|` +field19: typing.Union[int, int] # Error + +# Should emit in cases with nested `typing.Union` +field20: typing.Union[int, typing.Union[int, str]] # Error + +# Should emit in cases with mixed `typing.Union` and `|` +field21: typing.Union[int, int | str] # Error + +# Should emit only once in cases with multiple nested `typing.Union` +field22: typing.Union[int, typing.Union[int, typing.Union[int, int]]] # Error + +# Should emit in cases with newlines +field23: set[ # foo + int] | set[int] + +# Should emit twice (once for each `int` in the nested union, both of which are +# duplicates of the outer `int`), but not three times (which would indicate that +# we incorrectly re-checked the nested union). +field24: typing.Union[int, typing.Union[int, int]] # PYI016: Duplicate union member `int` + +# Should emit twice (once for each `int` in the nested union, both of which are +# duplicates of the outer `int`), but not three times (which would indicate that +# we incorrectly re-checked the nested union). +field25: typing.Union[int, int | int] # PYI016: Duplicate union member `int` diff --git a/crates/ruff/resources/test/fixtures/flake8_pyi/PYI016.pyi b/crates/ruff/resources/test/fixtures/flake8_pyi/PYI016.pyi index 1fe4d0a6c7..6b11efb181 100644 --- a/crates/ruff/resources/test/fixtures/flake8_pyi/PYI016.pyi +++ b/crates/ruff/resources/test/fixtures/flake8_pyi/PYI016.pyi @@ -74,3 +74,13 @@ field22: typing.Union[int, typing.Union[int, typing.Union[int, int]]] # Error # Should emit in cases with newlines field23: set[ # foo int] | set[int] + +# Should emit twice (once for each `int` in the nested union, both of which are +# duplicates of the outer `int`), but not three times (which would indicate that +# we incorrectly re-checked the nested union). +field24: typing.Union[int, typing.Union[int, int]] # PYI016: Duplicate union member `int` + +# Should emit twice (once for each `int` in the nested union, both of which are +# duplicates of the outer `int`), but not three times (which would indicate that +# we incorrectly re-checked the nested union). +field25: typing.Union[int, int | int] # PYI016: Duplicate union member `int` diff --git a/crates/ruff/resources/test/fixtures/flake8_pyi/PYI055.py b/crates/ruff/resources/test/fixtures/flake8_pyi/PYI055.py index 84b0caf2ad..adbc1f737a 100644 --- a/crates/ruff/resources/test/fixtures/flake8_pyi/PYI055.py +++ b/crates/ruff/resources/test/fixtures/flake8_pyi/PYI055.py @@ -1,7 +1,6 @@ import builtins from typing import Union - w: builtins.type[int] | builtins.type[str] | builtins.type[complex] x: type[int] | type[str] | type[float] y: builtins.type[int] | type[str] | builtins.type[complex] @@ -9,7 +8,9 @@ z: Union[type[float], type[complex]] z: Union[type[float, int], type[complex]] -def func(arg: type[int] | str | type[float]) -> None: ... +def func(arg: type[int] | str | type[float]) -> None: + ... + # OK x: type[int, str, float] @@ -17,4 +18,14 @@ y: builtins.type[int, str, complex] z: Union[float, complex] -def func(arg: type[int, float] | str) -> None: ... +def func(arg: type[int, float] | str) -> None: + ... + + +# OK +item: type[requests_mock.Mocker] | type[httpretty] = requests_mock.Mocker + + +def func(): + # PYI055 + item: type[requests_mock.Mocker] | type[httpretty] = requests_mock.Mocker diff --git a/crates/ruff/resources/test/fixtures/flake8_pyi/PYI055.pyi b/crates/ruff/resources/test/fixtures/flake8_pyi/PYI055.pyi index 84b0caf2ad..3cc530f770 100644 --- a/crates/ruff/resources/test/fixtures/flake8_pyi/PYI055.pyi +++ b/crates/ruff/resources/test/fixtures/flake8_pyi/PYI055.pyi @@ -1,14 +1,12 @@ import builtins from typing import Union - w: builtins.type[int] | builtins.type[str] | builtins.type[complex] x: type[int] | type[str] | type[float] y: builtins.type[int] | type[str] | builtins.type[complex] z: Union[type[float], type[complex]] z: Union[type[float, int], type[complex]] - def func(arg: type[int] | str | type[float]) -> None: ... # OK @@ -16,5 +14,11 @@ x: type[int, str, float] y: builtins.type[int, str, complex] z: Union[float, complex] - def func(arg: type[int, float] | str) -> None: ... + +# OK +item: type[requests_mock.Mocker] | type[httpretty] = requests_mock.Mocker + +def func(): + # PYI055 + item: type[requests_mock.Mocker] | type[httpretty] = requests_mock.Mocker diff --git a/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT009.py b/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT009.py index e25aef6fac..128c6b0325 100644 --- a/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT009.py +++ b/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT009.py @@ -80,3 +80,15 @@ class Test(unittest.TestCase): def test_assert_not_regexp_matches(self): self.assertNotRegex("abc", r"abc") # Error + + def test_fail_if(self): + self.failIf("abc") # Error + + def test_fail_unless(self): + self.failUnless("abc") # Error + + def test_fail_unless_equal(self): + self.failUnlessEqual(1, 2) # Error + + def test_fail_if_equal(self): + self.failIfEqual(1, 2) # Error diff --git a/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT014.py b/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT014.py new file mode 100644 index 0000000000..e81cbc15f5 --- /dev/null +++ b/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT014.py @@ -0,0 +1,26 @@ +import pytest + + +@pytest.mark.parametrize("x", [1, 1, 2]) +def test_error_literal(x): + ... + + +a = 1 +b = 2 +c = 3 + + +@pytest.mark.parametrize("x", [a, a, b, b, b, c]) +def test_error_expr_simple(x): + ... + + +@pytest.mark.parametrize("x", [(a, b), (a, b), (b, c)]) +def test_error_expr_complex(x): + ... + + +@pytest.mark.parametrize("x", [1, 2]) +def test_ok(x): + ... diff --git a/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT027_0.py b/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT027_0.py new file mode 100644 index 0000000000..b9614f0647 --- /dev/null +++ b/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT027_0.py @@ -0,0 +1,48 @@ +import unittest + + +class Test(unittest.TestCase): + def test_errors(self): + with self.assertRaises(ValueError): + raise ValueError + with self.assertRaises(expected_exception=ValueError): + raise ValueError + + with self.failUnlessRaises(ValueError): + raise ValueError + + with self.assertRaisesRegex(ValueError, "test"): + raise ValueError("test") + + with self.assertRaisesRegex(ValueError, expected_regex="test"): + raise ValueError("test") + + with self.assertRaisesRegex( + expected_exception=ValueError, expected_regex="test" + ): + raise ValueError("test") + + with self.assertRaisesRegex( + expected_regex="test", expected_exception=ValueError + ): + raise ValueError("test") + + with self.assertRaisesRegexp(ValueError, "test"): + raise ValueError("test") + + def test_unfixable_errors(self): + with self.assertRaises(ValueError, msg="msg"): + raise ValueError + + with self.assertRaises( + # comment + ValueError + ): + raise ValueError + + with ( + self + # comment + .assertRaises(ValueError) + ): + raise ValueError diff --git a/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT027_1.py b/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT027_1.py new file mode 100644 index 0000000000..708a582ad3 --- /dev/null +++ b/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT027_1.py @@ -0,0 +1,12 @@ +import unittest +import pytest + + +class Test(unittest.TestCase): + def test_pytest_raises(self): + with pytest.raises(ValueError): + raise ValueError + + def test_errors(self): + with self.assertRaises(ValueError): + raise ValueError diff --git a/crates/ruff/resources/test/fixtures/flake8_self/SLF001.py b/crates/ruff/resources/test/fixtures/flake8_self/SLF001.py index 5735e63751..0a5a560182 100644 --- a/crates/ruff/resources/test/fixtures/flake8_self/SLF001.py +++ b/crates/ruff/resources/test/fixtures/flake8_self/SLF001.py @@ -73,3 +73,7 @@ print(foo.__dict__) print(foo.__str__()) print(foo().__class__) print(foo._asdict()) + +import os + +os._exit() diff --git a/crates/ruff/resources/test/fixtures/flake8_tidy_imports/TID253.py b/crates/ruff/resources/test/fixtures/flake8_tidy_imports/TID253.py new file mode 100644 index 0000000000..d0d3d14845 --- /dev/null +++ b/crates/ruff/resources/test/fixtures/flake8_tidy_imports/TID253.py @@ -0,0 +1,31 @@ +## Banned modules ## +import torch + +from torch import * + +from tensorflow import a, b, c + +import torch as torch_wearing_a_trenchcoat + +# this should count as module level +x = 1; import tensorflow + +# banning a module also bans any submodules +import torch.foo.bar + +from tensorflow.foo import bar + +from torch.foo.bar import * + +# unlike TID251, inline imports are *not* banned +def my_cool_function(): + import tensorflow.foo.bar + +def another_cool_function(): + from torch.foo import bar + +def import_alias(): + from torch.foo import bar + +if TYPE_CHECKING: + import torch diff --git a/crates/ruff/resources/test/fixtures/flake8_type_checking/runtime_evaluated_base_classes_4.py b/crates/ruff/resources/test/fixtures/flake8_type_checking/runtime_evaluated_base_classes_4.py new file mode 100644 index 0000000000..55da289edc --- /dev/null +++ b/crates/ruff/resources/test/fixtures/flake8_type_checking/runtime_evaluated_base_classes_4.py @@ -0,0 +1,12 @@ +from __future__ import annotations + +from datetime import date + +from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column + + +class Birthday(DeclarativeBase): + + __tablename__ = "birthday" + id: Mapped[int] = mapped_column(primary_key=True) + day: Mapped[date] diff --git a/crates/ruff/resources/test/fixtures/flake8_unused_arguments/ARG.py b/crates/ruff/resources/test/fixtures/flake8_unused_arguments/ARG.py index 3aac4018c8..8905fba36a 100644 --- a/crates/ruff/resources/test/fixtures/flake8_unused_arguments/ARG.py +++ b/crates/ruff/resources/test/fixtures/flake8_unused_arguments/ARG.py @@ -202,3 +202,14 @@ class C: ### def f(x: None) -> None: _ = cast(Any, _identity)(x=x) + +### +# Unused arguments with `locals`. +### +def f(bar: str): + print(locals()) + + +class C: + def __init__(self, x) -> None: + print(locals()) diff --git a/crates/ruff/resources/test/fixtures/isort/required_imports/comments_and_newlines.py b/crates/ruff/resources/test/fixtures/isort/required_imports/comments_and_newlines.py new file mode 100644 index 0000000000..5d2462ab9f --- /dev/null +++ b/crates/ruff/resources/test/fixtures/isort/required_imports/comments_and_newlines.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 +# A copyright notice could go here + +# A linter directive could go here + +x = 1 diff --git a/crates/ruff/resources/test/fixtures/jupyter/line_magics.ipynb b/crates/ruff/resources/test/fixtures/jupyter/ipy_escape_command.ipynb similarity index 100% rename from crates/ruff/resources/test/fixtures/jupyter/line_magics.ipynb rename to crates/ruff/resources/test/fixtures/jupyter/ipy_escape_command.ipynb diff --git a/crates/ruff/resources/test/fixtures/jupyter/line_magics_expected.ipynb b/crates/ruff/resources/test/fixtures/jupyter/ipy_escape_command_expected.ipynb similarity index 100% rename from crates/ruff/resources/test/fixtures/jupyter/line_magics_expected.ipynb rename to crates/ruff/resources/test/fixtures/jupyter/ipy_escape_command_expected.ipynb diff --git a/crates/ruff/resources/test/fixtures/perflint/PERF203.py b/crates/ruff/resources/test/fixtures/perflint/PERF203.py index 14b3fa38a3..8a82c3c249 100644 --- a/crates/ruff/resources/test/fixtures/perflint/PERF203.py +++ b/crates/ruff/resources/test/fixtures/perflint/PERF203.py @@ -21,3 +21,29 @@ while i < 10: print("error") i += 1 + +# OK - no other way to write this +for i in range(10): + try: + print(f"{i}") + break + except: + print("error") + +# OK - no other way to write this +for i in range(10): + try: + print(f"{i}") + continue + except: + print("error") + + +# OK - no other way to write this +for i in range(10): + try: + print(f"{i}") + if i > 0: + break + except: + print("error") diff --git a/crates/ruff/resources/test/fixtures/pycodestyle/E402.py b/crates/ruff/resources/test/fixtures/pycodestyle/E402.py index 81e6306c7a..d594340785 100644 --- a/crates/ruff/resources/test/fixtures/pycodestyle/E402.py +++ b/crates/ruff/resources/test/fixtures/pycodestyle/E402.py @@ -30,3 +30,10 @@ def foo() -> None: if __name__ == "__main__": import g + +import h; import i + + +if __name__ == "__main__": + import j; \ +import k diff --git a/crates/ruff/resources/test/fixtures/pycodestyle/E501_2.py b/crates/ruff/resources/test/fixtures/pycodestyle/E501_2.py index 18ea839392..617b3ad7dc 100644 --- a/crates/ruff/resources/test/fixtures/pycodestyle/E501_2.py +++ b/crates/ruff/resources/test/fixtures/pycodestyle/E501_2.py @@ -1,11 +1,16 @@ -a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +# aaaa +# aaaaa + # a + # a + # aa + # aaa + # aaaa + # a + # aa + # aaa -b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - -c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - -d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +if True: # noqa: E501 + [12] + [12 ] + [1,2] + [1, 2] diff --git a/crates/ruff/resources/test/fixtures/pycodestyle/E721.py b/crates/ruff/resources/test/fixtures/pycodestyle/E721.py index 5f07803832..6eacc0cb0c 100644 --- a/crates/ruff/resources/test/fixtures/pycodestyle/E721.py +++ b/crates/ruff/resources/test/fixtures/pycodestyle/E721.py @@ -61,3 +61,30 @@ if x == types.X: #: E721 assert type(res) is int + + +class Foo: + def asdf(self, value: str | None): + #: E721 + if type(value) is str: + ... + + +class Foo: + def type(self): + pass + + def asdf(self, value: str | None): + #: E721 + if type(value) is str: + ... + + +class Foo: + def asdf(self, value: str | None): + def type(): + pass + + # Okay + if type(value) is str: + ... diff --git a/crates/ruff/resources/test/fixtures/pyflakes/F401_0.py b/crates/ruff/resources/test/fixtures/pyflakes/F401_0.py index 79c56bc099..dcec5beed4 100644 --- a/crates/ruff/resources/test/fixtures/pyflakes/F401_0.py +++ b/crates/ruff/resources/test/fixtures/pyflakes/F401_0.py @@ -92,3 +92,10 @@ match *0, 1, *2: case 0,: import x import y + + +# Test: access a sub-importation via an alias. +import foo.bar as bop +import foo.bar.baz + +print(bop.baz.read_csv("test.csv")) diff --git a/crates/ruff/resources/test/fixtures/pyflakes/F823.py b/crates/ruff/resources/test/fixtures/pyflakes/F823.py index 343150143e..d6c5ee7d44 100644 --- a/crates/ruff/resources/test/fixtures/pyflakes/F823.py +++ b/crates/ruff/resources/test/fixtures/pyflakes/F823.py @@ -70,3 +70,13 @@ import requests_mock as rm def requests_mock(requests_mock: rm.Mocker): print(rm.ANY) + + +import sklearn.base +import mlflow.sklearn + + +def f(): + import sklearn + + mlflow diff --git a/crates/ruff/resources/test/fixtures/pyflakes/F841_0.py b/crates/ruff/resources/test/fixtures/pyflakes/F841_0.py index 94bc0b6ca5..bde7153696 100644 --- a/crates/ruff/resources/test/fixtures/pyflakes/F841_0.py +++ b/crates/ruff/resources/test/fixtures/pyflakes/F841_0.py @@ -145,3 +145,9 @@ def f() -> None: obj = Foo() obj.do_thing() + +def f(): + try: + pass + except Exception as _: + pass diff --git a/crates/ruff/resources/test/fixtures/pylint/bad_dunder_method_name.py b/crates/ruff/resources/test/fixtures/pylint/bad_dunder_method_name.py new file mode 100644 index 0000000000..46d8be249b --- /dev/null +++ b/crates/ruff/resources/test/fixtures/pylint/bad_dunder_method_name.py @@ -0,0 +1,46 @@ +class Apples: + def _init_(self): # [bad-dunder-name] + pass + + def __hello__(self): # [bad-dunder-name] + print("hello") + + def __init_(self): # [bad-dunder-name] + # author likely unintentionally misspelled the correct init dunder. + pass + + def _init_(self): # [bad-dunder-name] + # author likely unintentionally misspelled the correct init dunder. + pass + + def ___neg__(self): # [bad-dunder-name] + # author likely accidentally added an additional `_` + pass + + def __inv__(self): # [bad-dunder-name] + # author likely meant to call the invert dunder method + pass + + def hello(self): + print("hello") + + def __init__(self): + pass + + def init(self): + # valid name even though someone could accidentally mean __init__ + pass + + def _protected_method(self): + print("Protected") + + def __private_method(self): + print("Private") + + @property + def __doc__(self): + return "Docstring" + + +def __foo_bar__(): # this is not checked by the [bad-dunder-name] rule + ... diff --git a/crates/ruff/resources/test/fixtures/pylint/bad_string_format_type.py b/crates/ruff/resources/test/fixtures/pylint/bad_string_format_type.py index 66d6f2a5fd..3fe6722401 100644 --- a/crates/ruff/resources/test/fixtures/pylint/bad_string_format_type.py +++ b/crates/ruff/resources/test/fixtures/pylint/bad_string_format_type.py @@ -13,6 +13,7 @@ print("foo %(foo)d bar %(bar)d" % {"foo": "1", "bar": "2"}) "%(key)d" % {"key": []} print("%d" % ("%s" % ("nested",),)) "%d" % ((1, 2, 3),) +"%d" % (1 if x > 0 else []) # False negatives WORD = "abc" @@ -55,3 +56,4 @@ r'\%03o' % (ord(c),) "%d" % (len(foo),) '(%r, %r, %r, %r)' % (hostname, address, username, '$PASSWORD') '%r' % ({'server_school_roles': server_school_roles, 'is_school_multiserver_domain': is_school_multiserver_domain}, ) +"%d" % (1 if x > 0 else 2) diff --git a/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_default.py b/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_default.py index c07de79871..9aa486678e 100644 --- a/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_default.py +++ b/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_default.py @@ -10,3 +10,4 @@ os.getenv("AA", "GOOD" + "BAD") os.getenv("AA", "GOOD" + 1) os.getenv("AA", "GOOD %s" % "BAD") os.getenv("B", Z) + diff --git a/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_value.py b/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_value.py index 23574d7b77..86de905340 100644 --- a/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_value.py +++ b/crates/ruff/resources/test/fixtures/pylint/invalid_envvar_value.py @@ -10,6 +10,8 @@ os.getenv(key="foo", default="bar") os.getenv(key=f"foo", default="bar") os.getenv(key="foo" + "bar", default=1) os.getenv(key=1 + "bar", default=1) # [invalid-envvar-value] +os.getenv("PATH_TEST" if using_clear_path else "PATH_ORIG") +os.getenv(1 if using_clear_path else "PATH_ORIG") AA = "aa" os.getenv(AA) diff --git a/crates/ruff/resources/test/fixtures/pylint/logging_too_few_args.py b/crates/ruff/resources/test/fixtures/pylint/logging_too_few_args.py index 2fc6f49ab5..65f021ea42 100644 --- a/crates/ruff/resources/test/fixtures/pylint/logging_too_few_args.py +++ b/crates/ruff/resources/test/fixtures/pylint/logging_too_few_args.py @@ -19,6 +19,10 @@ logging.error("Example log %s, %s", "foo", "bar", "baz", **kwargs) # do not handle keyword arguments logging.error("%(objects)d modifications: %(modifications)d errors: %(errors)d") +logging.info(msg="Hello %s") + +logging.info(msg="Hello %s %s") + import warning warning.warning("Hello %s %s", "World!") diff --git a/crates/ruff/resources/test/fixtures/pylint/logging_too_many_args.py b/crates/ruff/resources/test/fixtures/pylint/logging_too_many_args.py index c087b05c4e..c64641eaed 100644 --- a/crates/ruff/resources/test/fixtures/pylint/logging_too_many_args.py +++ b/crates/ruff/resources/test/fixtures/pylint/logging_too_many_args.py @@ -15,6 +15,10 @@ logging.error("Example log %s, %s", "foo", "bar", "baz", **kwargs) # do not handle keyword arguments logging.error("%(objects)d modifications: %(modifications)d errors: %(errors)d", {"objects": 1, "modifications": 1, "errors": 1}) +logging.info(msg="Hello") + +logging.info(msg="Hello", something="else") + import warning warning.warning("Hello %s", "World!", "again") diff --git a/crates/ruff/resources/test/fixtures/pylint/subprocess_run_without_check.py b/crates/ruff/resources/test/fixtures/pylint/subprocess_run_without_check.py new file mode 100644 index 0000000000..b329ba4510 --- /dev/null +++ b/crates/ruff/resources/test/fixtures/pylint/subprocess_run_without_check.py @@ -0,0 +1,13 @@ +import subprocess + +# Errors. +subprocess.run("ls") +subprocess.run("ls", shell=True) + +# Non-errors. +subprocess.run("ls", check=True) +subprocess.run("ls", check=False) +subprocess.run("ls", shell=True, check=True) +subprocess.run("ls", shell=True, check=False) +foo.run("ls") # Not a subprocess.run call. +subprocess.bar("ls") # Not a subprocess.run call. diff --git a/crates/ruff/resources/test/fixtures/pyupgrade/UP030_0.py b/crates/ruff/resources/test/fixtures/pyupgrade/UP030_0.py index 35b85eb3cc..37e3ba4d49 100644 --- a/crates/ruff/resources/test/fixtures/pyupgrade/UP030_0.py +++ b/crates/ruff/resources/test/fixtures/pyupgrade/UP030_0.py @@ -32,3 +32,30 @@ print( ) '{' '0}'.format(1) + +args = list(range(10)) +kwargs = {x: x for x in range(10)} + +"{0}".format(*args) + +"{0}".format(**kwargs) + +"{0}_{1}".format(*args) + +"{0}_{1}".format(1, *args) + +"{0}_{1}".format(1, 2, *args) + +"{0}_{1}".format(*args, 1, 2) + +"{0}_{1}_{2}".format(1, **kwargs) + +"{0}_{1}_{2}".format(1, 2, **kwargs) + +"{0}_{1}_{2}".format(1, 2, 3, **kwargs) + +"{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) + +"{1}_{0}".format(1, 2, *args) + +"{1}_{0}".format(1, 2) diff --git a/crates/ruff/resources/test/fixtures/pyupgrade/UP030_1.py b/crates/ruff/resources/test/fixtures/pyupgrade/UP030_1.py index 85fcf311f5..5cb750ece9 100644 --- a/crates/ruff/resources/test/fixtures/pyupgrade/UP030_1.py +++ b/crates/ruff/resources/test/fixtures/pyupgrade/UP030_1.py @@ -15,3 +15,17 @@ f"{0}".format(1) print(f"{0}".format(1)) ''.format(1) + +'{1} {0}'.format(*args) + +"{1}_{0}".format(*args, 1) + +"{1}_{0}".format(*args, 1, 2) + +"{1}_{0}".format(1, **kwargs) + +"{1}_{0}".format(1, foo=2) + +"{1}_{0}".format(1, 2, **kwargs) + +"{1}_{0}".format(1, 2, foo=3, bar=4) diff --git a/crates/ruff/resources/test/fixtures/pyupgrade/UP030_2.py b/crates/ruff/resources/test/fixtures/pyupgrade/UP030_2.py deleted file mode 100644 index 30f2d0c886..0000000000 --- a/crates/ruff/resources/test/fixtures/pyupgrade/UP030_2.py +++ /dev/null @@ -1,28 +0,0 @@ -# These SHOULD change - -args = list(range(10)) -kwargs = {x: x for x in range(10)} - -"{0}".format(*args) - -"{0}".format(**kwargs) - -"{0}_{1}".format(*args) - -"{0}_{1}".format(1, *args) - -"{1}_{0}".format(*args) - -"{1}_{0}".format(1, *args) - -"{0}_{1}".format(1, 2, *args) - -"{0}_{1}".format(*args, 1, 2) - -"{0}_{1}_{2}".format(1, **kwargs) - -"{0}_{1}_{2}".format(1, 2, **kwargs) - -"{0}_{1}_{2}".format(1, 2, 3, **kwargs) - -"{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) diff --git a/crates/ruff/resources/test/fixtures/pyupgrade/UP040.py b/crates/ruff/resources/test/fixtures/pyupgrade/UP040.py index 69854a8af7..49fb6f7c84 100644 --- a/crates/ruff/resources/test/fixtures/pyupgrade/UP040.py +++ b/crates/ruff/resources/test/fixtures/pyupgrade/UP040.py @@ -5,11 +5,42 @@ from typing import TypeAlias x: typing.TypeAlias = int x: TypeAlias = int - -# UP040 with generics (todo) +# UP040 simple generic T = typing.TypeVar["T"] x: typing.TypeAlias = list[T] +# UP040 call style generic +T = typing.TypeVar("T") +x: typing.TypeAlias = list[T] + +# UP040 bounded generic (todo) +T = typing.TypeVar("T", bound=int) +x: typing.TypeAlias = list[T] + +T = typing.TypeVar("T", int, str) +x: typing.TypeAlias = list[T] + +# UP040 contravariant generic (todo) +T = typing.TypeVar("T", contravariant=True) +x: typing.TypeAlias = list[T] + +# UP040 covariant generic (todo) +T = typing.TypeVar("T", covariant=True) +x: typing.TypeAlias = list[T] + +# UP040 in class scope +T = typing.TypeVar["T"] +class Foo: + # reference to global variable + x: typing.TypeAlias = list[T] + + # reference to class variable + TCLS = typing.TypeVar["TCLS"] + y: typing.TypeAlias = list[TCLS] + +# UP040 wont add generics in fix +T = typing.TypeVar(*args) +x: typing.TypeAlias = list[T] # OK x: TypeAlias diff --git a/crates/ruff/resources/test/fixtures/ruff/RUF100_4.py b/crates/ruff/resources/test/fixtures/ruff/RUF100_4.py new file mode 100644 index 0000000000..51830749f5 --- /dev/null +++ b/crates/ruff/resources/test/fixtures/ruff/RUF100_4.py @@ -0,0 +1,5 @@ +# ruff: noqa: RUF100 + +import os # noqa: F401 + +print(os.sep) diff --git a/crates/ruff/resources/test/fixtures/tryceratops/TRY003.py b/crates/ruff/resources/test/fixtures/tryceratops/TRY003.py index b6ae22682f..5de205fa4c 100644 --- a/crates/ruff/resources/test/fixtures/tryceratops/TRY003.py +++ b/crates/ruff/resources/test/fixtures/tryceratops/TRY003.py @@ -52,3 +52,7 @@ def good(a: int): def another_good(a): if a % 2 == 0: raise GoodArgCantBeEven(a) + + +def another_good(): + raise NotImplementedError("This is acceptable too") diff --git a/crates/ruff/src/autofix/edits.rs b/crates/ruff/src/autofix/edits.rs index 17736349a5..1ab80106af 100644 --- a/crates/ruff/src/autofix/edits.rs +++ b/crates/ruff/src/autofix/edits.rs @@ -179,16 +179,13 @@ fn is_only(vec: &[T], value: &T) -> bool { fn is_lone_child(child: &Stmt, parent: &Stmt) -> bool { match parent { Stmt::FunctionDef(ast::StmtFunctionDef { body, .. }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { body, .. }) | Stmt::ClassDef(ast::StmtClassDef { body, .. }) - | Stmt::With(ast::StmtWith { body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) => { + | Stmt::With(ast::StmtWith { body, .. }) => { if is_only(body, child) { return true; } } Stmt::For(ast::StmtFor { body, orelse, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { body, orelse, .. }) | Stmt::While(ast::StmtWhile { body, orelse, .. }) => { if is_only(body, child) || is_only(orelse, child) { return true; @@ -212,14 +209,7 @@ fn is_lone_child(child: &Stmt, parent: &Stmt) -> bool { handlers, orelse, finalbody, - range: _, - }) - | Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - range: _, + .. }) => { if is_only(body, child) || is_only(orelse, child) diff --git a/crates/ruff/src/checkers/ast/analyze/bindings.rs b/crates/ruff/src/checkers/ast/analyze/bindings.rs index 8cce5812eb..7a474640a7 100644 --- a/crates/ruff/src/checkers/ast/analyze/bindings.rs +++ b/crates/ruff/src/checkers/ast/analyze/bindings.rs @@ -16,9 +16,15 @@ pub(crate) fn bindings(checker: &mut Checker) { return; } - for binding in checker.semantic.bindings.iter() { + for binding in &*checker.semantic.bindings { if checker.enabled(Rule::UnusedVariable) { - if binding.kind.is_bound_exception() && !binding.is_used() { + if binding.kind.is_bound_exception() + && !binding.is_used() + && !checker + .settings + .dummy_variable_rgx + .is_match(binding.name(checker.locator)) + { let mut diagnostic = Diagnostic::new( pyflakes::rules::UnusedVariable { name: binding.name(checker.locator).to_string(), diff --git a/crates/ruff/src/checkers/ast/analyze/deferred_for_loops.rs b/crates/ruff/src/checkers/ast/analyze/deferred_for_loops.rs index ebacfc4778..8898e1df69 100644 --- a/crates/ruff/src/checkers/ast/analyze/deferred_for_loops.rs +++ b/crates/ruff/src/checkers/ast/analyze/deferred_for_loops.rs @@ -11,21 +11,18 @@ pub(crate) fn deferred_for_loops(checker: &mut Checker) { for snapshot in for_loops { checker.semantic.restore(snapshot); - if let Stmt::For(ast::StmtFor { + let Stmt::For(ast::StmtFor { target, iter, body, .. - }) - | Stmt::AsyncFor(ast::StmtAsyncFor { - target, iter, body, .. - }) = &checker.semantic.stmt() - { - if checker.enabled(Rule::UnusedLoopControlVariable) { - flake8_bugbear::rules::unused_loop_control_variable(checker, target, body); - } - if checker.enabled(Rule::IncorrectDictIterator) { - perflint::rules::incorrect_dict_iterator(checker, target, iter); - } - } else { - unreachable!("Expected Expr::For | Expr::AsyncFor"); + }) = checker.semantic.current_statement() + else { + unreachable!("Expected Stmt::For"); + }; + + if checker.enabled(Rule::UnusedLoopControlVariable) { + flake8_bugbear::rules::unused_loop_control_variable(checker, target, body); + } + if checker.enabled(Rule::IncorrectDictIterator) { + perflint::rules::incorrect_dict_iterator(checker, target, iter); } } } diff --git a/crates/ruff/src/checkers/ast/analyze/deferred_scopes.rs b/crates/ruff/src/checkers/ast/analyze/deferred_scopes.rs index ac7e675492..779b8d3ffe 100644 --- a/crates/ruff/src/checkers/ast/analyze/deferred_scopes.rs +++ b/crates/ruff/src/checkers/ast/analyze/deferred_scopes.rs @@ -1,5 +1,4 @@ use ruff_diagnostics::Diagnostic; -use ruff_python_ast::cast; use ruff_python_semantic::analyze::{branch_detection, visibility}; use ruff_python_semantic::{Binding, BindingKind, ScopeKind}; @@ -112,7 +111,11 @@ pub(crate) fn deferred_scopes(checker: &mut Checker) { // If the bindings are in different forks, abort. if shadowed.source.map_or(true, |left| { binding.source.map_or(true, |right| { - branch_detection::different_forks(left, right, &checker.semantic.stmts) + branch_detection::different_forks( + left, + right, + checker.semantic.statements(), + ) }) }) { continue; @@ -168,16 +171,25 @@ pub(crate) fn deferred_scopes(checker: &mut Checker) { continue; } - // If this is an overloaded function, abort. - if shadowed.kind.is_function_definition() - && visibility::is_overload( - cast::decorator_list( - checker.semantic.stmts[shadowed.source.unwrap()], - ), - &checker.semantic, - ) - { + let Some(statement_id) = shadowed.source else { continue; + }; + + // If this is an overloaded function, abort. + if shadowed.kind.is_function_definition() { + if checker + .semantic + .statement(statement_id) + .as_function_def_stmt() + .is_some_and(|function| { + visibility::is_overload( + &function.decorator_list, + &checker.semantic, + ) + }) + { + continue; + } } } else { // Only enforce cross-scope shadowing for imports. @@ -195,7 +207,11 @@ pub(crate) fn deferred_scopes(checker: &mut Checker) { // If the bindings are in different forks, abort. if shadowed.source.map_or(true, |left| { binding.source.map_or(true, |right| { - branch_detection::different_forks(left, right, &checker.semantic.stmts) + branch_detection::different_forks( + left, + right, + checker.semantic.statements(), + ) }) }) { continue; @@ -231,10 +247,7 @@ pub(crate) fn deferred_scopes(checker: &mut Checker) { flake8_pyi::rules::unused_private_typed_dict(checker, scope, &mut diagnostics); } - if matches!( - scope.kind, - ScopeKind::Function(_) | ScopeKind::AsyncFunction(_) | ScopeKind::Lambda(_) - ) { + if matches!(scope.kind, ScopeKind::Function(_) | ScopeKind::Lambda(_)) { if checker.enabled(Rule::UnusedVariable) { pyflakes::rules::unused_variable(checker, scope, &mut diagnostics); } @@ -260,10 +273,7 @@ pub(crate) fn deferred_scopes(checker: &mut Checker) { } } - if matches!( - scope.kind, - ScopeKind::Function(_) | ScopeKind::AsyncFunction(_) | ScopeKind::Module - ) { + if matches!(scope.kind, ScopeKind::Function(_) | ScopeKind::Module) { if enforce_typing_imports { let runtime_imports: Vec<&Binding> = checker .semantic diff --git a/crates/ruff/src/checkers/ast/analyze/definitions.rs b/crates/ruff/src/checkers/ast/analyze/definitions.rs index c1ff6947a8..a6d86cad5d 100644 --- a/crates/ruff/src/checkers/ast/analyze/definitions.rs +++ b/crates/ruff/src/checkers/ast/analyze/definitions.rs @@ -171,7 +171,7 @@ pub(crate) fn definitions(checker: &mut Checker) { expr.start(), )); - if pydocstyle::helpers::should_ignore_docstring(contents) { + if pydocstyle::helpers::should_ignore_docstring(expr) { #[allow(deprecated)] let location = checker.locator.compute_source_location(expr.start()); warn_user!( diff --git a/crates/ruff/src/checkers/ast/analyze/expression.rs b/crates/ruff/src/checkers/ast/analyze/expression.rs index 15e883042c..14278acc53 100644 --- a/crates/ruff/src/checkers/ast/analyze/expression.rs +++ b/crates/ruff/src/checkers/ast/analyze/expression.rs @@ -80,17 +80,9 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { Rule::RedundantLiteralUnion, Rule::UnnecessaryTypeUnion, ]) { - // Avoid duplicate checks if the parent is an `Union[...]` since these rules + // Avoid duplicate checks if the parent is a union, since these rules already // traverse nested unions. - let is_unchecked_union = checker - .semantic - .expr_grandparent() - .and_then(Expr::as_subscript_expr) - .map_or(true, |parent| { - !checker.semantic.match_typing_expr(&parent.value, "Union") - }); - - if is_unchecked_union { + if !checker.semantic.in_nested_union() { if checker.enabled(Rule::UnnecessaryLiteralUnion) { flake8_pyi::rules::unnecessary_literal_union(checker, expr); } @@ -206,11 +198,16 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { } ExprContext::Store => { if checker.enabled(Rule::NonLowercaseVariableInFunction) { - if checker.semantic.scope().kind.is_any_function() { + if checker.semantic.current_scope().kind.is_function() { // Ignore globals. - if !checker.semantic.scope().get(id).is_some_and(|binding_id| { - checker.semantic.binding(binding_id).is_global() - }) { + if !checker + .semantic + .current_scope() + .get(id) + .is_some_and(|binding_id| { + checker.semantic.binding(binding_id).is_global() + }) + { pep8_naming::rules::non_lowercase_variable_in_function( checker, expr, id, ); @@ -219,7 +216,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { } if checker.enabled(Rule::MixedCaseVariableInClassScope) { if let ScopeKind::Class(ast::StmtClassDef { arguments, .. }) = - &checker.semantic.scope().kind + &checker.semantic.current_scope().kind { pep8_naming::rules::mixed_case_variable_in_class_scope( checker, @@ -230,7 +227,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { } } if checker.enabled(Rule::MixedCaseVariableInGlobalScope) { - if matches!(checker.semantic.scope().kind, ScopeKind::Module) { + if matches!(checker.semantic.current_scope().kind, ScopeKind::Module) { pep8_naming::rules::mixed_case_variable_in_global_scope( checker, expr, id, ); @@ -243,7 +240,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { checker.diagnostics.push(diagnostic); } } - if let ScopeKind::Class(class_def) = checker.semantic.scope().kind { + if let ScopeKind::Class(class_def) = checker.semantic.current_scope().kind { if checker.enabled(Rule::BuiltinAttributeShadowing) { flake8_builtins::rules::builtin_attribute_shadowing( checker, class_def, id, *range, @@ -264,7 +261,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { pylint::rules::load_before_global_declaration(checker, id, expr); } } - Expr::Attribute(ast::ExprAttribute { attr, value, .. }) => { + Expr::Attribute(attribute) => { // Ex) typing.List[...] if checker.any_enabled(&[ Rule::FutureRewritableTypeAnnotation, @@ -326,7 +323,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { if checker.enabled(Rule::CollectionsNamedTuple) { flake8_pyi::rules::collections_named_tuple(checker, expr); } - pandas_vet::rules::attr(checker, attr, value, expr); + pandas_vet::rules::attr(checker, attribute); } Expr::Call( call @ ast::ExprCall { @@ -405,7 +402,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { ); } if checker.enabled(Rule::FormatLiterals) { - pyupgrade::rules::format_literals(checker, &summary, expr); + pyupgrade::rules::format_literals(checker, &summary, call); } if checker.enabled(Rule::FString) { pyupgrade::rules::f_strings( @@ -421,9 +418,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { if checker.enabled(Rule::BadStringFormatCharacter) { pylint::rules::bad_string_format_character::call( - checker, - val.as_str(), - location, + checker, val, location, ); } } @@ -668,7 +663,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { flake8_comprehensions::rules::unnecessary_map( checker, expr, - checker.semantic.expr_parent(), + checker.semantic.current_expression_parent(), func, args, ); @@ -678,10 +673,8 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { checker, expr, func, args, keywords, ); } - if checker.enabled(Rule::BooleanPositionalValueInFunctionCall) { - flake8_boolean_trap::rules::check_boolean_positional_value_in_function_call( - checker, args, func, - ); + if checker.enabled(Rule::BooleanPositionalValueInCall) { + flake8_boolean_trap::rules::boolean_positional_value_in_call(checker, args, func); } if checker.enabled(Rule::Debugger) { flake8_debugger::rules::debugger_call(checker, expr, func); @@ -763,9 +756,19 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { checker.diagnostics.push(diagnostic); } } + if checker.enabled(Rule::PytestUnittestRaisesAssertion) { + if let Some(diagnostic) = + flake8_pytest_style::rules::unittest_raises_assertion(checker, call) + { + checker.diagnostics.push(diagnostic); + } + } if checker.enabled(Rule::SubprocessPopenPreexecFn) { pylint::rules::subprocess_popen_preexec_fn(checker, call); } + if checker.enabled(Rule::SubprocessRunWithoutCheck) { + pylint::rules::subprocess_run_without_check(checker, call); + } if checker.any_enabled(&[ Rule::PytestRaisesWithoutException, Rule::PytestRaisesTooBroad, @@ -921,7 +924,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { pylint::rules::await_outside_async(checker, expr); } } - Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { + Expr::FString(ast::ExprFString { values, .. }) => { if checker.enabled(Rule::FStringMissingPlaceholders) { pyflakes::rules::f_string_missing_placeholders(expr, values, checker); } @@ -948,7 +951,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { range: _, }) => { if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), + value: Constant::Str(ast::StringConstant { value, .. }), .. }) = left.as_ref() { @@ -1082,47 +1085,34 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { } } - // Avoid duplicate checks if the parent is an `|` since these rules + // Avoid duplicate checks if the parent is a union, since these rules already // traverse nested unions. - let is_unchecked_union = !matches!( - checker.semantic.expr_parent(), - Some(Expr::BinOp(ast::ExprBinOp { - op: Operator::BitOr, - .. - })) - ); - if checker.enabled(Rule::DuplicateUnionMember) - && checker.semantic.in_type_definition() - && is_unchecked_union - { - flake8_pyi::rules::duplicate_union_member(checker, expr); - } - if checker.enabled(Rule::UnnecessaryLiteralUnion) && is_unchecked_union { - flake8_pyi::rules::unnecessary_literal_union(checker, expr); - } - if checker.enabled(Rule::RedundantLiteralUnion) && is_unchecked_union { - flake8_pyi::rules::redundant_literal_union(checker, expr); - } - if checker.enabled(Rule::UnnecessaryTypeUnion) && is_unchecked_union { - flake8_pyi::rules::unnecessary_type_union(checker, expr); + if !checker.semantic.in_nested_union() { + if checker.enabled(Rule::DuplicateUnionMember) + && checker.semantic.in_type_definition() + { + flake8_pyi::rules::duplicate_union_member(checker, expr); + } + if checker.enabled(Rule::UnnecessaryLiteralUnion) { + flake8_pyi::rules::unnecessary_literal_union(checker, expr); + } + if checker.enabled(Rule::RedundantLiteralUnion) { + flake8_pyi::rules::redundant_literal_union(checker, expr); + } + if checker.enabled(Rule::UnnecessaryTypeUnion) { + flake8_pyi::rules::unnecessary_type_union(checker, expr); + } } } - Expr::UnaryOp(ast::ExprUnaryOp { - op, - operand, - range: _, - }) => { - let check_not_in = checker.enabled(Rule::NotInTest); - let check_not_is = checker.enabled(Rule::NotIsTest); - if check_not_in || check_not_is { - pycodestyle::rules::not_tests( - checker, - expr, - *op, - operand, - check_not_in, - check_not_is, - ); + Expr::UnaryOp( + unary_op @ ast::ExprUnaryOp { + op, + operand, + range: _, + }, + ) => { + if checker.any_enabled(&[Rule::NotInTest, Rule::NotIsTest]) { + pycodestyle::rules::not_tests(checker, unary_op); } if checker.enabled(Rule::UnaryPrefixIncrementDecrement) { flake8_bugbear::rules::unary_prefix_increment_decrement( @@ -1147,18 +1137,8 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { range: _, }, ) => { - let check_none_comparisons = checker.enabled(Rule::NoneComparison); - let check_true_false_comparisons = checker.enabled(Rule::TrueFalseComparison); - if check_none_comparisons || check_true_false_comparisons { - pycodestyle::rules::literal_comparisons( - checker, - expr, - left, - ops, - comparators, - check_none_comparisons, - check_true_false_comparisons, - ); + if checker.any_enabled(&[Rule::NoneComparison, Rule::TrueFalseComparison]) { + pycodestyle::rules::literal_comparisons(checker, compare); } if checker.enabled(Rule::IsLiteral) { pyflakes::rules::invalid_literal_comparison(checker, left, ops, comparators, expr); @@ -1241,13 +1221,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { } } if checker.enabled(Rule::HardcodedTempFile) { - if let Some(diagnostic) = flake8_bandit::rules::hardcoded_tmp_directory( - expr, - value, - &checker.settings.flake8_bandit.hardcoded_tmp_directory, - ) { - checker.diagnostics.push(diagnostic); - } + flake8_bandit::rules::hardcoded_tmp_directory(checker, expr, value); } if checker.enabled(Rule::UnicodeKindPrefix) { pyupgrade::rules::unicode_kind_prefix(checker, expr, kind.as_deref()); diff --git a/crates/ruff/src/checkers/ast/analyze/parameters.rs b/crates/ruff/src/checkers/ast/analyze/parameters.rs index fe300a8ea1..41d525197b 100644 --- a/crates/ruff/src/checkers/ast/analyze/parameters.rs +++ b/crates/ruff/src/checkers/ast/analyze/parameters.rs @@ -6,9 +6,6 @@ use crate::rules::{flake8_bugbear, flake8_pyi, ruff}; /// Run lint rules over a [`Parameters`] syntax node. pub(crate) fn parameters(parameters: &Parameters, checker: &mut Checker) { - if checker.enabled(Rule::MutableArgumentDefault) { - flake8_bugbear::rules::mutable_argument_default(checker, parameters); - } if checker.enabled(Rule::FunctionCallInDefaultArgument) { flake8_bugbear::rules::function_call_in_argument_default(checker, parameters); } diff --git a/crates/ruff/src/checkers/ast/analyze/statement.rs b/crates/ruff/src/checkers/ast/analyze/statement.rs index cbdbff9f5a..7518c07523 100644 --- a/crates/ruff/src/checkers/ast/analyze/statement.rs +++ b/crates/ruff/src/checkers/ast/analyze/statement.rs @@ -53,7 +53,7 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if checker.enabled(Rule::BreakOutsideLoop) { if let Some(diagnostic) = pyflakes::rules::break_outside_loop( stmt, - &mut checker.semantic.parents().skip(1), + &mut checker.semantic.current_statements().skip(1), ) { checker.diagnostics.push(diagnostic); } @@ -63,30 +63,24 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if checker.enabled(Rule::ContinueOutsideLoop) { if let Some(diagnostic) = pyflakes::rules::continue_outside_loop( stmt, - &mut checker.semantic.parents().skip(1), + &mut checker.semantic.current_statements().skip(1), ) { checker.diagnostics.push(diagnostic); } } } - Stmt::FunctionDef(ast::StmtFunctionDef { - name, - decorator_list, - returns, - parameters, - body, - type_params, - .. - }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - name, - decorator_list, - returns, - parameters, - body, - type_params, - .. - }) => { + Stmt::FunctionDef( + function_def @ ast::StmtFunctionDef { + is_async, + name, + decorator_list, + returns, + parameters, + body, + type_params, + range: _, + }, + ) => { if checker.enabled(Rule::DjangoNonLeadingReceiverDecorator) { flake8_django::rules::non_leading_receiver_decorator(checker, decorator_list); } @@ -113,7 +107,7 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if let Some(diagnostic) = pep8_naming::rules::invalid_first_argument_name_for_class_method( checker, - checker.semantic.scope(), + checker.semantic.current_scope(), name, decorator_list, parameters, @@ -125,7 +119,7 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if checker.enabled(Rule::InvalidFirstArgumentNameForMethod) { if let Some(diagnostic) = pep8_naming::rules::invalid_first_argument_name_for_method( checker, - checker.semantic.scope(), + checker.semantic.current_scope(), name, decorator_list, parameters, @@ -151,11 +145,11 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { flake8_pyi::rules::non_self_return_type( checker, stmt, + *is_async, name, decorator_list, returns.as_ref().map(AsRef::as_ref), parameters, - stmt.is_async_function_def_stmt(), ); } if checker.enabled(Rule::CustomTypeVarReturnType) { @@ -181,19 +175,14 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { } } if checker.enabled(Rule::BadExitAnnotation) { - flake8_pyi::rules::bad_exit_annotation( - checker, - stmt.is_async_function_def_stmt(), - name, - parameters, - ); + flake8_pyi::rules::bad_exit_annotation(checker, *is_async, name, parameters); } if checker.enabled(Rule::RedundantNumericUnion) { flake8_pyi::rules::redundant_numeric_union(checker, parameters); } if checker.enabled(Rule::DunderFunctionName) { if let Some(diagnostic) = pep8_naming::rules::dunder_function_name( - checker.semantic.scope(), + checker.semantic.current_scope(), stmt, name, &checker.settings.pep8_naming.ignore_names, @@ -217,6 +206,9 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if checker.enabled(Rule::CachedInstanceMethod) { flake8_bugbear::rules::cached_instance_method(checker, decorator_list); } + if checker.enabled(Rule::MutableArgumentDefault) { + flake8_bugbear::rules::mutable_argument_default(checker, function_def); + } if checker.any_enabled(&[ Rule::UnnecessaryReturnNone, Rule::ImplicitReturnValue, @@ -308,6 +300,7 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if checker.any_enabled(&[ Rule::PytestParametrizeNamesWrongType, Rule::PytestParametrizeValuesWrongType, + Rule::PytestDuplicateParametrizeTestCases, ]) { flake8_pytest_style::rules::parametrize(checker, decorator_list); } @@ -317,16 +310,16 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { ]) { flake8_pytest_style::rules::marks(checker, decorator_list); } - if checker.enabled(Rule::BooleanPositionalArgInFunctionDefinition) { - flake8_boolean_trap::rules::check_positional_boolean_in_def( + if checker.enabled(Rule::BooleanTypeHintPositionalArgument) { + flake8_boolean_trap::rules::boolean_type_hint_positional_argument( checker, name, decorator_list, parameters, ); } - if checker.enabled(Rule::BooleanDefaultValueInFunctionDefinition) { - flake8_boolean_trap::rules::check_boolean_default_value_in_function_definition( + if checker.enabled(Rule::BooleanDefaultValuePositionalArgument) { + flake8_boolean_trap::rules::boolean_default_value_positional_argument( checker, name, decorator_list, @@ -348,7 +341,7 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if checker.enabled(Rule::YieldInForLoop) { pyupgrade::rules::yield_in_for_loop(checker, stmt); } - if let ScopeKind::Class(class_def) = checker.semantic.scope().kind { + if let ScopeKind::Class(class_def) = checker.semantic.current_scope().kind { if checker.enabled(Rule::BuiltinAttributeShadowing) { flake8_builtins::rules::builtin_method_shadowing( checker, @@ -519,17 +512,16 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if checker.enabled(Rule::SingleStringSlots) { pylint::rules::single_string_slots(checker, class_def); } + if checker.enabled(Rule::BadDunderMethodName) { + pylint::rules::bad_dunder_method_name(checker, body); + } } Stmt::Import(ast::StmtImport { names, range: _ }) => { if checker.enabled(Rule::MultipleImportsOnOneLine) { pycodestyle::rules::multiple_imports_on_one_line(checker, stmt, names); } if checker.enabled(Rule::ModuleImportNotAtTopOfFile) { - pycodestyle::rules::module_import_not_at_top_of_file( - checker, - stmt, - checker.locator, - ); + pycodestyle::rules::module_import_not_at_top_of_file(checker, stmt); } if checker.enabled(Rule::GlobalStatement) { for name in names { @@ -565,12 +557,29 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { } } if checker.enabled(Rule::BannedApi) { - flake8_tidy_imports::rules::name_or_parent_is_banned( + flake8_tidy_imports::rules::banned_api( checker, - &alias.name, - alias, + &flake8_tidy_imports::matchers::NameMatchPolicy::MatchNameOrParent( + flake8_tidy_imports::matchers::MatchNameOrParent { + module: &alias.name, + }, + ), + &alias, ); } + + if checker.enabled(Rule::BannedModuleLevelImports) { + flake8_tidy_imports::rules::banned_module_level_imports( + checker, + &flake8_tidy_imports::matchers::NameMatchPolicy::MatchNameOrParent( + flake8_tidy_imports::matchers::MatchNameOrParent { + module: &alias.name, + }, + ), + &alias, + ); + } + if !checker.source_type.is_stub() { if checker.enabled(Rule::UselessImportAlias) { pylint::rules::useless_import_alias(checker, alias); @@ -685,11 +694,7 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { let module = module.as_deref(); let level = level.map(|level| level.to_u32()); if checker.enabled(Rule::ModuleImportNotAtTopOfFile) { - pycodestyle::rules::module_import_not_at_top_of_file( - checker, - stmt, - checker.locator, - ); + pycodestyle::rules::module_import_not_at_top_of_file(checker, stmt); } if checker.enabled(Rule::GlobalStatement) { for name in names { @@ -725,16 +730,56 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if let Some(module) = helpers::resolve_imported_module_path(level, module, checker.module_path) { - flake8_tidy_imports::rules::name_or_parent_is_banned(checker, &module, stmt); + flake8_tidy_imports::rules::banned_api( + checker, + &flake8_tidy_imports::matchers::NameMatchPolicy::MatchNameOrParent( + flake8_tidy_imports::matchers::MatchNameOrParent { module: &module }, + ), + &stmt, + ); for alias in names { if &alias.name == "*" { continue; } - flake8_tidy_imports::rules::name_is_banned( + flake8_tidy_imports::rules::banned_api( checker, - format!("{module}.{}", alias.name), - alias, + &flake8_tidy_imports::matchers::NameMatchPolicy::MatchName( + flake8_tidy_imports::matchers::MatchName { + module: &module, + member: &alias.name, + }, + ), + &alias, + ); + } + } + } + if checker.enabled(Rule::BannedModuleLevelImports) { + if let Some(module) = + helpers::resolve_imported_module_path(level, module, checker.module_path) + { + flake8_tidy_imports::rules::banned_module_level_imports( + checker, + &flake8_tidy_imports::matchers::NameMatchPolicy::MatchNameOrParent( + flake8_tidy_imports::matchers::MatchNameOrParent { module: &module }, + ), + &stmt, + ); + + for alias in names { + if &alias.name == "*" { + continue; + } + flake8_tidy_imports::rules::banned_module_level_imports( + checker, + &flake8_tidy_imports::matchers::NameMatchPolicy::MatchName( + flake8_tidy_imports::matchers::MatchName { + module: &module, + member: &alias.name, + }, + ), + &alias, ); } } @@ -766,7 +811,7 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { } } else if &alias.name == "*" { if checker.enabled(Rule::UndefinedLocalWithNestedImportStarUsage) { - if !matches!(checker.semantic.scope().kind, ScopeKind::Module) { + if !matches!(checker.semantic.current_scope().kind, ScopeKind::Module) { checker.diagnostics.push(Diagnostic::new( pyflakes::rules::UndefinedLocalWithNestedImportStarUsage { name: helpers::format_import_from(level, module), @@ -982,7 +1027,7 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { flake8_simplify::rules::nested_if_statements( checker, if_, - checker.semantic.stmt_parent(), + checker.semantic.current_statement_parent(), ); } if checker.enabled(Rule::IfWithSameArms) { @@ -1004,7 +1049,7 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { tryceratops::rules::type_check_without_type_error( checker, if_, - checker.semantic.stmt_parent(), + checker.semantic.current_statement_parent(), ); } if checker.enabled(Rule::OutdatedVersionBlock) { @@ -1097,8 +1142,7 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { pygrep_hooks::rules::non_existent_mock_method(checker, test); } } - Stmt::With(ast::StmtWith { items, body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { items, body, .. }) => { + Stmt::With(with_ @ ast::StmtWith { items, body, .. }) => { if checker.enabled(Rule::AssertRaisesException) { flake8_bugbear::rules::assert_raises_exception(checker, items); } @@ -1108,9 +1152,8 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if checker.enabled(Rule::MultipleWithStatements) { flake8_simplify::rules::multiple_with_statements( checker, - stmt, - body, - checker.semantic.stmt_parent(), + with_, + checker.semantic.current_statement_parent(), ); } if checker.enabled(Rule::RedefinedLoopName) { @@ -1134,13 +1177,6 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { iter, orelse, .. - }) - | Stmt::AsyncFor(ast::StmtAsyncFor { - target, - body, - iter, - orelse, - .. }) => { if checker.any_enabled(&[Rule::UnusedLoopControlVariable, Rule::IncorrectDictIterator]) { @@ -1190,14 +1226,7 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { handlers, orelse, finalbody, - range: _, - }) - | Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - range: _, + .. }) => { if checker.enabled(Rule::JumpStatementInFinally) { flake8_bugbear::rules::jump_statement_in_finally(checker, finalbody); @@ -1338,8 +1367,8 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { // Ignore assignments in function bodies; those are covered by other rules. if !checker .semantic - .scopes() - .any(|scope| scope.kind.is_any_function()) + .current_scopes() + .any(|scope| scope.kind.is_function()) { if checker.enabled(Rule::UnprefixedTypeParam) { flake8_pyi::rules::prefix_type_params(checker, value, targets); @@ -1403,8 +1432,8 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { // Ignore assignments in function bodies; those are covered by other rules. if !checker .semantic - .scopes() - .any(|scope| scope.kind.is_any_function()) + .current_scopes() + .any(|scope| scope.kind.is_function()) { flake8_pyi::rules::annotated_assignment_default_in_stub( checker, target, value, annotation, diff --git a/crates/ruff/src/checkers/ast/mod.rs b/crates/ruff/src/checkers/ast/mod.rs index 6f02558e14..fce7af9fbe 100644 --- a/crates/ruff/src/checkers/ast/mod.rs +++ b/crates/ruff/src/checkers/ast/mod.rs @@ -176,13 +176,12 @@ impl<'a> Checker<'a> { /// /// If the current expression in the context is not an f-string, returns ``None``. pub(crate) fn f_string_quote_style(&self) -> Option { - let model = &self.semantic; - if !model.in_f_string() { + if !self.semantic.in_f_string() { return None; } // Find the quote character used to start the containing f-string. - let expr = model.expr()?; + let expr = self.semantic.current_expression()?; let string_range = self.indexer.f_string_range(expr.start())?; let trailing_quote = trailing_quote(self.locator.slice(string_range))?; @@ -202,7 +201,7 @@ impl<'a> Checker<'a> { /// thus be applied whenever we delete a statement, but can otherwise be omitted. pub(crate) fn isolation(&self, parent: Option<&Stmt>) -> IsolationLevel { parent - .and_then(|stmt| self.semantic.stmts.node_id(stmt)) + .and_then(|stmt| self.semantic.statement_id(stmt)) .map_or(IsolationLevel::default(), |node_id| { IsolationLevel::Group(node_id.into()) }) @@ -264,7 +263,7 @@ where { fn visit_stmt(&mut self, stmt: &'b Stmt) { // Step 0: Pre-processing - self.semantic.push_stmt(stmt); + self.semantic.push_statement(stmt); // Track whether we've seen docstrings, non-imports, etc. match stmt { @@ -288,7 +287,7 @@ where self.semantic.flags |= SemanticModelFlags::FUTURES_BOUNDARY; if !self.semantic.seen_import_boundary() && !helpers::is_assignment_to_a_dunder(stmt) - && !helpers::in_nested_block(self.semantic.parents()) + && !helpers::in_nested_block(self.semantic.current_statements()) { self.semantic.flags |= SemanticModelFlags::IMPORT_BOUNDARY; } @@ -372,7 +371,7 @@ where ); } else if &alias.name == "*" { self.semantic - .scope_mut() + .current_scope_mut() .add_star_import(StarImport { level, module }); } else { let mut flags = BindingFlags::EXTERNAL; @@ -421,7 +420,7 @@ where BindingKind::Global, BindingFlags::GLOBAL, ); - let scope = self.semantic.scope_mut(); + let scope = self.semantic.current_scope_mut(); scope.add(name, binding_id); } } @@ -444,7 +443,7 @@ where BindingKind::Nonlocal(scope_id), BindingFlags::NONLOCAL, ); - let scope = self.semantic.scope_mut(); + let scope = self.semantic.current_scope_mut(); scope.add(name, binding_id); } } @@ -455,22 +454,16 @@ where // Step 2: Traversal match stmt { - Stmt::FunctionDef(ast::StmtFunctionDef { - body, - parameters, - decorator_list, - returns, - type_params, - .. - }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - body, - parameters, - decorator_list, - type_params, - returns, - .. - }) => { + Stmt::FunctionDef( + function_def @ ast::StmtFunctionDef { + body, + parameters, + decorator_list, + returns, + type_params, + .. + }, + ) => { // Visit the decorators and arguments, but avoid the body, which will be // deferred. for decorator in decorator_list { @@ -531,8 +524,7 @@ where } let definition = docstrings::extraction::extract_definition( - ExtractionTarget::Function, - stmt, + ExtractionTarget::Function(function_def), self.semantic.definition_id, &self.semantic.definitions, ); @@ -540,8 +532,7 @@ where self.semantic.push_scope(match &stmt { Stmt::FunctionDef(stmt) => ScopeKind::Function(stmt), - Stmt::AsyncFunctionDef(stmt) => ScopeKind::AsyncFunction(stmt), - _ => unreachable!("Expected Stmt::FunctionDef | Stmt::AsyncFunctionDef"), + _ => unreachable!("Expected Stmt::FunctionDef"), }); self.deferred.functions.push(self.semantic.snapshot()); @@ -575,8 +566,7 @@ where } let definition = docstrings::extraction::extract_definition( - ExtractionTarget::Class, - stmt, + ExtractionTarget::Class(class_def), self.semantic.definition_id, &self.semantic.definitions, ); @@ -609,14 +599,7 @@ where handlers, orelse, finalbody, - range: _, - }) - | Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - range: _, + .. }) => { let mut handled_exceptions = Exceptions::empty(); for type_ in extract_handled_exceptions(handlers) { @@ -657,7 +640,7 @@ where // available at runtime. // See: https://docs.python.org/3/reference/simple_stmts.html#annotated-assignment-statements let runtime_annotation = if self.semantic.future_annotations() { - if self.semantic.scope().kind.is_class() { + if self.semantic.current_scope().kind.is_class() { let baseclasses = &self .settings .flake8_type_checking @@ -676,7 +659,7 @@ where } } else { matches!( - self.semantic.scope().kind, + self.semantic.current_scope().kind, ScopeKind::Class(_) | ScopeKind::Module ) }; @@ -743,8 +726,7 @@ where // Step 3: Clean-up match stmt { - Stmt::FunctionDef(ast::StmtFunctionDef { name, .. }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { name, .. }) => { + Stmt::FunctionDef(ast::StmtFunctionDef { name, .. }) => { let scope_id = self.semantic.scope_id; self.deferred.scopes.push(scope_id); self.semantic.pop_scope(); // Function scope @@ -777,7 +759,7 @@ where analyze::statement(stmt, self); self.semantic.flags = flags_snapshot; - self.semantic.pop_stmt(); + self.semantic.pop_statement(); } fn visit_annotation(&mut self, expr: &'b Expr) { @@ -813,7 +795,7 @@ where return; } - self.semantic.push_expr(expr); + self.semantic.push_expression(expr); // Store the flags prior to any further descent, so that we can restore them after visiting // the node. @@ -841,7 +823,7 @@ where }) => { if let Expr::Name(ast::ExprName { id, ctx, range: _ }) = func.as_ref() { if id == "locals" && ctx.is_load() { - let scope = self.semantic.scope_mut(); + let scope = self.semantic.current_scope_mut(); scope.set_uses_locals(); } } @@ -1207,7 +1189,7 @@ where )); } } - Expr::JoinedStr(_) => { + Expr::FString(_) => { self.semantic.flags |= SemanticModelFlags::F_STRING; visitor::walk_expr(self, expr); } @@ -1231,7 +1213,7 @@ where analyze::expression(expr, self); self.semantic.flags = flags_snapshot; - self.semantic.pop_expr(); + self.semantic.pop_expression(); } fn visit_except_handler(&mut self, except_handler: &'b ExceptHandler) { @@ -1286,7 +1268,7 @@ where fn visit_format_spec(&mut self, format_spec: &'b Expr) { match format_spec { - Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { + Expr::FString(ast::ExprFString { values, .. }) => { for value in values { self.visit_expr(value); } @@ -1611,7 +1593,7 @@ impl<'a> Checker<'a> { } fn handle_node_store(&mut self, id: &'a str, expr: &Expr) { - let parent = self.semantic.stmt(); + let parent = self.semantic.current_statement(); if matches!( parent, @@ -1626,7 +1608,7 @@ impl<'a> Checker<'a> { return; } - if matches!(parent, Stmt::For(_) | Stmt::AsyncFor(_)) { + if parent.is_for_stmt() { self.add_binding( id, expr.range(), @@ -1646,7 +1628,7 @@ impl<'a> Checker<'a> { return; } - let scope = self.semantic.scope(); + let scope = self.semantic.current_scope(); if scope.kind.is_module() && match parent { @@ -1698,8 +1680,8 @@ impl<'a> Checker<'a> { if self .semantic - .expr_ancestors() - .any(|expr| expr.is_named_expr_expr()) + .current_expressions() + .any(Expr::is_named_expr_expr) { self.add_binding( id, @@ -1725,7 +1707,7 @@ impl<'a> Checker<'a> { self.semantic.resolve_del(id, expr.range()); - if helpers::on_conditional_branch(&mut self.semantic.parents()) { + if helpers::on_conditional_branch(&mut self.semantic.current_statements()) { return; } @@ -1733,7 +1715,7 @@ impl<'a> Checker<'a> { let binding_id = self.semantic .push_binding(expr.range(), BindingKind::Deletion, BindingFlags::empty()); - let scope = self.semantic.scope_mut(); + let scope = self.semantic.current_scope_mut(); scope.add(id, binding_id); } @@ -1825,19 +1807,14 @@ impl<'a> Checker<'a> { for snapshot in deferred_functions { self.semantic.restore(snapshot); - match &self.semantic.stmt() { - Stmt::FunctionDef(ast::StmtFunctionDef { - body, parameters, .. - }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - body, parameters, .. - }) => { - self.visit_parameters(parameters); - self.visit_body(body); - } - _ => { - unreachable!("Expected Stmt::FunctionDef | Stmt::AsyncFunctionDef") - } + if let Stmt::FunctionDef(ast::StmtFunctionDef { + body, parameters, .. + }) = self.semantic.current_statement() + { + self.visit_parameters(parameters); + self.visit_body(body); + } else { + unreachable!("Expected Stmt::FunctionDef") } } } diff --git a/crates/ruff/src/checkers/noqa.rs b/crates/ruff/src/checkers/noqa.rs index 2916ad7339..78455814d3 100644 --- a/crates/ruff/src/checkers/noqa.rs +++ b/crates/ruff/src/checkers/noqa.rs @@ -94,8 +94,15 @@ pub(crate) fn check_noqa( } } - // Enforce that the noqa directive was actually used (RUF100). - if analyze_directives && settings.rules.enabled(Rule::UnusedNOQA) { + // Enforce that the noqa directive was actually used (RUF100), unless RUF100 was itself + // suppressed. + if settings.rules.enabled(Rule::UnusedNOQA) + && analyze_directives + && !exemption.is_some_and(|exemption| match exemption { + FileExemption::All => true, + FileExemption::Codes(codes) => codes.contains(&Rule::UnusedNOQA.noqa_code()), + }) + { for line in noqa_directives.lines() { match &line.directive { Directive::All(directive) => { diff --git a/crates/ruff/src/codes.rs b/crates/ruff/src/codes.rs index 671f7977e0..d7f115bb29 100644 --- a/crates/ruff/src/codes.rs +++ b/crates/ruff/src/codes.rs @@ -226,8 +226,10 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Pylint, "W0711") => (RuleGroup::Unspecified, rules::pylint::rules::BinaryOpException), (Pylint, "W1508") => (RuleGroup::Unspecified, rules::pylint::rules::InvalidEnvvarDefault), (Pylint, "W1509") => (RuleGroup::Unspecified, rules::pylint::rules::SubprocessPopenPreexecFn), + (Pylint, "W1510") => (RuleGroup::Unspecified, rules::pylint::rules::SubprocessRunWithoutCheck), (Pylint, "W1641") => (RuleGroup::Nursery, rules::pylint::rules::EqWithoutHash), (Pylint, "W2901") => (RuleGroup::Unspecified, rules::pylint::rules::RedefinedLoopName), + (Pylint, "W3201") => (RuleGroup::Nursery, rules::pylint::rules::BadDunderMethodName), (Pylint, "W3301") => (RuleGroup::Unspecified, rules::pylint::rules::NestedMinMax), // flake8-async @@ -309,6 +311,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { // flake8-tidy-imports (Flake8TidyImports, "251") => (RuleGroup::Unspecified, rules::flake8_tidy_imports::rules::BannedApi), (Flake8TidyImports, "252") => (RuleGroup::Unspecified, rules::flake8_tidy_imports::rules::RelativeImports), + (Flake8TidyImports, "253") => (RuleGroup::Unspecified, rules::flake8_tidy_imports::rules::BannedModuleLevelImports), // flake8-return (Flake8Return, "501") => (RuleGroup::Unspecified, rules::flake8_return::rules::UnnecessaryReturnNone), @@ -565,9 +568,9 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Flake8Bandit, "701") => (RuleGroup::Unspecified, rules::flake8_bandit::rules::Jinja2AutoescapeFalse), // flake8-boolean-trap - (Flake8BooleanTrap, "001") => (RuleGroup::Unspecified, rules::flake8_boolean_trap::rules::BooleanPositionalArgInFunctionDefinition), - (Flake8BooleanTrap, "002") => (RuleGroup::Unspecified, rules::flake8_boolean_trap::rules::BooleanDefaultValueInFunctionDefinition), - (Flake8BooleanTrap, "003") => (RuleGroup::Unspecified, rules::flake8_boolean_trap::rules::BooleanPositionalValueInFunctionCall), + (Flake8BooleanTrap, "001") => (RuleGroup::Unspecified, rules::flake8_boolean_trap::rules::BooleanTypeHintPositionalArgument), + (Flake8BooleanTrap, "002") => (RuleGroup::Unspecified, rules::flake8_boolean_trap::rules::BooleanDefaultValuePositionalArgument), + (Flake8BooleanTrap, "003") => (RuleGroup::Unspecified, rules::flake8_boolean_trap::rules::BooleanPositionalValueInCall), // flake8-unused-arguments (Flake8UnusedArguments, "001") => (RuleGroup::Unspecified, rules::flake8_unused_arguments::rules::UnusedFunctionArgument), @@ -682,6 +685,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Flake8PytestStyle, "011") => (RuleGroup::Unspecified, rules::flake8_pytest_style::rules::PytestRaisesTooBroad), (Flake8PytestStyle, "012") => (RuleGroup::Unspecified, rules::flake8_pytest_style::rules::PytestRaisesWithMultipleStatements), (Flake8PytestStyle, "013") => (RuleGroup::Unspecified, rules::flake8_pytest_style::rules::PytestIncorrectPytestImport), + (Flake8PytestStyle, "014") => (RuleGroup::Unspecified, rules::flake8_pytest_style::rules::PytestDuplicateParametrizeTestCases), (Flake8PytestStyle, "015") => (RuleGroup::Unspecified, rules::flake8_pytest_style::rules::PytestAssertAlwaysFalse), (Flake8PytestStyle, "016") => (RuleGroup::Unspecified, rules::flake8_pytest_style::rules::PytestFailWithoutMessage), (Flake8PytestStyle, "017") => (RuleGroup::Unspecified, rules::flake8_pytest_style::rules::PytestAssertInExcept), @@ -694,6 +698,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Flake8PytestStyle, "024") => (RuleGroup::Unspecified, rules::flake8_pytest_style::rules::PytestUnnecessaryAsyncioMarkOnFixture), (Flake8PytestStyle, "025") => (RuleGroup::Unspecified, rules::flake8_pytest_style::rules::PytestErroneousUseFixturesOnFixture), (Flake8PytestStyle, "026") => (RuleGroup::Unspecified, rules::flake8_pytest_style::rules::PytestUseFixturesWithoutParameters), + (Flake8PytestStyle, "027") => (RuleGroup::Unspecified, rules::flake8_pytest_style::rules::PytestUnittestRaisesAssertion), // flake8-pie (Flake8Pie, "790") => (RuleGroup::Unspecified, rules::flake8_pie::rules::UnnecessaryPass), diff --git a/crates/ruff/src/docstrings/extraction.rs b/crates/ruff/src/docstrings/extraction.rs index 3a2fdb7660..c642b75271 100644 --- a/crates/ruff/src/docstrings/extraction.rs +++ b/crates/ruff/src/docstrings/extraction.rs @@ -1,7 +1,6 @@ //! Extract docstrings from an AST. use ruff_python_ast::{self as ast, Constant, Expr, Stmt}; - use ruff_python_semantic::{Definition, DefinitionId, Definitions, Member, MemberKind}; /// Extract a docstring from a function or class body. @@ -28,63 +27,48 @@ pub(crate) fn docstring_from(suite: &[Stmt]) -> Option<&Expr> { pub(crate) fn extract_docstring<'a>(definition: &'a Definition<'a>) -> Option<&'a Expr> { match definition { Definition::Module(module) => docstring_from(module.python_ast), - Definition::Member(member) => { - if let Stmt::ClassDef(ast::StmtClassDef { body, .. }) - | Stmt::FunctionDef(ast::StmtFunctionDef { body, .. }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { body, .. }) = &member.stmt - { - docstring_from(body) - } else { - None - } - } + Definition::Member(member) => docstring_from(member.body()), } } #[derive(Copy, Clone)] -pub(crate) enum ExtractionTarget { - Class, - Function, +pub(crate) enum ExtractionTarget<'a> { + Class(&'a ast::StmtClassDef), + Function(&'a ast::StmtFunctionDef), } /// Extract a `Definition` from the AST node defined by a `Stmt`. pub(crate) fn extract_definition<'a>( - target: ExtractionTarget, - stmt: &'a Stmt, + target: ExtractionTarget<'a>, parent: DefinitionId, definitions: &Definitions<'a>, ) -> Member<'a> { match target { - ExtractionTarget::Function => match &definitions[parent] { + ExtractionTarget::Function(function) => match &definitions[parent] { Definition::Module(..) => Member { parent, - kind: MemberKind::Function, - stmt, + kind: MemberKind::Function(function), }, Definition::Member(Member { - kind: MemberKind::Class | MemberKind::NestedClass, + kind: MemberKind::Class(_) | MemberKind::NestedClass(_), .. }) => Member { parent, - kind: MemberKind::Method, - stmt, + kind: MemberKind::Method(function), }, - Definition::Member(..) => Member { + Definition::Member(_) => Member { parent, - kind: MemberKind::NestedFunction, - stmt, + kind: MemberKind::NestedFunction(function), }, }, - ExtractionTarget::Class => match &definitions[parent] { - Definition::Module(..) => Member { + ExtractionTarget::Class(class) => match &definitions[parent] { + Definition::Module(_) => Member { parent, - kind: MemberKind::Class, - stmt, + kind: MemberKind::Class(class), }, - Definition::Member(..) => Member { + Definition::Member(_) => Member { parent, - kind: MemberKind::NestedClass, - stmt, + kind: MemberKind::NestedClass(class), }, }, } diff --git a/crates/ruff/src/fs.rs b/crates/ruff/src/fs.rs index c8ff195468..2a617113fe 100644 --- a/crates/ruff/src/fs.rs +++ b/crates/ruff/src/fs.rs @@ -2,7 +2,7 @@ use std::path::{Path, PathBuf}; use globset::GlobMatcher; use log::debug; -use path_absolutize::{path_dedot, Absolutize}; +use path_absolutize::Absolutize; use crate::registry::RuleSet; @@ -61,7 +61,13 @@ pub fn normalize_path_to, R: AsRef>(path: P, project_root: /// Convert an absolute path to be relative to the current working directory. pub fn relativize_path>(path: P) -> String { let path = path.as_ref(); - if let Ok(path) = path.strip_prefix(&*path_dedot::CWD) { + + #[cfg(target_arch = "wasm32")] + let cwd = Path::new("."); + #[cfg(not(target_arch = "wasm32"))] + let cwd = path_absolutize::path_dedot::CWD.as_path(); + + if let Ok(path) = path.strip_prefix(cwd) { return format!("{}", path.display()); } format!("{}", path.display()) diff --git a/crates/ruff/src/importer/insertion.rs b/crates/ruff/src/importer/insertion.rs index 311a1be967..92c335a2df 100644 --- a/crates/ruff/src/importer/insertion.rs +++ b/crates/ruff/src/importer/insertion.rs @@ -67,9 +67,13 @@ impl<'a> Insertion<'a> { TextSize::default() }; - // Skip over commented lines. + // Skip over commented lines, with whitespace separation. for line in UniversalNewlineIterator::with_offset(locator.after(location), location) { - if line.trim_whitespace_start().starts_with('#') { + let trimmed_line = line.trim_whitespace_start(); + if trimmed_line.is_empty() { + continue; + } + if trimmed_line.starts_with('#') { location = line.full_end(); } else { break; diff --git a/crates/ruff/src/jupyter/notebook.rs b/crates/ruff/src/jupyter/notebook.rs index 4aaff0b1ff..a4289fd776 100644 --- a/crates/ruff/src/jupyter/notebook.rs +++ b/crates/ruff/src/jupyter/notebook.rs @@ -1,7 +1,7 @@ use std::cmp::Ordering; use std::fmt::Display; use std::fs::File; -use std::io::{BufReader, BufWriter, Read, Seek, SeekFrom, Write}; +use std::io::{BufReader, BufWriter, Cursor, Read, Seek, SeekFrom, Write}; use std::iter; use std::path::Path; @@ -26,7 +26,7 @@ pub const JUPYTER_NOTEBOOK_EXT: &str = "ipynb"; /// Run round-trip source code generation on a given Jupyter notebook file path. pub fn round_trip(path: &Path) -> anyhow::Result { - let mut notebook = Notebook::read(path).map_err(|err| { + let mut notebook = Notebook::from_path(path).map_err(|err| { anyhow::anyhow!( "Failed to read notebook file `{}`: {:?}", path.display(), @@ -120,18 +120,30 @@ pub struct Notebook { impl Notebook { /// Read the Jupyter Notebook from the given [`Path`]. - /// - /// See also the black implementation - /// - pub fn read(path: &Path) -> Result> { - let mut reader = BufReader::new(File::open(path).map_err(|err| { + pub fn from_path(path: &Path) -> Result> { + Self::from_reader(BufReader::new(File::open(path).map_err(|err| { Diagnostic::new( IOError { message: format!("{err}"), }, TextRange::default(), ) - })?); + })?)) + } + + /// Read the Jupyter Notebook from its JSON string. + pub fn from_contents(contents: &str) -> Result> { + Self::from_reader(Cursor::new(contents)) + } + + /// Read a Jupyter Notebook from a [`Read`] implementor. + /// + /// See also the black implementation + /// + fn from_reader(mut reader: R) -> Result> + where + R: Read + Seek, + { let trailing_newline = reader.seek(SeekFrom::End(-1)).is_ok_and(|_| { let mut buf = [0; 1]; reader.read_exact(&mut buf).is_ok_and(|_| buf[0] == b'\n') @@ -144,7 +156,7 @@ impl Notebook { TextRange::default(), ) })?; - let raw_notebook: RawNotebook = match serde_json::from_reader(reader) { + let raw_notebook: RawNotebook = match serde_json::from_reader(reader.by_ref()) { Ok(notebook) => notebook, Err(err) => { // Translate the error into a diagnostic @@ -159,14 +171,19 @@ impl Notebook { Category::Syntax | Category::Eof => { // Maybe someone saved the python sources (those with the `# %%` separator) // as jupyter notebook instead. Let's help them. - let contents = std::fs::read_to_string(path).map_err(|err| { - Diagnostic::new( - IOError { - message: format!("{err}"), - }, - TextRange::default(), - ) - })?; + let mut contents = String::new(); + reader + .rewind() + .and_then(|_| reader.read_to_string(&mut contents)) + .map_err(|err| { + Diagnostic::new( + IOError { + message: format!("{err}"), + }, + TextRange::default(), + ) + })?; + // Check if tokenizing was successful and the file is non-empty if lex(&contents, Mode::Module).any(|result| result.is_err()) { Diagnostic::new( @@ -182,7 +199,7 @@ impl Notebook { Diagnostic::new( SyntaxError { message: format!( - "Expected a Jupyter Notebook (.{JUPYTER_NOTEBOOK_EXT} extension), \ + "Expected a Jupyter Notebook (.{JUPYTER_NOTEBOOK_EXT}), \ which must be internally stored as JSON, \ but found a Python source file: {err}" ), @@ -484,22 +501,22 @@ mod tests { fn test_invalid() { let path = Path::new("resources/test/fixtures/jupyter/invalid_extension.ipynb"); assert_eq!( - Notebook::read(path).unwrap_err().kind.body, - "SyntaxError: Expected a Jupyter Notebook (.ipynb extension), \ + Notebook::from_path(path).unwrap_err().kind.body, + "SyntaxError: Expected a Jupyter Notebook (.ipynb), \ which must be internally stored as JSON, \ but found a Python source file: \ expected value at line 1 column 1" ); let path = Path::new("resources/test/fixtures/jupyter/not_json.ipynb"); assert_eq!( - Notebook::read(path).unwrap_err().kind.body, + Notebook::from_path(path).unwrap_err().kind.body, "SyntaxError: A Jupyter Notebook (.ipynb) must internally be JSON, \ but this file isn't valid JSON: \ expected value at line 1 column 1" ); let path = Path::new("resources/test/fixtures/jupyter/wrong_schema.ipynb"); assert_eq!( - Notebook::read(path).unwrap_err().kind.body, + Notebook::from_path(path).unwrap_err().kind.body, "SyntaxError: This file does not match the schema expected of Jupyter Notebooks: \ missing field `cells` at line 1 column 2" ); @@ -571,11 +588,11 @@ print("after empty cells") } #[test] - fn test_line_magics() -> Result<()> { - let path = "line_magics.ipynb".to_string(); + fn test_ipy_escape_command() -> Result<()> { + let path = "ipy_escape_command.ipynb".to_string(); let (diagnostics, source_kind, _) = test_notebook_path( &path, - Path::new("line_magics_expected.ipynb"), + Path::new("ipy_escape_command_expected.ipynb"), &settings::Settings::for_rule(Rule::UnusedImport), )?; assert_messages!(diagnostics, path, source_kind); diff --git a/crates/ruff/src/jupyter/snapshots/ruff__jupyter__notebook__tests__line_magics.snap b/crates/ruff/src/jupyter/snapshots/ruff__jupyter__notebook__tests__ipy_escape_command.snap similarity index 79% rename from crates/ruff/src/jupyter/snapshots/ruff__jupyter__notebook__tests__line_magics.snap rename to crates/ruff/src/jupyter/snapshots/ruff__jupyter__notebook__tests__ipy_escape_command.snap index 61211b2c18..57f92d184e 100644 --- a/crates/ruff/src/jupyter/snapshots/ruff__jupyter__notebook__tests__line_magics.snap +++ b/crates/ruff/src/jupyter/snapshots/ruff__jupyter__notebook__tests__ipy_escape_command.snap @@ -1,7 +1,7 @@ --- source: crates/ruff/src/jupyter/notebook.rs --- -line_magics.ipynb:cell 1:5:8: F401 [*] `os` imported but unused +ipy_escape_command.ipynb:cell 1:5:8: F401 [*] `os` imported but unused | 3 | %matplotlib inline 4 | diff --git a/crates/ruff/src/line_width.rs b/crates/ruff/src/line_width.rs index 8619b42aa3..ee8e4f6bc9 100644 --- a/crates/ruff/src/line_width.rs +++ b/crates/ruff/src/line_width.rs @@ -1,4 +1,5 @@ use serde::{Deserialize, Serialize}; +use std::num::NonZeroU8; use unicode_width::UnicodeWidthChar; use ruff_macros::CacheKey; @@ -58,7 +59,7 @@ impl Eq for LineWidth {} impl PartialOrd for LineWidth { fn partial_cmp(&self, other: &Self) -> Option { - self.width.partial_cmp(&other.width) + Some(self.cmp(other)) } } @@ -83,7 +84,7 @@ impl LineWidth { } fn update(mut self, chars: impl Iterator) -> Self { - let tab_size: usize = self.tab_size.into(); + let tab_size: usize = self.tab_size.as_usize(); for c in chars { match c { '\t' => { @@ -144,22 +145,22 @@ impl PartialOrd for LineWidth { /// The size of a tab. #[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, CacheKey)] #[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] -pub struct TabSize(pub u8); +pub struct TabSize(NonZeroU8); + +impl TabSize { + pub(crate) fn as_usize(self) -> usize { + self.0.get() as usize + } +} impl Default for TabSize { fn default() -> Self { - Self(4) + Self(NonZeroU8::new(4).unwrap()) } } -impl From for TabSize { - fn from(tab_size: u8) -> Self { +impl From for TabSize { + fn from(tab_size: NonZeroU8) -> Self { Self(tab_size) } } - -impl From for usize { - fn from(tab_size: TabSize) -> Self { - tab_size.0 as usize - } -} diff --git a/crates/ruff/src/message/text.rs b/crates/ruff/src/message/text.rs index 3aa5ebc545..31bbb614d6 100644 --- a/crates/ruff/src/message/text.rs +++ b/crates/ruff/src/message/text.rs @@ -293,12 +293,10 @@ impl Display for MessageCodeFrame<'_> { } fn replace_whitespace(source: &str, annotation_range: TextRange) -> SourceCode { - static TAB_SIZE: TabSize = TabSize(4); // TODO(jonathan): use `tab-size` - let mut result = String::new(); let mut last_end = 0; let mut range = annotation_range; - let mut line_width = LineWidth::new(TAB_SIZE); + let mut line_width = LineWidth::new(TabSize::default()); for (index, c) in source.char_indices() { let old_width = line_width.get(); diff --git a/crates/ruff/src/registry/rule_set.rs b/crates/ruff/src/registry/rule_set.rs index 555ba0e5b2..e141a4e25e 100644 --- a/crates/ruff/src/registry/rule_set.rs +++ b/crates/ruff/src/registry/rule_set.rs @@ -72,7 +72,7 @@ impl RuleSet { /// let set_1 = RuleSet::from_rules(&[Rule::AmbiguousFunctionName, Rule::AnyType]); /// let set_2 = RuleSet::from_rules(&[ /// Rule::BadQuotesInlineString, - /// Rule::BooleanPositionalValueInFunctionCall, + /// Rule::BooleanPositionalValueInCall, /// ]); /// /// let union = set_1.union(&set_2); @@ -80,7 +80,7 @@ impl RuleSet { /// assert!(union.contains(Rule::AmbiguousFunctionName)); /// assert!(union.contains(Rule::AnyType)); /// assert!(union.contains(Rule::BadQuotesInlineString)); - /// assert!(union.contains(Rule::BooleanPositionalValueInFunctionCall)); + /// assert!(union.contains(Rule::BooleanPositionalValueInCall)); /// ``` #[must_use] pub const fn union(mut self, other: &Self) -> Self { @@ -132,7 +132,7 @@ impl RuleSet { /// ]))); /// /// assert!(!set_1.intersects(&RuleSet::from_rules(&[ - /// Rule::BooleanPositionalValueInFunctionCall, + /// Rule::BooleanPositionalValueInCall, /// Rule::BadQuotesInlineString /// ]))); /// ``` diff --git a/crates/ruff/src/rules/airflow/rules/task_variable_name.rs b/crates/ruff/src/rules/airflow/rules/task_variable_name.rs index 9c73477af5..6a33944448 100644 --- a/crates/ruff/src/rules/airflow/rules/task_variable_name.rs +++ b/crates/ruff/src/rules/airflow/rules/task_variable_name.rs @@ -80,7 +80,7 @@ pub(crate) fn variable_name_task_id( // If the keyword argument is not a string, we can't do anything. let task_id = match &keyword.value { Expr::Constant(constant) => match &constant.value { - Constant::Str(value) => value, + Constant::Str(ast::StringConstant { value, .. }) => value, _ => return None, }, _ => return None, diff --git a/crates/ruff/src/rules/flake8_annotations/fixes.rs b/crates/ruff/src/rules/flake8_annotations/fixes.rs index 82074eb89a..1608732475 100644 --- a/crates/ruff/src/rules/flake8_annotations/fixes.rs +++ b/crates/ruff/src/rules/flake8_annotations/fixes.rs @@ -1,25 +1,25 @@ use anyhow::{bail, Result}; -use ruff_python_ast::{PySourceType, Ranged, Stmt}; +use ruff_python_ast::{PySourceType, Ranged}; use ruff_python_parser::{lexer, AsMode, Tok}; use ruff_diagnostics::Edit; use ruff_source_file::Locator; /// ANN204 -pub(crate) fn add_return_annotation( - locator: &Locator, - stmt: &Stmt, +pub(crate) fn add_return_annotation( + statement: &T, annotation: &str, source_type: PySourceType, + locator: &Locator, ) -> Result { - let contents = &locator.contents()[stmt.range()]; + let contents = &locator.contents()[statement.range()]; // Find the colon (following the `def` keyword). let mut seen_lpar = false; let mut seen_rpar = false; let mut count = 0u32; for (tok, range) in - lexer::lex_starts_at(contents, source_type.as_mode(), stmt.start()).flatten() + lexer::lex_starts_at(contents, source_type.as_mode(), statement.start()).flatten() { if seen_lpar && seen_rpar { if matches!(tok, Tok::Colon) { diff --git a/crates/ruff/src/rules/flake8_annotations/helpers.rs b/crates/ruff/src/rules/flake8_annotations/helpers.rs index b1572efd82..42d1373564 100644 --- a/crates/ruff/src/rules/flake8_annotations/helpers.rs +++ b/crates/ruff/src/rules/flake8_annotations/helpers.rs @@ -1,53 +1,11 @@ -use ruff_python_ast::{self as ast, Expr, Parameters, Stmt}; - -use ruff_python_ast::cast; use ruff_python_semantic::analyze::visibility; -use ruff_python_semantic::{Definition, Member, MemberKind, SemanticModel}; - -pub(super) fn match_function_def( - stmt: &Stmt, -) -> (&str, &Parameters, Option<&Expr>, &[Stmt], &[ast::Decorator]) { - match stmt { - Stmt::FunctionDef(ast::StmtFunctionDef { - name, - parameters, - returns, - body, - decorator_list, - .. - }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - name, - parameters, - returns, - body, - decorator_list, - .. - }) => ( - name, - parameters, - returns.as_ref().map(AsRef::as_ref), - body, - decorator_list, - ), - _ => panic!("Found non-FunctionDef in match_function_def"), - } -} +use ruff_python_semantic::{Definition, SemanticModel}; /// Return the name of the function, if it's overloaded. pub(crate) fn overloaded_name(definition: &Definition, semantic: &SemanticModel) -> Option { - if let Definition::Member(Member { - kind: MemberKind::Function | MemberKind::NestedFunction | MemberKind::Method, - stmt, - .. - }) = definition - { - if visibility::is_overload(cast::decorator_list(stmt), semantic) { - let (name, ..) = match_function_def(stmt); - Some(name.to_string()) - } else { - None - } + let function = definition.as_function_def()?; + if visibility::is_overload(&function.decorator_list, semantic) { + Some(function.name.to_string()) } else { None } @@ -60,19 +18,12 @@ pub(crate) fn is_overload_impl( overloaded_name: &str, semantic: &SemanticModel, ) -> bool { - if let Definition::Member(Member { - kind: MemberKind::Function | MemberKind::NestedFunction | MemberKind::Method, - stmt, - .. - }) = definition - { - if visibility::is_overload(cast::decorator_list(stmt), semantic) { - false - } else { - let (name, ..) = match_function_def(stmt); - name == overloaded_name - } - } else { + let Some(function) = definition.as_function_def() else { + return false; + }; + if visibility::is_overload(&function.decorator_list, semantic) { false + } else { + function.name.as_str() == overloaded_name } } diff --git a/crates/ruff/src/rules/flake8_annotations/rules/definition.rs b/crates/ruff/src/rules/flake8_annotations/rules/definition.rs index 01895a874d..ae750a3f23 100644 --- a/crates/ruff/src/rules/flake8_annotations/rules/definition.rs +++ b/crates/ruff/src/rules/flake8_annotations/rules/definition.rs @@ -1,23 +1,19 @@ -use ruff_python_ast::{self as ast, Constant, Expr, ParameterWithDefault, Ranged, Stmt}; - use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::cast; use ruff_python_ast::helpers::ReturnStatementVisitor; use ruff_python_ast::identifier::Identifier; use ruff_python_ast::statement_visitor::StatementVisitor; +use ruff_python_ast::{self as ast, Constant, Expr, ParameterWithDefault, Ranged, Stmt}; use ruff_python_parser::typing::parse_type_annotation; use ruff_python_semantic::analyze::visibility; -use ruff_python_semantic::{Definition, Member, MemberKind}; +use ruff_python_semantic::Definition; use ruff_python_stdlib::typing::simple_magic_return_type; use crate::checkers::ast::Checker; use crate::registry::{AsRule, Rule}; +use crate::rules::flake8_annotations::fixes; use crate::rules::ruff::typing::type_hint_resolves_to_any; -use super::super::fixes; -use super::super::helpers::match_function_def; - /// ## What it does /// Checks that function arguments have type annotations. /// @@ -498,20 +494,23 @@ pub(crate) fn definition( definition: &Definition, visibility: visibility::Visibility, ) -> Vec { - // TODO(charlie): Consider using the AST directly here rather than `Definition`. - // We could adhere more closely to `flake8-annotations` by defining public - // vs. secret vs. protected. - let Definition::Member(Member { kind, stmt, .. }) = definition else { + let Some(function) = definition.as_function_def() else { return vec![]; }; - let is_method = match kind { - MemberKind::Method => true, - MemberKind::Function | MemberKind::NestedFunction => false, - _ => return vec![], - }; + let ast::StmtFunctionDef { + range: _, + is_async: _, + decorator_list, + name, + type_params: _, + parameters, + returns, + body, + } = function; + + let is_method = definition.is_method(); - let (name, arguments, returns, body, decorator_list) = match_function_def(stmt); // Keep track of whether we've seen any typed arguments or return values. let mut has_any_typed_arg = false; // Any argument has been typed? let mut has_typed_return = false; // Return value has been typed? @@ -528,20 +527,19 @@ pub(crate) fn definition( parameter, default: _, range: _, - } in arguments + } in parameters .posonlyargs .iter() - .chain(&arguments.args) - .chain(&arguments.kwonlyargs) + .chain(¶meters.args) + .chain(¶meters.kwonlyargs) .skip( // If this is a non-static method, skip `cls` or `self`. usize::from( - is_method - && !visibility::is_staticmethod(cast::decorator_list(stmt), checker.semantic()), + is_method && !visibility::is_staticmethod(decorator_list, checker.semantic()), ), ) { - // ANN401 for dynamically typed arguments + // ANN401 for dynamically typed parameters if let Some(annotation) = ¶meter.annotation { has_any_typed_arg = true; if checker.enabled(Rule::AnyType) && !is_overridden { @@ -572,7 +570,7 @@ pub(crate) fn definition( } // ANN002, ANN401 - if let Some(arg) = &arguments.vararg { + if let Some(arg) = ¶meters.vararg { if let Some(expr) = &arg.annotation { has_any_typed_arg = true; if !checker.settings.flake8_annotations.allow_star_arg_any { @@ -598,7 +596,7 @@ pub(crate) fn definition( } // ANN003, ANN401 - if let Some(arg) = &arguments.kwarg { + if let Some(arg) = ¶meters.kwarg { if let Some(expr) = &arg.annotation { has_any_typed_arg = true; if !checker.settings.flake8_annotations.allow_star_arg_any { @@ -629,18 +627,18 @@ pub(crate) fn definition( } // ANN101, ANN102 - if is_method && !visibility::is_staticmethod(cast::decorator_list(stmt), checker.semantic()) { + if is_method && !visibility::is_staticmethod(decorator_list, checker.semantic()) { if let Some(ParameterWithDefault { parameter, default: _, range: _, - }) = arguments + }) = parameters .posonlyargs .first() - .or_else(|| arguments.args.first()) + .or_else(|| parameters.args.first()) { if parameter.annotation.is_none() { - if visibility::is_classmethod(cast::decorator_list(stmt), checker.semantic()) { + if visibility::is_classmethod(decorator_list, checker.semantic()) { if checker.enabled(Rule::MissingTypeCls) { diagnostics.push(Diagnostic::new( MissingTypeCls { @@ -676,24 +674,22 @@ pub(crate) fn definition( // (explicitly or implicitly). checker.settings.flake8_annotations.suppress_none_returning && is_none_returning(body) ) { - if is_method && visibility::is_classmethod(cast::decorator_list(stmt), checker.semantic()) { + if is_method && visibility::is_classmethod(decorator_list, checker.semantic()) { if checker.enabled(Rule::MissingReturnTypeClassMethod) { diagnostics.push(Diagnostic::new( MissingReturnTypeClassMethod { name: name.to_string(), }, - stmt.identifier(), + function.identifier(), )); } - } else if is_method - && visibility::is_staticmethod(cast::decorator_list(stmt), checker.semantic()) - { + } else if is_method && visibility::is_staticmethod(decorator_list, checker.semantic()) { if checker.enabled(Rule::MissingReturnTypeStaticMethod) { diagnostics.push(Diagnostic::new( MissingReturnTypeStaticMethod { name: name.to_string(), }, - stmt.identifier(), + function.identifier(), )); } } else if is_method && visibility::is_init(name) { @@ -705,15 +701,15 @@ pub(crate) fn definition( MissingReturnTypeSpecialMethod { name: name.to_string(), }, - stmt.identifier(), + function.identifier(), ); if checker.patch(diagnostic.kind.rule()) { diagnostic.try_set_fix(|| { fixes::add_return_annotation( - checker.locator(), - stmt, + function, "None", checker.source_type, + checker.locator(), ) .map(Fix::suggested) }); @@ -727,16 +723,16 @@ pub(crate) fn definition( MissingReturnTypeSpecialMethod { name: name.to_string(), }, - stmt.identifier(), + function.identifier(), ); if checker.patch(diagnostic.kind.rule()) { if let Some(return_type) = simple_magic_return_type(name) { diagnostic.try_set_fix(|| { fixes::add_return_annotation( - checker.locator(), - stmt, + function, return_type, checker.source_type, + checker.locator(), ) .map(Fix::suggested) }); @@ -752,7 +748,7 @@ pub(crate) fn definition( MissingReturnTypeUndocumentedPublicFunction { name: name.to_string(), }, - stmt.identifier(), + function.identifier(), )); } } @@ -762,7 +758,7 @@ pub(crate) fn definition( MissingReturnTypePrivateFunction { name: name.to_string(), }, - stmt.identifier(), + function.identifier(), )); } } diff --git a/crates/ruff/src/rules/flake8_bandit/rules/bad_file_permissions.rs b/crates/ruff/src/rules/flake8_bandit/rules/bad_file_permissions.rs index 3cf3cb905b..1da82b4681 100644 --- a/crates/ruff/src/rules/flake8_bandit/rules/bad_file_permissions.rs +++ b/crates/ruff/src/rules/flake8_bandit/rules/bad_file_permissions.rs @@ -112,21 +112,21 @@ fn py_stat(call_path: &CallPath) -> Option { } } -fn int_value(expr: &Expr, model: &SemanticModel) -> Option { +fn int_value(expr: &Expr, semantic: &SemanticModel) -> Option { match expr { Expr::Constant(ast::ExprConstant { value: Constant::Int(value), .. }) => value.to_u16(), - Expr::Attribute(_) => model.resolve_call_path(expr).as_ref().and_then(py_stat), + Expr::Attribute(_) => semantic.resolve_call_path(expr).as_ref().and_then(py_stat), Expr::BinOp(ast::ExprBinOp { left, op, right, range: _, }) => { - let left_value = int_value(left, model)?; - let right_value = int_value(right, model)?; + let left_value = int_value(left, semantic)?; + let right_value = int_value(right, semantic)?; match op { Operator::BitAnd => Some(left_value & right_value), Operator::BitOr => Some(left_value | right_value), diff --git a/crates/ruff/src/rules/flake8_bandit/rules/hardcoded_sql_expression.rs b/crates/ruff/src/rules/flake8_bandit/rules/hardcoded_sql_expression.rs index 5b63205d5f..9d82380f4e 100644 --- a/crates/ruff/src/rules/flake8_bandit/rules/hardcoded_sql_expression.rs +++ b/crates/ruff/src/rules/flake8_bandit/rules/hardcoded_sql_expression.rs @@ -53,7 +53,7 @@ fn matches_sql_statement(string: &str) -> bool { SQL_REGEX.is_match(string) } -fn matches_string_format_expression(expr: &Expr, model: &SemanticModel) -> bool { +fn matches_string_format_expression(expr: &Expr, semantic: &SemanticModel) -> bool { match expr { // "select * from table where val = " + "str" + ... // "select * from table where val = %s" % ... @@ -62,8 +62,8 @@ fn matches_string_format_expression(expr: &Expr, model: &SemanticModel) -> bool .. }) => { // Only evaluate the full BinOp, not the nested components. - if model - .expr_parent() + if semantic + .current_expression_parent() .map_or(true, |parent| !parent.is_bin_op_expr()) { if any_over_expr(expr, &has_string_literal) { @@ -80,7 +80,7 @@ fn matches_string_format_expression(expr: &Expr, model: &SemanticModel) -> bool attr == "format" && string_literal(value).is_some() } // f"select * from table where val = {val}" - Expr::JoinedStr(_) => true, + Expr::FString(_) => true, _ => false, } } diff --git a/crates/ruff/src/rules/flake8_bandit/rules/hardcoded_tmp_directory.rs b/crates/ruff/src/rules/flake8_bandit/rules/hardcoded_tmp_directory.rs index 7993dd1b24..c677e9e909 100644 --- a/crates/ruff/src/rules/flake8_bandit/rules/hardcoded_tmp_directory.rs +++ b/crates/ruff/src/rules/flake8_bandit/rules/hardcoded_tmp_directory.rs @@ -1,8 +1,10 @@ -use ruff_python_ast::{Expr, Ranged}; +use ruff_python_ast::{self as ast, Expr, Ranged}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; +use crate::checkers::ast::Checker; + /// ## What it does /// Checks for the use of hardcoded temporary file or directory paths. /// @@ -49,19 +51,33 @@ impl Violation for HardcodedTempFile { } /// S108 -pub(crate) fn hardcoded_tmp_directory( - expr: &Expr, - value: &str, - prefixes: &[String], -) -> Option { - if prefixes.iter().any(|prefix| value.starts_with(prefix)) { - Some(Diagnostic::new( - HardcodedTempFile { - string: value.to_string(), - }, - expr.range(), - )) - } else { - None +pub(crate) fn hardcoded_tmp_directory(checker: &mut Checker, expr: &Expr, value: &str) { + if !checker + .settings + .flake8_bandit + .hardcoded_tmp_directory + .iter() + .any(|prefix| value.starts_with(prefix)) + { + return; } + + if let Some(Expr::Call(ast::ExprCall { func, .. })) = + checker.semantic().current_expression_parent() + { + if checker + .semantic() + .resolve_call_path(func) + .is_some_and(|call_path| matches!(call_path.as_slice(), ["tempfile", ..])) + { + return; + } + } + + checker.diagnostics.push(Diagnostic::new( + HardcodedTempFile { + string: value.to_string(), + }, + expr.range(), + )); } diff --git a/crates/ruff/src/rules/flake8_bandit/rules/shell_injection.rs b/crates/ruff/src/rules/flake8_bandit/rules/shell_injection.rs index 2b5715d18d..93e6c0c27e 100644 --- a/crates/ruff/src/rules/flake8_bandit/rules/shell_injection.rs +++ b/crates/ruff/src/rules/flake8_bandit/rules/shell_injection.rs @@ -10,6 +10,31 @@ use crate::{ checkers::ast::Checker, registry::Rule, rules::flake8_bandit::helpers::string_literal, }; +/// ## What it does +/// Check for method calls that initiate a subprocess with a shell. +/// +/// ## Why is this bad? +/// Starting a subprocess with a shell can allow attackers to execute arbitrary +/// shell commands. Consider starting the process without a shell call and +/// sanitize the input to mitigate the risk of shell injection. +/// +/// ## Example +/// ```python +/// import subprocess +/// +/// subprocess.run("ls -l", shell=True) +/// ``` +/// +/// Use instead: +/// ```python +/// import subprocess +/// +/// subprocess.run(["ls", "-l"]) +/// ``` +/// +/// ## References +/// - [Python documentation: `subprocess` — Subprocess management](https://docs.python.org/3/library/subprocess.html) +/// - [Common Weakness Enumeration: CWE-78](https://cwe.mitre.org/data/definitions/78.html) #[violation] pub struct SubprocessPopenWithShellEqualsTrue { seems_safe: bool, @@ -28,6 +53,30 @@ impl Violation for SubprocessPopenWithShellEqualsTrue { } } +/// ## What it does +/// Check for method calls that initiate a subprocess without a shell. +/// +/// ## Why is this bad? +/// Starting a subprocess without a shell can prevent attackers from executing +/// arbitrary shell commands; however, it is still error-prone. Consider +/// validating the input. +/// +/// ## Known problems +/// Prone to false positives as it is difficult to determine whether the +/// passed arguments have been validated ([#4045]). +/// +/// ## Example +/// ```python +/// import subprocess +/// +/// cmd = input("Enter a command: ").split() +/// subprocess.run(cmd) +/// ``` +/// +/// ## References +/// - [Python documentation: `subprocess` — Subprocess management](https://docs.python.org/3/library/subprocess.html) +/// +/// [#4045]: https://github.com/astral-sh/ruff/issues/4045 #[violation] pub struct SubprocessWithoutShellEqualsTrue; diff --git a/crates/ruff/src/rules/flake8_bandit/rules/suspicious_function_call.rs b/crates/ruff/src/rules/flake8_bandit/rules/suspicious_function_call.rs index 05bfc7aec9..7e706dae54 100644 --- a/crates/ruff/src/rules/flake8_bandit/rules/suspicious_function_call.rs +++ b/crates/ruff/src/rules/flake8_bandit/rules/suspicious_function_call.rs @@ -76,7 +76,7 @@ impl Violation for SuspiciousPickleUsage { /// import marshal /// /// with open("foo.marshal", "rb") as file: -/// foo = pickle.load(file) +/// foo = marshal.load(file) /// ``` /// /// Use instead: diff --git a/crates/ruff/src/rules/flake8_boolean_trap/helpers.rs b/crates/ruff/src/rules/flake8_boolean_trap/helpers.rs index 2c5f68aaa3..9e1e101e07 100644 --- a/crates/ruff/src/rules/flake8_boolean_trap/helpers.rs +++ b/crates/ruff/src/rules/flake8_boolean_trap/helpers.rs @@ -1,8 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Expr, Ranged}; - -use ruff_diagnostics::{Diagnostic, DiagnosticKind}; - -use crate::checkers::ast::Checker; +use ruff_python_ast::{self as ast, Constant, Expr}; /// Returns `true` if a function call is allowed to use a boolean trap. pub(super) fn is_allowed_func_call(name: &str) -> bool { @@ -62,18 +58,13 @@ pub(super) fn allow_boolean_trap(func: &Expr) -> bool { false } -const fn is_boolean_arg(arg: &Expr) -> bool { +/// Returns `true` if an expression is a boolean literal. +pub(super) const fn is_boolean(expr: &Expr) -> bool { matches!( - &arg, + &expr, Expr::Constant(ast::ExprConstant { value: Constant::Bool(_), .. }) ) } - -pub(super) fn add_if_boolean(checker: &mut Checker, arg: &Expr, kind: DiagnosticKind) { - if is_boolean_arg(arg) { - checker.diagnostics.push(Diagnostic::new(kind, arg.range())); - } -} diff --git a/crates/ruff/src/rules/flake8_boolean_trap/mod.rs b/crates/ruff/src/rules/flake8_boolean_trap/mod.rs index ab0d6f8741..7a4a1ff943 100644 --- a/crates/ruff/src/rules/flake8_boolean_trap/mod.rs +++ b/crates/ruff/src/rules/flake8_boolean_trap/mod.rs @@ -13,9 +13,9 @@ mod tests { use crate::test::test_path; use crate::{assert_messages, settings}; - #[test_case(Rule::BooleanPositionalArgInFunctionDefinition, Path::new("FBT.py"))] - #[test_case(Rule::BooleanDefaultValueInFunctionDefinition, Path::new("FBT.py"))] - #[test_case(Rule::BooleanPositionalValueInFunctionCall, Path::new("FBT.py"))] + #[test_case(Rule::BooleanTypeHintPositionalArgument, Path::new("FBT.py"))] + #[test_case(Rule::BooleanDefaultValuePositionalArgument, Path::new("FBT.py"))] + #[test_case(Rule::BooleanPositionalValueInCall, Path::new("FBT.py"))] fn rules(rule_code: Rule, path: &Path) -> Result<()> { let snapshot = format!("{}_{}", rule_code.noqa_code(), path.to_string_lossy()); let diagnostics = test_path( diff --git a/crates/ruff/src/rules/flake8_boolean_trap/rules/boolean_default_value_positional_argument.rs b/crates/ruff/src/rules/flake8_boolean_trap/rules/boolean_default_value_positional_argument.rs new file mode 100644 index 0000000000..b80bff7752 --- /dev/null +++ b/crates/ruff/src/rules/flake8_boolean_trap/rules/boolean_default_value_positional_argument.rs @@ -0,0 +1,126 @@ +use ruff_diagnostics::{Diagnostic, Violation}; +use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::call_path::collect_call_path; +use ruff_python_ast::{Decorator, ParameterWithDefault, Parameters, Ranged}; + +use crate::checkers::ast::Checker; +use crate::rules::flake8_boolean_trap::helpers::{is_allowed_func_def, is_boolean}; + +/// ## What it does +/// Checks for the use of boolean positional arguments in function definitions, +/// as determined by the presence of a boolean default value. +/// +/// ## Why is this bad? +/// Calling a function with boolean positional arguments is confusing as the +/// meaning of the boolean value is not clear to the caller and to future +/// readers of the code. +/// +/// The use of a boolean will also limit the function to only two possible +/// behaviors, which makes the function difficult to extend in the future. +/// +/// Instead, consider refactoring into separate implementations for the +/// `True` and `False` cases, using an `Enum`, or making the argument a +/// keyword-only argument, to force callers to be explicit when providing +/// the argument. +/// +/// ## Example +/// ```python +/// from math import ceil, floor +/// +/// +/// def round_number(number, up=True): +/// return ceil(number) if up else floor(number) +/// +/// +/// round_number(1.5, True) # What does `True` mean? +/// round_number(1.5, False) # What does `False` mean? +/// ``` +/// +/// Instead, refactor into separate implementations: +/// ```python +/// from math import ceil, floor +/// +/// +/// def round_up(number): +/// return ceil(number) +/// +/// +/// def round_down(number): +/// return floor(number) +/// +/// +/// round_up(1.5) +/// round_down(1.5) +/// ``` +/// +/// Or, refactor to use an `Enum`: +/// ```python +/// from enum import Enum +/// +/// +/// class RoundingMethod(Enum): +/// UP = 1 +/// DOWN = 2 +/// +/// +/// def round_number(value, method): +/// ... +/// ``` +/// +/// Or, make the argument a keyword-only argument: +/// ```python +/// from math import ceil, floor +/// +/// +/// def round_number(number, *, up=True): +/// return ceil(number) if up else floor(number) +/// +/// +/// round_number(1.5, up=True) +/// round_number(1.5, up=False) +/// ``` +/// +/// ## References +/// - [Python documentation: Calls](https://docs.python.org/3/reference/expressions.html#calls) +/// - [_How to Avoid “The Boolean Trap”_ by Adam Johnson](https://adamj.eu/tech/2021/07/10/python-type-hints-how-to-avoid-the-boolean-trap/) +#[violation] +pub struct BooleanDefaultValuePositionalArgument; + +impl Violation for BooleanDefaultValuePositionalArgument { + #[derive_message_formats] + fn message(&self) -> String { + format!("Boolean default positional argument in function definition") + } +} + +pub(crate) fn boolean_default_value_positional_argument( + checker: &mut Checker, + name: &str, + decorator_list: &[Decorator], + parameters: &Parameters, +) { + if is_allowed_func_def(name) { + return; + } + + if decorator_list.iter().any(|decorator| { + collect_call_path(&decorator.expression) + .is_some_and(|call_path| call_path.as_slice() == [name, "setter"]) + }) { + return; + } + + for ParameterWithDefault { + parameter, + default, + range: _, + } in parameters.posonlyargs.iter().chain(¶meters.args) + { + if default.as_ref().is_some_and(|default| is_boolean(default)) { + checker.diagnostics.push(Diagnostic::new( + BooleanDefaultValuePositionalArgument, + parameter.name.range(), + )); + } + } +} diff --git a/crates/ruff/src/rules/flake8_boolean_trap/rules/check_boolean_positional_value_in_function_call.rs b/crates/ruff/src/rules/flake8_boolean_trap/rules/boolean_positional_value_in_call.rs similarity index 60% rename from crates/ruff/src/rules/flake8_boolean_trap/rules/check_boolean_positional_value_in_function_call.rs rename to crates/ruff/src/rules/flake8_boolean_trap/rules/boolean_positional_value_in_call.rs index 6138fa67bd..0f6bf1fca7 100644 --- a/crates/ruff/src/rules/flake8_boolean_trap/rules/check_boolean_positional_value_in_function_call.rs +++ b/crates/ruff/src/rules/flake8_boolean_trap/rules/boolean_positional_value_in_call.rs @@ -1,11 +1,9 @@ -use ruff_python_ast::Expr; - -use ruff_diagnostics::Violation; - +use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::{Expr, Ranged}; use crate::checkers::ast::Checker; -use crate::rules::flake8_boolean_trap::helpers::{add_if_boolean, allow_boolean_trap}; +use crate::rules::flake8_boolean_trap::helpers::{allow_boolean_trap, is_boolean}; /// ## What it does /// Checks for boolean positional arguments in function calls. @@ -17,44 +15,42 @@ use crate::rules::flake8_boolean_trap::helpers::{add_if_boolean, allow_boolean_t /// /// ## Example /// ```python -/// def foo(flag: bool) -> None: +/// def func(flag: bool) -> None: /// ... /// /// -/// foo(True) +/// func(True) /// ``` /// /// Use instead: /// ```python -/// def foo(flag: bool) -> None: +/// def func(flag: bool) -> None: /// ... /// /// -/// foo(flag=True) +/// func(flag=True) /// ``` /// /// ## References /// - [Python documentation: Calls](https://docs.python.org/3/reference/expressions.html#calls) /// - [_How to Avoid “The Boolean Trap”_ by Adam Johnson](https://adamj.eu/tech/2021/07/10/python-type-hints-how-to-avoid-the-boolean-trap/) #[violation] -pub struct BooleanPositionalValueInFunctionCall; +pub struct BooleanPositionalValueInCall; -impl Violation for BooleanPositionalValueInFunctionCall { +impl Violation for BooleanPositionalValueInCall { #[derive_message_formats] fn message(&self) -> String { format!("Boolean positional value in function call") } } -pub(crate) fn check_boolean_positional_value_in_function_call( - checker: &mut Checker, - args: &[Expr], - func: &Expr, -) { +pub(crate) fn boolean_positional_value_in_call(checker: &mut Checker, args: &[Expr], func: &Expr) { if allow_boolean_trap(func) { return; } - for arg in args { - add_if_boolean(checker, arg, BooleanPositionalValueInFunctionCall.into()); + for arg in args.iter().filter(|arg| is_boolean(arg)) { + checker + .diagnostics + .push(Diagnostic::new(BooleanPositionalValueInCall, arg.range())); } } diff --git a/crates/ruff/src/rules/flake8_boolean_trap/rules/check_positional_boolean_in_def.rs b/crates/ruff/src/rules/flake8_boolean_trap/rules/boolean_type_hint_positional_argument.rs similarity index 68% rename from crates/ruff/src/rules/flake8_boolean_trap/rules/check_positional_boolean_in_def.rs rename to crates/ruff/src/rules/flake8_boolean_trap/rules/boolean_type_hint_positional_argument.rs index a60dc6ae6a..cfe52b2829 100644 --- a/crates/ruff/src/rules/flake8_boolean_trap/rules/check_positional_boolean_in_def.rs +++ b/crates/ruff/src/rules/flake8_boolean_trap/rules/boolean_type_hint_positional_argument.rs @@ -11,16 +11,22 @@ use crate::checkers::ast::Checker; use crate::rules::flake8_boolean_trap::helpers::is_allowed_func_def; /// ## What it does -/// Checks for boolean positional arguments in function definitions. +/// Checks for the use of boolean positional arguments in function definitions, +/// as determined by the presence of a `bool` type hint. /// /// ## Why is this bad? /// Calling a function with boolean positional arguments is confusing as the -/// meaning of the boolean value is not clear to the caller, and to future +/// meaning of the boolean value is not clear to the caller and to future /// readers of the code. /// /// The use of a boolean will also limit the function to only two possible /// behaviors, which makes the function difficult to extend in the future. /// +/// Instead, consider refactoring into separate implementations for the +/// `True` and `False` cases, using an `Enum`, or making the argument a +/// keyword-only argument, to force callers to be explicit when providing +/// the argument. +/// /// ## Example /// ```python /// from math import ceil, floor @@ -65,20 +71,33 @@ use crate::rules::flake8_boolean_trap::helpers::is_allowed_func_def; /// ... /// ``` /// +/// Or, make the argument a keyword-only argument: +/// ```python +/// from math import ceil, floor +/// +/// +/// def round_number(number: float, *, up: bool) -> int: +/// return ceil(number) if up else floor(number) +/// +/// +/// round_number(1.5, up=True) +/// round_number(1.5, up=False) +/// ``` +/// /// ## References /// - [Python documentation: Calls](https://docs.python.org/3/reference/expressions.html#calls) /// - [_How to Avoid “The Boolean Trap”_ by Adam Johnson](https://adamj.eu/tech/2021/07/10/python-type-hints-how-to-avoid-the-boolean-trap/) #[violation] -pub struct BooleanPositionalArgInFunctionDefinition; +pub struct BooleanTypeHintPositionalArgument; -impl Violation for BooleanPositionalArgInFunctionDefinition { +impl Violation for BooleanTypeHintPositionalArgument { #[derive_message_formats] fn message(&self) -> String { - format!("Boolean positional arg in function definition") + format!("Boolean-typed positional argument in function definition") } } -pub(crate) fn check_positional_boolean_in_def( +pub(crate) fn boolean_type_hint_positional_argument( checker: &mut Checker, name: &str, decorator_list: &[Decorator], @@ -101,28 +120,25 @@ pub(crate) fn check_positional_boolean_in_def( range: _, } in parameters.posonlyargs.iter().chain(¶meters.args) { - if parameter.annotation.is_none() { - continue; - } - let Some(expr) = ¶meter.annotation else { + let Some(annotation) = parameter.annotation.as_ref() else { continue; }; // check for both bool (python class) and 'bool' (string annotation) - let hint = match expr.as_ref() { + let hint = match annotation.as_ref() { Expr::Name(name) => &name.id == "bool", Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), + value: Constant::Str(ast::StringConstant { value, .. }), .. }) => value == "bool", _ => false, }; - if !hint { + if !hint || !checker.semantic().is_builtin("bool") { continue; } checker.diagnostics.push(Diagnostic::new( - BooleanPositionalArgInFunctionDefinition, - parameter.range(), + BooleanTypeHintPositionalArgument, + parameter.name.range(), )); } } diff --git a/crates/ruff/src/rules/flake8_boolean_trap/rules/check_boolean_default_value_in_function_definition.rs b/crates/ruff/src/rules/flake8_boolean_trap/rules/check_boolean_default_value_in_function_definition.rs deleted file mode 100644 index 37037d3ea0..0000000000 --- a/crates/ruff/src/rules/flake8_boolean_trap/rules/check_boolean_default_value_in_function_definition.rs +++ /dev/null @@ -1,90 +0,0 @@ -use ruff_python_ast::{Decorator, ParameterWithDefault, Parameters}; - -use ruff_diagnostics::Violation; -use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::call_path::collect_call_path; - -use crate::checkers::ast::Checker; -use crate::rules::flake8_boolean_trap::helpers::{add_if_boolean, is_allowed_func_def}; - -/// ## What it does -/// Checks for the use of booleans as default values in function definitions. -/// -/// ## Why is this bad? -/// Calling a function with boolean default means that the keyword argument -/// argument can be omitted, which makes the function call ambiguous. -/// -/// Instead, define the relevant argument as keyword-only. -/// -/// ## Example -/// ```python -/// from math import ceil, floor -/// -/// -/// def round_number(number: float, *, up: bool = True) -> int: -/// return ceil(number) if up else floor(number) -/// -/// -/// round_number(1.5) -/// round_number(1.5, up=False) -/// ``` -/// -/// Use instead: -/// ```python -/// from math import ceil, floor -/// -/// -/// def round_number(number: float, *, up: bool) -> int: -/// return ceil(number) if up else floor(number) -/// -/// -/// round_number(1.5, up=True) -/// round_number(1.5, up=False) -/// ``` -/// -/// ## References -/// - [Python documentation: Calls](https://docs.python.org/3/reference/expressions.html#calls) -/// - [_How to Avoid “The Boolean Trap”_ by Adam Johnson](https://adamj.eu/tech/2021/07/10/python-type-hints-how-to-avoid-the-boolean-trap/) -#[violation] -pub struct BooleanDefaultValueInFunctionDefinition; - -impl Violation for BooleanDefaultValueInFunctionDefinition { - #[derive_message_formats] - fn message(&self) -> String { - format!("Boolean default value in function definition") - } -} - -pub(crate) fn check_boolean_default_value_in_function_definition( - checker: &mut Checker, - name: &str, - decorator_list: &[Decorator], - parameters: &Parameters, -) { - if is_allowed_func_def(name) { - return; - } - - if decorator_list.iter().any(|decorator| { - collect_call_path(&decorator.expression) - .is_some_and(|call_path| call_path.as_slice() == [name, "setter"]) - }) { - return; - } - - for ParameterWithDefault { - parameter: _, - default, - range: _, - } in parameters.args.iter().chain(¶meters.posonlyargs) - { - let Some(default) = default else { - continue; - }; - add_if_boolean( - checker, - default, - BooleanDefaultValueInFunctionDefinition.into(), - ); - } -} diff --git a/crates/ruff/src/rules/flake8_boolean_trap/rules/mod.rs b/crates/ruff/src/rules/flake8_boolean_trap/rules/mod.rs index b40aa58dc5..a9aae13b67 100644 --- a/crates/ruff/src/rules/flake8_boolean_trap/rules/mod.rs +++ b/crates/ruff/src/rules/flake8_boolean_trap/rules/mod.rs @@ -1,7 +1,7 @@ -pub(crate) use check_boolean_default_value_in_function_definition::*; -pub(crate) use check_boolean_positional_value_in_function_call::*; -pub(crate) use check_positional_boolean_in_def::*; +pub(crate) use boolean_default_value_positional_argument::*; +pub(crate) use boolean_positional_value_in_call::*; +pub(crate) use boolean_type_hint_positional_argument::*; -mod check_boolean_default_value_in_function_definition; -mod check_boolean_positional_value_in_function_call; -mod check_positional_boolean_in_def; +mod boolean_default_value_positional_argument; +mod boolean_positional_value_in_call; +mod boolean_type_hint_positional_argument; diff --git a/crates/ruff/src/rules/flake8_boolean_trap/snapshots/ruff__rules__flake8_boolean_trap__tests__FBT001_FBT.py.snap b/crates/ruff/src/rules/flake8_boolean_trap/snapshots/ruff__rules__flake8_boolean_trap__tests__FBT001_FBT.py.snap index f973bacf59..1c38f9930e 100644 --- a/crates/ruff/src/rules/flake8_boolean_trap/snapshots/ruff__rules__flake8_boolean_trap__tests__FBT001_FBT.py.snap +++ b/crates/ruff/src/rules/flake8_boolean_trap/snapshots/ruff__rules__flake8_boolean_trap__tests__FBT001_FBT.py.snap @@ -1,91 +1,91 @@ --- source: crates/ruff/src/rules/flake8_boolean_trap/mod.rs --- -FBT.py:4:5: FBT001 Boolean positional arg in function definition +FBT.py:4:5: FBT001 Boolean-typed positional argument in function definition | 2 | posonly_nohint, 3 | posonly_nonboolhint: int, 4 | posonly_boolhint: bool, - | ^^^^^^^^^^^^^^^^^^^^^^ FBT001 + | ^^^^^^^^^^^^^^^^ FBT001 5 | posonly_boolstrhint: "bool", 6 | /, | -FBT.py:5:5: FBT001 Boolean positional arg in function definition +FBT.py:5:5: FBT001 Boolean-typed positional argument in function definition | 3 | posonly_nonboolhint: int, 4 | posonly_boolhint: bool, 5 | posonly_boolstrhint: "bool", - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 + | ^^^^^^^^^^^^^^^^^^^ FBT001 6 | /, 7 | offset, | -FBT.py:10:5: FBT001 Boolean positional arg in function definition +FBT.py:10:5: FBT001 Boolean-typed positional argument in function definition | 8 | posorkw_nonvalued_nohint, 9 | posorkw_nonvalued_nonboolhint: int, 10 | posorkw_nonvalued_boolhint: bool, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 11 | posorkw_nonvalued_boolstrhint: "bool", 12 | posorkw_boolvalued_nohint=True, | -FBT.py:11:5: FBT001 Boolean positional arg in function definition +FBT.py:11:5: FBT001 Boolean-typed positional argument in function definition | 9 | posorkw_nonvalued_nonboolhint: int, 10 | posorkw_nonvalued_boolhint: bool, 11 | posorkw_nonvalued_boolstrhint: "bool", - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 12 | posorkw_boolvalued_nohint=True, 13 | posorkw_boolvalued_nonboolhint: int = True, | -FBT.py:14:5: FBT001 Boolean positional arg in function definition +FBT.py:14:5: FBT001 Boolean-typed positional argument in function definition | 12 | posorkw_boolvalued_nohint=True, 13 | posorkw_boolvalued_nonboolhint: int = True, 14 | posorkw_boolvalued_boolhint: bool = True, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 15 | posorkw_boolvalued_boolstrhint: "bool" = True, 16 | posorkw_nonboolvalued_nohint=1, | -FBT.py:15:5: FBT001 Boolean positional arg in function definition +FBT.py:15:5: FBT001 Boolean-typed positional argument in function definition | 13 | posorkw_boolvalued_nonboolhint: int = True, 14 | posorkw_boolvalued_boolhint: bool = True, 15 | posorkw_boolvalued_boolstrhint: "bool" = True, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 16 | posorkw_nonboolvalued_nohint=1, 17 | posorkw_nonboolvalued_nonboolhint: int = 2, | -FBT.py:18:5: FBT001 Boolean positional arg in function definition +FBT.py:18:5: FBT001 Boolean-typed positional argument in function definition | 16 | posorkw_nonboolvalued_nohint=1, 17 | posorkw_nonboolvalued_nonboolhint: int = 2, 18 | posorkw_nonboolvalued_boolhint: bool = 3, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 19 | posorkw_nonboolvalued_boolstrhint: "bool" = 4, 20 | *, | -FBT.py:19:5: FBT001 Boolean positional arg in function definition +FBT.py:19:5: FBT001 Boolean-typed positional argument in function definition | 17 | posorkw_nonboolvalued_nonboolhint: int = 2, 18 | posorkw_nonboolvalued_boolhint: bool = 3, 19 | posorkw_nonboolvalued_boolstrhint: "bool" = 4, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT001 20 | *, 21 | kwonly_nonvalued_nohint, | -FBT.py:86:19: FBT001 Boolean positional arg in function definition +FBT.py:86:19: FBT001 Boolean-typed positional argument in function definition | 85 | # FBT001: Boolean positional arg in function definition 86 | def foo(self, value: bool) -> None: - | ^^^^^^^^^^^ FBT001 + | ^^^^^ FBT001 87 | pass | diff --git a/crates/ruff/src/rules/flake8_boolean_trap/snapshots/ruff__rules__flake8_boolean_trap__tests__FBT002_FBT.py.snap b/crates/ruff/src/rules/flake8_boolean_trap/snapshots/ruff__rules__flake8_boolean_trap__tests__FBT002_FBT.py.snap index 5a76f50142..688254791d 100644 --- a/crates/ruff/src/rules/flake8_boolean_trap/snapshots/ruff__rules__flake8_boolean_trap__tests__FBT002_FBT.py.snap +++ b/crates/ruff/src/rules/flake8_boolean_trap/snapshots/ruff__rules__flake8_boolean_trap__tests__FBT002_FBT.py.snap @@ -1,42 +1,42 @@ --- source: crates/ruff/src/rules/flake8_boolean_trap/mod.rs --- -FBT.py:12:31: FBT002 Boolean default value in function definition +FBT.py:12:5: FBT002 Boolean default positional argument in function definition | 10 | posorkw_nonvalued_boolhint: bool, 11 | posorkw_nonvalued_boolstrhint: "bool", 12 | posorkw_boolvalued_nohint=True, - | ^^^^ FBT002 + | ^^^^^^^^^^^^^^^^^^^^^^^^^ FBT002 13 | posorkw_boolvalued_nonboolhint: int = True, 14 | posorkw_boolvalued_boolhint: bool = True, | -FBT.py:13:43: FBT002 Boolean default value in function definition +FBT.py:13:5: FBT002 Boolean default positional argument in function definition | 11 | posorkw_nonvalued_boolstrhint: "bool", 12 | posorkw_boolvalued_nohint=True, 13 | posorkw_boolvalued_nonboolhint: int = True, - | ^^^^ FBT002 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT002 14 | posorkw_boolvalued_boolhint: bool = True, 15 | posorkw_boolvalued_boolstrhint: "bool" = True, | -FBT.py:14:41: FBT002 Boolean default value in function definition +FBT.py:14:5: FBT002 Boolean default positional argument in function definition | 12 | posorkw_boolvalued_nohint=True, 13 | posorkw_boolvalued_nonboolhint: int = True, 14 | posorkw_boolvalued_boolhint: bool = True, - | ^^^^ FBT002 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT002 15 | posorkw_boolvalued_boolstrhint: "bool" = True, 16 | posorkw_nonboolvalued_nohint=1, | -FBT.py:15:46: FBT002 Boolean default value in function definition +FBT.py:15:5: FBT002 Boolean default positional argument in function definition | 13 | posorkw_boolvalued_nonboolhint: int = True, 14 | posorkw_boolvalued_boolhint: bool = True, 15 | posorkw_boolvalued_boolstrhint: "bool" = True, - | ^^^^ FBT002 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FBT002 16 | posorkw_nonboolvalued_nohint=1, 17 | posorkw_nonboolvalued_nonboolhint: int = 2, | diff --git a/crates/ruff/src/rules/flake8_bugbear/mod.rs b/crates/ruff/src/rules/flake8_bugbear/mod.rs index 005fe03002..1d92306633 100644 --- a/crates/ruff/src/rules/flake8_bugbear/mod.rs +++ b/crates/ruff/src/rules/flake8_bugbear/mod.rs @@ -49,7 +49,6 @@ mod tests { #[test_case(Rule::UselessComparison, Path::new("B015.py"))] #[test_case(Rule::UselessContextlibSuppress, Path::new("B022.py"))] #[test_case(Rule::UselessExpression, Path::new("B018.py"))] - #[test_case(Rule::ZipWithoutExplicitStrict, Path::new("B905.py"))] fn rules(rule_code: Rule, path: &Path) -> Result<()> { let snapshot = format!("{}_{}", rule_code.noqa_code(), path.to_string_lossy()); let diagnostics = test_path( @@ -60,6 +59,17 @@ mod tests { Ok(()) } + #[test] + fn zip_without_explicit_strict() -> Result<()> { + let snapshot = "B905.py"; + let diagnostics = test_path( + Path::new("flake8_bugbear").join(snapshot).as_path(), + &Settings::for_rule(Rule::ZipWithoutExplicitStrict), + )?; + assert_messages!(snapshot, diagnostics); + Ok(()) + } + #[test] fn extend_immutable_calls() -> Result<()> { let snapshot = "extend_immutable_calls".to_string(); @@ -72,7 +82,7 @@ mod tests { "fastapi.Query".to_string(), ], }, - ..Settings::for_rules(vec![Rule::FunctionCallInDefaultArgument]) + ..Settings::for_rule(Rule::FunctionCallInDefaultArgument) }, )?; assert_messages!(snapshot, diagnostics); diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/abstract_base_class.rs b/crates/ruff/src/rules/flake8_bugbear/rules/abstract_base_class.rs index 8b69b2cf61..43307aa5c1 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/abstract_base_class.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/abstract_base_class.rs @@ -159,18 +159,12 @@ pub(crate) fn abstract_base_class( continue; } - let (Stmt::FunctionDef(ast::StmtFunctionDef { + let Stmt::FunctionDef(ast::StmtFunctionDef { decorator_list, body, name: method_name, .. - }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - decorator_list, - body, - name: method_name, - .. - })) = stmt + }) = stmt else { continue; }; diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/cached_instance_method.rs b/crates/ruff/src/rules/flake8_bugbear/rules/cached_instance_method.rs index 8b5d81ba25..61e99ed491 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/cached_instance_method.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/cached_instance_method.rs @@ -77,7 +77,7 @@ fn is_cache_func(expr: &Expr, semantic: &SemanticModel) -> bool { /// B019 pub(crate) fn cached_instance_method(checker: &mut Checker, decorator_list: &[Decorator]) { - if !checker.semantic().scope().kind.is_class() { + if !checker.semantic().current_scope().kind.is_class() { return; } for decorator in decorator_list { diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/duplicate_exceptions.rs b/crates/ruff/src/rules/flake8_bugbear/rules/duplicate_exceptions.rs index 6f6fbe550a..01dd70f639 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/duplicate_exceptions.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/duplicate_exceptions.rs @@ -150,7 +150,9 @@ fn duplicate_handler_exceptions<'a>( if unique_elts.len() == 1 { checker.generator().expr(unique_elts[0]) } else { - checker.generator().expr(&type_pattern(unique_elts)) + // Multiple exceptions must always be parenthesized. This is done + // manually as the generator never parenthesizes lone tuples. + format!("({})", checker.generator().expr(&type_pattern(unique_elts))) }, expr.range(), ))); diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/f_string_docstring.rs b/crates/ruff/src/rules/flake8_bugbear/rules/f_string_docstring.rs index 2deb444d37..7441f8a9eb 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/f_string_docstring.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/f_string_docstring.rs @@ -50,7 +50,7 @@ pub(crate) fn f_string_docstring(checker: &mut Checker, body: &[Stmt]) { let Stmt::Expr(ast::StmtExpr { value, range: _ }) = stmt else { return; }; - if !value.is_joined_str_expr() { + if !value.is_f_string_expr() { return; } checker diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/function_call_in_argument_default.rs b/crates/ruff/src/rules/flake8_bugbear/rules/function_call_in_argument_default.rs index 01e52dbb67..48577e04dd 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/function_call_in_argument_default.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/function_call_in_argument_default.rs @@ -67,9 +67,9 @@ struct ArgumentDefaultVisitor<'a> { } impl<'a> ArgumentDefaultVisitor<'a> { - fn new(model: &'a SemanticModel<'a>, extend_immutable_calls: Vec>) -> Self { + fn new(semantic: &'a SemanticModel<'a>, extend_immutable_calls: Vec>) -> Self { Self { - semantic: model, + semantic, extend_immutable_calls, diagnostics: Vec::new(), } diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/function_uses_loop_variable.rs b/crates/ruff/src/rules/flake8_bugbear/rules/function_uses_loop_variable.rs index 500acd9015..b0291c21b6 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/function_uses_loop_variable.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/function_uses_loop_variable.rs @@ -86,9 +86,6 @@ impl<'a> Visitor<'a> for SuspiciousVariablesVisitor<'a> { match stmt { Stmt::FunctionDef(ast::StmtFunctionDef { parameters, body, .. - }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - parameters, body, .. }) => { // Collect all loaded variable names. let mut visitor = LoadedNamesVisitor::default(); @@ -236,7 +233,7 @@ struct AssignedNamesVisitor<'a> { /// `Visitor` to collect all used identifiers in a statement. impl<'a> Visitor<'a> for AssignedNamesVisitor<'a> { fn visit_stmt(&mut self, stmt: &'a Stmt) { - if matches!(stmt, Stmt::FunctionDef(_) | Stmt::AsyncFunctionDef(_)) { + if stmt.is_function_def_stmt() { // Don't recurse. return; } @@ -251,8 +248,7 @@ impl<'a> Visitor<'a> for AssignedNamesVisitor<'a> { } Stmt::AugAssign(ast::StmtAugAssign { target, .. }) | Stmt::AnnAssign(ast::StmtAnnAssign { target, .. }) - | Stmt::For(ast::StmtFor { target, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { target, .. }) => { + | Stmt::For(ast::StmtFor { target, .. }) => { let mut visitor = NamesFromAssignmentsVisitor::default(); visitor.visit_expr(target); self.names.extend(visitor.names); diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/getattr_with_constant.rs b/crates/ruff/src/rules/flake8_bugbear/rules/getattr_with_constant.rs index 94de14785c..c7c5944c81 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/getattr_with_constant.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/getattr_with_constant.rs @@ -64,7 +64,7 @@ pub(crate) fn getattr_with_constant( return; }; let Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), + value: Constant::Str(ast::StringConstant { value, .. }), .. }) = arg else { diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/jump_statement_in_finally.rs b/crates/ruff/src/rules/flake8_bugbear/rules/jump_statement_in_finally.rs index df83409f2e..5c5ca90cb7 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/jump_statement_in_finally.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/jump_statement_in_finally.rs @@ -69,16 +69,12 @@ fn walk_stmt(checker: &mut Checker, body: &[Stmt], f: fn(&Stmt) -> bool) { )); } match stmt { - Stmt::While(ast::StmtWhile { body, .. }) - | Stmt::For(ast::StmtFor { body, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { body, .. }) => { + Stmt::While(ast::StmtWhile { body, .. }) | Stmt::For(ast::StmtFor { body, .. }) => { walk_stmt(checker, body, Stmt::is_return_stmt); } Stmt::If(ast::StmtIf { body, .. }) | Stmt::Try(ast::StmtTry { body, .. }) - | Stmt::TryStar(ast::StmtTryStar { body, .. }) - | Stmt::With(ast::StmtWith { body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) => { + | Stmt::With(ast::StmtWith { body, .. }) => { walk_stmt(checker, body, f); } Stmt::Match(ast::StmtMatch { cases, .. }) => { diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/mutable_argument_default.rs b/crates/ruff/src/rules/flake8_bugbear/rules/mutable_argument_default.rs index e19d7930dc..bee4481a28 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/mutable_argument_default.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/mutable_argument_default.rs @@ -1,10 +1,15 @@ -use ruff_python_ast::{ParameterWithDefault, Parameters, Ranged}; - -use ruff_diagnostics::{Diagnostic, Violation}; +use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::helpers::is_docstring_stmt; +use ruff_python_ast::{self as ast, Expr, Parameter, ParameterWithDefault, Ranged}; +use ruff_python_codegen::{Generator, Stylist}; +use ruff_python_index::Indexer; use ruff_python_semantic::analyze::typing::{is_immutable_annotation, is_mutable_expr}; +use ruff_python_trivia::{indentation_at_offset, textwrap}; +use ruff_source_file::Locator; use crate::checkers::ast::Checker; +use crate::registry::AsRule; /// ## What it does /// Checks for uses of mutable objects as function argument defaults. @@ -50,24 +55,30 @@ use crate::checkers::ast::Checker; pub struct MutableArgumentDefault; impl Violation for MutableArgumentDefault { + const AUTOFIX: AutofixKind = AutofixKind::Sometimes; + #[derive_message_formats] fn message(&self) -> String { format!("Do not use mutable data structures for argument defaults") } + fn autofix_title(&self) -> Option { + Some(format!("Replace with `None`; initialize within function")) + } } /// B006 -pub(crate) fn mutable_argument_default(checker: &mut Checker, parameters: &Parameters) { +pub(crate) fn mutable_argument_default(checker: &mut Checker, function_def: &ast::StmtFunctionDef) { // Scan in reverse order to right-align zip(). for ParameterWithDefault { parameter, default, range: _, - } in parameters + } in function_def + .parameters .posonlyargs .iter() - .chain(¶meters.args) - .chain(¶meters.kwonlyargs) + .chain(&function_def.parameters.args) + .chain(&function_def.parameters.kwonlyargs) { let Some(default) = default else { continue; @@ -79,9 +90,84 @@ pub(crate) fn mutable_argument_default(checker: &mut Checker, parameters: &Param .as_ref() .is_some_and(|expr| is_immutable_annotation(expr, checker.semantic())) { - checker - .diagnostics - .push(Diagnostic::new(MutableArgumentDefault, default.range())); + let mut diagnostic = Diagnostic::new(MutableArgumentDefault, default.range()); + + // If the function body is on the same line as the function def, do not fix + if checker.patch(diagnostic.kind.rule()) { + if let Some(fix) = move_initialization( + function_def, + parameter, + default, + checker.locator(), + checker.stylist(), + checker.indexer(), + checker.generator(), + ) { + diagnostic.set_fix(fix); + } + } + checker.diagnostics.push(diagnostic); } } } + +/// Generate a [`Fix`] to move a mutable argument default initialization +/// into the function body. +fn move_initialization( + function_def: &ast::StmtFunctionDef, + parameter: &Parameter, + default: &Expr, + locator: &Locator, + stylist: &Stylist, + indexer: &Indexer, + generator: Generator, +) -> Option { + let mut body = function_def.body.iter(); + + let statement = body.next()?; + if indexer.preceded_by_multi_statement_line(statement, locator) { + return None; + } + + // Determine the indentation depth of the function body. + let indentation = indentation_at_offset(statement.start(), locator)?; + + // Set the default argument value to `None`. + let default_edit = Edit::range_replacement("None".to_string(), default.range()); + + // Add an `if`, to set the argument to its original value if still `None`. + let mut content = String::new(); + content.push_str(&format!("if {} is None:", parameter.name.as_str())); + content.push_str(stylist.line_ending().as_str()); + content.push_str(stylist.indentation()); + content.push_str(&format!( + "{} = {}", + parameter.name.as_str(), + generator.expr(default) + )); + content.push_str(stylist.line_ending().as_str()); + + // Indent the edit to match the body indentation. + let content = textwrap::indent(&content, indentation).to_string(); + + let initialization_edit = if is_docstring_stmt(statement) { + // If the first statement in the function is a docstring, insert _after_ it. + if let Some(statement) = body.next() { + // If there's a second statement, insert _before_ it, but ensure this isn't a + // multi-statement line. + if indexer.preceded_by_multi_statement_line(statement, locator) { + return None; + } + Edit::insertion(content, locator.line_start(statement.start())) + } else { + // If the docstring is the only statement, insert _before_ it. + Edit::insertion(content, locator.full_line_end(statement.end())) + } + } else { + // Otherwise, insert before the first statement. + let at = locator.line_start(statement.start()); + Edit::insertion(content, at) + }; + + Some(Fix::manual_edits(default_edit, [initialization_edit])) +} diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/setattr_with_constant.rs b/crates/ruff/src/rules/flake8_bugbear/rules/setattr_with_constant.rs index 369391d5ab..9bb1802b85 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/setattr_with_constant.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/setattr_with_constant.rs @@ -88,7 +88,7 @@ pub(crate) fn setattr_with_constant( if !is_identifier(name) { return; } - if is_mangled_private(name.as_str()) { + if is_mangled_private(name) { return; } // We can only replace a `setattr` call (which is an `Expr`) with an assignment @@ -97,7 +97,7 @@ pub(crate) fn setattr_with_constant( if let Stmt::Expr(ast::StmtExpr { value: child, range: _, - }) = checker.semantic().stmt() + }) = checker.semantic().current_statement() { if expr == child.as_ref() { let mut diagnostic = Diagnostic::new(SetAttrWithConstant, expr.range()); diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/unreliable_callable_check.rs b/crates/ruff/src/rules/flake8_bugbear/rules/unreliable_callable_check.rs index d9532a927b..eefcf16bd7 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/unreliable_callable_check.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/unreliable_callable_check.rs @@ -68,13 +68,13 @@ pub(crate) fn unreliable_callable_check( return; }; let Expr::Constant(ast::ExprConstant { - value: Constant::Str(string), + value: Constant::Str(ast::StringConstant { value, .. }), .. }) = attr else { return; }; - if string != "__call__" { + if value != "__call__" { return; } diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/unused_loop_control_variable.rs b/crates/ruff/src/rules/flake8_bugbear/rules/unused_loop_control_variable.rs index dc2553d200..8ab410ecd4 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/unused_loop_control_variable.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/unused_loop_control_variable.rs @@ -159,7 +159,7 @@ pub(crate) fn unused_loop_control_variable(checker: &mut Checker, target: &Expr, if certainty.into() { // Avoid fixing if the variable, or any future bindings to the variable, are // used _after_ the loop. - let scope = checker.semantic().scope(); + let scope = checker.semantic().current_scope(); if scope .get_all(name) .map(|binding_id| checker.semantic().binding(binding_id)) diff --git a/crates/ruff/src/rules/flake8_bugbear/rules/useless_expression.rs b/crates/ruff/src/rules/flake8_bugbear/rules/useless_expression.rs index e71e87c8c0..cdef77fcd6 100644 --- a/crates/ruff/src/rules/flake8_bugbear/rules/useless_expression.rs +++ b/crates/ruff/src/rules/flake8_bugbear/rules/useless_expression.rs @@ -54,7 +54,7 @@ pub(crate) fn useless_expression(checker: &mut Checker, value: &Expr) { // Ignore strings, to avoid false positives with docstrings. if matches!( value, - Expr::JoinedStr(_) + Expr::FString(_) | Expr::Constant(ast::ExprConstant { value: Constant::Str(..) | Constant::Ellipsis, .. diff --git a/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B006_B006_B008.py.snap b/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B006_B006_B008.py.snap index abac933f98..038b21f9a2 100644 --- a/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B006_B006_B008.py.snap +++ b/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B006_B006_B008.py.snap @@ -1,123 +1,479 @@ --- source: crates/ruff/src/rules/flake8_bugbear/mod.rs --- -B006_B008.py:63:25: B006 Do not use mutable data structures for argument defaults +B006_B008.py:63:25: B006 [*] Do not use mutable data structures for argument defaults | 63 | def this_is_wrong(value=[1, 2, 3]): | ^^^^^^^^^ B006 64 | ... | + = help: Replace with `None`; initialize within function -B006_B008.py:67:30: B006 Do not use mutable data structures for argument defaults +ℹ Possible fix +60 60 | # Flag mutable literals/comprehensions +61 61 | +62 62 | +63 |-def this_is_wrong(value=[1, 2, 3]): + 63 |+def this_is_wrong(value=None): + 64 |+ if value is None: + 65 |+ value = [1, 2, 3] +64 66 | ... +65 67 | +66 68 | + +B006_B008.py:67:30: B006 [*] Do not use mutable data structures for argument defaults | 67 | def this_is_also_wrong(value={}): | ^^ B006 68 | ... | + = help: Replace with `None`; initialize within function -B006_B008.py:71:20: B006 Do not use mutable data structures for argument defaults - | -71 | def and_this(value=set()): - | ^^^^^ B006 -72 | ... - | +ℹ Possible fix +64 64 | ... +65 65 | +66 66 | +67 |-def this_is_also_wrong(value={}): + 67 |+def this_is_also_wrong(value=None): + 68 |+ if value is None: + 69 |+ value = {} +68 70 | ... +69 71 | +70 72 | -B006_B008.py:75:20: B006 Do not use mutable data structures for argument defaults +B006_B008.py:73:52: B006 [*] Do not use mutable data structures for argument defaults | -75 | def this_too(value=collections.OrderedDict()): - | ^^^^^^^^^^^^^^^^^^^^^^^^^ B006 -76 | ... +71 | class Foo: +72 | @staticmethod +73 | def this_is_also_wrong_and_more_indented(value={}): + | ^^ B006 +74 | pass | + = help: Replace with `None`; initialize within function -B006_B008.py:79:32: B006 Do not use mutable data structures for argument defaults +ℹ Possible fix +70 70 | +71 71 | class Foo: +72 72 | @staticmethod +73 |- def this_is_also_wrong_and_more_indented(value={}): + 73 |+ def this_is_also_wrong_and_more_indented(value=None): + 74 |+ if value is None: + 75 |+ value = {} +74 76 | pass +75 77 | +76 78 | + +B006_B008.py:77:31: B006 [*] Do not use mutable data structures for argument defaults + | +77 | def multiline_arg_wrong(value={ + | _______________________________^ +78 | | +79 | | }): + | |_^ B006 +80 | ... + | + = help: Replace with `None`; initialize within function + +ℹ Possible fix +74 74 | pass +75 75 | +76 76 | +77 |-def multiline_arg_wrong(value={ +78 |- +79 |-}): + 77 |+def multiline_arg_wrong(value=None): + 78 |+ if value is None: + 79 |+ value = {} +80 80 | ... +81 81 | +82 82 | def single_line_func_wrong(value = {}): ... + +B006_B008.py:82:36: B006 Do not use mutable data structures for argument defaults | -79 | async def async_this_too(value=collections.defaultdict()): - | ^^^^^^^^^^^^^^^^^^^^^^^^^ B006 80 | ... +81 | +82 | def single_line_func_wrong(value = {}): ... + | ^^ B006 | + = help: Replace with `None`; initialize within function -B006_B008.py:83:26: B006 Do not use mutable data structures for argument defaults +B006_B008.py:85:20: B006 [*] Do not use mutable data structures for argument defaults | -83 | def dont_forget_me(value=collections.deque()): +85 | def and_this(value=set()): + | ^^^^^ B006 +86 | ... + | + = help: Replace with `None`; initialize within function + +ℹ Possible fix +82 82 | def single_line_func_wrong(value = {}): ... +83 83 | +84 84 | +85 |-def and_this(value=set()): + 85 |+def and_this(value=None): + 86 |+ if value is None: + 87 |+ value = set() +86 88 | ... +87 89 | +88 90 | + +B006_B008.py:89:20: B006 [*] Do not use mutable data structures for argument defaults + | +89 | def this_too(value=collections.OrderedDict()): + | ^^^^^^^^^^^^^^^^^^^^^^^^^ B006 +90 | ... + | + = help: Replace with `None`; initialize within function + +ℹ Possible fix +86 86 | ... +87 87 | +88 88 | +89 |-def this_too(value=collections.OrderedDict()): + 89 |+def this_too(value=None): + 90 |+ if value is None: + 91 |+ value = collections.OrderedDict() +90 92 | ... +91 93 | +92 94 | + +B006_B008.py:93:32: B006 [*] Do not use mutable data structures for argument defaults + | +93 | async def async_this_too(value=collections.defaultdict()): + | ^^^^^^^^^^^^^^^^^^^^^^^^^ B006 +94 | ... + | + = help: Replace with `None`; initialize within function + +ℹ Possible fix +90 90 | ... +91 91 | +92 92 | +93 |-async def async_this_too(value=collections.defaultdict()): + 93 |+async def async_this_too(value=None): + 94 |+ if value is None: + 95 |+ value = collections.defaultdict() +94 96 | ... +95 97 | +96 98 | + +B006_B008.py:97:26: B006 [*] Do not use mutable data structures for argument defaults + | +97 | def dont_forget_me(value=collections.deque()): | ^^^^^^^^^^^^^^^^^^^ B006 -84 | ... +98 | ... | + = help: Replace with `None`; initialize within function -B006_B008.py:88:46: B006 Do not use mutable data structures for argument defaults - | -87 | # N.B. we're also flagging the function call in the comprehension -88 | def list_comprehension_also_not_okay(default=[i**2 for i in range(3)]): - | ^^^^^^^^^^^^^^^^^^^^^^^^ B006 -89 | pass - | +ℹ Possible fix +94 94 | ... +95 95 | +96 96 | +97 |-def dont_forget_me(value=collections.deque()): + 97 |+def dont_forget_me(value=None): + 98 |+ if value is None: + 99 |+ value = collections.deque() +98 100 | ... +99 101 | +100 102 | -B006_B008.py:92:46: B006 Do not use mutable data structures for argument defaults - | -92 | def dict_comprehension_also_not_okay(default={i: i**2 for i in range(3)}): - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ B006 -93 | pass - | - -B006_B008.py:96:45: B006 Do not use mutable data structures for argument defaults - | -96 | def set_comprehension_also_not_okay(default={i**2 for i in range(3)}): - | ^^^^^^^^^^^^^^^^^^^^^^^^ B006 -97 | pass - | - -B006_B008.py:100:33: B006 Do not use mutable data structures for argument defaults +B006_B008.py:102:46: B006 [*] Do not use mutable data structures for argument defaults | -100 | def kwonlyargs_mutable(*, value=[]): +101 | # N.B. we're also flagging the function call in the comprehension +102 | def list_comprehension_also_not_okay(default=[i**2 for i in range(3)]): + | ^^^^^^^^^^^^^^^^^^^^^^^^ B006 +103 | pass + | + = help: Replace with `None`; initialize within function + +ℹ Possible fix +99 99 | +100 100 | +101 101 | # N.B. we're also flagging the function call in the comprehension +102 |-def list_comprehension_also_not_okay(default=[i**2 for i in range(3)]): + 102 |+def list_comprehension_also_not_okay(default=None): + 103 |+ if default is None: + 104 |+ default = [i ** 2 for i in range(3)] +103 105 | pass +104 106 | +105 107 | + +B006_B008.py:106:46: B006 [*] Do not use mutable data structures for argument defaults + | +106 | def dict_comprehension_also_not_okay(default={i: i**2 for i in range(3)}): + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ B006 +107 | pass + | + = help: Replace with `None`; initialize within function + +ℹ Possible fix +103 103 | pass +104 104 | +105 105 | +106 |-def dict_comprehension_also_not_okay(default={i: i**2 for i in range(3)}): + 106 |+def dict_comprehension_also_not_okay(default=None): + 107 |+ if default is None: + 108 |+ default = {i: i ** 2 for i in range(3)} +107 109 | pass +108 110 | +109 111 | + +B006_B008.py:110:45: B006 [*] Do not use mutable data structures for argument defaults + | +110 | def set_comprehension_also_not_okay(default={i**2 for i in range(3)}): + | ^^^^^^^^^^^^^^^^^^^^^^^^ B006 +111 | pass + | + = help: Replace with `None`; initialize within function + +ℹ Possible fix +107 107 | pass +108 108 | +109 109 | +110 |-def set_comprehension_also_not_okay(default={i**2 for i in range(3)}): + 110 |+def set_comprehension_also_not_okay(default=None): + 111 |+ if default is None: + 112 |+ default = {i ** 2 for i in range(3)} +111 113 | pass +112 114 | +113 115 | + +B006_B008.py:114:33: B006 [*] Do not use mutable data structures for argument defaults + | +114 | def kwonlyargs_mutable(*, value=[]): | ^^ B006 -101 | ... +115 | ... | + = help: Replace with `None`; initialize within function -B006_B008.py:221:20: B006 Do not use mutable data structures for argument defaults +ℹ Possible fix +111 111 | pass +112 112 | +113 113 | +114 |-def kwonlyargs_mutable(*, value=[]): + 114 |+def kwonlyargs_mutable(*, value=None): + 115 |+ if value is None: + 116 |+ value = [] +115 117 | ... +116 118 | +117 119 | + +B006_B008.py:235:20: B006 [*] Do not use mutable data structures for argument defaults | -219 | # B006 and B008 -220 | # We should handle arbitrary nesting of these B008. -221 | def nested_combo(a=[float(3), dt.datetime.now()]): +233 | # B006 and B008 +234 | # We should handle arbitrary nesting of these B008. +235 | def nested_combo(a=[float(3), dt.datetime.now()]): | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ B006 -222 | pass +236 | pass | + = help: Replace with `None`; initialize within function -B006_B008.py:258:27: B006 Do not use mutable data structures for argument defaults +ℹ Possible fix +232 232 | +233 233 | # B006 and B008 +234 234 | # We should handle arbitrary nesting of these B008. +235 |-def nested_combo(a=[float(3), dt.datetime.now()]): + 235 |+def nested_combo(a=None): + 236 |+ if a is None: + 237 |+ a = [float(3), dt.datetime.now()] +236 238 | pass +237 239 | +238 240 | + +B006_B008.py:272:27: B006 [*] Do not use mutable data structures for argument defaults | -257 | def mutable_annotations( -258 | a: list[int] | None = [], +271 | def mutable_annotations( +272 | a: list[int] | None = [], | ^^ B006 -259 | b: Optional[Dict[int, int]] = {}, -260 | c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +273 | b: Optional[Dict[int, int]] = {}, +274 | c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), | + = help: Replace with `None`; initialize within function -B006_B008.py:259:35: B006 Do not use mutable data structures for argument defaults +ℹ Possible fix +269 269 | +270 270 | +271 271 | def mutable_annotations( +272 |- a: list[int] | None = [], + 272 |+ a: list[int] | None = None, +273 273 | b: Optional[Dict[int, int]] = {}, +274 274 | c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +275 275 | d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +276 276 | ): + 277 |+ if a is None: + 278 |+ a = [] +277 279 | pass +278 280 | +279 281 | + +B006_B008.py:273:35: B006 [*] Do not use mutable data structures for argument defaults | -257 | def mutable_annotations( -258 | a: list[int] | None = [], -259 | b: Optional[Dict[int, int]] = {}, +271 | def mutable_annotations( +272 | a: list[int] | None = [], +273 | b: Optional[Dict[int, int]] = {}, | ^^ B006 -260 | c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), -261 | d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +274 | c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +275 | d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), | + = help: Replace with `None`; initialize within function -B006_B008.py:260:62: B006 Do not use mutable data structures for argument defaults +ℹ Possible fix +270 270 | +271 271 | def mutable_annotations( +272 272 | a: list[int] | None = [], +273 |- b: Optional[Dict[int, int]] = {}, + 273 |+ b: Optional[Dict[int, int]] = None, +274 274 | c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +275 275 | d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +276 276 | ): + 277 |+ if b is None: + 278 |+ b = {} +277 279 | pass +278 280 | +279 281 | + +B006_B008.py:274:62: B006 [*] Do not use mutable data structures for argument defaults | -258 | a: list[int] | None = [], -259 | b: Optional[Dict[int, int]] = {}, -260 | c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +272 | a: list[int] | None = [], +273 | b: Optional[Dict[int, int]] = {}, +274 | c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), | ^^^^^ B006 -261 | d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), -262 | ): +275 | d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +276 | ): | + = help: Replace with `None`; initialize within function -B006_B008.py:261:80: B006 Do not use mutable data structures for argument defaults +ℹ Possible fix +271 271 | def mutable_annotations( +272 272 | a: list[int] | None = [], +273 273 | b: Optional[Dict[int, int]] = {}, +274 |- c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), + 274 |+ c: Annotated[Union[Set[str], abc.Sized], "annotation"] = None, +275 275 | d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +276 276 | ): + 277 |+ if c is None: + 278 |+ c = set() +277 279 | pass +278 280 | +279 281 | + +B006_B008.py:275:80: B006 [*] Do not use mutable data structures for argument defaults | -259 | b: Optional[Dict[int, int]] = {}, -260 | c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), -261 | d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +273 | b: Optional[Dict[int, int]] = {}, +274 | c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +275 | d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), | ^^^^^ B006 -262 | ): -263 | pass +276 | ): +277 | pass | + = help: Replace with `None`; initialize within function + +ℹ Possible fix +272 272 | a: list[int] | None = [], +273 273 | b: Optional[Dict[int, int]] = {}, +274 274 | c: Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), +275 |- d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = set(), + 275 |+ d: typing_extensions.Annotated[Union[Set[str], abc.Sized], "annotation"] = None, +276 276 | ): + 277 |+ if d is None: + 278 |+ d = set() +277 279 | pass +278 280 | +279 281 | + +B006_B008.py:280:52: B006 [*] Do not use mutable data structures for argument defaults + | +280 | def single_line_func_wrong(value: dict[str, str] = {}): + | ^^ B006 +281 | """Docstring""" + | + = help: Replace with `None`; initialize within function + +ℹ Possible fix +277 277 | pass +278 278 | +279 279 | +280 |-def single_line_func_wrong(value: dict[str, str] = {}): + 280 |+def single_line_func_wrong(value: dict[str, str] = None): +281 281 | """Docstring""" + 282 |+ if value is None: + 283 |+ value = {} +282 284 | +283 285 | +284 286 | def single_line_func_wrong(value: dict[str, str] = {}): + +B006_B008.py:284:52: B006 [*] Do not use mutable data structures for argument defaults + | +284 | def single_line_func_wrong(value: dict[str, str] = {}): + | ^^ B006 +285 | """Docstring""" +286 | ... + | + = help: Replace with `None`; initialize within function + +ℹ Possible fix +281 281 | """Docstring""" +282 282 | +283 283 | +284 |-def single_line_func_wrong(value: dict[str, str] = {}): + 284 |+def single_line_func_wrong(value: dict[str, str] = None): +285 285 | """Docstring""" + 286 |+ if value is None: + 287 |+ value = {} +286 288 | ... +287 289 | +288 290 | + +B006_B008.py:289:52: B006 Do not use mutable data structures for argument defaults + | +289 | def single_line_func_wrong(value: dict[str, str] = {}): + | ^^ B006 +290 | """Docstring"""; ... + | + = help: Replace with `None`; initialize within function + +B006_B008.py:293:52: B006 Do not use mutable data structures for argument defaults + | +293 | def single_line_func_wrong(value: dict[str, str] = {}): + | ^^ B006 +294 | """Docstring"""; \ +295 | ... + | + = help: Replace with `None`; initialize within function + +B006_B008.py:298:52: B006 [*] Do not use mutable data structures for argument defaults + | +298 | def single_line_func_wrong(value: dict[str, str] = { + | ____________________________________________________^ +299 | | # This is a comment +300 | | }): + | |_^ B006 +301 | """Docstring""" + | + = help: Replace with `None`; initialize within function + +ℹ Possible fix +295 295 | ... +296 296 | +297 297 | +298 |-def single_line_func_wrong(value: dict[str, str] = { +299 |- # This is a comment +300 |-}): + 298 |+def single_line_func_wrong(value: dict[str, str] = None): +301 299 | """Docstring""" + 300 |+ if value is None: + 301 |+ value = {} +302 302 | +303 303 | +304 304 | def single_line_func_wrong(value: dict[str, str] = {}) \ + +B006_B008.py:304:52: B006 Do not use mutable data structures for argument defaults + | +304 | def single_line_func_wrong(value: dict[str, str] = {}) \ + | ^^ B006 +305 | : \ +306 | """Docstring""" + | + = help: Replace with `None`; initialize within function diff --git a/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B008_B006_B008.py.snap b/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B008_B006_B008.py.snap index 36a464813a..dc747bc5b4 100644 --- a/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B008_B006_B008.py.snap +++ b/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B008_B006_B008.py.snap @@ -1,83 +1,83 @@ --- source: crates/ruff/src/rules/flake8_bugbear/mod.rs --- -B006_B008.py:88:61: B008 Do not perform function call `range` in argument defaults - | -87 | # N.B. we're also flagging the function call in the comprehension -88 | def list_comprehension_also_not_okay(default=[i**2 for i in range(3)]): - | ^^^^^^^^ B008 -89 | pass - | - -B006_B008.py:92:64: B008 Do not perform function call `range` in argument defaults - | -92 | def dict_comprehension_also_not_okay(default={i: i**2 for i in range(3)}): - | ^^^^^^^^ B008 -93 | pass - | - -B006_B008.py:96:60: B008 Do not perform function call `range` in argument defaults - | -96 | def set_comprehension_also_not_okay(default={i**2 for i in range(3)}): - | ^^^^^^^^ B008 -97 | pass - | - -B006_B008.py:112:39: B008 Do not perform function call `time.time` in argument defaults +B006_B008.py:102:61: B008 Do not perform function call `range` in argument defaults | -110 | # B008 -111 | # Flag function calls as default args (including if they are part of a sub-expression) -112 | def in_fact_all_calls_are_wrong(value=time.time()): +101 | # N.B. we're also flagging the function call in the comprehension +102 | def list_comprehension_also_not_okay(default=[i**2 for i in range(3)]): + | ^^^^^^^^ B008 +103 | pass + | + +B006_B008.py:106:64: B008 Do not perform function call `range` in argument defaults + | +106 | def dict_comprehension_also_not_okay(default={i: i**2 for i in range(3)}): + | ^^^^^^^^ B008 +107 | pass + | + +B006_B008.py:110:60: B008 Do not perform function call `range` in argument defaults + | +110 | def set_comprehension_also_not_okay(default={i**2 for i in range(3)}): + | ^^^^^^^^ B008 +111 | pass + | + +B006_B008.py:126:39: B008 Do not perform function call `time.time` in argument defaults + | +124 | # B008 +125 | # Flag function calls as default args (including if they are part of a sub-expression) +126 | def in_fact_all_calls_are_wrong(value=time.time()): | ^^^^^^^^^^^ B008 -113 | ... +127 | ... | -B006_B008.py:116:12: B008 Do not perform function call `dt.datetime.now` in argument defaults +B006_B008.py:130:12: B008 Do not perform function call `dt.datetime.now` in argument defaults | -116 | def f(when=dt.datetime.now() + dt.timedelta(days=7)): +130 | def f(when=dt.datetime.now() + dt.timedelta(days=7)): | ^^^^^^^^^^^^^^^^^ B008 -117 | pass +131 | pass | -B006_B008.py:120:30: B008 Do not perform function call in argument defaults +B006_B008.py:134:30: B008 Do not perform function call in argument defaults | -120 | def can_even_catch_lambdas(a=(lambda x: x)()): +134 | def can_even_catch_lambdas(a=(lambda x: x)()): | ^^^^^^^^^^^^^^^ B008 -121 | ... +135 | ... | -B006_B008.py:221:31: B008 Do not perform function call `dt.datetime.now` in argument defaults +B006_B008.py:235:31: B008 Do not perform function call `dt.datetime.now` in argument defaults | -219 | # B006 and B008 -220 | # We should handle arbitrary nesting of these B008. -221 | def nested_combo(a=[float(3), dt.datetime.now()]): +233 | # B006 and B008 +234 | # We should handle arbitrary nesting of these B008. +235 | def nested_combo(a=[float(3), dt.datetime.now()]): | ^^^^^^^^^^^^^^^^^ B008 -222 | pass +236 | pass | -B006_B008.py:227:22: B008 Do not perform function call `map` in argument defaults +B006_B008.py:241:22: B008 Do not perform function call `map` in argument defaults | -225 | # Don't flag nested B006 since we can't guarantee that -226 | # it isn't made mutable by the outer operation. -227 | def no_nested_b006(a=map(lambda s: s.upper(), ["a", "b", "c"])): +239 | # Don't flag nested B006 since we can't guarantee that +240 | # it isn't made mutable by the outer operation. +241 | def no_nested_b006(a=map(lambda s: s.upper(), ["a", "b", "c"])): | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ B008 -228 | pass +242 | pass | -B006_B008.py:232:19: B008 Do not perform function call `random.randint` in argument defaults +B006_B008.py:246:19: B008 Do not perform function call `random.randint` in argument defaults | -231 | # B008-ception. -232 | def nested_b008(a=random.randint(0, dt.datetime.now().year)): +245 | # B008-ception. +246 | def nested_b008(a=random.randint(0, dt.datetime.now().year)): | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ B008 -233 | pass +247 | pass | -B006_B008.py:232:37: B008 Do not perform function call `dt.datetime.now` in argument defaults +B006_B008.py:246:37: B008 Do not perform function call `dt.datetime.now` in argument defaults | -231 | # B008-ception. -232 | def nested_b008(a=random.randint(0, dt.datetime.now().year)): +245 | # B008-ception. +246 | def nested_b008(a=random.randint(0, dt.datetime.now().year)): | ^^^^^^^^^^^^^^^^^ B008 -233 | pass +247 | pass | diff --git a/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B014_B014.py.snap b/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B014_B014.py.snap index bb8fb6c3c2..52e3ea5167 100644 --- a/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B014_B014.py.snap +++ b/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B014_B014.py.snap @@ -64,4 +64,22 @@ B014.py:49:8: B014 [*] Exception handler with duplicate exception: `re.error` 51 51 | pass 52 52 | +B014.py:82:8: B014 [*] Exception handler with duplicate exception: `ValueError` + | +80 | try: +81 | pass +82 | except (ValueError, ValueError, TypeError): + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ B014 +83 | pass + | + = help: De-duplicate exceptions + +ℹ Fix +79 79 | # https://github.com/astral-sh/ruff/issues/6412 +80 80 | try: +81 81 | pass +82 |-except (ValueError, ValueError, TypeError): + 82 |+except (ValueError, TypeError): +83 83 | pass + diff --git a/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B905_B905.py.snap b/crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B905.py.snap similarity index 100% rename from crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B905_B905.py.snap rename to crates/ruff/src/rules/flake8_bugbear/snapshots/ruff__rules__flake8_bugbear__tests__B905.py.snap diff --git a/crates/ruff/src/rules/flake8_builtins/rules/builtin_attribute_shadowing.rs b/crates/ruff/src/rules/flake8_builtins/rules/builtin_attribute_shadowing.rs index 271bc997ce..f4069ff24b 100644 --- a/crates/ruff/src/rules/flake8_builtins/rules/builtin_attribute_shadowing.rs +++ b/crates/ruff/src/rules/flake8_builtins/rules/builtin_attribute_shadowing.rs @@ -131,7 +131,7 @@ pub(crate) fn builtin_method_shadowing( fn is_standard_library_override( name: &str, class_def: &ast::StmtClassDef, - model: &SemanticModel, + semantic: &SemanticModel, ) -> bool { let Some(Arguments { args: bases, .. }) = class_def.arguments.as_deref() else { return false; @@ -139,13 +139,13 @@ fn is_standard_library_override( match name { // Ex) `Event#set` "set" => bases.iter().any(|base| { - model + semantic .resolve_call_path(base) .is_some_and(|call_path| matches!(call_path.as_slice(), ["threading", "Event"])) }), // Ex) `Filter#filter` "filter" => bases.iter().any(|base| { - model + semantic .resolve_call_path(base) .is_some_and(|call_path| matches!(call_path.as_slice(), ["logging", "Filter"])) }), diff --git a/crates/ruff/src/rules/flake8_comprehensions/rules/helpers.rs b/crates/ruff/src/rules/flake8_comprehensions/rules/helpers.rs index af748a5f68..f22a8dd908 100644 --- a/crates/ruff/src/rules/flake8_comprehensions/rules/helpers.rs +++ b/crates/ruff/src/rules/flake8_comprehensions/rules/helpers.rs @@ -1,12 +1,4 @@ -use ruff_python_ast::{self as ast, Expr, Keyword}; - -pub(super) fn expr_name(func: &Expr) -> Option<&str> { - if let Expr::Name(ast::ExprName { id, .. }) = func { - Some(id) - } else { - None - } -} +use ruff_python_ast::{Expr, Keyword}; pub(super) fn exactly_one_argument_with_matching_function<'a>( name: &str, @@ -20,7 +12,8 @@ pub(super) fn exactly_one_argument_with_matching_function<'a>( if !keywords.is_empty() { return None; } - if expr_name(func)? != name { + let func = func.as_name_expr()?; + if func.id != name { return None; } Some(arg) @@ -31,8 +24,8 @@ pub(super) fn first_argument_with_matching_function<'a>( func: &Expr, args: &'a [Expr], ) -> Option<&'a Expr> { - if expr_name(func)? == name { - Some(args.first()?) + if func.as_name_expr().is_some_and(|func| func.id == name) { + args.first() } else { None } diff --git a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_call_around_sorted.rs b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_call_around_sorted.rs index 6757c96aa3..ae09498b29 100644 --- a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_call_around_sorted.rs +++ b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_call_around_sorted.rs @@ -1,14 +1,11 @@ -use ruff_python_ast::{self as ast, Expr, Ranged}; - use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Fix}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::{self as ast, Expr, Ranged}; use crate::checkers::ast::Checker; use crate::registry::AsRule; use crate::rules::flake8_comprehensions::fixes; -use super::helpers; - /// ## What it does /// Checks for unnecessary `list` or `reversed` calls around `sorted` /// calls. @@ -57,10 +54,10 @@ pub(crate) fn unnecessary_call_around_sorted( func: &Expr, args: &[Expr], ) { - let Some(outer) = helpers::expr_name(func) else { + let Some(outer) = func.as_name_expr() else { return; }; - if !(outer == "list" || outer == "reversed") { + if !matches!(outer.id.as_str(), "list" | "reversed") { return; } let Some(arg) = args.first() else { @@ -69,18 +66,18 @@ pub(crate) fn unnecessary_call_around_sorted( let Expr::Call(ast::ExprCall { func, .. }) = arg else { return; }; - let Some(inner) = helpers::expr_name(func) else { + let Some(inner) = func.as_name_expr() else { return; }; - if inner != "sorted" { + if inner.id != "sorted" { return; } - if !checker.semantic().is_builtin(inner) || !checker.semantic().is_builtin(outer) { + if !checker.semantic().is_builtin(&inner.id) || !checker.semantic().is_builtin(&outer.id) { return; } let mut diagnostic = Diagnostic::new( UnnecessaryCallAroundSorted { - func: outer.to_string(), + func: outer.id.to_string(), }, expr.range(), ); @@ -91,7 +88,7 @@ pub(crate) fn unnecessary_call_around_sorted( checker.stylist(), expr, )?; - if outer == "reversed" { + if outer.id == "reversed" { Ok(Fix::suggested(edit)) } else { Ok(Fix::automatic(edit)) diff --git a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_collection_call.rs b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_collection_call.rs index 444a1856e1..4ce85562c5 100644 --- a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_collection_call.rs +++ b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_collection_call.rs @@ -1,15 +1,12 @@ -use ruff_python_ast::{Expr, Keyword, Ranged}; - use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::{Expr, Keyword, Ranged}; use crate::checkers::ast::Checker; use crate::registry::AsRule; use crate::rules::flake8_comprehensions::fixes; use crate::rules::flake8_comprehensions::settings::Settings; -use super::helpers; - /// ## What it does /// Checks for unnecessary `dict`, `list` or `tuple` calls that can be /// rewritten as empty literals. @@ -63,10 +60,10 @@ pub(crate) fn unnecessary_collection_call( if !args.is_empty() { return; } - let Some(id) = helpers::expr_name(func) else { + let Some(func) = func.as_name_expr() else { return; }; - match id { + match func.id.as_str() { "dict" if keywords.is_empty() || (!settings.allow_dict_calls_with_keyword_arguments @@ -79,12 +76,12 @@ pub(crate) fn unnecessary_collection_call( } _ => return, }; - if !checker.semantic().is_builtin(id) { + if !checker.semantic().is_builtin(func.id.as_str()) { return; } let mut diagnostic = Diagnostic::new( UnnecessaryCollectionCall { - obj_type: id.to_string(), + obj_type: func.id.to_string(), }, expr.range(), ); diff --git a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_comprehension.rs b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_comprehension.rs index c9a7887dab..861dd766ce 100644 --- a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_comprehension.rs +++ b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_comprehension.rs @@ -1,14 +1,11 @@ -use ruff_python_ast::{self as ast, Comprehension, Expr, Ranged}; - use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::{self as ast, Comprehension, Expr, Ranged}; use crate::checkers::ast::Checker; use crate::registry::AsRule; use crate::rules::flake8_comprehensions::fixes; -use super::helpers; - /// ## What it does /// Checks for unnecessary `dict`, `list`, and `set` comprehension. /// @@ -88,28 +85,28 @@ pub(crate) fn unnecessary_dict_comprehension( if !generator.ifs.is_empty() || generator.is_async { return; } - let Some(key_id) = helpers::expr_name(key) else { + let Some(key) = key.as_name_expr() else { return; }; - let Some(value_id) = helpers::expr_name(value) else { + let Some(value) = value.as_name_expr() else { return; }; let Expr::Tuple(ast::ExprTuple { elts, .. }) = &generator.target else { return; }; - if elts.len() != 2 { - return; - } - let Some(target_key_id) = helpers::expr_name(&elts[0]) else { + let [target_key, target_value] = elts.as_slice() else { return; }; - if target_key_id != key_id { - return; - } - let Some(target_value_id) = helpers::expr_name(&elts[1]) else { + let Some(target_key) = target_key.as_name_expr() else { return; }; - if target_value_id != value_id { + let Some(target_value) = target_value.as_name_expr() else { + return; + }; + if target_key.id != key.id { + return; + } + if target_value.id != value.id { return; } add_diagnostic(checker, expr); @@ -128,13 +125,13 @@ pub(crate) fn unnecessary_list_set_comprehension( if !generator.ifs.is_empty() || generator.is_async { return; } - let Some(elt_id) = helpers::expr_name(elt) else { + let Some(elt) = elt.as_name_expr() else { return; }; - let Some(target_id) = helpers::expr_name(&generator.target) else { + let Some(target) = generator.target.as_name_expr() else { return; }; - if elt_id != target_id { + if elt.id != target.id { return; } add_diagnostic(checker, expr); diff --git a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_double_cast_or_process.rs b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_double_cast_or_process.rs index 2e740c5434..489c970dce 100644 --- a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_double_cast_or_process.rs +++ b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_double_cast_or_process.rs @@ -1,15 +1,12 @@ -use ruff_python_ast::{self as ast, Arguments, Expr, Keyword, Ranged}; - use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::comparable::ComparableKeyword; +use ruff_python_ast::{self as ast, Arguments, Expr, Keyword, Ranged}; use crate::checkers::ast::Checker; use crate::registry::AsRule; use crate::rules::flake8_comprehensions::fixes; -use super::helpers; - /// ## What it does /// Checks for unnecessary `list`, `reversed`, `set`, `sorted`, and `tuple` /// call within `list`, `set`, `sorted`, and `tuple` calls. @@ -72,15 +69,13 @@ pub(crate) fn unnecessary_double_cast_or_process( args: &[Expr], outer_kw: &[Keyword], ) { - let Some(outer) = helpers::expr_name(func) else { + let Some(outer) = func.as_name_expr() else { return; }; - if !(outer == "list" - || outer == "tuple" - || outer == "set" - || outer == "reversed" - || outer == "sorted") - { + if !matches!( + outer.id.as_str(), + "list" | "tuple" | "set" | "reversed" | "sorted" + ) { return; } let Some(arg) = args.first() else { @@ -96,16 +91,16 @@ pub(crate) fn unnecessary_double_cast_or_process( else { return; }; - let Some(inner) = helpers::expr_name(func) else { + let Some(inner) = func.as_name_expr() else { return; }; - if !checker.semantic().is_builtin(inner) || !checker.semantic().is_builtin(outer) { + if !checker.semantic().is_builtin(&inner.id) || !checker.semantic().is_builtin(&outer.id) { return; } // Avoid collapsing nested `sorted` calls with non-identical keyword arguments // (i.e., `key`, `reverse`). - if inner == "sorted" && outer == "sorted" { + if inner.id == "sorted" && outer.id == "sorted" { if inner_kw.len() != outer_kw.len() { return; } @@ -118,18 +113,19 @@ pub(crate) fn unnecessary_double_cast_or_process( } } - // Ex) set(tuple(...)) - // Ex) list(tuple(...)) - // Ex) set(set(...)) - if ((outer == "set" || outer == "sorted") - && (inner == "list" || inner == "tuple" || inner == "reversed" || inner == "sorted")) - || (outer == "set" && inner == "set") - || ((outer == "list" || outer == "tuple") && (inner == "list" || inner == "tuple")) - { + // Ex) `set(tuple(...))` + // Ex) `list(tuple(...))` + // Ex) `set(set(...))` + if matches!( + (outer.id.as_str(), inner.id.as_str()), + ("set" | "sorted", "list" | "tuple" | "reversed" | "sorted") + | ("set", "set") + | ("list" | "tuple", "list" | "tuple") + ) { let mut diagnostic = Diagnostic::new( UnnecessaryDoubleCastOrProcess { - inner: inner.to_string(), - outer: outer.to_string(), + inner: inner.id.to_string(), + outer: outer.id.to_string(), }, expr.range(), ); diff --git a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_literal_dict.rs b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_literal_dict.rs index 31a30a7624..76b423facc 100644 --- a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_literal_dict.rs +++ b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_literal_dict.rs @@ -70,7 +70,7 @@ pub(crate) fn unnecessary_literal_dict( // Accept `dict((1, 2), ...))` `dict([(1, 2), ...])`. if !elts .iter() - .all(|elt| matches!(&elt, Expr::Tuple(ast::ExprTuple { elts, .. } )if elts.len() == 2)) + .all(|elt| matches!(&elt, Expr::Tuple(ast::ExprTuple { elts, .. }) if elts.len() == 2)) { return; } diff --git a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_map.rs b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_map.rs index 8b7e19375c..c914753be2 100644 --- a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_map.rs +++ b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_map.rs @@ -68,11 +68,11 @@ pub(crate) fn unnecessary_map( func: &Expr, args: &[Expr], ) { - let Some(id) = helpers::expr_name(func) else { + let Some(func) = func.as_name_expr() else { return; }; - let object_type = match id { + let object_type = match func.id.as_str() { "map" => ObjectType::Generator, "list" => ObjectType::List, "set" => ObjectType::Set, @@ -80,20 +80,20 @@ pub(crate) fn unnecessary_map( _ => return, }; - if !checker.semantic().is_builtin(id) { + if !checker.semantic().is_builtin(&func.id) { return; } match object_type { ObjectType::Generator => { // Exclude the parent if already matched by other arms. - if let Some(Expr::Call(ast::ExprCall { func, .. })) = parent { - if let Some(name) = helpers::expr_name(func) { - if matches!(name, "list" | "set" | "dict") { - return; - } - } - }; + if parent + .and_then(ruff_python_ast::Expr::as_call_expr) + .and_then(|call| call.func.as_name_expr()) + .is_some_and(|name| matches!(name.id.as_str(), "list" | "set" | "dict")) + { + return; + } // Only flag, e.g., `map(lambda x: x + 1, iterable)`. let [Expr::Lambda(ast::ExprLambda { diff --git a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_subscript_reversal.rs b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_subscript_reversal.rs index 60076232c4..092713ab4e 100644 --- a/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_subscript_reversal.rs +++ b/crates/ruff/src/rules/flake8_comprehensions/rules/unnecessary_subscript_reversal.rs @@ -1,13 +1,11 @@ use num_bigint::BigInt; -use ruff_python_ast::{self as ast, Constant, Expr, Ranged, UnaryOp}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::{self as ast, Constant, Expr, Ranged, UnaryOp}; use crate::checkers::ast::Checker; -use super::helpers; - /// ## What it does /// Checks for unnecessary subscript reversal of iterable. /// @@ -52,13 +50,13 @@ pub(crate) fn unnecessary_subscript_reversal( let Some(first_arg) = args.first() else { return; }; - let Some(id) = helpers::expr_name(func) else { + let Some(func) = func.as_name_expr() else { return; }; - if !(id == "set" || id == "sorted" || id == "reversed") { + if !matches!(func.id.as_str(), "reversed" | "set" | "sorted") { return; } - if !checker.semantic().is_builtin(id) { + if !checker.semantic().is_builtin(&func.id) { return; } let Expr::Subscript(ast::ExprSubscript { slice, .. }) = first_arg else { @@ -99,7 +97,7 @@ pub(crate) fn unnecessary_subscript_reversal( }; checker.diagnostics.push(Diagnostic::new( UnnecessarySubscriptReversal { - func: id.to_string(), + func: func.id.to_string(), }, expr.range(), )); diff --git a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_fromtimestamp.rs b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_fromtimestamp.rs index f0c86f3271..25c86ae1ec 100644 --- a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_fromtimestamp.rs +++ b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_fromtimestamp.rs @@ -8,6 +8,44 @@ use crate::rules::flake8_datetimez::rules::helpers::has_non_none_keyword; use super::helpers; +/// ## What it does +/// Checks for usage of `datetime.datetime.fromtimestamp()` without a `tz` +/// argument. +/// +/// ## Why is this bad? +/// Python datetime objects can be naive or timezone-aware. While an aware +/// object represents a specific moment in time, a naive object does not +/// contain enough information to unambiguously locate itself relative to other +/// datetime objects. Since this can lead to errors, it is recommended to +/// always use timezone-aware objects. +/// +/// `datetime.datetime.fromtimestamp(ts)` returns a naive datetime object. +/// Instead, use `datetime.datetime.fromtimestamp(ts, tz=)` to return a +/// timezone-aware object. +/// +/// ## Example +/// ```python +/// import datetime +/// +/// datetime.datetime.fromtimestamp(946684800) +/// ``` +/// +/// Use instead: +/// ```python +/// import datetime +/// +/// datetime.datetime.fromtimestamp(946684800, tz=datetime.timezone.utc) +/// ``` +/// +/// Or, for Python 3.11 and later: +/// ```python +/// import datetime +/// +/// datetime.datetime.fromtimestamp(946684800, tz=datetime.UTC) +/// ``` +/// +/// ## References +/// - [Python documentation: Aware and Naive Objects](https://docs.python.org/3/library/datetime.html#aware-and-naive-objects) #[violation] pub struct CallDatetimeFromtimestamp; @@ -20,7 +58,6 @@ impl Violation for CallDatetimeFromtimestamp { } } -/// DTZ006 pub(crate) fn call_datetime_fromtimestamp(checker: &mut Checker, call: &ast::ExprCall) { if !checker .semantic() diff --git a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_now_without_tzinfo.rs b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_now_without_tzinfo.rs index 9ebc9ecb27..73dd721684 100644 --- a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_now_without_tzinfo.rs +++ b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_now_without_tzinfo.rs @@ -8,6 +8,42 @@ use crate::rules::flake8_datetimez::rules::helpers::has_non_none_keyword; use super::helpers; +/// ## What it does +/// Checks for usage of `datetime.datetime.now()` without a `tz` argument. +/// +/// ## Why is this bad? +/// Python datetime objects can be naive or timezone-aware. While an aware +/// object represents a specific moment in time, a naive object does not +/// contain enough information to unambiguously locate itself relative to other +/// datetime objects. Since this can lead to errors, it is recommended to +/// always use timezone-aware objects. +/// +/// `datetime.datetime.now()` returns a naive datetime object. Instead, use +/// `datetime.datetime.now(tz=)` to return a timezone-aware object. +/// +/// ## Example +/// ```python +/// import datetime +/// +/// datetime.datetime.now() +/// ``` +/// +/// Use instead: +/// ```python +/// import datetime +/// +/// datetime.datetime.now(tz=datetime.timezone.utc) +/// ``` +/// +/// Or, for Python 3.11 and later: +/// ```python +/// import datetime +/// +/// datetime.datetime.now(tz=datetime.UTC) +/// ``` +/// +/// ## References +/// - [Python documentation: Aware and Naive Objects](https://docs.python.org/3/library/datetime.html#aware-and-naive-objects) #[violation] pub struct CallDatetimeNowWithoutTzinfo; @@ -18,7 +54,6 @@ impl Violation for CallDatetimeNowWithoutTzinfo { } } -/// DTZ005 pub(crate) fn call_datetime_now_without_tzinfo(checker: &mut Checker, call: &ast::ExprCall) { if !checker .semantic() diff --git a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs index 0cde6b272e..ede442bb41 100644 --- a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs +++ b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs @@ -43,8 +43,8 @@ pub(crate) fn call_datetime_strptime_without_zone(checker: &mut Checker, call: & }; let (Some(grandparent), Some(parent)) = ( - checker.semantic().expr_grandparent(), - checker.semantic().expr_parent(), + checker.semantic().current_expression_grandparent(), + checker.semantic().current_expression_parent(), ) else { checker.diagnostics.push(Diagnostic::new( CallDatetimeStrptimeWithoutZone, diff --git a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_today.rs b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_today.rs index 97db9e874c..d1b89c794d 100644 --- a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_today.rs +++ b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_today.rs @@ -18,9 +18,8 @@ use super::helpers; /// `datetime` objects are preferred, as they represent a specific moment in /// time, unlike "naive" objects. /// -/// `datetime.datetime.today()` crates a "naive" object; instead, use -/// instead, use `datetime.datetime.now(tz=)` to create a timezone-aware -/// object. +/// `datetime.datetime.today()` creates a "naive" object; instead, use +/// `datetime.datetime.now(tz=)` to create a timezone-aware object. /// /// ## Example /// ```python diff --git a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_utcfromtimestamp.rs b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_utcfromtimestamp.rs index 6c060dd1bd..26536d3c5c 100644 --- a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_utcfromtimestamp.rs +++ b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_utcfromtimestamp.rs @@ -8,6 +8,43 @@ use crate::checkers::ast::Checker; use super::helpers; +/// ## What it does +/// Checks for usage of `datetime.datetime.utcfromtimestamp()`. +/// +/// ## Why is this bad? +/// Python datetime objects can be naive or timezone-aware. While an aware +/// object represents a specific moment in time, a naive object does not +/// contain enough information to unambiguously locate itself relative to other +/// datetime objects. Since this can lead to errors, it is recommended to +/// always use timezone-aware objects. +/// +/// `datetime.datetime.utcfromtimestamp()` returns a naive datetime object; +/// instead, use `datetime.datetime.fromtimestamp(ts, tz=)` to return a +/// timezone-aware object. +/// +/// ## Example +/// ```python +/// import datetime +/// +/// datetime.datetime.utcfromtimestamp() +/// ``` +/// +/// Use instead: +/// ```python +/// import datetime +/// +/// datetime.datetime.fromtimestamp(946684800, tz=datetime.timezone.utc) +/// ``` +/// +/// Or, for Python 3.11 and later: +/// ```python +/// import datetime +/// +/// datetime.datetime.fromtimestamp(946684800, tz=datetime.UTC) +/// ``` +/// +/// ## References +/// - [Python documentation: Aware and Naive Objects](https://docs.python.org/3/library/datetime.html#aware-and-naive-objects) #[violation] pub struct CallDatetimeUtcfromtimestamp; @@ -21,15 +58,6 @@ impl Violation for CallDatetimeUtcfromtimestamp { } } -/// Checks for `datetime.datetime.utcfromtimestamp()`. (DTZ004) -/// -/// ## Why is this bad? -/// -/// Because naive `datetime` objects are treated by many `datetime` methods as -/// local times, it is preferred to use aware datetimes to represent times in -/// UTC. As such, the recommended way to create an object representing a -/// specific timestamp in UTC is by calling `datetime.fromtimestamp(timestamp, -/// tz=timezone.utc)`. pub(crate) fn call_datetime_utcfromtimestamp( checker: &mut Checker, func: &Expr, diff --git a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_utcnow.rs b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_utcnow.rs index 0ea5136b7f..e9ff0dd363 100644 --- a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_utcnow.rs +++ b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_utcnow.rs @@ -8,6 +8,42 @@ use crate::checkers::ast::Checker; use super::helpers; +/// ## What it does +/// Checks for usage of `datetime.datetime.utcnow()`. +/// +/// ## Why is this bad? +/// Python datetime objects can be naive or timezone-aware. While an aware +/// object represents a specific moment in time, a naive object does not +/// contain enough information to unambiguously locate itself relative to other +/// datetime objects. Since this can lead to errors, it is recommended to +/// always use timezone-aware objects. +/// +/// `datetime.datetime.utcnow()` returns a naive datetime object; instead, use +/// `datetime.datetime.now(tz=)` to return a timezone-aware object. +/// +/// ## Example +/// ```python +/// import datetime +/// +/// datetime.datetime.utcnow() +/// ``` +/// +/// Use instead: +/// ```python +/// import datetime +/// +/// datetime.datetime.now(tz=datetime.timezone.utc) +/// ``` +/// +/// Or, for Python 3.11 and later: +/// ```python +/// import datetime +/// +/// datetime.datetime.now(tz=datetime.UTC) +/// ``` +/// +/// ## References +/// - [Python documentation: Aware and Naive Objects](https://docs.python.org/3/library/datetime.html#aware-and-naive-objects) #[violation] pub struct CallDatetimeUtcnow; @@ -21,14 +57,6 @@ impl Violation for CallDatetimeUtcnow { } } -/// Checks for `datetime.datetime.today()`. (DTZ003) -/// -/// ## Why is this bad? -/// -/// Because naive `datetime` objects are treated by many `datetime` methods as -/// local times, it is preferred to use aware datetimes to represent times in -/// UTC. As such, the recommended way to create an object representing the -/// current time in UTC is by calling `datetime.now(timezone.utc)`. pub(crate) fn call_datetime_utcnow(checker: &mut Checker, func: &Expr, location: TextRange) { if !checker .semantic() diff --git a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_without_tzinfo.rs b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_without_tzinfo.rs index 0c0f6b36f4..cc0cb486a2 100644 --- a/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_without_tzinfo.rs +++ b/crates/ruff/src/rules/flake8_datetimez/rules/call_datetime_without_tzinfo.rs @@ -31,6 +31,13 @@ use super::helpers; /// ```python /// import datetime /// +/// datetime.datetime(2000, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc) +/// ``` +/// +/// Or, for Python 3.11 and later: +/// ```python +/// import datetime +/// /// datetime.datetime(2000, 1, 1, 0, 0, 0, tzinfo=datetime.UTC) /// ``` #[violation] diff --git a/crates/ruff/src/rules/flake8_datetimez/rules/helpers.rs b/crates/ruff/src/rules/flake8_datetimez/rules/helpers.rs index 48ccb8af23..21ab64dc75 100644 --- a/crates/ruff/src/rules/flake8_datetimez/rules/helpers.rs +++ b/crates/ruff/src/rules/flake8_datetimez/rules/helpers.rs @@ -6,7 +6,7 @@ use crate::checkers::ast::Checker; /// Check if the parent expression is a call to `astimezone`. This assumes that /// the current expression is a `datetime.datetime` object. pub(super) fn parent_expr_is_astimezone(checker: &Checker) -> bool { - checker.semantic().expr_parent().is_some_and( |parent| { + checker.semantic().current_expression_parent().is_some_and( |parent| { matches!(parent, Expr::Attribute(ExprAttribute { attr, .. }) if attr.as_str() == "astimezone") }) } diff --git a/crates/ruff/src/rules/flake8_django/rules/all_with_model_form.rs b/crates/ruff/src/rules/flake8_django/rules/all_with_model_form.rs index 77dea2d27d..a54f7e08d2 100644 --- a/crates/ruff/src/rules/flake8_django/rules/all_with_model_form.rs +++ b/crates/ruff/src/rules/flake8_django/rules/all_with_model_form.rs @@ -83,13 +83,13 @@ pub(crate) fn all_with_model_form( continue; }; match value { - Constant::Str(s) => { - if s == "__all__" { + Constant::Str(ast::StringConstant { value, .. }) => { + if value == "__all__" { return Some(Diagnostic::new(DjangoAllWithModelForm, element.range())); } } - Constant::Bytes(b) => { - if b == "__all__".as_bytes() { + Constant::Bytes(ast::BytesConstant { value, .. }) => { + if value == "__all__".as_bytes() { return Some(Diagnostic::new(DjangoAllWithModelForm, element.range())); } } diff --git a/crates/ruff/src/rules/flake8_errmsg/rules/string_in_exception.rs b/crates/ruff/src/rules/flake8_errmsg/rules/string_in_exception.rs index a4d0cf0cf8..928d6eb873 100644 --- a/crates/ruff/src/rules/flake8_errmsg/rules/string_in_exception.rs +++ b/crates/ruff/src/rules/flake8_errmsg/rules/string_in_exception.rs @@ -210,7 +210,7 @@ pub(crate) fn string_in_exception(checker: &mut Checker, stmt: &Stmt, exc: &Expr } } // Check for f-strings. - Expr::JoinedStr(_) => { + Expr::FString(_) => { if checker.enabled(Rule::FStringInException) { let mut diagnostic = Diagnostic::new(FStringInException, first.range()); if checker.patch(diagnostic.kind.rule()) { diff --git a/crates/ruff/src/rules/flake8_future_annotations/rules/future_required_type_annotation.rs b/crates/ruff/src/rules/flake8_future_annotations/rules/future_required_type_annotation.rs index 04835fad6e..445b5c35de 100644 --- a/crates/ruff/src/rules/flake8_future_annotations/rules/future_required_type_annotation.rs +++ b/crates/ruff/src/rules/flake8_future_annotations/rules/future_required_type_annotation.rs @@ -20,6 +20,12 @@ use crate::checkers::ast::Checker; /// annotations at evaluation time, making the code compatible with both past /// and future Python versions. /// +/// This rule respects the [`target-version`] setting. For example, if your +/// project targets Python 3.10 and above, adding `from __future__ import annotations` +/// does not impact your ability to leverage PEP 604-style unions (e.g., to +/// convert `Optional[str]` to `str | None`). As such, this rule will only +/// flag such usages if your project targets Python 3.9 or below. +/// /// ## Example /// ```python /// def func(obj: dict[str, int | None]) -> None: @@ -34,6 +40,9 @@ use crate::checkers::ast::Checker; /// def func(obj: dict[str, int | None]) -> None: /// ... /// ``` +/// +/// ## Options +/// - `target-version` #[violation] pub struct FutureRequiredTypeAnnotation { reason: Reason, diff --git a/crates/ruff/src/rules/flake8_future_annotations/rules/future_rewritable_type_annotation.rs b/crates/ruff/src/rules/flake8_future_annotations/rules/future_rewritable_type_annotation.rs index df0998ddd4..5fb3f5708c 100644 --- a/crates/ruff/src/rules/flake8_future_annotations/rules/future_rewritable_type_annotation.rs +++ b/crates/ruff/src/rules/flake8_future_annotations/rules/future_rewritable_type_annotation.rs @@ -13,14 +13,25 @@ use crate::checkers::ast::Checker; /// /// ## Why is this bad? /// PEP 563 enabled the use of a number of convenient type annotations, such as -/// `list[str]` instead of `List[str]`, or `str | None` instead of -/// `Optional[str]`. However, these annotations are only available on Python -/// 3.9 and higher, _unless_ the `from __future__ import annotations` import is present. +/// `list[str]` instead of `List[str]`. However, these annotations are only +/// available on Python 3.9 and higher, _unless_ the `from __future__ import annotations` +/// import is present. +/// +/// Similarly, PEP 604 enabled the use of the `|` operator for unions, such as +/// `str | None` instead of `Optional[str]`. However, these annotations are only +/// available on Python 3.10 and higher, _unless_ the `from __future__ import annotations` +/// import is present. /// /// By adding the `__future__` import, the pyupgrade rules can automatically /// migrate existing code to use the new syntax, even for older Python versions. /// This rule thus pairs well with pyupgrade and with Ruff's pyupgrade rules. /// +/// This rule respects the [`target-version`] setting. For example, if your +/// project targets Python 3.10 and above, adding `from __future__ import annotations` +/// does not impact your ability to leverage PEP 604-style unions (e.g., to +/// convert `Optional[str]` to `str | None`). As such, this rule will only +/// flag such usages if your project targets Python 3.9 or below. +/// /// ## Example /// ```python /// from typing import List, Dict, Optional diff --git a/crates/ruff/src/rules/flake8_gettext/rules/f_string_in_gettext_func_call.rs b/crates/ruff/src/rules/flake8_gettext/rules/f_string_in_gettext_func_call.rs index ed781aeb12..2b38343ad7 100644 --- a/crates/ruff/src/rules/flake8_gettext/rules/f_string_in_gettext_func_call.rs +++ b/crates/ruff/src/rules/flake8_gettext/rules/f_string_in_gettext_func_call.rs @@ -52,7 +52,7 @@ impl Violation for FStringInGetTextFuncCall { /// INT001 pub(crate) fn f_string_in_gettext_func_call(checker: &mut Checker, args: &[Expr]) { if let Some(first) = args.first() { - if first.is_joined_str_expr() { + if first.is_f_string_expr() { checker .diagnostics .push(Diagnostic::new(FStringInGetTextFuncCall {}, first.range())); diff --git a/crates/ruff/src/rules/flake8_implicit_str_concat/rules/explicit.rs b/crates/ruff/src/rules/flake8_implicit_str_concat/rules/explicit.rs index 54629f288d..f34fb79fa7 100644 --- a/crates/ruff/src/rules/flake8_implicit_str_concat/rules/explicit.rs +++ b/crates/ruff/src/rules/flake8_implicit_str_concat/rules/explicit.rs @@ -50,14 +50,14 @@ pub(crate) fn explicit(expr: &Expr, locator: &Locator) -> Option { if matches!(op, Operator::Add) { if matches!( left.as_ref(), - Expr::JoinedStr(_) + Expr::FString(_) | Expr::Constant(ast::ExprConstant { value: Constant::Str(..) | Constant::Bytes(..), .. }) ) && matches!( right.as_ref(), - Expr::JoinedStr(_) + Expr::FString(_) | Expr::Constant(ast::ExprConstant { value: Constant::Str(..) | Constant::Bytes(..), .. diff --git a/crates/ruff/src/rules/flake8_logging_format/rules/logging_call.rs b/crates/ruff/src/rules/flake8_logging_format/rules/logging_call.rs index df3bb720c8..0a9cc72ecc 100644 --- a/crates/ruff/src/rules/flake8_logging_format/rules/logging_call.rs +++ b/crates/ruff/src/rules/flake8_logging_format/rules/logging_call.rs @@ -62,7 +62,7 @@ fn check_msg(checker: &mut Checker, msg: &Expr) { _ => {} }, // Check for f-strings. - Expr::JoinedStr(_) => { + Expr::FString(_) => { if checker.enabled(Rule::LoggingFString) { checker .diagnostics diff --git a/crates/ruff/src/rules/flake8_pyi/rules/any_eq_ne_annotation.rs b/crates/ruff/src/rules/flake8_pyi/rules/any_eq_ne_annotation.rs index a33106badd..ef1edc8064 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/any_eq_ne_annotation.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/any_eq_ne_annotation.rs @@ -66,7 +66,7 @@ pub(crate) fn any_eq_ne_annotation(checker: &mut Checker, name: &str, parameters return; }; - if !checker.semantic().scope().kind.is_class() { + if !checker.semantic().current_scope().kind.is_class() { return; } diff --git a/crates/ruff/src/rules/flake8_pyi/rules/custom_type_var_return_type.rs b/crates/ruff/src/rules/flake8_pyi/rules/custom_type_var_return_type.rs index 6dd0728e77..3528a58090 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/custom_type_var_return_type.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/custom_type_var_return_type.rs @@ -91,7 +91,7 @@ pub(crate) fn custom_type_var_return_type( return; }; - if !checker.semantic().scope().kind.is_class() { + if !checker.semantic().current_scope().kind.is_class() { return; }; diff --git a/crates/ruff/src/rules/flake8_pyi/rules/exit_annotations.rs b/crates/ruff/src/rules/flake8_pyi/rules/exit_annotations.rs index fc43b9b485..5a183d94d9 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/exit_annotations.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/exit_annotations.rs @@ -242,11 +242,11 @@ fn check_positional_args( /// Return the non-`None` annotation element of a PEP 604-style union or `Optional` annotation. fn non_none_annotation_element<'a>( annotation: &'a Expr, - model: &SemanticModel, + semantic: &SemanticModel, ) -> Option<&'a Expr> { // E.g., `typing.Union` or `typing.Optional` if let Expr::Subscript(ExprSubscript { value, slice, .. }) = annotation { - if model.match_typing_expr(value, "Optional") { + if semantic.match_typing_expr(value, "Optional") { return if is_const_none(slice) { None } else { @@ -254,7 +254,7 @@ fn non_none_annotation_element<'a>( }; } - if !model.match_typing_expr(value, "Union") { + if !semantic.match_typing_expr(value, "Union") { return None; } @@ -297,8 +297,8 @@ fn non_none_annotation_element<'a>( } /// Return `true` if the [`Expr`] is the `object` builtin or the `_typeshed.Unused` type. -fn is_object_or_unused(expr: &Expr, model: &SemanticModel) -> bool { - model +fn is_object_or_unused(expr: &Expr, semantic: &SemanticModel) -> bool { + semantic .resolve_call_path(expr) .as_ref() .is_some_and(|call_path| { @@ -310,34 +310,34 @@ fn is_object_or_unused(expr: &Expr, model: &SemanticModel) -> bool { } /// Return `true` if the [`Expr`] is `BaseException`. -fn is_base_exception(expr: &Expr, model: &SemanticModel) -> bool { - model +fn is_base_exception(expr: &Expr, semantic: &SemanticModel) -> bool { + semantic .resolve_call_path(expr) .as_ref() .is_some_and(|call_path| matches!(call_path.as_slice(), ["" | "builtins", "BaseException"])) } /// Return `true` if the [`Expr`] is the `types.TracebackType` type. -fn is_traceback_type(expr: &Expr, model: &SemanticModel) -> bool { - model +fn is_traceback_type(expr: &Expr, semantic: &SemanticModel) -> bool { + semantic .resolve_call_path(expr) .as_ref() .is_some_and(|call_path| matches!(call_path.as_slice(), ["types", "TracebackType"])) } /// Return `true` if the [`Expr`] is, e.g., `Type[BaseException]`. -fn is_base_exception_type(expr: &Expr, model: &SemanticModel) -> bool { +fn is_base_exception_type(expr: &Expr, semantic: &SemanticModel) -> bool { let Expr::Subscript(ExprSubscript { value, slice, .. }) = expr else { return false; }; - if model.match_typing_expr(value, "Type") - || model + if semantic.match_typing_expr(value, "Type") + || semantic .resolve_call_path(value) .as_ref() .is_some_and(|call_path| matches!(call_path.as_slice(), ["" | "builtins", "type"])) { - is_base_exception(slice, model) + is_base_exception(slice, semantic) } else { false } diff --git a/crates/ruff/src/rules/flake8_pyi/rules/iter_method_return_iterable.rs b/crates/ruff/src/rules/flake8_pyi/rules/iter_method_return_iterable.rs index a3f9c1b2c1..a183b409b4 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/iter_method_return_iterable.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/iter_method_return_iterable.rs @@ -1,9 +1,9 @@ -use ruff_python_ast as ast; -use ruff_python_ast::{Ranged, Stmt}; +use ruff_python_ast::Ranged; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::Expr; +use ruff_python_ast::helpers::map_subscript; + use ruff_python_semantic::{Definition, Member, MemberKind}; use crate::checkers::ast::Checker; @@ -49,14 +49,14 @@ use crate::checkers::ast::Checker; /// ``` #[violation] pub struct IterMethodReturnIterable { - async_: bool, + is_async: bool, } impl Violation for IterMethodReturnIterable { #[derive_message_formats] fn message(&self) -> String { - let IterMethodReturnIterable { async_ } = self; - if *async_ { + let IterMethodReturnIterable { is_async } = self; + if *is_async { format!("`__aiter__` methods should return an `AsyncIterator`, not an `AsyncIterable`") } else { format!("`__iter__` methods should return an `Iterator`, not an `Iterable`") @@ -67,41 +67,31 @@ impl Violation for IterMethodReturnIterable { /// PYI045 pub(crate) fn iter_method_return_iterable(checker: &mut Checker, definition: &Definition) { let Definition::Member(Member { - kind: MemberKind::Method, - stmt, + kind: MemberKind::Method(function), .. }) = definition else { return; }; - let Stmt::FunctionDef(ast::StmtFunctionDef { name, returns, .. }) = stmt else { + let Some(returns) = function.returns.as_ref() else { return; }; - let Some(returns) = returns else { - return; - }; - - let annotation = if let Expr::Subscript(ast::ExprSubscript { value, .. }) = returns.as_ref() { - // Ex) `Iterable[T]` - value - } else { - // Ex) `Iterable`, `typing.Iterable` - returns - }; - - let async_ = match name.as_str() { + let is_async = match function.name.as_str() { "__iter__" => false, "__aiter__" => true, _ => return, }; + // Support both `Iterable` and `Iterable[T]`. + let annotation = map_subscript(returns); + if checker .semantic() - .resolve_call_path(annotation) + .resolve_call_path(map_subscript(annotation)) .is_some_and(|call_path| { - if async_ { + if is_async { matches!( call_path.as_slice(), ["typing", "AsyncIterable"] | ["collections", "abc", "AsyncIterable"] @@ -115,7 +105,7 @@ pub(crate) fn iter_method_return_iterable(checker: &mut Checker, definition: &De }) { checker.diagnostics.push(Diagnostic::new( - IterMethodReturnIterable { async_ }, + IterMethodReturnIterable { is_async }, returns.range(), )); } diff --git a/crates/ruff/src/rules/flake8_pyi/rules/non_self_return_type.rs b/crates/ruff/src/rules/flake8_pyi/rules/non_self_return_type.rs index e88e6d3f37..0f251297cb 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/non_self_return_type.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/non_self_return_type.rs @@ -113,13 +113,13 @@ impl Violation for NonSelfReturnType { pub(crate) fn non_self_return_type( checker: &mut Checker, stmt: &Stmt, + is_async: bool, name: &str, decorator_list: &[Decorator], returns: Option<&Expr>, parameters: &Parameters, - async_: bool, ) { - let ScopeKind::Class(class_def) = checker.semantic().scope().kind else { + let ScopeKind::Class(class_def) = checker.semantic().current_scope().kind else { return; }; @@ -138,7 +138,7 @@ pub(crate) fn non_self_return_type( return; } - if async_ { + if is_async { if name == "__aenter__" && is_name(returns, &class_def.name) && !is_final(&class_def.decorator_list, checker.semantic()) diff --git a/crates/ruff/src/rules/flake8_pyi/rules/redundant_literal_union.rs b/crates/ruff/src/rules/flake8_pyi/rules/redundant_literal_union.rs index 51e333fc50..b1c112c0f9 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/redundant_literal_union.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/redundant_literal_union.rs @@ -121,7 +121,7 @@ impl fmt::Display for ExprType { /// Return the [`ExprType`] of an [`Expr]` if it is a builtin type (e.g. `int`, `bool`, `float`, /// `str`, `bytes`, or `complex`). -fn match_builtin_type(expr: &Expr, model: &SemanticModel) -> Option { +fn match_builtin_type(expr: &Expr, semantic: &SemanticModel) -> Option { let name = expr.as_name_expr()?; let result = match name.id.as_str() { "int" => ExprType::Int, @@ -132,7 +132,7 @@ fn match_builtin_type(expr: &Expr, model: &SemanticModel) -> Option { "complex" => ExprType::Complex, _ => return None, }; - if !model.is_builtin(name.id.as_str()) { + if !semantic.is_builtin(name.id.as_str()) { return None; } Some(result) diff --git a/crates/ruff/src/rules/flake8_pyi/rules/simple_defaults.rs b/crates/ruff/src/rules/flake8_pyi/rules/simple_defaults.rs index ef3ef722af..4426760cd1 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/simple_defaults.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/simple_defaults.rs @@ -349,8 +349,8 @@ fn is_type_var_like_call(expr: &Expr, semantic: &SemanticModel) -> bool { fn is_special_assignment(target: &Expr, semantic: &SemanticModel) -> bool { if let Expr::Name(ast::ExprName { id, .. }) = target { match id.as_str() { - "__all__" => semantic.scope().kind.is_module(), - "__match_args__" | "__slots__" => semantic.scope().kind.is_class(), + "__all__" => semantic.current_scope().kind.is_module(), + "__match_args__" | "__slots__" => semantic.current_scope().kind.is_class(), _ => false, } } else { @@ -569,7 +569,9 @@ pub(crate) fn unannotated_assignment_in_stub( return; } - if let ScopeKind::Class(ast::StmtClassDef { arguments, .. }) = checker.semantic().scope().kind { + if let ScopeKind::Class(ast::StmtClassDef { arguments, .. }) = + checker.semantic().current_scope().kind + { if is_enum(arguments.as_deref(), checker.semantic()) { return; } diff --git a/crates/ruff/src/rules/flake8_pyi/rules/str_or_repr_defined_in_stub.rs b/crates/ruff/src/rules/flake8_pyi/rules/str_or_repr_defined_in_stub.rs index e220359c91..ad3b7cf470 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/str_or_repr_defined_in_stub.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/str_or_repr_defined_in_stub.rs @@ -63,7 +63,7 @@ pub(crate) fn str_or_repr_defined_in_stub(checker: &mut Checker, stmt: &Stmt) { return; } - if !checker.semantic().scope().kind.is_class() { + if !checker.semantic().current_scope().kind.is_class() { return; } @@ -96,11 +96,12 @@ pub(crate) fn str_or_repr_defined_in_stub(checker: &mut Checker, stmt: &Stmt) { stmt.identifier(), ); if checker.patch(diagnostic.kind.rule()) { - let stmt = checker.semantic().stmt(); - let parent = checker.semantic().stmt_parent(); + let stmt = checker.semantic().current_statement(); + let parent = checker.semantic().current_statement_parent(); let edit = delete_stmt(stmt, parent, checker.locator(), checker.indexer()); diagnostic.set_fix( - Fix::automatic(edit).isolate(checker.isolation(checker.semantic().stmt_parent())), + Fix::automatic(edit) + .isolate(checker.isolation(checker.semantic().current_statement_parent())), ); } checker.diagnostics.push(diagnostic); diff --git a/crates/ruff/src/rules/flake8_pyi/rules/string_or_bytes_too_long.rs b/crates/ruff/src/rules/flake8_pyi/rules/string_or_bytes_too_long.rs index 4fd45acd7f..c66ecf894f 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/string_or_bytes_too_long.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/string_or_bytes_too_long.rs @@ -43,7 +43,7 @@ impl AlwaysAutofixableViolation for StringOrBytesTooLong { /// PYI053 pub(crate) fn string_or_bytes_too_long(checker: &mut Checker, expr: &Expr) { // Ignore docstrings. - if is_docstring_stmt(checker.semantic().stmt()) { + if is_docstring_stmt(checker.semantic().current_statement()) { return; } diff --git a/crates/ruff/src/rules/flake8_pyi/rules/unnecessary_type_union.rs b/crates/ruff/src/rules/flake8_pyi/rules/unnecessary_type_union.rs index 488d7c9c8e..8c0cac5c97 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/unnecessary_type_union.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/unnecessary_type_union.rs @@ -43,6 +43,11 @@ impl Violation for UnnecessaryTypeUnion { /// PYI055 pub(crate) fn unnecessary_type_union<'a>(checker: &mut Checker, union: &'a Expr) { + // The `|` operator isn't always safe to allow to runtime-evaluated annotations. + if checker.semantic().execution_context().is_runtime() { + return; + } + let mut type_exprs = Vec::new(); // Check if `union` is a PEP604 union (e.g. `float | int`) or a `typing.Union[float, int]` diff --git a/crates/ruff/src/rules/flake8_pyi/rules/unrecognized_platform.rs b/crates/ruff/src/rules/flake8_pyi/rules/unrecognized_platform.rs index 971bfd4b03..75d48b7326 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/unrecognized_platform.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/unrecognized_platform.rs @@ -123,7 +123,7 @@ pub(crate) fn unrecognized_platform(checker: &mut Checker, test: &Expr) { } if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), + value: Constant::Str(ast::StringConstant { value, .. }), .. }) = right { diff --git a/crates/ruff/src/rules/flake8_pyi/rules/unused_private_type_definition.rs b/crates/ruff/src/rules/flake8_pyi/rules/unused_private_type_definition.rs index 01d93b90e7..481aa88671 100644 --- a/crates/ruff/src/rules/flake8_pyi/rules/unused_private_type_definition.rs +++ b/crates/ruff/src/rules/flake8_pyi/rules/unused_private_type_definition.rs @@ -173,7 +173,8 @@ pub(crate) fn unused_private_type_var( let Some(source) = binding.source else { continue; }; - let Stmt::Assign(ast::StmtAssign { targets, value, .. }) = checker.semantic().stmts[source] + let Stmt::Assign(ast::StmtAssign { targets, value, .. }) = + checker.semantic().statement(source) else { continue; }; @@ -217,7 +218,7 @@ pub(crate) fn unused_private_protocol( continue; }; - let Stmt::ClassDef(class_def) = checker.semantic().stmts[source] else { + let Stmt::ClassDef(class_def) = checker.semantic().statement(source) else { continue; }; @@ -260,7 +261,7 @@ pub(crate) fn unused_private_type_alias( }; let Stmt::AnnAssign(ast::StmtAnnAssign { target, annotation, .. - }) = checker.semantic().stmts[source] + }) = checker.semantic().statement(source) else { continue; }; @@ -304,7 +305,7 @@ pub(crate) fn unused_private_typed_dict( let Some(source) = binding.source else { continue; }; - let Stmt::ClassDef(class_def) = checker.semantic().stmts[source] else { + let Stmt::ClassDef(class_def) = checker.semantic().statement(source) else { continue; }; diff --git a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI016_PYI016.py.snap b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI016_PYI016.py.snap index 23b1b08e70..abc1d3226a 100644 --- a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI016_PYI016.py.snap +++ b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI016_PYI016.py.snap @@ -1,42 +1,44 @@ --- source: crates/ruff/src/rules/flake8_pyi/mod.rs --- -PYI016.py:5:15: PYI016 [*] Duplicate union member `str` +PYI016.py:7:15: PYI016 [*] Duplicate union member `str` | -4 | # Should emit for duplicate field types. -5 | field2: str | str # PYI016: Duplicate union member `str` +6 | # Should emit for duplicate field types. +7 | field2: str | str # PYI016: Duplicate union member `str` | ^^^ PYI016 +8 | +9 | # Should emit for union types in arguments. | = help: Remove duplicate union member `str` ℹ Fix -2 2 | field1: str -3 3 | -4 4 | # Should emit for duplicate field types. -5 |-field2: str | str # PYI016: Duplicate union member `str` - 5 |+field2: str # PYI016: Duplicate union member `str` -6 6 | -7 7 | -8 8 | # Should emit for union types in arguments. +4 4 | field1: str +5 5 | +6 6 | # Should emit for duplicate field types. +7 |-field2: str | str # PYI016: Duplicate union member `str` + 7 |+field2: str # PYI016: Duplicate union member `str` +8 8 | +9 9 | # Should emit for union types in arguments. +10 10 | def func1(arg1: int | int): # PYI016: Duplicate union member `int` -PYI016.py:9:23: PYI016 [*] Duplicate union member `int` +PYI016.py:10:23: PYI016 [*] Duplicate union member `int` | - 8 | # Should emit for union types in arguments. - 9 | def func1(arg1: int | int): # PYI016: Duplicate union member `int` + 9 | # Should emit for union types in arguments. +10 | def func1(arg1: int | int): # PYI016: Duplicate union member `int` | ^^^ PYI016 -10 | print(arg1) +11 | print(arg1) | = help: Remove duplicate union member `int` ℹ Fix -6 6 | -7 7 | -8 8 | # Should emit for union types in arguments. -9 |-def func1(arg1: int | int): # PYI016: Duplicate union member `int` - 9 |+def func1(arg1: int): # PYI016: Duplicate union member `int` -10 10 | print(arg1) -11 11 | +7 7 | field2: str | str # PYI016: Duplicate union member `str` +8 8 | +9 9 | # Should emit for union types in arguments. +10 |-def func1(arg1: int | int): # PYI016: Duplicate union member `int` + 10 |+def func1(arg1: int): # PYI016: Duplicate union member `int` +11 11 | print(arg1) 12 12 | +13 13 | # Should emit for unions in return types. PYI016.py:14:22: PYI016 [*] Duplicate union member `str` | @@ -48,170 +50,494 @@ PYI016.py:14:22: PYI016 [*] Duplicate union member `str` = help: Remove duplicate union member `str` ℹ Fix -11 11 | +11 11 | print(arg1) 12 12 | 13 13 | # Should emit for unions in return types. 14 |-def func2() -> str | str: # PYI016: Duplicate union member `str` 14 |+def func2() -> str: # PYI016: Duplicate union member `str` 15 15 | return "my string" 16 16 | -17 17 | +17 17 | # Should emit in longer unions, even if not directly adjacent. -PYI016.py:19:15: PYI016 [*] Duplicate union member `str` +PYI016.py:18:15: PYI016 [*] Duplicate union member `str` | -18 | # Should emit in longer unions, even if not directly adjacent. -19 | field3: str | str | int # PYI016: Duplicate union member `str` +17 | # Should emit in longer unions, even if not directly adjacent. +18 | field3: str | str | int # PYI016: Duplicate union member `str` | ^^^ PYI016 -20 | field4: int | int | str # PYI016: Duplicate union member `int` -21 | field5: str | int | str # PYI016: Duplicate union member `str` +19 | field4: int | int | str # PYI016: Duplicate union member `int` +20 | field5: str | int | str # PYI016: Duplicate union member `str` | = help: Remove duplicate union member `str` +ℹ Fix +15 15 | return "my string" +16 16 | +17 17 | # Should emit in longer unions, even if not directly adjacent. +18 |-field3: str | str | int # PYI016: Duplicate union member `str` + 18 |+field3: str | int # PYI016: Duplicate union member `str` +19 19 | field4: int | int | str # PYI016: Duplicate union member `int` +20 20 | field5: str | int | str # PYI016: Duplicate union member `str` +21 21 | field6: int | bool | str | int # PYI016: Duplicate union member `int` + +PYI016.py:19:15: PYI016 [*] Duplicate union member `int` + | +17 | # Should emit in longer unions, even if not directly adjacent. +18 | field3: str | str | int # PYI016: Duplicate union member `str` +19 | field4: int | int | str # PYI016: Duplicate union member `int` + | ^^^ PYI016 +20 | field5: str | int | str # PYI016: Duplicate union member `str` +21 | field6: int | bool | str | int # PYI016: Duplicate union member `int` + | + = help: Remove duplicate union member `int` + ℹ Fix 16 16 | -17 17 | -18 18 | # Should emit in longer unions, even if not directly adjacent. -19 |-field3: str | str | int # PYI016: Duplicate union member `str` - 19 |+field3: str | int # PYI016: Duplicate union member `str` -20 20 | field4: int | int | str # PYI016: Duplicate union member `int` -21 21 | field5: str | int | str # PYI016: Duplicate union member `str` -22 22 | field6: int | bool | str | int # PYI016: Duplicate union member `int` +17 17 | # Should emit in longer unions, even if not directly adjacent. +18 18 | field3: str | str | int # PYI016: Duplicate union member `str` +19 |-field4: int | int | str # PYI016: Duplicate union member `int` + 19 |+field4: int | str # PYI016: Duplicate union member `int` +20 20 | field5: str | int | str # PYI016: Duplicate union member `str` +21 21 | field6: int | bool | str | int # PYI016: Duplicate union member `int` +22 22 | -PYI016.py:20:15: PYI016 [*] Duplicate union member `int` +PYI016.py:20:21: PYI016 [*] Duplicate union member `str` | -18 | # Should emit in longer unions, even if not directly adjacent. -19 | field3: str | str | int # PYI016: Duplicate union member `str` -20 | field4: int | int | str # PYI016: Duplicate union member `int` - | ^^^ PYI016 -21 | field5: str | int | str # PYI016: Duplicate union member `str` -22 | field6: int | bool | str | int # PYI016: Duplicate union member `int` - | - = help: Remove duplicate union member `int` - -ℹ Fix -17 17 | -18 18 | # Should emit in longer unions, even if not directly adjacent. -19 19 | field3: str | str | int # PYI016: Duplicate union member `str` -20 |-field4: int | int | str # PYI016: Duplicate union member `int` - 20 |+field4: int | str # PYI016: Duplicate union member `int` -21 21 | field5: str | int | str # PYI016: Duplicate union member `str` -22 22 | field6: int | bool | str | int # PYI016: Duplicate union member `int` -23 23 | - -PYI016.py:21:21: PYI016 [*] Duplicate union member `str` - | -19 | field3: str | str | int # PYI016: Duplicate union member `str` -20 | field4: int | int | str # PYI016: Duplicate union member `int` -21 | field5: str | int | str # PYI016: Duplicate union member `str` +18 | field3: str | str | int # PYI016: Duplicate union member `str` +19 | field4: int | int | str # PYI016: Duplicate union member `int` +20 | field5: str | int | str # PYI016: Duplicate union member `str` | ^^^ PYI016 -22 | field6: int | bool | str | int # PYI016: Duplicate union member `int` +21 | field6: int | bool | str | int # PYI016: Duplicate union member `int` | = help: Remove duplicate union member `str` ℹ Fix -18 18 | # Should emit in longer unions, even if not directly adjacent. -19 19 | field3: str | str | int # PYI016: Duplicate union member `str` -20 20 | field4: int | int | str # PYI016: Duplicate union member `int` -21 |-field5: str | int | str # PYI016: Duplicate union member `str` - 21 |+field5: str | int # PYI016: Duplicate union member `str` -22 22 | field6: int | bool | str | int # PYI016: Duplicate union member `int` -23 23 | -24 24 | # Shouldn't emit for non-type unions. +17 17 | # Should emit in longer unions, even if not directly adjacent. +18 18 | field3: str | str | int # PYI016: Duplicate union member `str` +19 19 | field4: int | int | str # PYI016: Duplicate union member `int` +20 |-field5: str | int | str # PYI016: Duplicate union member `str` + 20 |+field5: str | int # PYI016: Duplicate union member `str` +21 21 | field6: int | bool | str | int # PYI016: Duplicate union member `int` +22 22 | +23 23 | # Shouldn't emit for non-type unions. -PYI016.py:22:28: PYI016 [*] Duplicate union member `int` +PYI016.py:21:28: PYI016 [*] Duplicate union member `int` | -20 | field4: int | int | str # PYI016: Duplicate union member `int` -21 | field5: str | int | str # PYI016: Duplicate union member `str` -22 | field6: int | bool | str | int # PYI016: Duplicate union member `int` +19 | field4: int | int | str # PYI016: Duplicate union member `int` +20 | field5: str | int | str # PYI016: Duplicate union member `str` +21 | field6: int | bool | str | int # PYI016: Duplicate union member `int` | ^^^ PYI016 -23 | -24 | # Shouldn't emit for non-type unions. +22 | +23 | # Shouldn't emit for non-type unions. | = help: Remove duplicate union member `int` ℹ Fix -19 19 | field3: str | str | int # PYI016: Duplicate union member `str` -20 20 | field4: int | int | str # PYI016: Duplicate union member `int` -21 21 | field5: str | int | str # PYI016: Duplicate union member `str` -22 |-field6: int | bool | str | int # PYI016: Duplicate union member `int` - 22 |+field6: int | bool | str # PYI016: Duplicate union member `int` -23 23 | -24 24 | # Shouldn't emit for non-type unions. -25 25 | field7 = str | str +18 18 | field3: str | str | int # PYI016: Duplicate union member `str` +19 19 | field4: int | int | str # PYI016: Duplicate union member `int` +20 20 | field5: str | int | str # PYI016: Duplicate union member `str` +21 |-field6: int | bool | str | int # PYI016: Duplicate union member `int` + 21 |+field6: int | bool | str # PYI016: Duplicate union member `int` +22 22 | +23 23 | # Shouldn't emit for non-type unions. +24 24 | field7 = str | str -PYI016.py:28:22: PYI016 [*] Duplicate union member `int` +PYI016.py:27:22: PYI016 [*] Duplicate union member `int` | -27 | # Should emit for strangely-bracketed unions. -28 | field8: int | (str | int) # PYI016: Duplicate union member `int` +26 | # Should emit for strangely-bracketed unions. +27 | field8: int | (str | int) # PYI016: Duplicate union member `int` | ^^^ PYI016 -29 | -30 | # Should handle user brackets when fixing. +28 | +29 | # Should handle user brackets when fixing. | = help: Remove duplicate union member `int` ℹ Fix -25 25 | field7 = str | str -26 26 | -27 27 | # Should emit for strangely-bracketed unions. -28 |-field8: int | (str | int) # PYI016: Duplicate union member `int` - 28 |+field8: int | (str) # PYI016: Duplicate union member `int` -29 29 | -30 30 | # Should handle user brackets when fixing. -31 31 | field9: int | (int | str) # PYI016: Duplicate union member `int` +24 24 | field7 = str | str +25 25 | +26 26 | # Should emit for strangely-bracketed unions. +27 |-field8: int | (str | int) # PYI016: Duplicate union member `int` + 27 |+field8: int | (str) # PYI016: Duplicate union member `int` +28 28 | +29 29 | # Should handle user brackets when fixing. +30 30 | field9: int | (int | str) # PYI016: Duplicate union member `int` -PYI016.py:31:16: PYI016 [*] Duplicate union member `int` +PYI016.py:30:16: PYI016 [*] Duplicate union member `int` | -30 | # Should handle user brackets when fixing. -31 | field9: int | (int | str) # PYI016: Duplicate union member `int` +29 | # Should handle user brackets when fixing. +30 | field9: int | (int | str) # PYI016: Duplicate union member `int` | ^^^ PYI016 -32 | field10: (str | int) | str # PYI016: Duplicate union member `str` +31 | field10: (str | int) | str # PYI016: Duplicate union member `str` | = help: Remove duplicate union member `int` ℹ Fix -28 28 | field8: int | (str | int) # PYI016: Duplicate union member `int` -29 29 | -30 30 | # Should handle user brackets when fixing. -31 |-field9: int | (int | str) # PYI016: Duplicate union member `int` - 31 |+field9: int | (str) # PYI016: Duplicate union member `int` -32 32 | field10: (str | int) | str # PYI016: Duplicate union member `str` -33 33 | -34 34 | # Should emit for nested unions. +27 27 | field8: int | (str | int) # PYI016: Duplicate union member `int` +28 28 | +29 29 | # Should handle user brackets when fixing. +30 |-field9: int | (int | str) # PYI016: Duplicate union member `int` + 30 |+field9: int | (str) # PYI016: Duplicate union member `int` +31 31 | field10: (str | int) | str # PYI016: Duplicate union member `str` +32 32 | +33 33 | # Should emit for nested unions. -PYI016.py:32:24: PYI016 [*] Duplicate union member `str` +PYI016.py:31:24: PYI016 [*] Duplicate union member `str` | -30 | # Should handle user brackets when fixing. -31 | field9: int | (int | str) # PYI016: Duplicate union member `int` -32 | field10: (str | int) | str # PYI016: Duplicate union member `str` +29 | # Should handle user brackets when fixing. +30 | field9: int | (int | str) # PYI016: Duplicate union member `int` +31 | field10: (str | int) | str # PYI016: Duplicate union member `str` | ^^^ PYI016 -33 | -34 | # Should emit for nested unions. +32 | +33 | # Should emit for nested unions. | = help: Remove duplicate union member `str` ℹ Fix -29 29 | -30 30 | # Should handle user brackets when fixing. -31 31 | field9: int | (int | str) # PYI016: Duplicate union member `int` -32 |-field10: (str | int) | str # PYI016: Duplicate union member `str` - 32 |+field10: str | int # PYI016: Duplicate union member `str` -33 33 | -34 34 | # Should emit for nested unions. -35 35 | field11: dict[int | int, str] +28 28 | +29 29 | # Should handle user brackets when fixing. +30 30 | field9: int | (int | str) # PYI016: Duplicate union member `int` +31 |-field10: (str | int) | str # PYI016: Duplicate union member `str` + 31 |+field10: str | int # PYI016: Duplicate union member `str` +32 32 | +33 33 | # Should emit for nested unions. +34 34 | field11: dict[int | int, str] -PYI016.py:35:21: PYI016 [*] Duplicate union member `int` +PYI016.py:34:21: PYI016 [*] Duplicate union member `int` | -34 | # Should emit for nested unions. -35 | field11: dict[int | int, str] +33 | # Should emit for nested unions. +34 | field11: dict[int | int, str] | ^^^ PYI016 +35 | +36 | # Should emit for unions with more than two cases | = help: Remove duplicate union member `int` ℹ Fix -32 32 | field10: (str | int) | str # PYI016: Duplicate union member `str` -33 33 | -34 34 | # Should emit for nested unions. -35 |-field11: dict[int | int, str] - 35 |+field11: dict[int, str] +31 31 | field10: (str | int) | str # PYI016: Duplicate union member `str` +32 32 | +33 33 | # Should emit for nested unions. +34 |-field11: dict[int | int, str] + 34 |+field11: dict[int, str] +35 35 | +36 36 | # Should emit for unions with more than two cases +37 37 | field12: int | int | int # Error + +PYI016.py:37:16: PYI016 [*] Duplicate union member `int` + | +36 | # Should emit for unions with more than two cases +37 | field12: int | int | int # Error + | ^^^ PYI016 +38 | field13: int | int | int | int # Error + | + = help: Remove duplicate union member `int` + +ℹ Fix +34 34 | field11: dict[int | int, str] +35 35 | +36 36 | # Should emit for unions with more than two cases +37 |-field12: int | int | int # Error + 37 |+field12: int | int # Error +38 38 | field13: int | int | int | int # Error +39 39 | +40 40 | # Should emit for unions with more than two cases, even if not directly adjacent + +PYI016.py:37:22: PYI016 [*] Duplicate union member `int` + | +36 | # Should emit for unions with more than two cases +37 | field12: int | int | int # Error + | ^^^ PYI016 +38 | field13: int | int | int | int # Error + | + = help: Remove duplicate union member `int` + +ℹ Fix +34 34 | field11: dict[int | int, str] +35 35 | +36 36 | # Should emit for unions with more than two cases +37 |-field12: int | int | int # Error + 37 |+field12: int | int # Error +38 38 | field13: int | int | int | int # Error +39 39 | +40 40 | # Should emit for unions with more than two cases, even if not directly adjacent + +PYI016.py:38:16: PYI016 [*] Duplicate union member `int` + | +36 | # Should emit for unions with more than two cases +37 | field12: int | int | int # Error +38 | field13: int | int | int | int # Error + | ^^^ PYI016 +39 | +40 | # Should emit for unions with more than two cases, even if not directly adjacent + | + = help: Remove duplicate union member `int` + +ℹ Fix +35 35 | +36 36 | # Should emit for unions with more than two cases +37 37 | field12: int | int | int # Error +38 |-field13: int | int | int | int # Error + 38 |+field13: int | int | int # Error +39 39 | +40 40 | # Should emit for unions with more than two cases, even if not directly adjacent +41 41 | field14: int | int | str | int # Error + +PYI016.py:38:22: PYI016 [*] Duplicate union member `int` + | +36 | # Should emit for unions with more than two cases +37 | field12: int | int | int # Error +38 | field13: int | int | int | int # Error + | ^^^ PYI016 +39 | +40 | # Should emit for unions with more than two cases, even if not directly adjacent + | + = help: Remove duplicate union member `int` + +ℹ Fix +35 35 | +36 36 | # Should emit for unions with more than two cases +37 37 | field12: int | int | int # Error +38 |-field13: int | int | int | int # Error + 38 |+field13: int | int | int # Error +39 39 | +40 40 | # Should emit for unions with more than two cases, even if not directly adjacent +41 41 | field14: int | int | str | int # Error + +PYI016.py:38:28: PYI016 [*] Duplicate union member `int` + | +36 | # Should emit for unions with more than two cases +37 | field12: int | int | int # Error +38 | field13: int | int | int | int # Error + | ^^^ PYI016 +39 | +40 | # Should emit for unions with more than two cases, even if not directly adjacent + | + = help: Remove duplicate union member `int` + +ℹ Fix +35 35 | +36 36 | # Should emit for unions with more than two cases +37 37 | field12: int | int | int # Error +38 |-field13: int | int | int | int # Error + 38 |+field13: int | int | int # Error +39 39 | +40 40 | # Should emit for unions with more than two cases, even if not directly adjacent +41 41 | field14: int | int | str | int # Error + +PYI016.py:41:16: PYI016 [*] Duplicate union member `int` + | +40 | # Should emit for unions with more than two cases, even if not directly adjacent +41 | field14: int | int | str | int # Error + | ^^^ PYI016 +42 | +43 | # Should emit for duplicate literal types; also covered by PYI030 + | + = help: Remove duplicate union member `int` + +ℹ Fix +38 38 | field13: int | int | int | int # Error +39 39 | +40 40 | # Should emit for unions with more than two cases, even if not directly adjacent +41 |-field14: int | int | str | int # Error + 41 |+field14: int | str | int # Error +42 42 | +43 43 | # Should emit for duplicate literal types; also covered by PYI030 +44 44 | field15: typing.Literal[1] | typing.Literal[1] # Error + +PYI016.py:41:28: PYI016 [*] Duplicate union member `int` + | +40 | # Should emit for unions with more than two cases, even if not directly adjacent +41 | field14: int | int | str | int # Error + | ^^^ PYI016 +42 | +43 | # Should emit for duplicate literal types; also covered by PYI030 + | + = help: Remove duplicate union member `int` + +ℹ Fix +38 38 | field13: int | int | int | int # Error +39 39 | +40 40 | # Should emit for unions with more than two cases, even if not directly adjacent +41 |-field14: int | int | str | int # Error + 41 |+field14: int | int | str # Error +42 42 | +43 43 | # Should emit for duplicate literal types; also covered by PYI030 +44 44 | field15: typing.Literal[1] | typing.Literal[1] # Error + +PYI016.py:44:30: PYI016 [*] Duplicate union member `typing.Literal[1]` + | +43 | # Should emit for duplicate literal types; also covered by PYI030 +44 | field15: typing.Literal[1] | typing.Literal[1] # Error + | ^^^^^^^^^^^^^^^^^ PYI016 +45 | +46 | # Shouldn't emit if in new parent type + | + = help: Remove duplicate union member `typing.Literal[1]` + +ℹ Fix +41 41 | field14: int | int | str | int # Error +42 42 | +43 43 | # Should emit for duplicate literal types; also covered by PYI030 +44 |-field15: typing.Literal[1] | typing.Literal[1] # Error + 44 |+field15: typing.Literal[1] # Error +45 45 | +46 46 | # Shouldn't emit if in new parent type +47 47 | field16: int | dict[int, str] # OK + +PYI016.py:57:5: PYI016 Duplicate union member `set[int]` + | +55 | int # foo +56 | ], +57 | set[ + | _____^ +58 | | int # bar +59 | | ], + | |_____^ PYI016 +60 | ] # Error, newline and comment will not be emitted in message + | + = help: Remove duplicate union member `set[int]` + +PYI016.py:63:28: PYI016 Duplicate union member `int` + | +62 | # Should emit in cases with `typing.Union` instead of `|` +63 | field19: typing.Union[int, int] # Error + | ^^^ PYI016 +64 | +65 | # Should emit in cases with nested `typing.Union` + | + = help: Remove duplicate union member `int` + +PYI016.py:66:41: PYI016 Duplicate union member `int` + | +65 | # Should emit in cases with nested `typing.Union` +66 | field20: typing.Union[int, typing.Union[int, str]] # Error + | ^^^ PYI016 +67 | +68 | # Should emit in cases with mixed `typing.Union` and `|` + | + = help: Remove duplicate union member `int` + +PYI016.py:69:28: PYI016 [*] Duplicate union member `int` + | +68 | # Should emit in cases with mixed `typing.Union` and `|` +69 | field21: typing.Union[int, int | str] # Error + | ^^^ PYI016 +70 | +71 | # Should emit only once in cases with multiple nested `typing.Union` + | + = help: Remove duplicate union member `int` + +ℹ Fix +66 66 | field20: typing.Union[int, typing.Union[int, str]] # Error +67 67 | +68 68 | # Should emit in cases with mixed `typing.Union` and `|` +69 |-field21: typing.Union[int, int | str] # Error + 69 |+field21: typing.Union[int, str] # Error +70 70 | +71 71 | # Should emit only once in cases with multiple nested `typing.Union` +72 72 | field22: typing.Union[int, typing.Union[int, typing.Union[int, int]]] # Error + +PYI016.py:72:41: PYI016 Duplicate union member `int` + | +71 | # Should emit only once in cases with multiple nested `typing.Union` +72 | field22: typing.Union[int, typing.Union[int, typing.Union[int, int]]] # Error + | ^^^ PYI016 +73 | +74 | # Should emit in cases with newlines + | + = help: Remove duplicate union member `int` + +PYI016.py:72:59: PYI016 Duplicate union member `int` + | +71 | # Should emit only once in cases with multiple nested `typing.Union` +72 | field22: typing.Union[int, typing.Union[int, typing.Union[int, int]]] # Error + | ^^^ PYI016 +73 | +74 | # Should emit in cases with newlines + | + = help: Remove duplicate union member `int` + +PYI016.py:72:64: PYI016 Duplicate union member `int` + | +71 | # Should emit only once in cases with multiple nested `typing.Union` +72 | field22: typing.Union[int, typing.Union[int, typing.Union[int, int]]] # Error + | ^^^ PYI016 +73 | +74 | # Should emit in cases with newlines + | + = help: Remove duplicate union member `int` + +PYI016.py:76:12: PYI016 [*] Duplicate union member `set[int]` + | +74 | # Should emit in cases with newlines +75 | field23: set[ # foo +76 | int] | set[int] + | ^^^^^^^^ PYI016 +77 | +78 | # Should emit twice (once for each `int` in the nested union, both of which are + | + = help: Remove duplicate union member `set[int]` + +ℹ Fix +73 73 | +74 74 | # Should emit in cases with newlines +75 75 | field23: set[ # foo +76 |- int] | set[int] + 76 |+ int] +77 77 | +78 78 | # Should emit twice (once for each `int` in the nested union, both of which are +79 79 | # duplicates of the outer `int`), but not three times (which would indicate that + +PYI016.py:81:41: PYI016 Duplicate union member `int` + | +79 | # duplicates of the outer `int`), but not three times (which would indicate that +80 | # we incorrectly re-checked the nested union). +81 | field24: typing.Union[int, typing.Union[int, int]] # PYI016: Duplicate union member `int` + | ^^^ PYI016 +82 | +83 | # Should emit twice (once for each `int` in the nested union, both of which are + | + = help: Remove duplicate union member `int` + +PYI016.py:81:46: PYI016 Duplicate union member `int` + | +79 | # duplicates of the outer `int`), but not three times (which would indicate that +80 | # we incorrectly re-checked the nested union). +81 | field24: typing.Union[int, typing.Union[int, int]] # PYI016: Duplicate union member `int` + | ^^^ PYI016 +82 | +83 | # Should emit twice (once for each `int` in the nested union, both of which are + | + = help: Remove duplicate union member `int` + +PYI016.py:86:28: PYI016 [*] Duplicate union member `int` + | +84 | # duplicates of the outer `int`), but not three times (which would indicate that +85 | # we incorrectly re-checked the nested union). +86 | field25: typing.Union[int, int | int] # PYI016: Duplicate union member `int` + | ^^^ PYI016 + | + = help: Remove duplicate union member `int` + +ℹ Fix +83 83 | # Should emit twice (once for each `int` in the nested union, both of which are +84 84 | # duplicates of the outer `int`), but not three times (which would indicate that +85 85 | # we incorrectly re-checked the nested union). +86 |-field25: typing.Union[int, int | int] # PYI016: Duplicate union member `int` + 86 |+field25: typing.Union[int, int] # PYI016: Duplicate union member `int` + +PYI016.py:86:34: PYI016 [*] Duplicate union member `int` + | +84 | # duplicates of the outer `int`), but not three times (which would indicate that +85 | # we incorrectly re-checked the nested union). +86 | field25: typing.Union[int, int | int] # PYI016: Duplicate union member `int` + | ^^^ PYI016 + | + = help: Remove duplicate union member `int` + +ℹ Fix +83 83 | # Should emit twice (once for each `int` in the nested union, both of which are +84 84 | # duplicates of the outer `int`), but not three times (which would indicate that +85 85 | # we incorrectly re-checked the nested union). +86 |-field25: typing.Union[int, int | int] # PYI016: Duplicate union member `int` + 86 |+field25: typing.Union[int, int] # PYI016: Duplicate union member `int` diff --git a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI016_PYI016.pyi.snap b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI016_PYI016.pyi.snap index ca5312e2e9..d29fea9901 100644 --- a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI016_PYI016.pyi.snap +++ b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI016_PYI016.pyi.snap @@ -471,6 +471,8 @@ PYI016.pyi:76:12: PYI016 [*] Duplicate union member `set[int]` 75 | field23: set[ # foo 76 | int] | set[int] | ^^^^^^^^ PYI016 +77 | +78 | # Should emit twice (once for each `int` in the nested union, both of which are | = help: Remove duplicate union member `set[int]` @@ -480,5 +482,62 @@ PYI016.pyi:76:12: PYI016 [*] Duplicate union member `set[int]` 75 75 | field23: set[ # foo 76 |- int] | set[int] 76 |+ int] +77 77 | +78 78 | # Should emit twice (once for each `int` in the nested union, both of which are +79 79 | # duplicates of the outer `int`), but not three times (which would indicate that + +PYI016.pyi:81:41: PYI016 Duplicate union member `int` + | +79 | # duplicates of the outer `int`), but not three times (which would indicate that +80 | # we incorrectly re-checked the nested union). +81 | field24: typing.Union[int, typing.Union[int, int]] # PYI016: Duplicate union member `int` + | ^^^ PYI016 +82 | +83 | # Should emit twice (once for each `int` in the nested union, both of which are + | + = help: Remove duplicate union member `int` + +PYI016.pyi:81:46: PYI016 Duplicate union member `int` + | +79 | # duplicates of the outer `int`), but not three times (which would indicate that +80 | # we incorrectly re-checked the nested union). +81 | field24: typing.Union[int, typing.Union[int, int]] # PYI016: Duplicate union member `int` + | ^^^ PYI016 +82 | +83 | # Should emit twice (once for each `int` in the nested union, both of which are + | + = help: Remove duplicate union member `int` + +PYI016.pyi:86:28: PYI016 [*] Duplicate union member `int` + | +84 | # duplicates of the outer `int`), but not three times (which would indicate that +85 | # we incorrectly re-checked the nested union). +86 | field25: typing.Union[int, int | int] # PYI016: Duplicate union member `int` + | ^^^ PYI016 + | + = help: Remove duplicate union member `int` + +ℹ Fix +83 83 | # Should emit twice (once for each `int` in the nested union, both of which are +84 84 | # duplicates of the outer `int`), but not three times (which would indicate that +85 85 | # we incorrectly re-checked the nested union). +86 |-field25: typing.Union[int, int | int] # PYI016: Duplicate union member `int` + 86 |+field25: typing.Union[int, int] # PYI016: Duplicate union member `int` + +PYI016.pyi:86:34: PYI016 [*] Duplicate union member `int` + | +84 | # duplicates of the outer `int`), but not three times (which would indicate that +85 | # we incorrectly re-checked the nested union). +86 | field25: typing.Union[int, int | int] # PYI016: Duplicate union member `int` + | ^^^ PYI016 + | + = help: Remove duplicate union member `int` + +ℹ Fix +83 83 | # Should emit twice (once for each `int` in the nested union, both of which are +84 84 | # duplicates of the outer `int`), but not three times (which would indicate that +85 85 | # we incorrectly re-checked the nested union). +86 |-field25: typing.Union[int, int | int] # PYI016: Duplicate union member `int` + 86 |+field25: typing.Union[int, int] # PYI016: Duplicate union member `int` diff --git a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI050_PYI050.py.snap b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI050_PYI050.py.snap index d1aa2e9116..492243cf19 100644 --- a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI050_PYI050.py.snap +++ b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI050_PYI050.py.snap @@ -1,4 +1,25 @@ --- source: crates/ruff/src/rules/flake8_pyi/mod.rs --- +PYI050.py:13:24: PYI050 Prefer `typing.Never` over `NoReturn` for argument annotations + | +13 | def foo_no_return(arg: NoReturn): + | ^^^^^^^^ PYI050 +14 | ... + | + +PYI050.py:23:44: PYI050 Prefer `typing.Never` over `NoReturn` for argument annotations + | +23 | def foo_no_return_kwarg(arg: int, *, arg2: NoReturn): + | ^^^^^^^^ PYI050 +24 | ... + | + +PYI050.py:27:47: PYI050 Prefer `typing.Never` over `NoReturn` for argument annotations + | +27 | def foo_no_return_pos_only(arg: int, /, arg2: NoReturn): + | ^^^^^^^^ PYI050 +28 | ... + | + diff --git a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI050_PYI050.pyi.snap b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI050_PYI050.pyi.snap index f476783f00..2eafac7805 100644 --- a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI050_PYI050.pyi.snap +++ b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI050_PYI050.pyi.snap @@ -1,7 +1,7 @@ --- source: crates/ruff/src/rules/flake8_pyi/mod.rs --- -PYI050.pyi:6:24: PYI050 Prefer `typing_extensions.Never` over `NoReturn` for argument annotations +PYI050.pyi:6:24: PYI050 Prefer `typing.Never` over `NoReturn` for argument annotations | 4 | def foo(arg): ... 5 | def foo_int(arg: int): ... @@ -11,7 +11,7 @@ PYI050.pyi:6:24: PYI050 Prefer `typing_extensions.Never` over `NoReturn` for arg 8 | arg: typing_extensions.NoReturn, | -PYI050.pyi:10:44: PYI050 Prefer `typing_extensions.Never` over `NoReturn` for argument annotations +PYI050.pyi:10:44: PYI050 Prefer `typing.Never` over `NoReturn` for argument annotations | 8 | arg: typing_extensions.NoReturn, 9 | ): ... # Error: PYI050 @@ -21,7 +21,7 @@ PYI050.pyi:10:44: PYI050 Prefer `typing_extensions.Never` over `NoReturn` for ar 12 | def foo_never(arg: Never): ... | -PYI050.pyi:11:47: PYI050 Prefer `typing_extensions.Never` over `NoReturn` for argument annotations +PYI050.pyi:11:47: PYI050 Prefer `typing.Never` over `NoReturn` for argument annotations | 9 | ): ... # Error: PYI050 10 | def foo_no_return_kwarg(arg: int, *, arg2: NoReturn): ... # Error: PYI050 diff --git a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI055_PYI055.py.snap b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI055_PYI055.py.snap index 78622d6f93..8f474e08d7 100644 --- a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI055_PYI055.py.snap +++ b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI055_PYI055.py.snap @@ -1,56 +1,12 @@ --- source: crates/ruff/src/rules/flake8_pyi/mod.rs --- -PYI055.py:5:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | str | complex]`. - | -5 | w: builtins.type[int] | builtins.type[str] | builtins.type[complex] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 -6 | x: type[int] | type[str] | type[float] -7 | y: builtins.type[int] | type[str] | builtins.type[complex] - | - -PYI055.py:6:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | str | float]`. - | -5 | w: builtins.type[int] | builtins.type[str] | builtins.type[complex] -6 | x: type[int] | type[str] | type[float] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 -7 | y: builtins.type[int] | type[str] | builtins.type[complex] -8 | z: Union[type[float], type[complex]] - | - -PYI055.py:7:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | str | complex]`. - | -5 | w: builtins.type[int] | builtins.type[str] | builtins.type[complex] -6 | x: type[int] | type[str] | type[float] -7 | y: builtins.type[int] | type[str] | builtins.type[complex] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 -8 | z: Union[type[float], type[complex]] -9 | z: Union[type[float, int], type[complex]] - | - -PYI055.py:8:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[Union[float, complex]]`. - | -6 | x: type[int] | type[str] | type[float] -7 | y: builtins.type[int] | type[str] | builtins.type[complex] -8 | z: Union[type[float], type[complex]] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 -9 | z: Union[type[float, int], type[complex]] - | - -PYI055.py:9:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[Union[float, int, complex]]`. - | -7 | y: builtins.type[int] | type[str] | builtins.type[complex] -8 | z: Union[type[float], type[complex]] -9 | z: Union[type[float, int], type[complex]] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 - | - -PYI055.py:12:15: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | float]`. +PYI055.py:31:11: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[requests_mock.Mocker | httpretty]`. | -12 | def func(arg: type[int] | str | type[float]) -> None: ... - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 -13 | -14 | # OK +29 | def func(): +30 | # PYI055 +31 | item: type[requests_mock.Mocker] | type[httpretty] = requests_mock.Mocker + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 | diff --git a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI055_PYI055.pyi.snap b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI055_PYI055.pyi.snap index f0ab0f3f53..a8262366ed 100644 --- a/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI055_PYI055.pyi.snap +++ b/crates/ruff/src/rules/flake8_pyi/snapshots/ruff__rules__flake8_pyi__tests__PYI055_PYI055.pyi.snap @@ -1,56 +1,79 @@ --- source: crates/ruff/src/rules/flake8_pyi/mod.rs --- -PYI055.pyi:5:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | str | complex]`. +PYI055.pyi:4:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | str | complex]`. | -5 | w: builtins.type[int] | builtins.type[str] | builtins.type[complex] +2 | from typing import Union +3 | +4 | w: builtins.type[int] | builtins.type[str] | builtins.type[complex] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 -6 | x: type[int] | type[str] | type[float] -7 | y: builtins.type[int] | type[str] | builtins.type[complex] +5 | x: type[int] | type[str] | type[float] +6 | y: builtins.type[int] | type[str] | builtins.type[complex] | -PYI055.pyi:6:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | str | float]`. +PYI055.pyi:5:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | str | float]`. | -5 | w: builtins.type[int] | builtins.type[str] | builtins.type[complex] -6 | x: type[int] | type[str] | type[float] +4 | w: builtins.type[int] | builtins.type[str] | builtins.type[complex] +5 | x: type[int] | type[str] | type[float] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 -7 | y: builtins.type[int] | type[str] | builtins.type[complex] -8 | z: Union[type[float], type[complex]] +6 | y: builtins.type[int] | type[str] | builtins.type[complex] +7 | z: Union[type[float], type[complex]] | -PYI055.pyi:7:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | str | complex]`. +PYI055.pyi:6:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | str | complex]`. | -5 | w: builtins.type[int] | builtins.type[str] | builtins.type[complex] -6 | x: type[int] | type[str] | type[float] -7 | y: builtins.type[int] | type[str] | builtins.type[complex] +4 | w: builtins.type[int] | builtins.type[str] | builtins.type[complex] +5 | x: type[int] | type[str] | type[float] +6 | y: builtins.type[int] | type[str] | builtins.type[complex] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 -8 | z: Union[type[float], type[complex]] -9 | z: Union[type[float, int], type[complex]] +7 | z: Union[type[float], type[complex]] +8 | z: Union[type[float, int], type[complex]] | -PYI055.pyi:8:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[Union[float, complex]]`. +PYI055.pyi:7:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[Union[float, complex]]`. | -6 | x: type[int] | type[str] | type[float] -7 | y: builtins.type[int] | type[str] | builtins.type[complex] -8 | z: Union[type[float], type[complex]] +5 | x: type[int] | type[str] | type[float] +6 | y: builtins.type[int] | type[str] | builtins.type[complex] +7 | z: Union[type[float], type[complex]] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 -9 | z: Union[type[float, int], type[complex]] +8 | z: Union[type[float, int], type[complex]] | -PYI055.pyi:9:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[Union[float, int, complex]]`. - | -7 | y: builtins.type[int] | type[str] | builtins.type[complex] -8 | z: Union[type[float], type[complex]] -9 | z: Union[type[float, int], type[complex]] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 - | - -PYI055.pyi:12:15: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | float]`. +PYI055.pyi:8:4: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[Union[float, int, complex]]`. | -12 | def func(arg: type[int] | str | type[float]) -> None: ... + 6 | y: builtins.type[int] | type[str] | builtins.type[complex] + 7 | z: Union[type[float], type[complex]] + 8 | z: Union[type[float, int], type[complex]] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 + 9 | +10 | def func(arg: type[int] | str | type[float]) -> None: ... + | + +PYI055.pyi:10:15: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[int | float]`. + | + 8 | z: Union[type[float, int], type[complex]] + 9 | +10 | def func(arg: type[int] | str | type[float]) -> None: ... | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 -13 | -14 | # OK +11 | +12 | # OK + | + +PYI055.pyi:20:7: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[requests_mock.Mocker | httpretty]`. + | +19 | # OK +20 | item: type[requests_mock.Mocker] | type[httpretty] = requests_mock.Mocker + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 +21 | +22 | def func(): + | + +PYI055.pyi:24:11: PYI055 Multiple `type` members in a union. Combine them into one, e.g., `type[requests_mock.Mocker | httpretty]`. + | +22 | def func(): +23 | # PYI055 +24 | item: type[requests_mock.Mocker] | type[httpretty] = requests_mock.Mocker + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PYI055 | diff --git a/crates/ruff/src/rules/flake8_pytest_style/mod.rs b/crates/ruff/src/rules/flake8_pytest_style/mod.rs index c36222950e..faa28606eb 100644 --- a/crates/ruff/src/rules/flake8_pytest_style/mod.rs +++ b/crates/ruff/src/rules/flake8_pytest_style/mod.rs @@ -169,6 +169,12 @@ mod tests { Settings::default(), "PT013" )] + #[test_case( + Rule::PytestDuplicateParametrizeTestCases, + Path::new("PT014.py"), + Settings::default(), + "PT014" + )] #[test_case( Rule::PytestAssertAlwaysFalse, Path::new("PT015.py"), @@ -250,6 +256,18 @@ mod tests { Settings::default(), "PT026" )] + #[test_case( + Rule::PytestUnittestRaisesAssertion, + Path::new("PT027_0.py"), + Settings::default(), + "PT027_0" + )] + #[test_case( + Rule::PytestUnittestRaisesAssertion, + Path::new("PT027_1.py"), + Settings::default(), + "PT027_1" + )] fn test_pytest_style( rule_code: Rule, path: &Path, diff --git a/crates/ruff/src/rules/flake8_pytest_style/rules/assertion.rs b/crates/ruff/src/rules/flake8_pytest_style/rules/assertion.rs index dd60425922..7b7407889e 100644 --- a/crates/ruff/src/rules/flake8_pytest_style/rules/assertion.rs +++ b/crates/ruff/src/rules/flake8_pytest_style/rules/assertion.rs @@ -7,12 +7,14 @@ use libcst_native::{ ParenthesizedNode, SimpleStatementLine, SimpleWhitespace, SmallStatement, Statement, TrailingWhitespace, UnaryOperation, }; -use ruff_python_ast::{self as ast, BoolOp, ExceptHandler, Expr, Keyword, Ranged, Stmt, UnaryOp}; use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::Truthiness; use ruff_python_ast::visitor::Visitor; +use ruff_python_ast::{ + self as ast, Arguments, BoolOp, ExceptHandler, Expr, Keyword, Ranged, Stmt, UnaryOp, +}; use ruff_python_ast::{visitor, whitespace}; use ruff_python_codegen::Stylist; use ruff_source_file::Locator; @@ -21,6 +23,7 @@ use crate::autofix::codemods::CodegenStylist; use crate::checkers::ast::Checker; use crate::cst::matchers::match_indented_block; use crate::cst::matchers::match_module; +use crate::importer::ImportRequest; use crate::registry::AsRule; use super::unittest_assert::UnittestAssert; @@ -89,6 +92,9 @@ impl Violation for PytestCompositeAssertion { /// /// Use instead: /// ```python +/// import pytest +/// +/// /// def test_foo(): /// with pytest.raises(ZeroDivisionError) as exc_info: /// 1 / 0 @@ -127,6 +133,9 @@ impl Violation for PytestAssertInExcept { /// /// Use instead: /// ```python +/// import pytest +/// +/// /// def test_foo(): /// if some_condition: /// pytest.fail("some_condition was True") @@ -145,6 +154,36 @@ impl Violation for PytestAssertAlwaysFalse { } } +/// ## What it does +/// Checks for uses of assertion methods from the `unittest` module. +/// +/// ## Why is this bad? +/// To make use of `pytest`'s assertion rewriting, a regular `assert` statement +/// is preferred over `unittest`'s assertion methods. +/// +/// ## Example +/// ```python +/// import unittest +/// +/// +/// class TestFoo(unittest.TestCase): +/// def test_foo(self): +/// self.assertEqual(a, b) +/// ``` +/// +/// Use instead: +/// ```python +/// import unittest +/// +/// +/// class TestFoo(unittest.TestCase): +/// def test_foo(self): +/// assert a == b +/// ``` +/// +/// ## References +/// - [`pytest` documentation: Assertion introspection details](https://docs.pytest.org/en/7.1.x/how-to/assert.html#assertion-introspection-details) + #[violation] pub struct PytestUnittestAssertion { assertion: String, @@ -246,9 +285,8 @@ pub(crate) fn unittest_assertion( if checker.patch(diagnostic.kind.rule()) { // We're converting an expression to a statement, so avoid applying the fix if // the assertion is part of a larger expression. - if checker.semantic().stmt().is_expr_stmt() - && checker.semantic().expr_parent().is_none() - && !checker.semantic().scope().kind.is_lambda() + if checker.semantic().current_statement().is_expr_stmt() + && checker.semantic().current_expression_parent().is_none() && !checker.indexer().comment_ranges().intersects(expr.range()) { if let Ok(stmt) = unittest_assert.generate_assert(args, keywords) { @@ -268,6 +306,186 @@ pub(crate) fn unittest_assertion( } } +/// ## What it does +/// Checks for uses of exception-related assertion methods from the `unittest` +/// module. +/// +/// ## Why is this bad? +/// To enforce the assertion style recommended by `pytest`, `pytest.raises` is +/// preferred over the exception-related assertion methods in `unittest`, like +/// `assertRaises`. +/// +/// ## Example +/// ```python +/// import unittest +/// +/// +/// class TestFoo(unittest.TestCase): +/// def test_foo(self): +/// with self.assertRaises(ValueError): +/// raise ValueError("foo") +/// ``` +/// +/// Use instead: +/// ```python +/// import unittest +/// import pytest +/// +/// +/// class TestFoo(unittest.TestCase): +/// def test_foo(self): +/// with pytest.raises(ValueError): +/// raise ValueError("foo") +/// ``` +/// +/// ## References +/// - [`pytest` documentation: Assertions about expected exceptions](https://docs.pytest.org/en/latest/how-to/assert.html#assertions-about-expected-exceptions) +#[violation] +pub struct PytestUnittestRaisesAssertion { + assertion: String, +} + +impl Violation for PytestUnittestRaisesAssertion { + const AUTOFIX: AutofixKind = AutofixKind::Sometimes; + + #[derive_message_formats] + fn message(&self) -> String { + let PytestUnittestRaisesAssertion { assertion } = self; + format!("Use `pytest.raises` instead of unittest-style `{assertion}`") + } + + fn autofix_title(&self) -> Option { + let PytestUnittestRaisesAssertion { assertion } = self; + Some(format!("Replace `{assertion}` with `pytest.raises`")) + } +} + +/// PT027 +pub(crate) fn unittest_raises_assertion( + checker: &Checker, + call: &ast::ExprCall, +) -> Option { + let Expr::Attribute(ast::ExprAttribute { attr, .. }) = call.func.as_ref() else { + return None; + }; + + if !matches!( + attr.as_str(), + "assertRaises" | "failUnlessRaises" | "assertRaisesRegex" | "assertRaisesRegexp" + ) { + return None; + } + + let mut diagnostic = Diagnostic::new( + PytestUnittestRaisesAssertion { + assertion: attr.to_string(), + }, + call.func.range(), + ); + if checker.patch(diagnostic.kind.rule()) + && !checker.indexer().has_comments(call, checker.locator()) + { + if let Some(args) = to_pytest_raises_args(checker, attr.as_str(), &call.arguments) { + diagnostic.try_set_fix(|| { + let (import_edit, binding) = checker.importer().get_or_import_symbol( + &ImportRequest::import("pytest", "raises"), + call.func.start(), + checker.semantic(), + )?; + let edit = Edit::range_replacement(format!("{binding}({args})"), call.range()); + Ok(Fix::suggested_edits(import_edit, [edit])) + }); + } + } + + Some(diagnostic) +} + +fn to_pytest_raises_args<'a>( + checker: &Checker<'a>, + attr: &str, + arguments: &Arguments, +) -> Option> { + let args = match attr { + "assertRaises" | "failUnlessRaises" => { + match (arguments.args.as_slice(), arguments.keywords.as_slice()) { + // Ex) `assertRaises(Exception)` + ([arg], []) => Cow::Borrowed(checker.locator().slice(arg.range())), + // Ex) `assertRaises(expected_exception=Exception)` + ([], [kwarg]) + if kwarg + .arg + .as_ref() + .is_some_and(|id| id.as_str() == "expected_exception") => + { + Cow::Borrowed(checker.locator().slice(kwarg.value.range())) + } + _ => return None, + } + } + "assertRaisesRegex" | "assertRaisesRegexp" => { + match (arguments.args.as_slice(), arguments.keywords.as_slice()) { + // Ex) `assertRaisesRegex(Exception, regex)` + ([arg1, arg2], []) => Cow::Owned(format!( + "{}, match={}", + checker.locator().slice(arg1.range()), + checker.locator().slice(arg2.range()) + )), + // Ex) `assertRaisesRegex(Exception, expected_regex=regex)` + ([arg], [kwarg]) + if kwarg + .arg + .as_ref() + .is_some_and(|arg| arg.as_str() == "expected_regex") => + { + Cow::Owned(format!( + "{}, match={}", + checker.locator().slice(arg.range()), + checker.locator().slice(kwarg.value.range()) + )) + } + // Ex) `assertRaisesRegex(expected_exception=Exception, expected_regex=regex)` + ([], [kwarg1, kwarg2]) + if kwarg1 + .arg + .as_ref() + .is_some_and(|id| id.as_str() == "expected_exception") + && kwarg2 + .arg + .as_ref() + .is_some_and(|id| id.as_str() == "expected_regex") => + { + Cow::Owned(format!( + "{}, match={}", + checker.locator().slice(kwarg1.value.range()), + checker.locator().slice(kwarg2.value.range()) + )) + } + // Ex) `assertRaisesRegex(expected_regex=regex, expected_exception=Exception)` + ([], [kwarg1, kwarg2]) + if kwarg1 + .arg + .as_ref() + .is_some_and(|id| id.as_str() == "expected_regex") + && kwarg2 + .arg + .as_ref() + .is_some_and(|id| id.as_str() == "expected_exception") => + { + Cow::Owned(format!( + "{}, match={}", + checker.locator().slice(kwarg2.value.range()), + checker.locator().slice(kwarg1.value.range()) + )) + } + _ => return None, + } + } + _ => return None, + }; + Some(args) +} + /// PT015 pub(crate) fn assert_falsy(checker: &mut Checker, stmt: &Stmt, test: &Expr) { if Truthiness::from_expr(test, |id| checker.semantic().is_builtin(id)).is_falsey() { diff --git a/crates/ruff/src/rules/flake8_pytest_style/rules/fixture.rs b/crates/ruff/src/rules/flake8_pytest_style/rules/fixture.rs index 63352d2ffa..ddcd51b388 100644 --- a/crates/ruff/src/rules/flake8_pytest_style/rules/fixture.rs +++ b/crates/ruff/src/rules/flake8_pytest_style/rules/fixture.rs @@ -35,6 +35,9 @@ use super::helpers::{ /// /// ## Example /// ```python +/// import pytest +/// +/// /// @pytest.fixture /// def my_fixture(): /// ... @@ -42,6 +45,9 @@ use super::helpers::{ /// /// Use instead: /// ```python +/// import pytest +/// +/// /// @pytest.fixture() /// def my_fixture(): /// ... @@ -74,6 +80,35 @@ impl AlwaysAutofixableViolation for PytestFixtureIncorrectParenthesesStyle { } } +/// ## What it does +/// Checks for `pytest.fixture` calls with positional arguments. +/// +/// ## Why is this bad? +/// For clarity and consistency, prefer using keyword arguments to specify +/// fixture configuration. +/// +/// ## Example +/// ```python +/// import pytest +/// +/// +/// @pytest.fixture("module") +/// def my_fixture(): +/// ... +/// ``` +/// +/// Use instead: +/// ```python +/// import pytest +/// +/// +/// @pytest.fixture(scope="module") +/// def my_fixture(): +/// ... +/// ``` +/// +/// ## References +/// - [`pytest` documentation: `@pytest.fixture` functions](https://docs.pytest.org/en/latest/reference/reference.html#pytest-fixture) #[violation] pub struct PytestFixturePositionalArgs { function: String, @@ -87,6 +122,34 @@ impl Violation for PytestFixturePositionalArgs { } } +/// ## What it does +/// Checks for `pytest.fixture` calls with `scope="function"`. +/// +/// ## Why is this bad? +/// `scope="function"` can be omitted, as it is the default. +/// +/// ## Example +/// ```python +/// import pytest +/// +/// +/// @pytest.fixture(scope="function") +/// def my_fixture(): +/// ... +/// ``` +/// +/// Use instead: +/// ```python +/// import pytest +/// +/// +/// @pytest.fixture() +/// def my_fixture(): +/// ... +/// ``` +/// +/// ## References +/// - [`pytest` documentation: `@pytest.fixture` functions](https://docs.pytest.org/en/latest/reference/reference.html#pytest-fixture) #[violation] pub struct PytestExtraneousScopeFunction; @@ -101,6 +164,50 @@ impl AlwaysAutofixableViolation for PytestExtraneousScopeFunction { } } +/// ## What it does +/// Checks for `pytest` fixtures that do not return a value, but are not named +/// with a leading underscore. +/// +/// ## Why is this bad? +/// By convention, fixtures that don't return a value should be named with a +/// leading underscore, while fixtures that do return a value should not. +/// +/// This rule ignores abstract fixtures and generators. +/// +/// ## Example +/// ```python +/// import pytest +/// +/// +/// @pytest.fixture() +/// def patch_something(mocker): +/// mocker.patch("module.object") +/// +/// +/// @pytest.fixture() +/// def use_context(): +/// with create_context(): +/// yield +/// ``` +/// +/// Use instead: +/// ```python +/// import pytest +/// +/// +/// @pytest.fixture() +/// def _patch_something(mocker): +/// mocker.patch("module.object") +/// +/// +/// @pytest.fixture() +/// def _use_context(): +/// with create_context(): +/// yield +/// ``` +/// +/// ## References +/// - [`pytest` documentation: `@pytest.fixture` functions](https://docs.pytest.org/en/latest/reference/reference.html#pytest-fixture) #[violation] pub struct PytestMissingFixtureNameUnderscore { function: String, @@ -114,6 +221,52 @@ impl Violation for PytestMissingFixtureNameUnderscore { } } +/// ## What it does +/// Checks for `pytest` fixtures that return a value, but are named with a +/// leading underscore. +/// +/// ## Why is this bad? +/// By convention, fixtures that don't return a value should be named with a +/// leading underscore, while fixtures that do return a value should not. +/// +/// This rule ignores abstract fixtures. +/// +/// ## Example +/// ```python +/// import pytest +/// +/// +/// @pytest.fixture() +/// def _some_object(): +/// return SomeClass() +/// +/// +/// @pytest.fixture() +/// def _some_object_with_cleanup(): +/// obj = SomeClass() +/// yield obj +/// obj.cleanup() +/// ``` +/// +/// Use instead: +/// ```python +/// import pytest +/// +/// +/// @pytest.fixture() +/// def some_object(): +/// return SomeClass() +/// +/// +/// @pytest.fixture() +/// def some_object_with_cleanup(): +/// obj = SomeClass() +/// yield obj +/// obj.cleanup() +/// ``` +/// +/// ## References +/// - [`pytest` documentation: `@pytest.fixture` functions](https://docs.pytest.org/en/latest/reference/reference.html#pytest-fixture) #[violation] pub struct PytestIncorrectFixtureNameUnderscore { function: String, @@ -145,6 +298,9 @@ impl Violation for PytestIncorrectFixtureNameUnderscore { /// /// ## Example /// ```python +/// import pytest +/// +/// /// @pytest.fixture /// def _patch_something(): /// ... @@ -156,6 +312,9 @@ impl Violation for PytestIncorrectFixtureNameUnderscore { /// /// Use instead: /// ```python +/// import pytest +/// +/// /// @pytest.fixture /// def _patch_something(): /// ... @@ -239,6 +398,9 @@ impl Violation for PytestDeprecatedYieldFixture { /// /// ## Example /// ```python +/// import pytest +/// +/// /// @pytest.fixture() /// def my_fixture(request): /// resource = acquire_resource() @@ -248,6 +410,9 @@ impl Violation for PytestDeprecatedYieldFixture { /// /// Use instead: /// ```python +/// import pytest +/// +/// /// @pytest.fixture() /// def my_fixture(): /// resource = acquire_resource() @@ -288,6 +453,9 @@ impl Violation for PytestFixtureFinalizerCallback { /// /// ## Example /// ```python +/// import pytest +/// +/// /// @pytest.fixture() /// def my_fixture(): /// resource = acquire_resource() @@ -296,6 +464,9 @@ impl Violation for PytestFixtureFinalizerCallback { /// /// Use instead: /// ```python +/// import pytest +/// +/// /// @pytest.fixture() /// def my_fixture_with_teardown(): /// resource = acquire_resource() @@ -337,6 +508,9 @@ impl AlwaysAutofixableViolation for PytestUselessYieldFixture { /// /// ## Example /// ```python +/// import pytest +/// +/// /// @pytest.fixture() /// def a(): /// pass @@ -350,6 +524,9 @@ impl AlwaysAutofixableViolation for PytestUselessYieldFixture { /// /// Use instead: /// ```python +/// import pytest +/// +/// /// @pytest.fixture() /// def a(): /// pass @@ -384,6 +561,9 @@ impl AlwaysAutofixableViolation for PytestErroneousUseFixturesOnFixture { /// /// ## Example /// ```python +/// import pytest +/// +/// /// @pytest.mark.asyncio() /// @pytest.fixture() /// async def my_fixture(): @@ -392,6 +572,9 @@ impl AlwaysAutofixableViolation for PytestErroneousUseFixturesOnFixture { /// /// Use instead: /// ```python +/// import pytest +/// +/// /// @pytest.fixture() /// async def my_fixture(): /// return 0 @@ -448,7 +631,7 @@ where self.has_return_with_value = true; } } - Stmt::FunctionDef(_) | Stmt::AsyncFunctionDef(_) => {} + Stmt::FunctionDef(_) => {} _ => visitor::walk_stmt(self, stmt), } } diff --git a/crates/ruff/src/rules/flake8_pytest_style/rules/helpers.rs b/crates/ruff/src/rules/flake8_pytest_style/rules/helpers.rs index bd32a61725..43a183267f 100644 --- a/crates/ruff/src/rules/flake8_pytest_style/rules/helpers.rs +++ b/crates/ruff/src/rules/flake8_pytest_style/rules/helpers.rs @@ -46,11 +46,11 @@ pub(super) fn is_pytest_parametrize(decorator: &Decorator, semantic: &SemanticMo pub(super) fn keyword_is_literal(keyword: &Keyword, literal: &str) -> bool { if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(string), + value: Constant::Str(ast::StringConstant { value, .. }), .. }) = &keyword.value { - string == literal + value == literal } else { false } @@ -63,7 +63,7 @@ pub(super) fn is_empty_or_null_string(expr: &Expr) -> bool { .. }) => string.is_empty(), Expr::Constant(constant) if constant.value.is_none() => true, - Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { + Expr::FString(ast::ExprFString { values, .. }) => { values.iter().all(is_empty_or_null_string) } _ => false, diff --git a/crates/ruff/src/rules/flake8_pytest_style/rules/marks.rs b/crates/ruff/src/rules/flake8_pytest_style/rules/marks.rs index 88f49d1702..7a26b7ff2a 100644 --- a/crates/ruff/src/rules/flake8_pytest_style/rules/marks.rs +++ b/crates/ruff/src/rules/flake8_pytest_style/rules/marks.rs @@ -23,6 +23,9 @@ use super::helpers::get_mark_decorators; /// /// ## Example /// ```python +/// import pytest +/// +/// /// @pytest.mark.foo /// def test_something(): /// ... @@ -30,6 +33,9 @@ use super::helpers::get_mark_decorators; /// /// Use instead: /// ```python +/// import pytest +/// +/// /// @pytest.mark.foo() /// def test_something(): /// ... @@ -76,6 +82,9 @@ impl AlwaysAutofixableViolation for PytestIncorrectMarkParenthesesStyle { /// /// ## Example /// ```python +/// import pytest +/// +/// /// @pytest.mark.usefixtures() /// def test_something(): /// ... diff --git a/crates/ruff/src/rules/flake8_pytest_style/rules/parametrize.rs b/crates/ruff/src/rules/flake8_pytest_style/rules/parametrize.rs index e42a3d9550..9165aef160 100644 --- a/crates/ruff/src/rules/flake8_pytest_style/rules/parametrize.rs +++ b/crates/ruff/src/rules/flake8_pytest_style/rules/parametrize.rs @@ -1,3 +1,6 @@ +use rustc_hash::FxHashMap; +use std::hash::BuildHasherDefault; + use ruff_python_ast::{ self as ast, Arguments, Constant, Decorator, Expr, ExprContext, PySourceType, Ranged, }; @@ -6,6 +9,7 @@ use ruff_text_size::TextRange; use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::comparable::ComparableExpr; use ruff_python_codegen::Generator; use ruff_source_file::Locator; @@ -15,6 +19,58 @@ use crate::registry::{AsRule, Rule}; use super::super::types; use super::helpers::{is_pytest_parametrize, split_names}; +/// ## What it does +/// Checks for the type of parameter names passed to `pytest.mark.parametrize`. +/// +/// ## Why is this bad? +/// The `argnames` argument of `pytest.mark.parametrize` takes a string or +/// a sequence of strings. For a single parameter, it's preferable to use a +/// string, and for multiple parameters, it's preferable to use the style +/// configured via the `flake8-pytest-style.parametrize-names-type` setting. +/// +/// ## Example +/// ```python +/// import pytest +/// +/// +/// # single parameter, always expecting string +/// @pytest.mark.parametrize(("param",), [1, 2, 3]) +/// def test_foo(param): +/// ... +/// +/// +/// # multiple parameters, expecting tuple +/// @pytest.mark.parametrize(["param1", "param2"], [(1, 2), (3, 4)]) +/// def test_bar(param1, param2): +/// ... +/// +/// +/// # multiple parameters, expecting tuple +/// @pytest.mark.parametrize("param1,param2", [(1, 2), (3, 4)]) +/// def test_baz(param1, param2): +/// ... +/// ``` +/// +/// Use instead: +/// ```python +/// import pytest +/// +/// +/// @pytest.mark.parametrize("param", [1, 2, 3]) +/// def test_foo(param): +/// ... +/// +/// +/// @pytest.mark.parametrize(("param1", "param2"), [(1, 2), (3, 4)]) +/// def test_bar(param1, param2): +/// ... +/// ``` +/// +/// ## Options +/// - `flake8-pytest-style.parametrize-names-type` +/// +/// ## References +/// - [`pytest` documentation: How to parametrize fixtures and test functions](https://docs.pytest.org/en/latest/how-to/parametrize.html#pytest-mark-parametrize) #[violation] pub struct PytestParametrizeNamesWrongType { pub expected: types::ParametrizeNameType, @@ -35,6 +91,71 @@ impl Violation for PytestParametrizeNamesWrongType { } } +/// ## What it does +/// Checks for the type of parameter values passed to `pytest.mark.parametrize`. +/// +/// ## Why is this bad? +/// The `argvalues` argument of `pytest.mark.parametrize` takes an iterator of +/// parameter values. For a single parameter, it's preferable to use a list, +/// and for multiple parameters, it's preferable to use a list of rows with +/// the type configured via the `flake8-pytest-style.parametrize-values-row-type` +/// setting. +/// +/// ## Example +/// ```python +/// import pytest +/// +/// +/// # expected list, got tuple +/// @pytest.mark.parametrize("param", (1, 2)) +/// def test_foo(param): +/// ... +/// +/// +/// # expected top-level list, got tuple +/// @pytest.mark.parametrize( +/// ("param1", "param2"), +/// ( +/// (1, 2), +/// (3, 4), +/// ), +/// ) +/// def test_bar(param1, param2): +/// ... +/// +/// +/// # expected individual rows to be tuples, got lists +/// @pytest.mark.parametrize( +/// ("param1", "param2"), +/// [ +/// [1, 2], +/// [3, 4], +/// ], +/// ) +/// def test_baz(param1, param2): +/// ... +/// ``` +/// +/// Use instead: +/// ```python +/// import pytest +/// +/// +/// @pytest.mark.parametrize("param", [1, 2, 3]) +/// def test_foo(param): +/// ... +/// +/// +/// @pytest.mark.parametrize(("param1", "param2"), [(1, 2), (3, 4)]) +/// def test_bar(param1, param2): +/// ... +/// ``` +/// +/// ## Options +/// - `flake8-pytest-style.parametrize-values-row-type` +/// +/// ## References +/// - [`pytest` documentation: How to parametrize fixtures and test functions](https://docs.pytest.org/en/latest/how-to/parametrize.html#pytest-mark-parametrize) #[violation] pub struct PytestParametrizeValuesWrongType { pub values: types::ParametrizeValuesType, @@ -49,10 +170,62 @@ impl Violation for PytestParametrizeValuesWrongType { } } +/// ## What it does +/// Checks for duplicate test cases in `pytest.mark.parametrize`. +/// +/// ## Why is this bad? +/// Duplicate test cases are redundant and should be removed. +/// +/// ## Example +/// ```python +/// import pytest +/// +/// +/// @pytest.mark.parametrize( +/// ("param1", "param2"), +/// [ +/// (1, 2), +/// (1, 2), +/// ], +/// ) +/// def test_foo(param1, param2): +/// ... +/// ``` +/// +/// Use instead: +/// ```python +/// import pytest +/// +/// +/// @pytest.mark.parametrize( +/// ("param1", "param2"), +/// [ +/// (1, 2), +/// ], +/// ) +/// def test_foo(param1, param2): +/// ... +/// ``` +/// +/// ## References +/// - [`pytest` documentation: How to parametrize fixtures and test functions](https://docs.pytest.org/en/latest/how-to/parametrize.html#pytest-mark-parametrize) +#[violation] +pub struct PytestDuplicateParametrizeTestCases { + index: usize, +} + +impl Violation for PytestDuplicateParametrizeTestCases { + #[derive_message_formats] + fn message(&self) -> String { + let PytestDuplicateParametrizeTestCases { index } = self; + format!("Duplicate of test case at index {index} in `@pytest_mark.parametrize`") + } +} + fn elts_to_csv(elts: &[Expr], generator: Generator) -> Option { - let all_literals = elts.iter().all(|e| { + let all_literals = elts.iter().all(|expr| { matches!( - e, + expr, Expr::Constant(ast::ExprConstant { value: Constant::Str(_), .. @@ -65,19 +238,23 @@ fn elts_to_csv(elts: &[Expr], generator: Generator) -> Option { } let node = Expr::Constant(ast::ExprConstant { - value: Constant::Str(elts.iter().fold(String::new(), |mut acc, elt| { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(ref s), - .. - }) = elt - { - if !acc.is_empty() { - acc.push(','); + value: elts + .iter() + .fold(String::new(), |mut acc, elt| { + if let Expr::Constant(ast::ExprConstant { + value: Constant::Str(ast::StringConstant { value, .. }), + .. + }) = elt + { + if !acc.is_empty() { + acc.push(','); + } + acc.push_str(value.as_str()); } - acc.push_str(s); - } - acc - })), + acc + }) + .into(), + kind: None, range: TextRange::default(), }); @@ -166,7 +343,7 @@ fn check_names(checker: &mut Checker, decorator: &Decorator, expr: &Expr) { .iter() .map(|name| { Expr::Constant(ast::ExprConstant { - value: Constant::Str((*name).to_string()), + value: (*name).to_string().into(), kind: None, range: TextRange::default(), }) @@ -201,7 +378,7 @@ fn check_names(checker: &mut Checker, decorator: &Decorator, expr: &Expr) { .iter() .map(|name| { Expr::Constant(ast::ExprConstant { - value: Constant::Str((*name).to_string()), + value: (*name).to_string().into(), kind: None, range: TextRange::default(), }) @@ -351,6 +528,7 @@ fn check_values(checker: &mut Checker, names: &Expr, values: &Expr) { values.range(), )); } + if is_multi_named { handle_value_rows(checker, elts, values_type, values_row_type); } @@ -373,6 +551,29 @@ fn check_values(checker: &mut Checker, names: &Expr, values: &Expr) { } } +/// PT014 +fn check_duplicates(checker: &mut Checker, values: &Expr) { + let (Expr::List(ast::ExprList { elts, .. }) | Expr::Tuple(ast::ExprTuple { elts, .. })) = + values + else { + return; + }; + + let mut seen: FxHashMap = + FxHashMap::with_capacity_and_hasher(elts.len(), BuildHasherDefault::default()); + for (index, elt) in elts.iter().enumerate() { + let expr = ComparableExpr::from(elt); + seen.entry(expr) + .and_modify(|index| { + checker.diagnostics.push(Diagnostic::new( + PytestDuplicateParametrizeTestCases { index: *index }, + elt.range(), + )); + }) + .or_insert(index); + } +} + fn handle_single_name(checker: &mut Checker, expr: &Expr, value: &Expr) { let mut diagnostic = Diagnostic::new( PytestParametrizeNamesWrongType { @@ -446,6 +647,11 @@ pub(crate) fn parametrize(checker: &mut Checker, decorators: &[Decorator]) { } } } + if checker.enabled(Rule::PytestDuplicateParametrizeTestCases) { + if let [_, values, ..] = &args[..] { + check_duplicates(checker, values); + } + } } } } diff --git a/crates/ruff/src/rules/flake8_pytest_style/rules/patch.rs b/crates/ruff/src/rules/flake8_pytest_style/rules/patch.rs index fd6f108276..cfd9e7d8d3 100644 --- a/crates/ruff/src/rules/flake8_pytest_style/rules/patch.rs +++ b/crates/ruff/src/rules/flake8_pytest_style/rules/patch.rs @@ -5,6 +5,39 @@ use ruff_python_ast::visitor; use ruff_python_ast::visitor::Visitor; use ruff_python_ast::{self as ast, Expr, Parameters, Ranged}; +/// ## What it does +/// Checks for mocked calls that use a dummy `lambda` function instead of +/// `return_value`. +/// +/// ## Why is this bad? +/// When patching calls, an explicit `return_value` better conveys the intent +/// than a `lambda` function, assuming the `lambda` does not use the arguments +/// passed to it. +/// +/// `return_value` is also robust to changes in the patched function's +/// signature, and enables additional assertions to verify behavior. For +/// example, `return_value` allows for verification of the number of calls or +/// the arguments passed to the patched function via `assert_called_once_with` +/// and related methods. +/// +/// ## Example +/// ```python +/// def test_foo(mocker): +/// mocker.patch("module.target", lambda x, y: 7) +/// ``` +/// +/// Use instead: +/// ```python +/// def test_foo(mocker): +/// mocker.patch("module.target", return_value=7) +/// +/// # If the lambda makes use of the arguments, no diagnostic is emitted. +/// mocker.patch("module.other_target", lambda x, y: x) +/// ``` +/// +/// ## References +/// - [Python documentation: `unittest.mock.patch`](https://docs.python.org/3/library/unittest.mock.html#unittest.mock.patch) +/// - [`pytest-mock`](https://pypi.org/project/pytest-mock/) #[violation] pub struct PytestPatchWithLambda; diff --git a/crates/ruff/src/rules/flake8_pytest_style/rules/raises.rs b/crates/ruff/src/rules/flake8_pytest_style/rules/raises.rs index dae4157ab7..759cba2659 100644 --- a/crates/ruff/src/rules/flake8_pytest_style/rules/raises.rs +++ b/crates/ruff/src/rules/flake8_pytest_style/rules/raises.rs @@ -11,6 +11,41 @@ use crate::registry::Rule; use super::helpers::is_empty_or_null_string; +/// ## What it does +/// Checks for `pytest.raises` context managers with multiple statements. +/// +/// ## Why is this bad? +/// When a `pytest.raises` is used as a context manager and contains multiple +/// statements, it can lead to the test passing when it actually should fail. +/// To avoid this, a `pytest.raises` context manager should only contain +/// a single simple statement that raises the expected exception. +/// +/// ## Example +/// ```python +/// import pytest +/// +/// +/// def test_foo(): +/// with pytest.raises(MyError): +/// setup() # may raise `MyError` +/// func_to_test() +/// assert foo() # not executed +/// ``` +/// +/// Use instead: +/// ```python +/// import pytest +/// +/// +/// def test_foo(): +/// setup() +/// with pytest.raises(MyException): +/// func_to_test() +/// assert foo() +/// ``` +/// +/// ## References +/// - [`pytest` documentation: `pytest.raises`](https://docs.pytest.org/en/latest/reference/reference.html#pytest-raises) #[violation] pub struct PytestRaisesWithMultipleStatements; @@ -21,6 +56,47 @@ impl Violation for PytestRaisesWithMultipleStatements { } } +/// ## What it does +/// Checks for `pytest.raises` calls without a `match` parameter. +/// +/// ## Why is this bad? +/// `pytest.raises(Error)` will catch any `Error` and may catch errors that are +/// unrelated to the code under test. To avoid this, `pytest.raises` should be +/// called with a `match` parameter. The exception names that require a `match` +/// parameter can be configured via the +/// `flake8-pytest-style.raises-require-match-for` and +/// `flake8-pytest-style.raises-extend-require-match-for` settings. +/// +/// ## Example +/// ```python +/// import pytest +/// +/// +/// def test_foo(): +/// with pytest.raises(ValueError): +/// ... +/// +/// # empty string is also an error +/// with pytest.raises(ValueError, match=""): +/// ... +/// ``` +/// +/// Use instead: +/// ```python +/// import pytest +/// +/// +/// def test_foo(): +/// with pytest.raises(ValueError, match="expected message"): +/// ... +/// ``` +/// +/// ## Options +/// - `flake8-pytest-style.raises-require-match-for` +/// - `flake8-pytest-style.raises-extend-require-match-for` +/// +/// ## References +/// - [`pytest` documentation: `pytest.raises`](https://docs.pytest.org/en/latest/reference/reference.html#pytest-raises) #[violation] pub struct PytestRaisesTooBroad { exception: String, @@ -131,12 +207,9 @@ pub(crate) fn complex_raises( if raises_called { let is_too_complex = if let [stmt] = body { match stmt { - Stmt::With(ast::StmtWith { body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) => { - is_non_trivial_with_body(body) - } + Stmt::With(ast::StmtWith { body, .. }) => is_non_trivial_with_body(body), // Allow function and class definitions to test decorators - Stmt::ClassDef(_) | Stmt::FunctionDef(_) | Stmt::AsyncFunctionDef(_) => false, + Stmt::ClassDef(_) | Stmt::FunctionDef(_) => false, stmt => is_compound_statement(stmt), } } else { diff --git a/crates/ruff/src/rules/flake8_pytest_style/rules/unittest_assert.rs b/crates/ruff/src/rules/flake8_pytest_style/rules/unittest_assert.rs index 52274ab22c..49c78e10d4 100644 --- a/crates/ruff/src/rules/flake8_pytest_style/rules/unittest_assert.rs +++ b/crates/ruff/src/rules/flake8_pytest_style/rules/unittest_assert.rs @@ -19,6 +19,13 @@ pub(crate) enum UnittestAssert { DictEqual, Equal, Equals, + FailIf, + FailIfAlmostEqual, + FailIfEqual, + FailUnless, + FailUnlessAlmostEqual, + FailUnlessEqual, + // FailUnlessRaises, False, Greater, GreaterEqual, @@ -62,10 +69,16 @@ impl std::fmt::Display for UnittestAssert { UnittestAssert::AlmostEqual => write!(f, "assertAlmostEqual"), UnittestAssert::AlmostEquals => write!(f, "assertAlmostEquals"), UnittestAssert::CountEqual => write!(f, "assertCountEqual"), - UnittestAssert::DictEqual => write!(f, "assertDictEqual"), UnittestAssert::DictContainsSubset => write!(f, "assertDictContainsSubset"), + UnittestAssert::DictEqual => write!(f, "assertDictEqual"), UnittestAssert::Equal => write!(f, "assertEqual"), UnittestAssert::Equals => write!(f, "assertEquals"), + UnittestAssert::FailIf => write!(f, "failIf"), + UnittestAssert::FailIfAlmostEqual => write!(f, "failIfAlmostEqual"), + UnittestAssert::FailIfEqual => write!(f, "failIfEqual"), + UnittestAssert::FailUnless => write!(f, "failUnless"), + UnittestAssert::FailUnlessAlmostEqual => write!(f, "failUnlessAlmostEqual"), + UnittestAssert::FailUnlessEqual => write!(f, "failUnlessEqual"), UnittestAssert::False => write!(f, "assertFalse"), UnittestAssert::Greater => write!(f, "assertGreater"), UnittestAssert::GreaterEqual => write!(f, "assertGreaterEqual"), @@ -110,6 +123,12 @@ impl TryFrom<&str> for UnittestAssert { "assertDictEqual" => Ok(UnittestAssert::DictEqual), "assertEqual" => Ok(UnittestAssert::Equal), "assertEquals" => Ok(UnittestAssert::Equals), + "failIf" => Ok(UnittestAssert::FailIf), + "failIfAlmostEqual" => Ok(UnittestAssert::FailIfAlmostEqual), + "failIfEqual" => Ok(UnittestAssert::FailIfEqual), + "failUnless" => Ok(UnittestAssert::FailUnless), + "failUnlessAlmostEqual" => Ok(UnittestAssert::FailUnlessAlmostEqual), + "failUnlessEqual" => Ok(UnittestAssert::FailUnlessEqual), "assertFalse" => Ok(UnittestAssert::False), "assertGreater" => Ok(UnittestAssert::Greater), "assertGreaterEqual" => Ok(UnittestAssert::GreaterEqual), @@ -198,6 +217,12 @@ impl UnittestAssert { UnittestAssert::True => &["expr", "msg"], UnittestAssert::TupleEqual => &["first", "second", "msg"], UnittestAssert::Underscore => &["expr", "msg"], + UnittestAssert::FailIf => &["expr", "msg"], + UnittestAssert::FailIfAlmostEqual => &["first", "second", "msg"], + UnittestAssert::FailIfEqual => &["first", "second", "msg"], + UnittestAssert::FailUnless => &["expr", "msg"], + UnittestAssert::FailUnlessAlmostEqual => &["first", "second", "places", "msg", "delta"], + UnittestAssert::FailUnlessEqual => &["first", "second", "places", "msg", "delta"], } } @@ -257,28 +282,35 @@ impl UnittestAssert { pub(crate) fn generate_assert(self, args: &[Expr], keywords: &[Keyword]) -> Result { let args = self.args_map(args, keywords)?; match self { - UnittestAssert::True | UnittestAssert::False => { + UnittestAssert::True + | UnittestAssert::False + | UnittestAssert::FailUnless + | UnittestAssert::FailIf => { let expr = *args .get("expr") .ok_or_else(|| anyhow!("Missing argument `expr`"))?; let msg = args.get("msg").copied(); - Ok(if matches!(self, UnittestAssert::False) { - assert( - &Expr::UnaryOp(ast::ExprUnaryOp { - op: UnaryOp::Not, - operand: Box::new(expr.clone()), - range: TextRange::default(), - }), - msg, - ) - } else { - assert(expr, msg) - }) + Ok( + if matches!(self, UnittestAssert::False | UnittestAssert::FailIf) { + assert( + &Expr::UnaryOp(ast::ExprUnaryOp { + op: UnaryOp::Not, + operand: Box::new(expr.clone()), + range: TextRange::default(), + }), + msg, + ) + } else { + assert(expr, msg) + }, + ) } UnittestAssert::Equal | UnittestAssert::Equals + | UnittestAssert::FailUnlessEqual | UnittestAssert::NotEqual | UnittestAssert::NotEquals + | UnittestAssert::FailIfEqual | UnittestAssert::Greater | UnittestAssert::GreaterEqual | UnittestAssert::Less @@ -293,8 +325,12 @@ impl UnittestAssert { .ok_or_else(|| anyhow!("Missing argument `second`"))?; let msg = args.get("msg").copied(); let cmp_op = match self { - UnittestAssert::Equal | UnittestAssert::Equals => CmpOp::Eq, - UnittestAssert::NotEqual | UnittestAssert::NotEquals => CmpOp::NotEq, + UnittestAssert::Equal + | UnittestAssert::Equals + | UnittestAssert::FailUnlessEqual => CmpOp::Eq, + UnittestAssert::NotEqual + | UnittestAssert::NotEquals + | UnittestAssert::FailIfEqual => CmpOp::NotEq, UnittestAssert::Greater => CmpOp::Gt, UnittestAssert::GreaterEqual => CmpOp::GtE, UnittestAssert::Less => CmpOp::Lt, diff --git a/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT009.snap b/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT009.snap index be4c1bb726..ff04ae6a49 100644 --- a/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT009.snap +++ b/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT009.snap @@ -548,6 +548,8 @@ PT009.py:82:9: PT009 [*] Use a regular `assert` instead of unittest-style `asser 81 | def test_assert_not_regexp_matches(self): 82 | self.assertNotRegex("abc", r"abc") # Error | ^^^^^^^^^^^^^^^^^^^ PT009 +83 | +84 | def test_fail_if(self): | = help: Replace `assertNotRegex(...)` with `assert ...` @@ -557,5 +559,83 @@ PT009.py:82:9: PT009 [*] Use a regular `assert` instead of unittest-style `asser 81 81 | def test_assert_not_regexp_matches(self): 82 |- self.assertNotRegex("abc", r"abc") # Error 82 |+ assert not re.search("abc", "abc") # Error +83 83 | +84 84 | def test_fail_if(self): +85 85 | self.failIf("abc") # Error + +PT009.py:85:9: PT009 [*] Use a regular `assert` instead of unittest-style `failIf` + | +84 | def test_fail_if(self): +85 | self.failIf("abc") # Error + | ^^^^^^^^^^^ PT009 +86 | +87 | def test_fail_unless(self): + | + = help: Replace `failIf(...)` with `assert ...` + +ℹ Suggested fix +82 82 | self.assertNotRegex("abc", r"abc") # Error +83 83 | +84 84 | def test_fail_if(self): +85 |- self.failIf("abc") # Error + 85 |+ assert not "abc" # Error +86 86 | +87 87 | def test_fail_unless(self): +88 88 | self.failUnless("abc") # Error + +PT009.py:88:9: PT009 [*] Use a regular `assert` instead of unittest-style `failUnless` + | +87 | def test_fail_unless(self): +88 | self.failUnless("abc") # Error + | ^^^^^^^^^^^^^^^ PT009 +89 | +90 | def test_fail_unless_equal(self): + | + = help: Replace `failUnless(...)` with `assert ...` + +ℹ Suggested fix +85 85 | self.failIf("abc") # Error +86 86 | +87 87 | def test_fail_unless(self): +88 |- self.failUnless("abc") # Error + 88 |+ assert "abc" # Error +89 89 | +90 90 | def test_fail_unless_equal(self): +91 91 | self.failUnlessEqual(1, 2) # Error + +PT009.py:91:9: PT009 [*] Use a regular `assert` instead of unittest-style `failUnlessEqual` + | +90 | def test_fail_unless_equal(self): +91 | self.failUnlessEqual(1, 2) # Error + | ^^^^^^^^^^^^^^^^^^^^ PT009 +92 | +93 | def test_fail_if_equal(self): + | + = help: Replace `failUnlessEqual(...)` with `assert ...` + +ℹ Suggested fix +88 88 | self.failUnless("abc") # Error +89 89 | +90 90 | def test_fail_unless_equal(self): +91 |- self.failUnlessEqual(1, 2) # Error + 91 |+ assert 1 == 2 # Error +92 92 | +93 93 | def test_fail_if_equal(self): +94 94 | self.failIfEqual(1, 2) # Error + +PT009.py:94:9: PT009 [*] Use a regular `assert` instead of unittest-style `failIfEqual` + | +93 | def test_fail_if_equal(self): +94 | self.failIfEqual(1, 2) # Error + | ^^^^^^^^^^^^^^^^ PT009 + | + = help: Replace `failIfEqual(...)` with `assert ...` + +ℹ Suggested fix +91 91 | self.failUnlessEqual(1, 2) # Error +92 92 | +93 93 | def test_fail_if_equal(self): +94 |- self.failIfEqual(1, 2) # Error + 94 |+ assert 1 != 2 # Error diff --git a/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT014.snap b/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT014.snap new file mode 100644 index 0000000000..45369f5551 --- /dev/null +++ b/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT014.snap @@ -0,0 +1,44 @@ +--- +source: crates/ruff/src/rules/flake8_pytest_style/mod.rs +--- +PT014.py:4:35: PT014 Duplicate of test case at index 0 in `@pytest_mark.parametrize` + | +4 | @pytest.mark.parametrize("x", [1, 1, 2]) + | ^ PT014 +5 | def test_error_literal(x): +6 | ... + | + +PT014.py:14:35: PT014 Duplicate of test case at index 0 in `@pytest_mark.parametrize` + | +14 | @pytest.mark.parametrize("x", [a, a, b, b, b, c]) + | ^ PT014 +15 | def test_error_expr_simple(x): +16 | ... + | + +PT014.py:14:41: PT014 Duplicate of test case at index 2 in `@pytest_mark.parametrize` + | +14 | @pytest.mark.parametrize("x", [a, a, b, b, b, c]) + | ^ PT014 +15 | def test_error_expr_simple(x): +16 | ... + | + +PT014.py:14:44: PT014 Duplicate of test case at index 2 in `@pytest_mark.parametrize` + | +14 | @pytest.mark.parametrize("x", [a, a, b, b, b, c]) + | ^ PT014 +15 | def test_error_expr_simple(x): +16 | ... + | + +PT014.py:19:40: PT014 Duplicate of test case at index 0 in `@pytest_mark.parametrize` + | +19 | @pytest.mark.parametrize("x", [(a, b), (a, b), (b, c)]) + | ^^^^^^ PT014 +20 | def test_error_expr_complex(x): +21 | ... + | + + diff --git a/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT027_0.snap b/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT027_0.snap new file mode 100644 index 0000000000..8ac1da881c --- /dev/null +++ b/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT027_0.snap @@ -0,0 +1,248 @@ +--- +source: crates/ruff/src/rules/flake8_pytest_style/mod.rs +--- +PT027_0.py:6:14: PT027 [*] Use `pytest.raises` instead of unittest-style `assertRaises` + | +4 | class Test(unittest.TestCase): +5 | def test_errors(self): +6 | with self.assertRaises(ValueError): + | ^^^^^^^^^^^^^^^^^ PT027 +7 | raise ValueError +8 | with self.assertRaises(expected_exception=ValueError): + | + = help: Replace `assertRaises` with `pytest.raises` + +ℹ Suggested fix +1 1 | import unittest + 2 |+import pytest +2 3 | +3 4 | +4 5 | class Test(unittest.TestCase): +5 6 | def test_errors(self): +6 |- with self.assertRaises(ValueError): + 7 |+ with pytest.raises(ValueError): +7 8 | raise ValueError +8 9 | with self.assertRaises(expected_exception=ValueError): +9 10 | raise ValueError + +PT027_0.py:8:14: PT027 [*] Use `pytest.raises` instead of unittest-style `assertRaises` + | +6 | with self.assertRaises(ValueError): +7 | raise ValueError +8 | with self.assertRaises(expected_exception=ValueError): + | ^^^^^^^^^^^^^^^^^ PT027 +9 | raise ValueError + | + = help: Replace `assertRaises` with `pytest.raises` + +ℹ Suggested fix +1 1 | import unittest + 2 |+import pytest +2 3 | +3 4 | +4 5 | class Test(unittest.TestCase): +5 6 | def test_errors(self): +6 7 | with self.assertRaises(ValueError): +7 8 | raise ValueError +8 |- with self.assertRaises(expected_exception=ValueError): + 9 |+ with pytest.raises(ValueError): +9 10 | raise ValueError +10 11 | +11 12 | with self.failUnlessRaises(ValueError): + +PT027_0.py:11:14: PT027 [*] Use `pytest.raises` instead of unittest-style `failUnlessRaises` + | + 9 | raise ValueError +10 | +11 | with self.failUnlessRaises(ValueError): + | ^^^^^^^^^^^^^^^^^^^^^ PT027 +12 | raise ValueError + | + = help: Replace `failUnlessRaises` with `pytest.raises` + +ℹ Suggested fix +1 1 | import unittest + 2 |+import pytest +2 3 | +3 4 | +4 5 | class Test(unittest.TestCase): +-------------------------------------------------------------------------------- +8 9 | with self.assertRaises(expected_exception=ValueError): +9 10 | raise ValueError +10 11 | +11 |- with self.failUnlessRaises(ValueError): + 12 |+ with pytest.raises(ValueError): +12 13 | raise ValueError +13 14 | +14 15 | with self.assertRaisesRegex(ValueError, "test"): + +PT027_0.py:14:14: PT027 [*] Use `pytest.raises` instead of unittest-style `assertRaisesRegex` + | +12 | raise ValueError +13 | +14 | with self.assertRaisesRegex(ValueError, "test"): + | ^^^^^^^^^^^^^^^^^^^^^^ PT027 +15 | raise ValueError("test") + | + = help: Replace `assertRaisesRegex` with `pytest.raises` + +ℹ Suggested fix +1 1 | import unittest + 2 |+import pytest +2 3 | +3 4 | +4 5 | class Test(unittest.TestCase): +-------------------------------------------------------------------------------- +11 12 | with self.failUnlessRaises(ValueError): +12 13 | raise ValueError +13 14 | +14 |- with self.assertRaisesRegex(ValueError, "test"): + 15 |+ with pytest.raises(ValueError, match="test"): +15 16 | raise ValueError("test") +16 17 | +17 18 | with self.assertRaisesRegex(ValueError, expected_regex="test"): + +PT027_0.py:17:14: PT027 [*] Use `pytest.raises` instead of unittest-style `assertRaisesRegex` + | +15 | raise ValueError("test") +16 | +17 | with self.assertRaisesRegex(ValueError, expected_regex="test"): + | ^^^^^^^^^^^^^^^^^^^^^^ PT027 +18 | raise ValueError("test") + | + = help: Replace `assertRaisesRegex` with `pytest.raises` + +ℹ Suggested fix +1 1 | import unittest + 2 |+import pytest +2 3 | +3 4 | +4 5 | class Test(unittest.TestCase): +-------------------------------------------------------------------------------- +14 15 | with self.assertRaisesRegex(ValueError, "test"): +15 16 | raise ValueError("test") +16 17 | +17 |- with self.assertRaisesRegex(ValueError, expected_regex="test"): + 18 |+ with pytest.raises(ValueError, match="test"): +18 19 | raise ValueError("test") +19 20 | +20 21 | with self.assertRaisesRegex( + +PT027_0.py:20:14: PT027 [*] Use `pytest.raises` instead of unittest-style `assertRaisesRegex` + | +18 | raise ValueError("test") +19 | +20 | with self.assertRaisesRegex( + | ^^^^^^^^^^^^^^^^^^^^^^ PT027 +21 | expected_exception=ValueError, expected_regex="test" +22 | ): + | + = help: Replace `assertRaisesRegex` with `pytest.raises` + +ℹ Suggested fix +1 1 | import unittest + 2 |+import pytest +2 3 | +3 4 | +4 5 | class Test(unittest.TestCase): +-------------------------------------------------------------------------------- +17 18 | with self.assertRaisesRegex(ValueError, expected_regex="test"): +18 19 | raise ValueError("test") +19 20 | +20 |- with self.assertRaisesRegex( +21 |- expected_exception=ValueError, expected_regex="test" +22 |- ): + 21 |+ with pytest.raises(ValueError, match="test"): +23 22 | raise ValueError("test") +24 23 | +25 24 | with self.assertRaisesRegex( + +PT027_0.py:25:14: PT027 [*] Use `pytest.raises` instead of unittest-style `assertRaisesRegex` + | +23 | raise ValueError("test") +24 | +25 | with self.assertRaisesRegex( + | ^^^^^^^^^^^^^^^^^^^^^^ PT027 +26 | expected_regex="test", expected_exception=ValueError +27 | ): + | + = help: Replace `assertRaisesRegex` with `pytest.raises` + +ℹ Suggested fix +1 1 | import unittest + 2 |+import pytest +2 3 | +3 4 | +4 5 | class Test(unittest.TestCase): +-------------------------------------------------------------------------------- +22 23 | ): +23 24 | raise ValueError("test") +24 25 | +25 |- with self.assertRaisesRegex( +26 |- expected_regex="test", expected_exception=ValueError +27 |- ): + 26 |+ with pytest.raises(ValueError, match="test"): +28 27 | raise ValueError("test") +29 28 | +30 29 | with self.assertRaisesRegexp(ValueError, "test"): + +PT027_0.py:30:14: PT027 [*] Use `pytest.raises` instead of unittest-style `assertRaisesRegexp` + | +28 | raise ValueError("test") +29 | +30 | with self.assertRaisesRegexp(ValueError, "test"): + | ^^^^^^^^^^^^^^^^^^^^^^^ PT027 +31 | raise ValueError("test") + | + = help: Replace `assertRaisesRegexp` with `pytest.raises` + +ℹ Suggested fix +1 1 | import unittest + 2 |+import pytest +2 3 | +3 4 | +4 5 | class Test(unittest.TestCase): +-------------------------------------------------------------------------------- +27 28 | ): +28 29 | raise ValueError("test") +29 30 | +30 |- with self.assertRaisesRegexp(ValueError, "test"): + 31 |+ with pytest.raises(ValueError, match="test"): +31 32 | raise ValueError("test") +32 33 | +33 34 | def test_unfixable_errors(self): + +PT027_0.py:34:14: PT027 Use `pytest.raises` instead of unittest-style `assertRaises` + | +33 | def test_unfixable_errors(self): +34 | with self.assertRaises(ValueError, msg="msg"): + | ^^^^^^^^^^^^^^^^^ PT027 +35 | raise ValueError + | + = help: Replace `assertRaises` with `pytest.raises` + +PT027_0.py:37:14: PT027 Use `pytest.raises` instead of unittest-style `assertRaises` + | +35 | raise ValueError +36 | +37 | with self.assertRaises( + | ^^^^^^^^^^^^^^^^^ PT027 +38 | # comment +39 | ValueError + | + = help: Replace `assertRaises` with `pytest.raises` + +PT027_0.py:44:13: PT027 Use `pytest.raises` instead of unittest-style `assertRaises` + | +43 | with ( +44 | self + | _____________^ +45 | | # comment +46 | | .assertRaises(ValueError) + | |_________________________^ PT027 +47 | ): +48 | raise ValueError + | + = help: Replace `assertRaises` with `pytest.raises` + + diff --git a/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT027_1.snap b/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT027_1.snap new file mode 100644 index 0000000000..7656398481 --- /dev/null +++ b/crates/ruff/src/rules/flake8_pytest_style/snapshots/ruff__rules__flake8_pytest_style__tests__PT027_1.snap @@ -0,0 +1,21 @@ +--- +source: crates/ruff/src/rules/flake8_pytest_style/mod.rs +--- +PT027_1.py:11:14: PT027 [*] Use `pytest.raises` instead of unittest-style `assertRaises` + | +10 | def test_errors(self): +11 | with self.assertRaises(ValueError): + | ^^^^^^^^^^^^^^^^^ PT027 +12 | raise ValueError + | + = help: Replace `assertRaises` with `pytest.raises` + +ℹ Suggested fix +8 8 | raise ValueError +9 9 | +10 10 | def test_errors(self): +11 |- with self.assertRaises(ValueError): + 11 |+ with pytest.raises(ValueError): +12 12 | raise ValueError + + diff --git a/crates/ruff/src/rules/flake8_return/rules/function.rs b/crates/ruff/src/rules/flake8_return/rules/function.rs index 00675beb65..cb470bde87 100644 --- a/crates/ruff/src/rules/flake8_return/rules/function.rs +++ b/crates/ruff/src/rules/flake8_return/rules/function.rs @@ -425,9 +425,7 @@ fn implicit_return(checker: &mut Checker, stmt: &Stmt) { } Stmt::Assert(ast::StmtAssert { test, .. }) if is_const_false(test) => {} Stmt::While(ast::StmtWhile { test, .. }) if is_const_true(test) => {} - Stmt::For(ast::StmtFor { orelse, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { orelse, .. }) - | Stmt::While(ast::StmtWhile { orelse, .. }) => { + Stmt::For(ast::StmtFor { orelse, .. }) | Stmt::While(ast::StmtWhile { orelse, .. }) => { if let Some(last_stmt) = orelse.last() { implicit_return(checker, last_stmt); } else { @@ -454,13 +452,12 @@ fn implicit_return(checker: &mut Checker, stmt: &Stmt) { } } } - Stmt::With(ast::StmtWith { body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) => { + Stmt::With(ast::StmtWith { body, .. }) => { if let Some(last_stmt) = body.last() { implicit_return(checker, last_stmt); } } - Stmt::Return(_) | Stmt::Raise(_) | Stmt::Try(_) | Stmt::TryStar(_) => {} + Stmt::Return(_) | Stmt::Raise(_) | Stmt::Try(_) => {} Stmt::Expr(ast::StmtExpr { value, .. }) if matches!( value.as_ref(), diff --git a/crates/ruff/src/rules/flake8_return/visitor.rs b/crates/ruff/src/rules/flake8_return/visitor.rs index 80bc2f8d7d..775c3356e5 100644 --- a/crates/ruff/src/rules/flake8_return/visitor.rs +++ b/crates/ruff/src/rules/flake8_return/visitor.rs @@ -50,12 +50,6 @@ impl<'a> Visitor<'a> for ReturnVisitor<'a> { decorator_list, returns, .. - }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - parameters, - decorator_list, - returns, - .. }) => { // Visit the decorators, etc. self.sibling = Some(stmt); @@ -101,8 +95,7 @@ impl<'a> Visitor<'a> for ReturnVisitor<'a> { // x = f.read() // return x // ``` - Stmt::With(ast::StmtWith { body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) => { + Stmt::With(ast::StmtWith { body, .. }) => { if let Some(stmt_assign) = body.last().and_then(Stmt::as_assign_stmt) { self.stack .assignment_return diff --git a/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs b/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs index b33929d0ba..8749d54b52 100644 --- a/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs +++ b/crates/ruff/src/rules/flake8_self/rules/private_member_access.rs @@ -1,9 +1,8 @@ -use ruff_python_ast::{self as ast, Expr, Ranged}; - use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::call_path::collect_call_path; -use ruff_python_semantic::ScopeKind; +use ruff_python_ast::{self as ast, Expr, Ranged}; +use ruff_python_semantic::{BindingKind, ScopeKind}; use crate::checkers::ast::Checker; @@ -62,125 +61,132 @@ impl Violation for PrivateMemberAccess { /// SLF001 pub(crate) fn private_member_access(checker: &mut Checker, expr: &Expr) { - if let Expr::Attribute(ast::ExprAttribute { value, attr, .. }) = expr { - if (attr.starts_with("__") && !attr.ends_with("__")) - || (attr.starts_with('_') && !attr.starts_with("__")) + let Expr::Attribute(ast::ExprAttribute { value, attr, .. }) = expr else { + return; + }; + + if (attr.starts_with("__") && !attr.ends_with("__")) + || (attr.starts_with('_') && !attr.starts_with("__")) + { + if checker + .settings + .flake8_self + .ignore_names + .contains(attr.as_ref()) { + return; + } + + // Ignore accesses on instances within special methods (e.g., `__eq__`). + if let ScopeKind::Function(ast::StmtFunctionDef { name, .. }) = + checker.semantic().current_scope().kind + { + if matches!( + name.as_str(), + "__lt__" + | "__le__" + | "__eq__" + | "__ne__" + | "__gt__" + | "__ge__" + | "__add__" + | "__sub__" + | "__mul__" + | "__matmul__" + | "__truediv__" + | "__floordiv__" + | "__mod__" + | "__divmod__" + | "__pow__" + | "__lshift__" + | "__rshift__" + | "__and__" + | "__xor__" + | "__or__" + | "__radd__" + | "__rsub__" + | "__rmul__" + | "__rmatmul__" + | "__rtruediv__" + | "__rfloordiv__" + | "__rmod__" + | "__rdivmod__" + | "__rpow__" + | "__rlshift__" + | "__rrshift__" + | "__rand__" + | "__rxor__" + | "__ror__" + | "__iadd__" + | "__isub__" + | "__imul__" + | "__imatmul__" + | "__itruediv__" + | "__ifloordiv__" + | "__imod__" + | "__ipow__" + | "__ilshift__" + | "__irshift__" + | "__iand__" + | "__ixor__" + | "__ior__" + ) { + return; + } + } + + // Allow some documented private methods, like `os._exit()`. + if let Some(call_path) = checker.semantic().resolve_call_path(expr) { + if matches!(call_path.as_slice(), ["os", "_exit"]) { + return; + } + } + + if let Expr::Call(ast::ExprCall { func, .. }) = value.as_ref() { + // Ignore `super()` calls. + if let Some(call_path) = collect_call_path(func) { + if matches!(call_path.as_slice(), ["super"]) { + return; + } + } + } + + if let Some(call_path) = collect_call_path(value) { + // Ignore `self` and `cls` accesses. + if matches!(call_path.as_slice(), ["self" | "cls" | "mcs"]) { + return; + } + } + + if let Expr::Name(name) = value.as_ref() { + // Ignore accesses on class members from _within_ the class. if checker - .settings - .flake8_self - .ignore_names - .contains(attr.as_ref()) + .semantic() + .resolve_name(name) + .and_then(|id| { + if let BindingKind::ClassDefinition(scope) = checker.semantic().binding(id).kind + { + Some(scope) + } else { + None + } + }) + .is_some_and(|scope| { + checker + .semantic() + .current_scope_ids() + .any(|parent| scope == parent) + }) { return; } - - // Ignore accesses on instances within special methods (e.g., `__eq__`). - if let ScopeKind::Function(ast::StmtFunctionDef { name, .. }) = - checker.semantic().scope().kind - { - if matches!( - name.as_str(), - "__lt__" - | "__le__" - | "__eq__" - | "__ne__" - | "__gt__" - | "__ge__" - | "__add__" - | "__sub__" - | "__mul__" - | "__matmul__" - | "__truediv__" - | "__floordiv__" - | "__mod__" - | "__divmod__" - | "__pow__" - | "__lshift__" - | "__rshift__" - | "__and__" - | "__xor__" - | "__or__" - | "__radd__" - | "__rsub__" - | "__rmul__" - | "__rmatmul__" - | "__rtruediv__" - | "__rfloordiv__" - | "__rmod__" - | "__rdivmod__" - | "__rpow__" - | "__rlshift__" - | "__rrshift__" - | "__rand__" - | "__rxor__" - | "__ror__" - | "__iadd__" - | "__isub__" - | "__imul__" - | "__imatmul__" - | "__itruediv__" - | "__ifloordiv__" - | "__imod__" - | "__ipow__" - | "__ilshift__" - | "__irshift__" - | "__iand__" - | "__ixor__" - | "__ior__" - ) { - return; - } - } - - if let Expr::Call(ast::ExprCall { func, .. }) = value.as_ref() { - // Ignore `super()` calls. - if let Some(call_path) = collect_call_path(func) { - if matches!(call_path.as_slice(), ["super"]) { - return; - } - } - } else if let Some(call_path) = collect_call_path(value) { - // Ignore `self` and `cls` accesses. - if matches!(call_path.as_slice(), ["self" | "cls" | "mcs"]) { - return; - } - - // Ignore accesses on class members from _within_ the class. - if checker - .semantic() - .scopes - .iter() - .rev() - .find_map(|scope| match &scope.kind { - ScopeKind::Class(ast::StmtClassDef { name, .. }) => Some(name), - _ => None, - }) - .is_some_and(|name| { - if call_path.as_slice() == [name.as_str()] { - checker - .semantic() - .find_binding(name) - .is_some_and(|binding| { - // TODO(charlie): Could the name ever be bound to a - // _different_ class here? - binding.kind.is_class_definition() - }) - } else { - false - } - }) - { - return; - } - } - - checker.diagnostics.push(Diagnostic::new( - PrivateMemberAccess { - access: attr.to_string(), - }, - expr.range(), - )); } + + checker.diagnostics.push(Diagnostic::new( + PrivateMemberAccess { + access: attr.to_string(), + }, + expr.range(), + )); } } diff --git a/crates/ruff/src/rules/flake8_simplify/rules/ast_bool_op.rs b/crates/ruff/src/rules/flake8_simplify/rules/ast_bool_op.rs index e4d53b5a5f..0defd27edc 100644 --- a/crates/ruff/src/rules/flake8_simplify/rules/ast_bool_op.rs +++ b/crates/ruff/src/rules/flake8_simplify/rules/ast_bool_op.rs @@ -152,7 +152,7 @@ impl AlwaysAutofixableViolation for ExprAndNotExpr { /// /// ## Example /// ```python -/// x and not x +/// x or not x /// ``` /// /// ## References diff --git a/crates/ruff/src/rules/flake8_simplify/rules/ast_expr.rs b/crates/ruff/src/rules/flake8_simplify/rules/ast_expr.rs index 26c8612bf0..380a71bf0d 100644 --- a/crates/ruff/src/rules/flake8_simplify/rules/ast_expr.rs +++ b/crates/ruff/src/rules/flake8_simplify/rules/ast_expr.rs @@ -115,7 +115,7 @@ pub(crate) fn use_capital_environment_variables(checker: &mut Checker, expr: &Ex return; }; let Expr::Constant(ast::ExprConstant { - value: Constant::Str(env_var), + value: Constant::Str(ast::StringConstant { value: env_var, .. }), .. }) = arg else { @@ -167,7 +167,7 @@ fn check_os_environ_subscript(checker: &mut Checker, expr: &Expr) { return; } let Expr::Constant(ast::ExprConstant { - value: Constant::Str(env_var), + value: Constant::Str(ast::StringConstant { value: env_var, .. }), kind, range: _, }) = slice.as_ref() diff --git a/crates/ruff/src/rules/flake8_simplify/rules/ast_if.rs b/crates/ruff/src/rules/flake8_simplify/rules/ast_if.rs index cb18e590f4..be12732220 100644 --- a/crates/ruff/src/rules/flake8_simplify/rules/ast_if.rs +++ b/crates/ruff/src/rules/flake8_simplify/rules/ast_if.rs @@ -264,15 +264,13 @@ fn is_main_check(expr: &Expr) -> bool { { if let Expr::Name(ast::ExprName { id, .. }) = left.as_ref() { if id == "__name__" { - if comparators.len() == 1 { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), - .. - }) = &comparators[0] - { - if value == "__main__" { - return true; - } + if let [Expr::Constant(ast::ExprConstant { + value: Constant::Str(ast::StringConstant { value, .. }), + .. + })] = comparators.as_slice() + { + if value == "__main__" { + return true; } } } diff --git a/crates/ruff/src/rules/flake8_simplify/rules/ast_unary_op.rs b/crates/ruff/src/rules/flake8_simplify/rules/ast_unary_op.rs index 5dc0eb575d..f5da2c443b 100644 --- a/crates/ruff/src/rules/flake8_simplify/rules/ast_unary_op.rs +++ b/crates/ruff/src/rules/flake8_simplify/rules/ast_unary_op.rs @@ -155,14 +155,13 @@ pub(crate) fn negation_with_equal_op( if !matches!(&ops[..], [CmpOp::Eq]) { return; } - if is_exception_check(checker.semantic().stmt()) { + if is_exception_check(checker.semantic().current_statement()) { return; } // Avoid flagging issues in dunder implementations. - if let ScopeKind::Function(ast::StmtFunctionDef { name, .. }) - | ScopeKind::AsyncFunction(ast::StmtAsyncFunctionDef { name, .. }) = - &checker.semantic().scope().kind + if let ScopeKind::Function(ast::StmtFunctionDef { name, .. }) = + &checker.semantic().current_scope().kind { if is_dunder_method(name) { return; @@ -213,14 +212,13 @@ pub(crate) fn negation_with_not_equal_op( if !matches!(&ops[..], [CmpOp::NotEq]) { return; } - if is_exception_check(checker.semantic().stmt()) { + if is_exception_check(checker.semantic().current_statement()) { return; } // Avoid flagging issues in dunder implementations. - if let ScopeKind::Function(ast::StmtFunctionDef { name, .. }) - | ScopeKind::AsyncFunction(ast::StmtAsyncFunctionDef { name, .. }) = - &checker.semantic().scope().kind + if let ScopeKind::Function(ast::StmtFunctionDef { name, .. }) = + &checker.semantic().current_scope().kind { if is_dunder_method(name) { return; diff --git a/crates/ruff/src/rules/flake8_simplify/rules/ast_with.rs b/crates/ruff/src/rules/flake8_simplify/rules/ast_with.rs index 55c5d0d781..528b82e050 100644 --- a/crates/ruff/src/rules/flake8_simplify/rules/ast_with.rs +++ b/crates/ruff/src/rules/flake8_simplify/rules/ast_with.rs @@ -63,18 +63,22 @@ impl Violation for MultipleWithStatements { /// Returns a boolean indicating whether it's an async with statement, the items /// and body. fn next_with(body: &[Stmt]) -> Option<(bool, &[WithItem], &[Stmt])> { - match body { - [Stmt::With(ast::StmtWith { items, body, .. })] => Some((false, items, body)), - [Stmt::AsyncWith(ast::StmtAsyncWith { items, body, .. })] => Some((true, items, body)), - _ => None, - } + let [Stmt::With(ast::StmtWith { + is_async, + items, + body, + .. + })] = body + else { + return None; + }; + Some((*is_async, items, body)) } /// SIM117 pub(crate) fn multiple_with_statements( checker: &mut Checker, - with_stmt: &Stmt, - with_body: &[Stmt], + with_stmt: &ast::StmtWith, with_parent: Option<&Stmt>, ) { // Make sure we fix from top to bottom for nested with statements, e.g. for @@ -102,8 +106,8 @@ pub(crate) fn multiple_with_statements( } } - if let Some((is_async, items, body)) = next_with(with_body) { - if is_async != with_stmt.is_async_with_stmt() { + if let Some((is_async, items, body)) = next_with(&with_stmt.body) { + if is_async != with_stmt.is_async { // One of the statements is an async with, while the other is not, // we can't merge those statements. return; @@ -133,7 +137,7 @@ pub(crate) fn multiple_with_statements( if !checker .indexer() .comment_ranges() - .intersects(TextRange::new(with_stmt.start(), with_body[0].start())) + .intersects(TextRange::new(with_stmt.start(), with_stmt.body[0].start())) { match fix_with::fix_multiple_with_statements( checker.locator(), diff --git a/crates/ruff/src/rules/flake8_simplify/rules/fix_with.rs b/crates/ruff/src/rules/flake8_simplify/rules/fix_with.rs index d5dc5ca9d8..36d1f6eb96 100644 --- a/crates/ruff/src/rules/flake8_simplify/rules/fix_with.rs +++ b/crates/ruff/src/rules/flake8_simplify/rules/fix_with.rs @@ -1,6 +1,6 @@ use anyhow::{bail, Result}; use libcst_native::{CompoundStatement, Statement, Suite, With}; -use ruff_python_ast::Ranged; +use ruff_python_ast::{self as ast, Ranged}; use crate::autofix::codemods::CodegenStylist; use ruff_diagnostics::Edit; @@ -14,15 +14,15 @@ use crate::cst::matchers::{match_function_def, match_indented_block, match_state pub(crate) fn fix_multiple_with_statements( locator: &Locator, stylist: &Stylist, - stmt: &ruff_python_ast::Stmt, + with_stmt: &ast::StmtWith, ) -> Result { // Infer the indentation of the outer block. - let Some(outer_indent) = whitespace::indentation(locator, stmt) else { + let Some(outer_indent) = whitespace::indentation(locator, with_stmt) else { bail!("Unable to fix multiline statement"); }; // Extract the module text. - let contents = locator.lines(stmt.range()); + let contents = locator.lines(with_stmt.range()); // If the block is indented, "embed" it in a function definition, to preserve // indentation while retaining valid source code. (We'll strip the prefix later @@ -82,7 +82,7 @@ pub(crate) fn fix_multiple_with_statements( .to_string() }; - let range = locator.lines_range(stmt.range()); + let range = locator.lines_range(with_stmt.range()); Ok(Edit::range_replacement(contents, range)) } diff --git a/crates/ruff/src/rules/flake8_simplify/rules/open_file_with_context_handler.rs b/crates/ruff/src/rules/flake8_simplify/rules/open_file_with_context_handler.rs index 9ee1a5fc14..5fd3a79c6d 100644 --- a/crates/ruff/src/rules/flake8_simplify/rules/open_file_with_context_handler.rs +++ b/crates/ruff/src/rules/flake8_simplify/rules/open_file_with_context_handler.rs @@ -43,7 +43,7 @@ impl Violation for OpenFileWithContextHandler { /// Return `true` if the current expression is nested in an `await /// exit_stack.enter_async_context` call. fn match_async_exit_stack(semantic: &SemanticModel) -> bool { - let Some(expr) = semantic.expr_grandparent() else { + let Some(expr) = semantic.current_expression_grandparent() else { return false; }; let Expr::Await(ast::ExprAwait { value, range: _ }) = expr else { @@ -58,7 +58,7 @@ fn match_async_exit_stack(semantic: &SemanticModel) -> bool { if attr != "enter_async_context" { return false; } - for parent in semantic.parents() { + for parent in semantic.current_statements() { if let Stmt::With(ast::StmtWith { items, .. }) = parent { for item in items { if let Expr::Call(ast::ExprCall { func, .. }) = &item.context_expr { @@ -77,7 +77,7 @@ fn match_async_exit_stack(semantic: &SemanticModel) -> bool { /// Return `true` if the current expression is nested in an /// `exit_stack.enter_context` call. fn match_exit_stack(semantic: &SemanticModel) -> bool { - let Some(expr) = semantic.expr_parent() else { + let Some(expr) = semantic.current_expression_parent() else { return false; }; let Expr::Call(ast::ExprCall { func, .. }) = expr else { @@ -89,7 +89,7 @@ fn match_exit_stack(semantic: &SemanticModel) -> bool { if attr != "enter_context" { return false; } - for parent in semantic.parents() { + for parent in semantic.current_statements() { if let Stmt::With(ast::StmtWith { items, .. }) = parent { for item in items { if let Expr::Call(ast::ExprCall { func, .. }) = &item.context_expr { @@ -133,7 +133,7 @@ pub(crate) fn open_file_with_context_handler(checker: &mut Checker, func: &Expr) } // Ex) `with open("foo.txt") as f: ...` - if checker.semantic().stmt().is_with_stmt() { + if checker.semantic().current_statement().is_with_stmt() { return; } diff --git a/crates/ruff/src/rules/flake8_simplify/rules/reimplemented_builtin.rs b/crates/ruff/src/rules/flake8_simplify/rules/reimplemented_builtin.rs index 04008a8811..257c080349 100644 --- a/crates/ruff/src/rules/flake8_simplify/rules/reimplemented_builtin.rs +++ b/crates/ruff/src/rules/flake8_simplify/rules/reimplemented_builtin.rs @@ -60,7 +60,7 @@ impl Violation for ReimplementedBuiltin { /// SIM110, SIM111 pub(crate) fn convert_for_loop_to_any_all(checker: &mut Checker, stmt: &Stmt) { - if !checker.semantic().scope().kind.is_any_function() { + if !checker.semantic().current_scope().kind.is_function() { return; } @@ -73,7 +73,7 @@ pub(crate) fn convert_for_loop_to_any_all(checker: &mut Checker, stmt: &Stmt) { // - `for` loop with an `else: return True` or `else: return False`. // - `for` loop followed by `return True` or `return False`. let Some(terminal) = match_else_return(stmt).or_else(|| { - let parent = checker.semantic().stmt_parent()?; + let parent = checker.semantic().current_statement_parent()?; let suite = traversal::suite(stmt, parent)?; let sibling = traversal::next_sibling(stmt, suite)?; match_sibling_return(stmt, sibling) diff --git a/crates/ruff/src/rules/flake8_slots/rules/no_slots_in_str_subclass.rs b/crates/ruff/src/rules/flake8_slots/rules/no_slots_in_str_subclass.rs index 45213759fb..c72057ea64 100644 --- a/crates/ruff/src/rules/flake8_slots/rules/no_slots_in_str_subclass.rs +++ b/crates/ruff/src/rules/flake8_slots/rules/no_slots_in_str_subclass.rs @@ -66,10 +66,10 @@ pub(crate) fn no_slots_in_str_subclass(checker: &mut Checker, stmt: &Stmt, class /// Return `true` if the class is a subclass of `str`, but _not_ a subclass of `enum.Enum`, /// `enum.IntEnum`, etc. -fn is_str_subclass(bases: &[Expr], model: &SemanticModel) -> bool { +fn is_str_subclass(bases: &[Expr], semantic: &SemanticModel) -> bool { let mut is_str_subclass = false; for base in bases { - if let Some(call_path) = model.resolve_call_path(base) { + if let Some(call_path) = semantic.resolve_call_path(base) { match call_path.as_slice() { ["" | "builtins", "str"] => { is_str_subclass = true; diff --git a/crates/ruff/src/rules/flake8_tidy_imports/matchers.rs b/crates/ruff/src/rules/flake8_tidy_imports/matchers.rs new file mode 100644 index 0000000000..a991280003 --- /dev/null +++ b/crates/ruff/src/rules/flake8_tidy_imports/matchers.rs @@ -0,0 +1,75 @@ +/// Match an imported member against the ban policy. For example, given `from foo import bar`, +/// `foo` is the module and `bar` is the member. Performs an exact match. +#[derive(Debug)] +pub(crate) struct MatchName<'a> { + pub(crate) module: &'a str, + pub(crate) member: &'a str, +} + +impl MatchName<'_> { + fn is_match(&self, banned_module: &str) -> bool { + // Ex) Match banned `foo.bar` to import `foo.bar`, without allocating, assuming that + // `module` is `foo`, `member` is `bar`, and `banned_module` is `foo.bar`. + banned_module + .strip_prefix(self.module) + .and_then(|banned_module| banned_module.strip_prefix('.')) + .and_then(|banned_module| banned_module.strip_prefix(self.member)) + .is_some_and(str::is_empty) + } +} + +/// Match an imported module against the ban policy. For example, given `import foo.bar`, +/// `foo.bar` is the module. Matches against the module name or any of its parents. +#[derive(Debug)] +pub(crate) struct MatchNameOrParent<'a> { + pub(crate) module: &'a str, +} + +impl MatchNameOrParent<'_> { + fn is_match(&self, banned_module: &str) -> bool { + // Ex) Match banned `foo` to import `foo`. + if self.module == banned_module { + return true; + } + + // Ex) Match banned `foo` to import `foo.bar`. + if self + .module + .strip_prefix(banned_module) + .is_some_and(|suffix| suffix.starts_with('.')) + { + return true; + } + + false + } +} + +#[derive(Debug)] +pub(crate) enum NameMatchPolicy<'a> { + /// Only match an exact module name (e.g., given `import foo.bar`, only match `foo.bar`). + MatchName(MatchName<'a>), + /// Match an exact module name or any of its parents (e.g., given `import foo.bar`, match + /// `foo.bar` or `foo`). + MatchNameOrParent(MatchNameOrParent<'a>), +} + +impl NameMatchPolicy<'_> { + pub(crate) fn find<'a>(&self, banned_modules: impl Iterator) -> Option { + for banned_module in banned_modules { + match self { + NameMatchPolicy::MatchName(matcher) => { + if matcher.is_match(banned_module) { + return Some(banned_module.to_string()); + } + } + NameMatchPolicy::MatchNameOrParent(matcher) => { + if matcher.is_match(banned_module) { + return Some(banned_module.to_string()); + } + } + } + } + None + } +} diff --git a/crates/ruff/src/rules/flake8_tidy_imports/mod.rs b/crates/ruff/src/rules/flake8_tidy_imports/mod.rs index 8686f3971c..302640f4f8 100644 --- a/crates/ruff/src/rules/flake8_tidy_imports/mod.rs +++ b/crates/ruff/src/rules/flake8_tidy_imports/mod.rs @@ -1,4 +1,5 @@ //! Rules from [flake8-tidy-imports](https://pypi.org/project/flake8-tidy-imports/). +pub(crate) mod matchers; pub mod options; pub(crate) mod rules; pub mod settings; @@ -124,4 +125,23 @@ mod tests { assert_messages!(diagnostics); Ok(()) } + + #[test] + fn banned_module_level_imports() -> Result<()> { + let diagnostics = test_path( + Path::new("flake8_tidy_imports/TID253.py"), + &Settings { + flake8_tidy_imports: flake8_tidy_imports::settings::Settings { + banned_module_level_imports: vec![ + "torch".to_string(), + "tensorflow".to_string(), + ], + ..Default::default() + }, + ..Settings::for_rules(vec![Rule::BannedModuleLevelImports]) + }, + )?; + assert_messages!(diagnostics); + Ok(()) + } } diff --git a/crates/ruff/src/rules/flake8_tidy_imports/options.rs b/crates/ruff/src/rules/flake8_tidy_imports/options.rs index 6f3eb99fcb..a2bc84c300 100644 --- a/crates/ruff/src/rules/flake8_tidy_imports/options.rs +++ b/crates/ruff/src/rules/flake8_tidy_imports/options.rs @@ -41,6 +41,19 @@ pub struct Options { /// Note that this rule is only meant to flag accidental uses, /// and can be circumvented via `eval` or `importlib`. pub banned_api: Option>, + #[option( + default = r#"[]"#, + value_type = r#"list[str]"#, + example = r#" + # Ban certain modules from being imported at module level, instead requiring + # that they're imported lazily (e.g., within a function definition). + banned-module-level-imports = ["torch", "tensorflow"] + "# + )] + /// List of specific modules that may not be imported at module level, and should instead be + /// imported lazily (e.g., within a function definition, or an `if TYPE_CHECKING:` + /// block, or some other nested context). + pub banned_module_level_imports: Option>, } impl From for Settings { @@ -48,6 +61,7 @@ impl From for Settings { Self { ban_relative_imports: options.ban_relative_imports.unwrap_or(Strictness::Parents), banned_api: options.banned_api.unwrap_or_default(), + banned_module_level_imports: options.banned_module_level_imports.unwrap_or_default(), } } } @@ -57,6 +71,7 @@ impl From for Options { Self { ban_relative_imports: Some(settings.ban_relative_imports), banned_api: Some(settings.banned_api), + banned_module_level_imports: Some(settings.banned_module_level_imports), } } } diff --git a/crates/ruff/src/rules/flake8_tidy_imports/rules/banned_api.rs b/crates/ruff/src/rules/flake8_tidy_imports/rules/banned_api.rs index e214802ded..a2e8e8ad25 100644 --- a/crates/ruff/src/rules/flake8_tidy_imports/rules/banned_api.rs +++ b/crates/ruff/src/rules/flake8_tidy_imports/rules/banned_api.rs @@ -5,6 +5,7 @@ use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::call_path::from_qualified_name; use crate::checkers::ast::Checker; +use crate::rules::flake8_tidy_imports::matchers::NameMatchPolicy; /// ## What it does /// Checks for banned imports. @@ -38,45 +39,17 @@ impl Violation for BannedApi { } /// TID251 -pub(crate) fn name_is_banned(checker: &mut Checker, name: String, located: &T) -where - T: Ranged, -{ +pub(crate) fn banned_api(checker: &mut Checker, policy: &NameMatchPolicy, node: &T) { let banned_api = &checker.settings.flake8_tidy_imports.banned_api; - if let Some(ban) = banned_api.get(&name) { - checker.diagnostics.push(Diagnostic::new( - BannedApi { - name, - message: ban.msg.to_string(), - }, - located.range(), - )); - } -} - -/// TID251 -pub(crate) fn name_or_parent_is_banned(checker: &mut Checker, name: &str, located: &T) -where - T: Ranged, -{ - let banned_api = &checker.settings.flake8_tidy_imports.banned_api; - let mut name = name; - loop { - if let Some(ban) = banned_api.get(name) { + if let Some(banned_module) = policy.find(banned_api.keys().map(AsRef::as_ref)) { + if let Some(reason) = banned_api.get(&banned_module) { checker.diagnostics.push(Diagnostic::new( BannedApi { - name: name.to_string(), - message: ban.msg.to_string(), + name: banned_module, + message: reason.msg.to_string(), }, - located.range(), + node.range(), )); - return; - } - match name.rfind('.') { - Some(idx) => { - name = &name[..idx]; - } - None => return, } } } diff --git a/crates/ruff/src/rules/flake8_tidy_imports/rules/banned_module_level_imports.rs b/crates/ruff/src/rules/flake8_tidy_imports/rules/banned_module_level_imports.rs new file mode 100644 index 0000000000..283b8f90a4 --- /dev/null +++ b/crates/ruff/src/rules/flake8_tidy_imports/rules/banned_module_level_imports.rs @@ -0,0 +1,80 @@ +use ruff_diagnostics::{Diagnostic, Violation}; +use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::Ranged; + +use crate::checkers::ast::Checker; +use crate::rules::flake8_tidy_imports::matchers::NameMatchPolicy; + +/// ## What it does +/// Checks for module-level imports that should instead be imported lazily +/// (e.g., within a function definition, or an `if TYPE_CHECKING:` block, or +/// some other nested context). +/// +/// ## Why is this bad? +/// Some modules are expensive to import. For example, importing `torch` or +/// `tensorflow` can introduce a noticeable delay in the startup time of a +/// Python program. +/// +/// In such cases, you may want to enforce that the module is imported lazily +/// as needed, rather than at the top of the file. This could involve inlining +/// the import into the function that uses it, rather than importing it +/// unconditionally, to ensure that the module is only imported when necessary. +/// +/// ## Example +/// ```python +/// import tensorflow as tf +/// +/// +/// def show_version(): +/// print(tf.__version__) +/// ``` +/// +/// Use instead: +/// ```python +/// def show_version(): +/// import tensorflow as tf +/// +/// print(tf.__version__) +/// ``` +/// +/// ## Options +/// - `flake8-tidy-imports.banned-module-level-imports` +#[violation] +pub struct BannedModuleLevelImports { + name: String, +} + +impl Violation for BannedModuleLevelImports { + #[derive_message_formats] + fn message(&self) -> String { + let BannedModuleLevelImports { name } = self; + format!("`{name}` is banned at the module level") + } +} + +/// TID253 +pub(crate) fn banned_module_level_imports( + checker: &mut Checker, + policy: &NameMatchPolicy, + node: &T, +) { + if !checker.semantic().at_top_level() { + return; + } + + if let Some(banned_module) = policy.find( + checker + .settings + .flake8_tidy_imports + .banned_module_level_imports + .iter() + .map(AsRef::as_ref), + ) { + checker.diagnostics.push(Diagnostic::new( + BannedModuleLevelImports { + name: banned_module, + }, + node.range(), + )); + } +} diff --git a/crates/ruff/src/rules/flake8_tidy_imports/rules/mod.rs b/crates/ruff/src/rules/flake8_tidy_imports/rules/mod.rs index 660116d718..a9c8e631d9 100644 --- a/crates/ruff/src/rules/flake8_tidy_imports/rules/mod.rs +++ b/crates/ruff/src/rules/flake8_tidy_imports/rules/mod.rs @@ -1,5 +1,7 @@ pub(crate) use banned_api::*; +pub(crate) use banned_module_level_imports::*; pub(crate) use relative_imports::*; mod banned_api; +mod banned_module_level_imports; mod relative_imports; diff --git a/crates/ruff/src/rules/flake8_tidy_imports/settings.rs b/crates/ruff/src/rules/flake8_tidy_imports/settings.rs index 90b2843280..a1267fbc9b 100644 --- a/crates/ruff/src/rules/flake8_tidy_imports/settings.rs +++ b/crates/ruff/src/rules/flake8_tidy_imports/settings.rs @@ -26,4 +26,5 @@ pub enum Strictness { pub struct Settings { pub ban_relative_imports: Strictness, pub banned_api: FxHashMap, + pub banned_module_level_imports: Vec, } diff --git a/crates/ruff/src/rules/flake8_tidy_imports/snapshots/ruff__rules__flake8_tidy_imports__tests__banned_module_level_imports.snap b/crates/ruff/src/rules/flake8_tidy_imports/snapshots/ruff__rules__flake8_tidy_imports__tests__banned_module_level_imports.snap new file mode 100644 index 0000000000..40bb5c9f58 --- /dev/null +++ b/crates/ruff/src/rules/flake8_tidy_imports/snapshots/ruff__rules__flake8_tidy_imports__tests__banned_module_level_imports.snap @@ -0,0 +1,81 @@ +--- +source: crates/ruff/src/rules/flake8_tidy_imports/mod.rs +--- +TID253.py:2:8: TID253 `torch` is banned at the module level + | +1 | ## Banned modules ## +2 | import torch + | ^^^^^ TID253 +3 | +4 | from torch import * + | + +TID253.py:4:1: TID253 `torch` is banned at the module level + | +2 | import torch +3 | +4 | from torch import * + | ^^^^^^^^^^^^^^^^^^^ TID253 +5 | +6 | from tensorflow import a, b, c + | + +TID253.py:6:1: TID253 `tensorflow` is banned at the module level + | +4 | from torch import * +5 | +6 | from tensorflow import a, b, c + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TID253 +7 | +8 | import torch as torch_wearing_a_trenchcoat + | + +TID253.py:8:8: TID253 `torch` is banned at the module level + | + 6 | from tensorflow import a, b, c + 7 | + 8 | import torch as torch_wearing_a_trenchcoat + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TID253 + 9 | +10 | # this should count as module level + | + +TID253.py:11:15: TID253 `tensorflow` is banned at the module level + | +10 | # this should count as module level +11 | x = 1; import tensorflow + | ^^^^^^^^^^ TID253 +12 | +13 | # banning a module also bans any submodules + | + +TID253.py:14:8: TID253 `torch` is banned at the module level + | +13 | # banning a module also bans any submodules +14 | import torch.foo.bar + | ^^^^^^^^^^^^^ TID253 +15 | +16 | from tensorflow.foo import bar + | + +TID253.py:16:1: TID253 `tensorflow` is banned at the module level + | +14 | import torch.foo.bar +15 | +16 | from tensorflow.foo import bar + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TID253 +17 | +18 | from torch.foo.bar import * + | + +TID253.py:18:1: TID253 `torch` is banned at the module level + | +16 | from tensorflow.foo import bar +17 | +18 | from torch.foo.bar import * + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ TID253 +19 | +20 | # unlike TID251, inline imports are *not* banned + | + + diff --git a/crates/ruff/src/rules/flake8_type_checking/helpers.rs b/crates/ruff/src/rules/flake8_type_checking/helpers.rs index 001b7f2582..31b5c6d2c3 100644 --- a/crates/ruff/src/rules/flake8_type_checking/helpers.rs +++ b/crates/ruff/src/rules/flake8_type_checking/helpers.rs @@ -35,7 +35,7 @@ pub(crate) fn runtime_evaluated( } fn runtime_evaluated_base_class(base_classes: &[String], semantic: &SemanticModel) -> bool { - let ScopeKind::Class(class_def) = &semantic.scope().kind else { + let ScopeKind::Class(class_def) = &semantic.current_scope().kind else { return false; }; @@ -49,7 +49,7 @@ fn runtime_evaluated_base_class(base_classes: &[String], semantic: &SemanticMode } fn runtime_evaluated_decorators(decorators: &[String], semantic: &SemanticModel) -> bool { - let ScopeKind::Class(class_def) = &semantic.scope().kind else { + let ScopeKind::Class(class_def) = &semantic.current_scope().kind else { return false; }; diff --git a/crates/ruff/src/rules/flake8_type_checking/mod.rs b/crates/ruff/src/rules/flake8_type_checking/mod.rs index 3be76de290..99a76cb890 100644 --- a/crates/ruff/src/rules/flake8_type_checking/mod.rs +++ b/crates/ruff/src/rules/flake8_type_checking/mod.rs @@ -89,13 +89,20 @@ mod tests { Rule::TypingOnlyStandardLibraryImport, Path::new("runtime_evaluated_base_classes_3.py") )] + #[test_case( + Rule::TypingOnlyStandardLibraryImport, + Path::new("runtime_evaluated_base_classes_4.py") + )] fn runtime_evaluated_base_classes(rule_code: Rule, path: &Path) -> Result<()> { let snapshot = format!("{}_{}", rule_code.as_ref(), path.to_string_lossy()); let diagnostics = test_path( Path::new("flake8_type_checking").join(path).as_path(), &settings::Settings { flake8_type_checking: super::settings::Settings { - runtime_evaluated_base_classes: vec!["pydantic.BaseModel".to_string()], + runtime_evaluated_base_classes: vec![ + "pydantic.BaseModel".to_string(), + "sqlalchemy.orm.DeclarativeBase".to_string(), + ], ..Default::default() }, ..settings::Settings::for_rule(rule_code) diff --git a/crates/ruff/src/rules/flake8_type_checking/rules/empty_type_checking_block.rs b/crates/ruff/src/rules/flake8_type_checking/rules/empty_type_checking_block.rs index 5bb8533778..05b3f2cb1c 100644 --- a/crates/ruff/src/rules/flake8_type_checking/rules/empty_type_checking_block.rs +++ b/crates/ruff/src/rules/flake8_type_checking/rules/empty_type_checking_block.rs @@ -58,8 +58,8 @@ pub(crate) fn empty_type_checking_block(checker: &mut Checker, stmt: &ast::StmtI let mut diagnostic = Diagnostic::new(EmptyTypeCheckingBlock, stmt.range()); if checker.patch(diagnostic.kind.rule()) { // Delete the entire type-checking block. - let stmt = checker.semantic().stmt(); - let parent = checker.semantic().stmt_parent(); + let stmt = checker.semantic().current_statement(); + let parent = checker.semantic().current_statement_parent(); let edit = autofix::edits::delete_stmt(stmt, parent, checker.locator(), checker.indexer()); diagnostic.set_fix(Fix::automatic(edit).isolate(checker.isolation(parent))); } diff --git a/crates/ruff/src/rules/flake8_type_checking/rules/runtime_import_in_type_checking_block.rs b/crates/ruff/src/rules/flake8_type_checking/rules/runtime_import_in_type_checking_block.rs index 66c187fc55..f26f4fe929 100644 --- a/crates/ruff/src/rules/flake8_type_checking/rules/runtime_import_in_type_checking_block.rs +++ b/crates/ruff/src/rules/flake8_type_checking/rules/runtime_import_in_type_checking_block.rs @@ -1,11 +1,12 @@ -use anyhow::Result; -use ruff_text_size::TextRange; -use rustc_hash::FxHashMap; use std::borrow::Cow; +use anyhow::Result; +use rustc_hash::FxHashMap; + use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_semantic::{AnyImport, Imported, NodeId, ResolvedReferenceId, Scope}; +use ruff_python_semantic::{AnyImport, Imported, ResolvedReferenceId, Scope, StatementId}; +use ruff_text_size::TextRange; use crate::autofix; use crate::checkers::ast::Checker; @@ -70,8 +71,8 @@ pub(crate) fn runtime_import_in_type_checking_block( diagnostics: &mut Vec, ) { // Collect all runtime imports by statement. - let mut errors_by_statement: FxHashMap> = FxHashMap::default(); - let mut ignores_by_statement: FxHashMap> = FxHashMap::default(); + let mut errors_by_statement: FxHashMap> = FxHashMap::default(); + let mut ignores_by_statement: FxHashMap> = FxHashMap::default(); for binding_id in scope.binding_ids() { let binding = checker.semantic().binding(binding_id); @@ -93,7 +94,7 @@ pub(crate) fn runtime_import_in_type_checking_block( .is_runtime() }) { - let Some(stmt_id) = binding.source else { + let Some(statement_id) = binding.source else { continue; }; @@ -113,20 +114,23 @@ pub(crate) fn runtime_import_in_type_checking_block( }) { ignores_by_statement - .entry(stmt_id) + .entry(statement_id) .or_default() .push(import); } else { - errors_by_statement.entry(stmt_id).or_default().push(import); + errors_by_statement + .entry(statement_id) + .or_default() + .push(import); } } } // Generate a diagnostic for every import, but share a fix across all imports within the same // statement (excluding those that are ignored). - for (stmt_id, imports) in errors_by_statement { + for (statement_id, imports) in errors_by_statement { let fix = if checker.patch(Rule::RuntimeImportInTypeCheckingBlock) { - fix_imports(checker, stmt_id, &imports).ok() + fix_imports(checker, statement_id, &imports).ok() } else { None }; @@ -189,12 +193,18 @@ struct ImportBinding<'a> { } /// Generate a [`Fix`] to remove runtime imports from a type-checking block. -fn fix_imports(checker: &Checker, stmt_id: NodeId, imports: &[ImportBinding]) -> Result { - let stmt = checker.semantic().stmts[stmt_id]; - let parent = checker.semantic().stmts.parent(stmt); +fn fix_imports( + checker: &Checker, + statement_id: StatementId, + imports: &[ImportBinding], +) -> Result { + let statement = checker.semantic().statement(statement_id); + let parent = checker.semantic().parent_statement(statement_id); + let member_names: Vec> = imports .iter() - .map(|ImportBinding { import, .. }| import.member_name()) + .map(|ImportBinding { import, .. }| import) + .map(Imported::member_name) .collect(); // Find the first reference across all imports. @@ -209,7 +219,7 @@ fn fix_imports(checker: &Checker, stmt_id: NodeId, imports: &[ImportBinding]) -> // Step 1) Remove the import. let remove_import_edit = autofix::edits::remove_unused_imports( member_names.iter().map(AsRef::as_ref), - stmt, + statement, parent, checker.locator(), checker.stylist(), @@ -219,7 +229,7 @@ fn fix_imports(checker: &Checker, stmt_id: NodeId, imports: &[ImportBinding]) -> // Step 2) Add the import to the top-level. let add_import_edit = checker.importer().runtime_import_edit( &ImportedMembers { - statement: stmt, + statement, names: member_names.iter().map(AsRef::as_ref).collect(), }, at, diff --git a/crates/ruff/src/rules/flake8_type_checking/rules/typing_only_runtime_import.rs b/crates/ruff/src/rules/flake8_type_checking/rules/typing_only_runtime_import.rs index 5d40de8cc5..3d9d968431 100644 --- a/crates/ruff/src/rules/flake8_type_checking/rules/typing_only_runtime_import.rs +++ b/crates/ruff/src/rules/flake8_type_checking/rules/typing_only_runtime_import.rs @@ -5,7 +5,7 @@ use rustc_hash::FxHashMap; use ruff_diagnostics::{AutofixKind, Diagnostic, DiagnosticKind, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_semantic::{AnyImport, Binding, Imported, NodeId, ResolvedReferenceId, Scope}; +use ruff_python_semantic::{AnyImport, Binding, Imported, ResolvedReferenceId, Scope, StatementId}; use ruff_text_size::TextRange; use crate::autofix; @@ -20,17 +20,25 @@ use crate::rules::isort::{categorize, ImportSection, ImportType}; /// /// ## Why is this bad? /// Unused imports add a performance overhead at runtime, and risk creating -/// import cycles. +/// import cycles. If an import is _only_ used in typing-only contexts, it can +/// instead be imported conditionally under an `if TYPE_CHECKING:` block to +/// minimize runtime overhead. +/// +/// If a class _requires_ that type annotations be available at runtime (as is +/// the case for Pydantic, SQLAlchemy, and other libraries), consider using +/// the [`flake8-type-checking.runtime-evaluated-base-classes`] and +/// [`flake8-type-checking.runtime-evaluated-decorators`] settings to mark them +/// as such. /// /// ## Example /// ```python /// from __future__ import annotations /// -/// import A +/// import local_module /// /// -/// def foo(a: A) -> int: -/// return len(a) +/// def func(sized: local_module.Container) -> int: +/// return len(sized) /// ``` /// /// Use instead: @@ -40,13 +48,17 @@ use crate::rules::isort::{categorize, ImportSection, ImportType}; /// from typing import TYPE_CHECKING /// /// if TYPE_CHECKING: -/// import A +/// import local_module /// /// -/// def foo(a: A) -> int: -/// return len(a) +/// def func(sized: local_module.Container) -> int: +/// return len(sized) /// ``` /// +/// ## Options +/// - `flake8-type-checking.runtime-evaluated-base-classes` +/// - `flake8-type-checking.runtime-evaluated-decorators` +/// /// ## References /// - [PEP 536](https://peps.python.org/pep-0563/#runtime-annotation-resolution-and-type-checking) #[violation] @@ -76,7 +88,15 @@ impl Violation for TypingOnlyFirstPartyImport { /// /// ## Why is this bad? /// Unused imports add a performance overhead at runtime, and risk creating -/// import cycles. +/// import cycles. If an import is _only_ used in typing-only contexts, it can +/// instead be imported conditionally under an `if TYPE_CHECKING:` block to +/// minimize runtime overhead. +/// +/// If a class _requires_ that type annotations be available at runtime (as is +/// the case for Pydantic, SQLAlchemy, and other libraries), consider using +/// the [`flake8-type-checking.runtime-evaluated-base-classes`] and +/// [`flake8-type-checking.runtime-evaluated-decorators`] settings to mark them +/// as such. /// /// ## Example /// ```python @@ -85,7 +105,7 @@ impl Violation for TypingOnlyFirstPartyImport { /// import pandas as pd /// /// -/// def foo(df: pd.DataFrame) -> int: +/// def func(df: pd.DataFrame) -> int: /// return len(df) /// ``` /// @@ -99,10 +119,14 @@ impl Violation for TypingOnlyFirstPartyImport { /// import pandas as pd /// /// -/// def foo(df: pd.DataFrame) -> int: +/// def func(df: pd.DataFrame) -> int: /// return len(df) /// ``` /// +/// ## Options +/// - `flake8-type-checking.runtime-evaluated-base-classes` +/// - `flake8-type-checking.runtime-evaluated-decorators` +/// /// ## References /// - [PEP 536](https://peps.python.org/pep-0563/#runtime-annotation-resolution-and-type-checking) #[violation] @@ -132,7 +156,15 @@ impl Violation for TypingOnlyThirdPartyImport { /// /// ## Why is this bad? /// Unused imports add a performance overhead at runtime, and risk creating -/// import cycles. +/// import cycles. If an import is _only_ used in typing-only contexts, it can +/// instead be imported conditionally under an `if TYPE_CHECKING:` block to +/// minimize runtime overhead. +/// +/// If a class _requires_ that type annotations be available at runtime (as is +/// the case for Pydantic, SQLAlchemy, and other libraries), consider using +/// the [`flake8-type-checking.runtime-evaluated-base-classes`] and +/// [`flake8-type-checking.runtime-evaluated-decorators`] settings to mark them +/// as such. /// /// ## Example /// ```python @@ -141,7 +173,7 @@ impl Violation for TypingOnlyThirdPartyImport { /// from pathlib import Path /// /// -/// def foo(path: Path) -> str: +/// def func(path: Path) -> str: /// return str(path) /// ``` /// @@ -155,10 +187,14 @@ impl Violation for TypingOnlyThirdPartyImport { /// from pathlib import Path /// /// -/// def foo(path: Path) -> str: +/// def func(path: Path) -> str: /// return str(path) /// ``` /// +/// ## Options +/// - `flake8-type-checking.runtime-evaluated-base-classes` +/// - `flake8-type-checking.runtime-evaluated-decorators` +/// /// ## References /// - [PEP 536](https://peps.python.org/pep-0563/#runtime-annotation-resolution-and-type-checking) #[violation] @@ -190,9 +226,9 @@ pub(crate) fn typing_only_runtime_import( diagnostics: &mut Vec, ) { // Collect all typing-only imports by statement and import type. - let mut errors_by_statement: FxHashMap<(NodeId, ImportType), Vec> = + let mut errors_by_statement: FxHashMap<(StatementId, ImportType), Vec> = FxHashMap::default(); - let mut ignores_by_statement: FxHashMap<(NodeId, ImportType), Vec> = + let mut ignores_by_statement: FxHashMap<(StatementId, ImportType), Vec> = FxHashMap::default(); for binding_id in scope.binding_ids() { @@ -265,7 +301,7 @@ pub(crate) fn typing_only_runtime_import( continue; } - let Some(stmt_id) = binding.source else { + let Some(statement_id) = binding.source else { continue; }; @@ -282,12 +318,12 @@ pub(crate) fn typing_only_runtime_import( }) { ignores_by_statement - .entry((stmt_id, import_type)) + .entry((statement_id, import_type)) .or_default() .push(import); } else { errors_by_statement - .entry((stmt_id, import_type)) + .entry((statement_id, import_type)) .or_default() .push(import); } @@ -296,9 +332,9 @@ pub(crate) fn typing_only_runtime_import( // Generate a diagnostic for every import, but share a fix across all imports within the same // statement (excluding those that are ignored). - for ((stmt_id, import_type), imports) in errors_by_statement { + for ((statement_id, import_type), imports) in errors_by_statement { let fix = if checker.patch(rule_for(import_type)) { - fix_imports(checker, stmt_id, &imports).ok() + fix_imports(checker, statement_id, &imports).ok() } else { None }; @@ -402,12 +438,18 @@ fn is_exempt(name: &str, exempt_modules: &[&str]) -> bool { } /// Generate a [`Fix`] to remove typing-only imports from a runtime context. -fn fix_imports(checker: &Checker, stmt_id: NodeId, imports: &[ImportBinding]) -> Result { - let stmt = checker.semantic().stmts[stmt_id]; - let parent = checker.semantic().stmts.parent(stmt); +fn fix_imports( + checker: &Checker, + statement_id: StatementId, + imports: &[ImportBinding], +) -> Result { + let statement = checker.semantic().statement(statement_id); + let parent = checker.semantic().parent_statement(statement_id); + let member_names: Vec> = imports .iter() - .map(|ImportBinding { import, .. }| import.member_name()) + .map(|ImportBinding { import, .. }| import) + .map(Imported::member_name) .collect(); // Find the first reference across all imports. @@ -422,7 +464,7 @@ fn fix_imports(checker: &Checker, stmt_id: NodeId, imports: &[ImportBinding]) -> // Step 1) Remove the import. let remove_import_edit = autofix::edits::remove_unused_imports( member_names.iter().map(AsRef::as_ref), - stmt, + statement, parent, checker.locator(), checker.stylist(), @@ -432,7 +474,7 @@ fn fix_imports(checker: &Checker, stmt_id: NodeId, imports: &[ImportBinding]) -> // Step 2) Add the import to a `TYPE_CHECKING` block. let add_import_edit = checker.importer().typing_import_edit( &ImportedMembers { - statement: stmt, + statement, names: member_names.iter().map(AsRef::as_ref).collect(), }, at, diff --git a/crates/ruff/src/rules/flake8_type_checking/settings.rs b/crates/ruff/src/rules/flake8_type_checking/settings.rs index 69cd913dae..4e9871e5ec 100644 --- a/crates/ruff/src/rules/flake8_type_checking/settings.rs +++ b/crates/ruff/src/rules/flake8_type_checking/settings.rs @@ -23,6 +23,7 @@ pub struct Options { )] /// Enforce TC001, TC002, and TC003 rules even when valid runtime imports /// are present for the same module. + /// /// See flake8-type-checking's [strict](https://github.com/snok/flake8-type-checking#strict) option. pub strict: Option, #[option( @@ -39,11 +40,19 @@ pub struct Options { default = "[]", value_type = "list[str]", example = r#" - runtime-evaluated-base-classes = ["pydantic.BaseModel"] + runtime-evaluated-base-classes = ["pydantic.BaseModel", "sqlalchemy.orm.DeclarativeBase"] "# )] /// Exempt classes that list any of the enumerated classes as a base class /// from needing to be moved into type-checking blocks. + /// + /// Common examples include Pydantic's `pydantic.BaseModel` and SQLAlchemy's + /// `sqlalchemy.orm.DeclarativeBase`, but can also support user-defined + /// classes that inherit from those base classes. For example, if you define + /// a common `DeclarativeBase` subclass that's used throughout your project + /// (e.g., `class Base(DeclarativeBase) ...` in `base.py`), you can add it to + /// this list (`runtime-evaluated-base-classes = ["base.Base"]`) to exempt + /// models from being moved into type-checking blocks. pub runtime_evaluated_base_classes: Option>, #[option( default = "[]", diff --git a/crates/ruff/src/rules/flake8_type_checking/snapshots/ruff__rules__flake8_type_checking__tests__typing-only-standard-library-import_runtime_evaluated_base_classes_4.py.snap b/crates/ruff/src/rules/flake8_type_checking/snapshots/ruff__rules__flake8_type_checking__tests__typing-only-standard-library-import_runtime_evaluated_base_classes_4.py.snap new file mode 100644 index 0000000000..abbbb06448 --- /dev/null +++ b/crates/ruff/src/rules/flake8_type_checking/snapshots/ruff__rules__flake8_type_checking__tests__typing-only-standard-library-import_runtime_evaluated_base_classes_4.py.snap @@ -0,0 +1,4 @@ +--- +source: crates/ruff/src/rules/flake8_type_checking/mod.rs +--- + diff --git a/crates/ruff/src/rules/flake8_unused_arguments/rules/unused_arguments.rs b/crates/ruff/src/rules/flake8_unused_arguments/rules/unused_arguments.rs index b6bc1e23b7..60be99a590 100644 --- a/crates/ruff/src/rules/flake8_unused_arguments/rules/unused_arguments.rs +++ b/crates/ruff/src/rules/flake8_unused_arguments/rules/unused_arguments.rs @@ -216,7 +216,7 @@ impl Argumentable { fn function( argumentable: Argumentable, parameters: &Parameters, - values: &Scope, + scope: &Scope, semantic: &SemanticModel, dummy_variable_rgx: &Regex, ignore_variadic_names: bool, @@ -241,7 +241,7 @@ fn function( call( argumentable, args, - values, + scope, semantic, dummy_variable_rgx, diagnostics, @@ -252,7 +252,7 @@ fn function( fn method( argumentable: Argumentable, parameters: &Parameters, - values: &Scope, + scope: &Scope, semantic: &SemanticModel, dummy_variable_rgx: &Regex, ignore_variadic_names: bool, @@ -278,7 +278,7 @@ fn method( call( argumentable, args, - values, + scope, semantic, dummy_variable_rgx, diagnostics, @@ -288,13 +288,13 @@ fn method( fn call<'a>( argumentable: Argumentable, parameters: impl Iterator, - values: &Scope, + scope: &Scope, semantic: &SemanticModel, dummy_variable_rgx: &Regex, diagnostics: &mut Vec, ) { diagnostics.extend(parameters.filter_map(|arg| { - let binding = values + let binding = scope .get(arg.name.as_str()) .map(|binding_id| semantic.binding(binding_id))?; if binding.kind.is_argument() @@ -317,6 +317,10 @@ pub(crate) fn unused_arguments( scope: &Scope, diagnostics: &mut Vec, ) { + if scope.uses_locals() { + return; + } + let Some(parent) = &checker.semantic().first_non_type_parent_scope(scope) else { return; }; @@ -328,13 +332,6 @@ pub(crate) fn unused_arguments( body, decorator_list, .. - }) - | ScopeKind::AsyncFunction(ast::StmtAsyncFunctionDef { - name, - parameters, - body, - decorator_list, - .. }) => { match function_type::classify( name, diff --git a/crates/ruff/src/rules/flake8_use_pathlib/rules/path_constructor_current_directory.rs b/crates/ruff/src/rules/flake8_use_pathlib/rules/path_constructor_current_directory.rs index 3b582bc214..2a814c01a6 100644 --- a/crates/ruff/src/rules/flake8_use_pathlib/rules/path_constructor_current_directory.rs +++ b/crates/ruff/src/rules/flake8_use_pathlib/rules/path_constructor_current_directory.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{Arguments, Constant, Expr, ExprCall, ExprConstant}; +use ruff_python_ast::{self as ast, Arguments, Constant, Expr, ExprCall, ExprConstant}; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; @@ -67,7 +67,7 @@ pub(crate) fn path_constructor_current_directory(checker: &mut Checker, expr: &E } let [Expr::Constant(ExprConstant { - value: Constant::Str(value), + value: Constant::Str(ast::StringConstant { value, .. }), kind: _, range, })] = args.as_slice() diff --git a/crates/ruff/src/rules/flynt/helpers.rs b/crates/ruff/src/rules/flynt/helpers.rs index cc93e9b46b..35183bb020 100644 --- a/crates/ruff/src/rules/flynt/helpers.rs +++ b/crates/ruff/src/rules/flynt/helpers.rs @@ -16,7 +16,7 @@ fn to_formatted_value_expr(inner: &Expr) -> Expr { /// Convert a string to a constant string expression. pub(super) fn to_constant_string(s: &str) -> Expr { let node = ast::ExprConstant { - value: Constant::Str(s.to_owned()), + value: s.to_owned().into(), kind: None, range: TextRange::default(), }; @@ -52,14 +52,14 @@ fn is_simple_callee(func: &Expr) -> bool { } /// Convert an expression to a f-string element (if it looks like a good idea). -pub(super) fn to_fstring_elem(expr: &Expr) -> Option { +pub(super) fn to_f_string_element(expr: &Expr) -> Option { match expr { - // These are directly handled by `unparse_fstring_elem`: + // These are directly handled by `unparse_f_string_element`: Expr::Constant(ast::ExprConstant { value: Constant::Str(_), .. }) - | Expr::JoinedStr(_) + | Expr::FString(_) | Expr::FormattedValue(_) => Some(expr.clone()), // These should be pretty safe to wrap in a formatted value. Expr::Constant(ast::ExprConstant { diff --git a/crates/ruff/src/rules/flynt/rules/static_join_to_fstring.rs b/crates/ruff/src/rules/flynt/rules/static_join_to_fstring.rs index 62a9bbb3f6..05c39b937b 100644 --- a/crates/ruff/src/rules/flynt/rules/static_join_to_fstring.rs +++ b/crates/ruff/src/rules/flynt/rules/static_join_to_fstring.rs @@ -61,22 +61,21 @@ fn build_fstring(joiner: &str, joinees: &[Expr]) -> Option { ) }) { let node = ast::ExprConstant { - value: Constant::Str( - joinees - .iter() - .filter_map(|expr| { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(string), - .. - }) = expr - { - Some(string.as_str()) - } else { - None - } - }) - .join(joiner), - ), + value: joinees + .iter() + .filter_map(|expr| { + if let Expr::Constant(ast::ExprConstant { + value: Constant::Str(ast::StringConstant { value, .. }), + .. + }) = expr + { + Some(value.as_str()) + } else { + None + } + }) + .join(joiner) + .into(), range: TextRange::default(), kind: None, }; @@ -87,7 +86,7 @@ fn build_fstring(joiner: &str, joinees: &[Expr]) -> Option { let mut first = true; for expr in joinees { - if expr.is_joined_str_expr() { + if expr.is_f_string_expr() { // Oops, already an f-string. We don't know how to handle those // gracefully right now. return None; @@ -95,11 +94,12 @@ fn build_fstring(joiner: &str, joinees: &[Expr]) -> Option { if !std::mem::take(&mut first) { fstring_elems.push(helpers::to_constant_string(joiner)); } - fstring_elems.push(helpers::to_fstring_elem(expr)?); + fstring_elems.push(helpers::to_f_string_element(expr)?); } - let node = ast::ExprJoinedStr { + let node = ast::ExprFString { values: fstring_elems, + implicit_concatenated: false, range: TextRange::default(), }; Some(node.into()) diff --git a/crates/ruff/src/rules/isort/block.rs b/crates/ruff/src/rules/isort/block.rs index f5a2607d8b..cc32b50a50 100644 --- a/crates/ruff/src/rules/isort/block.rs +++ b/crates/ruff/src/rules/isort/block.rs @@ -89,7 +89,7 @@ impl<'a> BlockBuilder<'a> { // sibling (i.e., as if the comment is the next statement, as // opposed to the class or function). match stmt { - Stmt::FunctionDef(_) | Stmt::AsyncFunctionDef(_) => { + Stmt::FunctionDef(_) => { if helpers::has_comment_break(stmt, self.locator) { Trailer::Sibling } else { @@ -196,12 +196,6 @@ where } self.finalize(None); } - Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { body, .. }) => { - for stmt in body { - self.visit_stmt(stmt); - } - self.finalize(None); - } Stmt::ClassDef(ast::StmtClassDef { body, .. }) => { for stmt in body { self.visit_stmt(stmt); @@ -219,17 +213,6 @@ where } self.finalize(None); } - Stmt::AsyncFor(ast::StmtAsyncFor { body, orelse, .. }) => { - for stmt in body { - self.visit_stmt(stmt); - } - self.finalize(None); - - for stmt in orelse { - self.visit_stmt(stmt); - } - self.finalize(None); - } Stmt::While(ast::StmtWhile { body, orelse, .. }) => { for stmt in body { self.visit_stmt(stmt); @@ -261,12 +244,6 @@ where } self.finalize(None); } - Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) => { - for stmt in body { - self.visit_stmt(stmt); - } - self.finalize(None); - } Stmt::Match(ast::StmtMatch { cases, .. }) => { for match_case in cases { self.visit_match_case(match_case); @@ -277,14 +254,7 @@ where handlers, orelse, finalbody, - range: _, - }) - | Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - range: _, + .. }) => { for except_handler in handlers { self.visit_except_handler(except_handler); diff --git a/crates/ruff/src/rules/isort/mod.rs b/crates/ruff/src/rules/isort/mod.rs index eed06c0e3d..c8780dd26d 100644 --- a/crates/ruff/src/rules/isort/mod.rs +++ b/crates/ruff/src/rules/isort/mod.rs @@ -762,6 +762,7 @@ mod tests { } #[test_case(Path::new("comment.py"))] + #[test_case(Path::new("comments_and_newlines.py"))] #[test_case(Path::new("docstring.py"))] #[test_case(Path::new("docstring.pyi"))] #[test_case(Path::new("docstring_only.py"))] @@ -791,6 +792,7 @@ mod tests { } #[test_case(Path::new("comment.py"))] + #[test_case(Path::new("comments_and_newlines.py"))] #[test_case(Path::new("docstring.py"))] #[test_case(Path::new("docstring.pyi"))] #[test_case(Path::new("docstring_only.py"))] diff --git a/crates/ruff/src/rules/isort/snapshots/ruff__rules__isort__tests__if_elif_else.py.snap b/crates/ruff/src/rules/isort/snapshots/ruff__rules__isort__tests__if_elif_else.py.snap index 514bc775e9..4a9a844881 100644 --- a/crates/ruff/src/rules/isort/snapshots/ruff__rules__isort__tests__if_elif_else.py.snap +++ b/crates/ruff/src/rules/isort/snapshots/ruff__rules__isort__tests__if_elif_else.py.snap @@ -14,9 +14,8 @@ if_elif_else.py:6:1: I001 [*] Import block is un-sorted or un-formatted 3 3 | elif "setuptools" in sys.modules: 4 4 | from setuptools.command.sdist import sdist as _sdist 5 5 | else: -6 |- from setuptools.command.sdist import sdist as _sdist -7 6 | from distutils.command.sdist import sdist as _sdist - 7 |+ - 8 |+ from setuptools.command.sdist import sdist as _sdist + 6 |+ from distutils.command.sdist import sdist as _sdist +6 7 | from setuptools.command.sdist import sdist as _sdist +7 |- from distutils.command.sdist import sdist as _sdist diff --git a/crates/ruff/src/rules/isort/snapshots/ruff__rules__isort__tests__required_import_comments_and_newlines.py.snap b/crates/ruff/src/rules/isort/snapshots/ruff__rules__isort__tests__required_import_comments_and_newlines.py.snap new file mode 100644 index 0000000000..107c3ef147 --- /dev/null +++ b/crates/ruff/src/rules/isort/snapshots/ruff__rules__isort__tests__required_import_comments_and_newlines.py.snap @@ -0,0 +1,20 @@ +--- +source: crates/ruff/src/rules/isort/mod.rs +--- +comments_and_newlines.py:1:1: I002 [*] Missing required import: `from __future__ import annotations` + | +1 | #!/usr/bin/env python3 + | I002 +2 | # A copyright notice could go here + | + = help: Insert required import: `from future import annotations` + +ℹ Fix +2 2 | # A copyright notice could go here +3 3 | +4 4 | # A linter directive could go here + 5 |+from __future__ import annotations +5 6 | +6 7 | x = 1 + + diff --git a/crates/ruff/src/rules/isort/snapshots/ruff__rules__isort__tests__required_import_with_alias_comments_and_newlines.py.snap b/crates/ruff/src/rules/isort/snapshots/ruff__rules__isort__tests__required_import_with_alias_comments_and_newlines.py.snap new file mode 100644 index 0000000000..a9ea7adf2e --- /dev/null +++ b/crates/ruff/src/rules/isort/snapshots/ruff__rules__isort__tests__required_import_with_alias_comments_and_newlines.py.snap @@ -0,0 +1,20 @@ +--- +source: crates/ruff/src/rules/isort/mod.rs +--- +comments_and_newlines.py:1:1: I002 [*] Missing required import: `from __future__ import annotations as _annotations` + | +1 | #!/usr/bin/env python3 + | I002 +2 | # A copyright notice could go here + | + = help: Insert required import: `from future import annotations as _annotations` + +ℹ Fix +2 2 | # A copyright notice could go here +3 3 | +4 4 | # A linter directive could go here + 5 |+from __future__ import annotations as _annotations +5 6 | +6 7 | x = 1 + + diff --git a/crates/ruff/src/rules/mccabe/rules/function_is_too_complex.rs b/crates/ruff/src/rules/mccabe/rules/function_is_too_complex.rs index 927ae37b5c..c56ae7e2ed 100644 --- a/crates/ruff/src/rules/mccabe/rules/function_is_too_complex.rs +++ b/crates/ruff/src/rules/mccabe/rules/function_is_too_complex.rs @@ -82,14 +82,12 @@ fn get_complexity_number(stmts: &[Stmt]) -> usize { complexity += get_complexity_number(&clause.body); } } - Stmt::For(ast::StmtFor { body, orelse, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { body, orelse, .. }) => { + Stmt::For(ast::StmtFor { body, orelse, .. }) => { complexity += 1; complexity += get_complexity_number(body); complexity += get_complexity_number(orelse); } - Stmt::With(ast::StmtWith { body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) => { + Stmt::With(ast::StmtWith { body, .. }) => { complexity += get_complexity_number(body); } Stmt::While(ast::StmtWhile { body, orelse, .. }) => { @@ -108,14 +106,7 @@ fn get_complexity_number(stmts: &[Stmt]) -> usize { handlers, orelse, finalbody, - range: _, - }) - | Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - range: _, + .. }) => { complexity += get_complexity_number(body); if !orelse.is_empty() { @@ -131,8 +122,7 @@ fn get_complexity_number(stmts: &[Stmt]) -> usize { complexity += get_complexity_number(body); } } - Stmt::FunctionDef(ast::StmtFunctionDef { body, .. }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { body, .. }) => { + Stmt::FunctionDef(ast::StmtFunctionDef { body, .. }) => { complexity += 1; complexity += get_complexity_number(body); } diff --git a/crates/ruff/src/rules/pandas_vet/helpers.rs b/crates/ruff/src/rules/pandas_vet/helpers.rs index 1136bfa1c7..c0952f61af 100644 --- a/crates/ruff/src/rules/pandas_vet/helpers.rs +++ b/crates/ruff/src/rules/pandas_vet/helpers.rs @@ -1,4 +1,3 @@ -use ruff_python_ast as ast; use ruff_python_ast::Expr; use ruff_python_semantic::{BindingKind, Imported, SemanticModel}; @@ -26,23 +25,33 @@ pub(super) fn test_expression(expr: &Expr, semantic: &SemanticModel) -> Resoluti | Expr::ListComp(_) | Expr::DictComp(_) | Expr::GeneratorExp(_) => Resolution::IrrelevantExpression, - Expr::Name(ast::ExprName { id, .. }) => semantic.find_binding(id).map_or( - Resolution::IrrelevantBinding, - |binding| match &binding.kind { - BindingKind::Annotation - | BindingKind::Argument - | BindingKind::Assignment - | BindingKind::NamedExprAssignment - | BindingKind::UnpackedAssignment - | BindingKind::LoopVar - | BindingKind::Global - | BindingKind::Nonlocal(_) => Resolution::RelevantLocal, - BindingKind::Import(import) if matches!(import.call_path(), ["pandas"]) => { - Resolution::PandasModule - } - _ => Resolution::IrrelevantBinding, - }, - ), + Expr::Name(name) => { + semantic + .resolve_name(name) + .map_or(Resolution::IrrelevantBinding, |id| { + match &semantic.binding(id).kind { + BindingKind::Argument => { + // Avoid, e.g., `self.values`. + if matches!(name.id.as_str(), "self" | "cls") { + Resolution::IrrelevantBinding + } else { + Resolution::RelevantLocal + } + } + BindingKind::Annotation + | BindingKind::Assignment + | BindingKind::NamedExprAssignment + | BindingKind::UnpackedAssignment + | BindingKind::LoopVar + | BindingKind::Global + | BindingKind::Nonlocal(_) => Resolution::RelevantLocal, + BindingKind::Import(import) if matches!(import.call_path(), ["pandas"]) => { + Resolution::PandasModule + } + _ => Resolution::IrrelevantBinding, + } + }) + } _ => Resolution::RelevantLocal, } } diff --git a/crates/ruff/src/rules/pandas_vet/mod.rs b/crates/ruff/src/rules/pandas_vet/mod.rs index b57f0836df..b2c2d150fe 100644 --- a/crates/ruff/src/rules/pandas_vet/mod.rs +++ b/crates/ruff/src/rules/pandas_vet/mod.rs @@ -209,6 +209,23 @@ mod tests { "#, "PD011_pass_values_call" )] + #[test_case( + r#" + import pandas as pd + x = pd.DataFrame() + x.values = 1 + "#, + "PD011_pass_values_store" + )] + #[test_case( + r#" + class Class: + def __init__(self, values: str) -> None: + self.values = values + print(self.values) + "#, + "PD011_pass_values_instance" + )] #[test_case( r#" import pandas as pd diff --git a/crates/ruff/src/rules/pandas_vet/rules/attr.rs b/crates/ruff/src/rules/pandas_vet/rules/attr.rs index de8981c63d..05f3505db7 100644 --- a/crates/ruff/src/rules/pandas_vet/rules/attr.rs +++ b/crates/ruff/src/rules/pandas_vet/rules/attr.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{Expr, Ranged}; +use ruff_python_ast::{self as ast, Expr, ExprContext, Ranged}; use ruff_diagnostics::Violation; use ruff_diagnostics::{Diagnostic, DiagnosticKind}; @@ -44,8 +44,14 @@ impl Violation for PandasUseOfDotValues { } } -pub(crate) fn attr(checker: &mut Checker, attr: &str, value: &Expr, attr_expr: &Expr) { - let violation: DiagnosticKind = match attr { +pub(crate) fn attr(checker: &mut Checker, attribute: &ast::ExprAttribute) { + // Avoid, e.g., `x.values = y`. + if matches!(attribute.ctx, ExprContext::Store | ExprContext::Del) { + return; + } + + let violation: DiagnosticKind = match attribute.attr.as_str() { + // PD011 "values" if checker.settings.rules.enabled(Rule::PandasUseOfDotValues) => { PandasUseOfDotValues.into() } @@ -53,7 +59,7 @@ pub(crate) fn attr(checker: &mut Checker, attr: &str, value: &Expr, attr_expr: & }; // Avoid flagging on function calls (e.g., `df.values()`). - if let Some(parent) = checker.semantic().expr_parent() { + if let Some(parent) = checker.semantic().current_expression_parent() { if matches!(parent, Expr::Call(_)) { return; } @@ -62,7 +68,7 @@ pub(crate) fn attr(checker: &mut Checker, attr: &str, value: &Expr, attr_expr: & // Avoid flagging on non-DataFrames (e.g., `{"a": 1}.values`), and on irrelevant bindings // (like imports). if !matches!( - test_expression(value, checker.semantic()), + test_expression(attribute.value.as_ref(), checker.semantic()), Resolution::RelevantLocal ) { return; @@ -70,5 +76,5 @@ pub(crate) fn attr(checker: &mut Checker, attr: &str, value: &Expr, attr_expr: & checker .diagnostics - .push(Diagnostic::new(violation, attr_expr.range())); + .push(Diagnostic::new(violation, attribute.range())); } diff --git a/crates/ruff/src/rules/pandas_vet/rules/inplace_argument.rs b/crates/ruff/src/rules/pandas_vet/rules/inplace_argument.rs index 67f27c51f7..7cc11c2025 100644 --- a/crates/ruff/src/rules/pandas_vet/rules/inplace_argument.rs +++ b/crates/ruff/src/rules/pandas_vet/rules/inplace_argument.rs @@ -2,8 +2,6 @@ use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::is_const_true; use ruff_python_ast::{self as ast, Keyword, PySourceType, Ranged}; -use ruff_python_semantic::BindingKind; -use ruff_python_semantic::Imported; use ruff_source_file::Locator; use crate::autofix::edits::{remove_argument, Parentheses}; @@ -53,20 +51,12 @@ impl Violation for PandasUseOfInplaceArgument { /// PD002 pub(crate) fn inplace_argument(checker: &mut Checker, call: &ast::ExprCall) { // If the function was imported from another module, and it's _not_ Pandas, abort. - if let Some(call_path) = checker.semantic().resolve_call_path(&call.func) { - if !call_path - .first() - .and_then(|module| checker.semantic().find_binding(module)) - .is_some_and(|binding| { - if let BindingKind::Import(import) = &binding.kind { - matches!(import.call_path(), ["pandas"]) - } else { - false - } - }) - { - return; - } + if checker + .semantic() + .resolve_call_path(&call.func) + .is_some_and(|call_path| !matches!(call_path.as_slice(), ["pandas", ..])) + { + return; } let mut seen_star = false; @@ -84,14 +74,9 @@ pub(crate) fn inplace_argument(checker: &mut Checker, call: &ast::ExprCall) { // the star argument _doesn't_ contain an override). // 2. The call is part of a larger expression (we're converting an expression to a // statement, and expressions can't contain statements). - // 3. The call is in a lambda (we can't assign to a variable in a lambda). This - // should be unnecessary, as lambdas are expressions, and so (2) should apply, - // but we don't currently restore expression stacks when parsing deferred nodes, - // and so the parent is lost. if !seen_star - && checker.semantic().stmt().is_expr_stmt() - && checker.semantic().expr_parent().is_none() - && !checker.semantic().scope().kind.is_lambda() + && checker.semantic().current_statement().is_expr_stmt() + && checker.semantic().current_expression_parent().is_none() { if let Some(fix) = convert_inplace_argument_to_assignment( call, diff --git a/crates/ruff/src/rules/pandas_vet/rules/read_table.rs b/crates/ruff/src/rules/pandas_vet/rules/read_table.rs index 9f856ba82d..fb03d56ef2 100644 --- a/crates/ruff/src/rules/pandas_vet/rules/read_table.rs +++ b/crates/ruff/src/rules/pandas_vet/rules/read_table.rs @@ -51,14 +51,14 @@ pub(crate) fn use_of_read_table(checker: &mut Checker, call: &ast::ExprCall) { .is_some_and(|call_path| matches!(call_path.as_slice(), ["pandas", "read_table"])) { if let Some(Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), + value: Constant::Str(ast::StringConstant { value, .. }), .. })) = call .arguments .find_keyword("sep") .map(|keyword| &keyword.value) { - if value.as_str() == "," { + if value == "," { checker .diagnostics .push(Diagnostic::new(PandasUseOfDotReadTable, call.func.range())); diff --git a/crates/ruff/src/rules/pandas_vet/snapshots/ruff__rules__pandas_vet__tests__PD011_pass_values_instance.snap b/crates/ruff/src/rules/pandas_vet/snapshots/ruff__rules__pandas_vet__tests__PD011_pass_values_instance.snap new file mode 100644 index 0000000000..cee5b2f842 --- /dev/null +++ b/crates/ruff/src/rules/pandas_vet/snapshots/ruff__rules__pandas_vet__tests__PD011_pass_values_instance.snap @@ -0,0 +1,4 @@ +--- +source: crates/ruff/src/rules/pandas_vet/mod.rs +--- + diff --git a/crates/ruff/src/rules/pandas_vet/snapshots/ruff__rules__pandas_vet__tests__PD011_pass_values_store.snap b/crates/ruff/src/rules/pandas_vet/snapshots/ruff__rules__pandas_vet__tests__PD011_pass_values_store.snap new file mode 100644 index 0000000000..cee5b2f842 --- /dev/null +++ b/crates/ruff/src/rules/pandas_vet/snapshots/ruff__rules__pandas_vet__tests__PD011_pass_values_store.snap @@ -0,0 +1,4 @@ +--- +source: crates/ruff/src/rules/pandas_vet/mod.rs +--- + diff --git a/crates/ruff/src/rules/pep8_naming/rules/mixed_case_variable_in_class_scope.rs b/crates/ruff/src/rules/pep8_naming/rules/mixed_case_variable_in_class_scope.rs index 15770fb614..ac796dfe79 100644 --- a/crates/ruff/src/rules/pep8_naming/rules/mixed_case_variable_in_class_scope.rs +++ b/crates/ruff/src/rules/pep8_naming/rules/mixed_case_variable_in_class_scope.rs @@ -69,7 +69,7 @@ pub(crate) fn mixed_case_variable_in_class_scope( return; } - let parent = checker.semantic().stmt(); + let parent = checker.semantic().current_statement(); if helpers::is_named_tuple_assignment(parent, checker.semantic()) || helpers::is_typed_dict_class(arguments, checker.semantic()) diff --git a/crates/ruff/src/rules/pep8_naming/rules/mixed_case_variable_in_global_scope.rs b/crates/ruff/src/rules/pep8_naming/rules/mixed_case_variable_in_global_scope.rs index a280e85286..4eb648fe8f 100644 --- a/crates/ruff/src/rules/pep8_naming/rules/mixed_case_variable_in_global_scope.rs +++ b/crates/ruff/src/rules/pep8_naming/rules/mixed_case_variable_in_global_scope.rs @@ -75,7 +75,7 @@ pub(crate) fn mixed_case_variable_in_global_scope(checker: &mut Checker, expr: & return; } - let parent = checker.semantic().stmt(); + let parent = checker.semantic().current_statement(); if helpers::is_named_tuple_assignment(parent, checker.semantic()) { return; } diff --git a/crates/ruff/src/rules/pep8_naming/rules/non_lowercase_variable_in_function.rs b/crates/ruff/src/rules/pep8_naming/rules/non_lowercase_variable_in_function.rs index 87383353aa..41a7fea0ca 100644 --- a/crates/ruff/src/rules/pep8_naming/rules/non_lowercase_variable_in_function.rs +++ b/crates/ruff/src/rules/pep8_naming/rules/non_lowercase_variable_in_function.rs @@ -65,7 +65,7 @@ pub(crate) fn non_lowercase_variable_in_function(checker: &mut Checker, expr: &E return; } - let parent = checker.semantic().stmt(); + let parent = checker.semantic().current_statement(); if helpers::is_named_tuple_assignment(parent, checker.semantic()) || helpers::is_typed_dict_assignment(parent, checker.semantic()) || helpers::is_type_var_assignment(parent, checker.semantic()) diff --git a/crates/ruff/src/rules/pep8_naming/settings.rs b/crates/ruff/src/rules/pep8_naming/settings.rs index 5e8bbe23d3..0f67a8c19f 100644 --- a/crates/ruff/src/rules/pep8_naming/settings.rs +++ b/crates/ruff/src/rules/pep8_naming/settings.rs @@ -114,7 +114,7 @@ impl TryFrom for Settings { .ignore_names .unwrap_or_else(default_ignore_names) .into_iter() - .chain(options.extend_ignore_names.unwrap_or_default().into_iter()) + .chain(options.extend_ignore_names.unwrap_or_default()) .map(|name| IdentifierPattern::new(&name).map_err(SettingsError::InvalidIgnoreName)) .collect::, Self::Error>>()?, classmethod_decorators: options.classmethod_decorators.unwrap_or_default(), diff --git a/crates/ruff/src/rules/perflint/mod.rs b/crates/ruff/src/rules/perflint/mod.rs index 291bfcd207..3e196d479d 100644 --- a/crates/ruff/src/rules/perflint/mod.rs +++ b/crates/ruff/src/rules/perflint/mod.rs @@ -10,6 +10,7 @@ mod tests { use crate::assert_messages; use crate::registry::Rule; + use crate::settings::types::PythonVersion; use crate::settings::Settings; use crate::test::test_path; @@ -22,7 +23,7 @@ mod tests { let snapshot = format!("{}_{}", rule_code.noqa_code(), path.to_string_lossy()); let diagnostics = test_path( Path::new("perflint").join(path).as_path(), - &Settings::for_rule(rule_code), + &Settings::for_rule(rule_code).with_target_version(PythonVersion::Py310), )?; assert_messages!(snapshot, diagnostics); Ok(()) diff --git a/crates/ruff/src/rules/perflint/rules/incorrect_dict_iterator.rs b/crates/ruff/src/rules/perflint/rules/incorrect_dict_iterator.rs index 677d655525..0419d1790b 100644 --- a/crates/ruff/src/rules/perflint/rules/incorrect_dict_iterator.rs +++ b/crates/ruff/src/rules/perflint/rules/incorrect_dict_iterator.rs @@ -148,9 +148,11 @@ impl fmt::Display for DictSubset { } /// Returns `true` if the given expression is either an unused value or a tuple of unused values. -fn is_unused(expr: &Expr, model: &SemanticModel) -> bool { +fn is_unused(expr: &Expr, semantic: &SemanticModel) -> bool { match expr { - Expr::Tuple(ast::ExprTuple { elts, .. }) => elts.iter().all(|expr| is_unused(expr, model)), + Expr::Tuple(ast::ExprTuple { elts, .. }) => { + elts.iter().all(|expr| is_unused(expr, semantic)) + } Expr::Name(ast::ExprName { id, .. }) => { // Treat a variable as used if it has any usages, _or_ it's shadowed by another variable // with usages. @@ -167,10 +169,10 @@ fn is_unused(expr: &Expr, model: &SemanticModel) -> bool { // // print(bar) // ``` - let scope = model.scope(); + let scope = semantic.current_scope(); scope .get_all(id) - .map(|binding_id| model.binding(binding_id)) + .map(|binding_id| semantic.binding(binding_id)) .filter(|binding| binding.range.start() >= expr.range().start()) .all(|binding| !binding.is_used()) } diff --git a/crates/ruff/src/rules/perflint/rules/try_except_in_loop.rs b/crates/ruff/src/rules/perflint/rules/try_except_in_loop.rs index ffa8a428fa..84e14e5386 100644 --- a/crates/ruff/src/rules/perflint/rules/try_except_in_loop.rs +++ b/crates/ruff/src/rules/perflint/rules/try_except_in_loop.rs @@ -1,7 +1,7 @@ -use ruff_python_ast::{self as ast, Ranged, Stmt}; - use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::statement_visitor::{walk_stmt, StatementVisitor}; +use ruff_python_ast::{self as ast, Ranged, Stmt}; use crate::checkers::ast::Checker; use crate::settings::types::PythonVersion; @@ -35,6 +35,7 @@ use crate::settings::types::PythonVersion; /// int_numbers.append(int(num)) /// except ValueError as e: /// print(f"Couldn't convert to integer: {e}") +/// break /// ``` /// /// Use instead: @@ -67,7 +68,7 @@ pub(crate) fn try_except_in_loop(checker: &mut Checker, body: &[Stmt]) { return; } - let [Stmt::Try(ast::StmtTry { handlers, .. })] = body else { + let [Stmt::Try(ast::StmtTry { handlers, body, .. })] = body else { return; }; @@ -75,7 +76,37 @@ pub(crate) fn try_except_in_loop(checker: &mut Checker, body: &[Stmt]) { return; }; + // Avoid flagging `try`-`except` blocks that contain `break` or `continue`, + // which rely on the exception handling mechanism. + if has_break_or_continue(body) { + return; + } + checker .diagnostics .push(Diagnostic::new(TryExceptInLoop, handler.range())); } + +/// Returns `true` if a `break` or `continue` statement is present in `body`. +fn has_break_or_continue(body: &[Stmt]) -> bool { + let mut visitor = LoopControlFlowVisitor::default(); + visitor.visit_body(body); + visitor.has_break_or_continue +} + +#[derive(Debug, Default)] +struct LoopControlFlowVisitor { + has_break_or_continue: bool, +} + +impl StatementVisitor<'_> for LoopControlFlowVisitor { + fn visit_stmt(&mut self, stmt: &Stmt) { + match stmt { + Stmt::Break(_) | Stmt::Continue(_) => self.has_break_or_continue = true, + Stmt::FunctionDef(_) | Stmt::ClassDef(_) => { + // Don't recurse. + } + _ => walk_stmt(self, stmt), + } + } +} diff --git a/crates/ruff/src/rules/perflint/rules/unnecessary_list_cast.rs b/crates/ruff/src/rules/perflint/rules/unnecessary_list_cast.rs index 6ea2569024..94385fca3b 100644 --- a/crates/ruff/src/rules/perflint/rules/unnecessary_list_cast.rs +++ b/crates/ruff/src/rules/perflint/rules/unnecessary_list_cast.rs @@ -102,12 +102,12 @@ pub(crate) fn unnecessary_list_cast(checker: &mut Checker, iter: &Expr) { range: iterable_range, .. }) => { - let scope = checker.semantic().scope(); + let scope = checker.semantic().current_scope(); if let Some(binding_id) = scope.get(id) { let binding = checker.semantic().binding(binding_id); if binding.kind.is_assignment() || binding.kind.is_named_expr_assignment() { if let Some(parent_id) = binding.source { - let parent = checker.semantic().stmts[parent_id]; + let parent = checker.semantic().statement(parent_id); if let Stmt::Assign(ast::StmtAssign { value, .. }) | Stmt::AnnAssign(ast::StmtAnnAssign { value: Some(value), .. diff --git a/crates/ruff/src/rules/pycodestyle/helpers.rs b/crates/ruff/src/rules/pycodestyle/helpers.rs index 12ae3a0a39..76a752b8f9 100644 --- a/crates/ruff/src/rules/pycodestyle/helpers.rs +++ b/crates/ruff/src/rules/pycodestyle/helpers.rs @@ -10,7 +10,7 @@ pub(super) fn is_ambiguous_name(name: &str) -> bool { name == "l" || name == "I" || name == "O" } -pub(super) fn compare( +pub(super) fn generate_comparison( left: &Expr, ops: &[CmpOp], comparators: &[Expr], @@ -52,8 +52,11 @@ pub(super) fn is_overlong( task_tags: &[String], tab_size: TabSize, ) -> Option { - // Each character is between 1-4 bytes. If the number of bytes is smaller than the limit, it cannot be overlong. - if line.len() < limit.get() { + // The maximum width of the line is the number of bytes multiplied by the tab size (the + // worst-case scenario is that the line is all tabs). If the maximum width is less than the + // limit, then the line is not overlong. + let max_width = line.len() * tab_size.as_usize(); + if max_width < limit.get() { return None; } diff --git a/crates/ruff/src/rules/pycodestyle/mod.rs b/crates/ruff/src/rules/pycodestyle/mod.rs index 9810feb01c..95495cbae7 100644 --- a/crates/ruff/src/rules/pycodestyle/mod.rs +++ b/crates/ruff/src/rules/pycodestyle/mod.rs @@ -6,6 +6,7 @@ pub(crate) mod helpers; #[cfg(test)] mod tests { + use std::num::NonZeroU8; use std::path::Path; use anyhow::Result; @@ -204,7 +205,8 @@ mod tests { let diagnostics = test_path( Path::new("pycodestyle/E501_2.py"), &settings::Settings { - tab_size: tab_size.into(), + tab_size: NonZeroU8::new(tab_size).unwrap().into(), + line_length: LineLength::from(6), ..settings::Settings::for_rule(Rule::LineTooLong) }, )?; diff --git a/crates/ruff/src/rules/pycodestyle/rules/imports.rs b/crates/ruff/src/rules/pycodestyle/rules/imports.rs index 4085b6aa66..8e20077d34 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/imports.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/imports.rs @@ -1,8 +1,6 @@ -use ruff_python_ast::{Alias, Ranged, Stmt}; - use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_source_file::Locator; +use ruff_python_ast::{Alias, Ranged, Stmt}; use crate::checkers::ast::Checker; @@ -81,12 +79,8 @@ pub(crate) fn multiple_imports_on_one_line(checker: &mut Checker, stmt: &Stmt, n } /// E402 -pub(crate) fn module_import_not_at_top_of_file( - checker: &mut Checker, - stmt: &Stmt, - locator: &Locator, -) { - if checker.semantic().seen_import_boundary() && locator.is_at_start_of_line(stmt.start()) { +pub(crate) fn module_import_not_at_top_of_file(checker: &mut Checker, stmt: &Stmt) { + if checker.semantic().seen_import_boundary() && checker.semantic().at_top_level() { checker .diagnostics .push(Diagnostic::new(ModuleImportNotAtTopOfFile, stmt.range())); diff --git a/crates/ruff/src/rules/pycodestyle/rules/lambda_assignment.rs b/crates/ruff/src/rules/pycodestyle/rules/lambda_assignment.rs index f909ac3fea..d06d032d4e 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/lambda_assignment.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/lambda_assignment.rs @@ -116,10 +116,10 @@ pub(crate) fn lambda_assignment( // rewriting it as a function declaration may break type-checking. // See: https://github.com/astral-sh/ruff/issues/3046 // See: https://github.com/astral-sh/ruff/issues/5421 - if (annotation.is_some() && checker.semantic().scope().kind.is_class()) + if (annotation.is_some() && checker.semantic().current_scope().kind.is_class()) || checker .semantic() - .scope() + .current_scope() .get_all(id) .any(|binding_id| checker.semantic().binding(binding_id).kind.is_annotation()) { @@ -220,6 +220,7 @@ fn function( }) .collect::>(); let func = Stmt::FunctionDef(ast::StmtFunctionDef { + is_async: false, name: Identifier::new(name.to_string(), TextRange::default()), parameters: Box::new(Parameters { posonlyargs: new_posonlyargs, @@ -236,6 +237,7 @@ fn function( } } let func = Stmt::FunctionDef(ast::StmtFunctionDef { + is_async: false, name: Identifier::new(name.to_string(), TextRange::default()), parameters: Box::new(parameters.clone()), body: vec![body], diff --git a/crates/ruff/src/rules/pycodestyle/rules/literal_comparisons.rs b/crates/ruff/src/rules/pycodestyle/rules/literal_comparisons.rs index 1a75983d89..d16fa579f7 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/literal_comparisons.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/literal_comparisons.rs @@ -1,15 +1,15 @@ -use itertools::izip; -use ruff_python_ast::{self as ast, CmpOp, Constant, Expr, Ranged}; use rustc_hash::FxHashMap; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers; use ruff_python_ast::helpers::is_const_none; +use ruff_python_ast::{self as ast, CmpOp, Constant, Expr, Ranged}; use crate::checkers::ast::Checker; +use crate::codes::Rule; use crate::registry::AsRule; -use crate::rules::pycodestyle::helpers::compare; +use crate::rules::pycodestyle::helpers::generate_comparison; #[derive(Debug, PartialEq, Eq, Copy, Clone)] enum EqCmpOp { @@ -130,15 +130,7 @@ impl AlwaysAutofixableViolation for TrueFalseComparison { } /// E711, E712 -pub(crate) fn literal_comparisons( - checker: &mut Checker, - expr: &Expr, - left: &Expr, - ops: &[CmpOp], - comparators: &[Expr], - check_none_comparisons: bool, - check_true_false_comparisons: bool, -) { +pub(crate) fn literal_comparisons(checker: &mut Checker, compare: &ast::ExprCompare) { // Mapping from (bad operator index) to (replacement operator). As we iterate // through the list of operators, we apply "dummy" fixes for each error, // then replace the entire expression at the end with one "real" fix, to @@ -146,15 +138,18 @@ pub(crate) fn literal_comparisons( let mut bad_ops: FxHashMap = FxHashMap::default(); let mut diagnostics: Vec = vec![]; - let op = ops.first().unwrap(); - // Check `left`. - let mut comparator = left; - let next = &comparators[0]; + let mut comparator = compare.left.as_ref(); + let [op, ..] = compare.ops.as_slice() else { + return; + }; + let [next, ..] = compare.comparators.as_slice() else { + return; + }; if !helpers::is_constant_non_singleton(next) { if let Some(op) = EqCmpOp::try_from(*op) { - if check_none_comparisons && is_const_none(comparator) { + if checker.enabled(Rule::NoneComparison) && is_const_none(comparator) { match op { EqCmpOp::Eq => { let diagnostic = Diagnostic::new(NoneComparison(op), comparator.range()); @@ -173,7 +168,7 @@ pub(crate) fn literal_comparisons( } } - if check_true_false_comparisons { + if checker.enabled(Rule::TrueFalseComparison) { if let Expr::Constant(ast::ExprConstant { value: Constant::Bool(value), kind: None, @@ -208,59 +203,66 @@ pub(crate) fn literal_comparisons( } // Check each comparator in order. - for (idx, (op, next)) in izip!(ops, comparators).enumerate() { + for (index, (op, next)) in compare + .ops + .iter() + .zip(compare.comparators.iter()) + .enumerate() + { if helpers::is_constant_non_singleton(comparator) { comparator = next; continue; } - if let Some(op) = EqCmpOp::try_from(*op) { - if check_none_comparisons && is_const_none(next) { + let Some(op) = EqCmpOp::try_from(*op) else { + continue; + }; + + if checker.enabled(Rule::NoneComparison) && is_const_none(next) { + match op { + EqCmpOp::Eq => { + let diagnostic = Diagnostic::new(NoneComparison(op), next.range()); + if checker.patch(diagnostic.kind.rule()) { + bad_ops.insert(index, CmpOp::Is); + } + diagnostics.push(diagnostic); + } + EqCmpOp::NotEq => { + let diagnostic = Diagnostic::new(NoneComparison(op), next.range()); + if checker.patch(diagnostic.kind.rule()) { + bad_ops.insert(index, CmpOp::IsNot); + } + diagnostics.push(diagnostic); + } + } + } + + if checker.enabled(Rule::TrueFalseComparison) { + if let Expr::Constant(ast::ExprConstant { + value: Constant::Bool(value), + kind: None, + range: _, + }) = next + { match op { EqCmpOp::Eq => { - let diagnostic = Diagnostic::new(NoneComparison(op), next.range()); + let diagnostic = + Diagnostic::new(TrueFalseComparison(*value, op), next.range()); if checker.patch(diagnostic.kind.rule()) { - bad_ops.insert(idx, CmpOp::Is); + bad_ops.insert(index, CmpOp::Is); } diagnostics.push(diagnostic); } EqCmpOp::NotEq => { - let diagnostic = Diagnostic::new(NoneComparison(op), next.range()); + let diagnostic = + Diagnostic::new(TrueFalseComparison(*value, op), next.range()); if checker.patch(diagnostic.kind.rule()) { - bad_ops.insert(idx, CmpOp::IsNot); + bad_ops.insert(index, CmpOp::IsNot); } diagnostics.push(diagnostic); } } } - - if check_true_false_comparisons { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Bool(value), - kind: None, - range: _, - }) = next - { - match op { - EqCmpOp::Eq => { - let diagnostic = - Diagnostic::new(TrueFalseComparison(*value, op), next.range()); - if checker.patch(diagnostic.kind.rule()) { - bad_ops.insert(idx, CmpOp::Is); - } - diagnostics.push(diagnostic); - } - EqCmpOp::NotEq => { - let diagnostic = - Diagnostic::new(TrueFalseComparison(*value, op), next.range()); - if checker.patch(diagnostic.kind.rule()) { - bad_ops.insert(idx, CmpOp::IsNot); - } - diagnostics.push(diagnostic); - } - } - } - } } comparator = next; @@ -270,17 +272,19 @@ pub(crate) fn literal_comparisons( // `noqa`, but another doesn't, both will be removed here. if !bad_ops.is_empty() { // Replace the entire comparison expression. - let ops = ops + let ops = compare + .ops .iter() .enumerate() .map(|(idx, op)| bad_ops.get(&idx).unwrap_or(op)) .copied() .collect::>(); - let content = compare(left, &ops, comparators, checker.locator()); + let content = + generate_comparison(&compare.left, &ops, &compare.comparators, checker.locator()); for diagnostic in &mut diagnostics { diagnostic.set_fix(Fix::suggested(Edit::range_replacement( content.to_string(), - expr.range(), + compare.range(), ))); } } diff --git a/crates/ruff/src/rules/pycodestyle/rules/not_tests.rs b/crates/ruff/src/rules/pycodestyle/rules/not_tests.rs index e77c1ebfa1..0ee126d046 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/not_tests.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/not_tests.rs @@ -1,11 +1,10 @@ -use ruff_python_ast::{self as ast, CmpOp, Expr, Ranged, UnaryOp}; - use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::{self as ast, CmpOp, Expr, Ranged}; use crate::checkers::ast::Checker; -use crate::registry::AsRule; -use crate::rules::pycodestyle::helpers::compare; +use crate::registry::{AsRule, Rule}; +use crate::rules::pycodestyle::helpers::generate_comparison; /// ## What it does /// Checks for negative comparison using `not {foo} in {bar}`. @@ -74,54 +73,46 @@ impl AlwaysAutofixableViolation for NotIsTest { } /// E713, E714 -pub(crate) fn not_tests( - checker: &mut Checker, - expr: &Expr, - op: UnaryOp, - operand: &Expr, - check_not_in: bool, - check_not_is: bool, -) { - if matches!(op, UnaryOp::Not) { - if let Expr::Compare(ast::ExprCompare { - left, - ops, - comparators, - range: _, - }) = operand - { - if !matches!(&ops[..], [CmpOp::In | CmpOp::Is]) { - return; - } - for op in ops { - match op { - CmpOp::In => { - if check_not_in { - let mut diagnostic = Diagnostic::new(NotInTest, operand.range()); - if checker.patch(diagnostic.kind.rule()) { - diagnostic.set_fix(Fix::automatic(Edit::range_replacement( - compare(left, &[CmpOp::NotIn], comparators, checker.locator()), - expr.range(), - ))); - } - checker.diagnostics.push(diagnostic); - } - } - CmpOp::Is => { - if check_not_is { - let mut diagnostic = Diagnostic::new(NotIsTest, operand.range()); - if checker.patch(diagnostic.kind.rule()) { - diagnostic.set_fix(Fix::automatic(Edit::range_replacement( - compare(left, &[CmpOp::IsNot], comparators, checker.locator()), - expr.range(), - ))); - } - checker.diagnostics.push(diagnostic); - } - } - _ => {} +pub(crate) fn not_tests(checker: &mut Checker, unary_op: &ast::ExprUnaryOp) { + if !unary_op.op.is_not() { + return; + } + + let Expr::Compare(ast::ExprCompare { + left, + ops, + comparators, + range: _, + }) = unary_op.operand.as_ref() + else { + return; + }; + + match ops.as_slice() { + [CmpOp::In] => { + if checker.enabled(Rule::NotInTest) { + let mut diagnostic = Diagnostic::new(NotInTest, unary_op.operand.range()); + if checker.patch(diagnostic.kind.rule()) { + diagnostic.set_fix(Fix::automatic(Edit::range_replacement( + generate_comparison(left, &[CmpOp::NotIn], comparators, checker.locator()), + unary_op.range(), + ))); } + checker.diagnostics.push(diagnostic); } } + [CmpOp::Is] => { + if checker.enabled(Rule::NotIsTest) { + let mut diagnostic = Diagnostic::new(NotIsTest, unary_op.operand.range()); + if checker.patch(diagnostic.kind.rule()) { + diagnostic.set_fix(Fix::automatic(Edit::range_replacement( + generate_comparison(left, &[CmpOp::IsNot], comparators, checker.locator()), + unary_op.range(), + ))); + } + checker.diagnostics.push(diagnostic); + } + } + _ => {} } } diff --git a/crates/ruff/src/rules/pycodestyle/rules/type_comparison.rs b/crates/ruff/src/rules/pycodestyle/rules/type_comparison.rs index 2dc6887341..d0ae2d70a9 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/type_comparison.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/type_comparison.rs @@ -103,7 +103,15 @@ pub(crate) fn type_comparison(checker: &mut Checker, compare: &ast::ExprCompare) // Ex) `type(obj) is int` if matches!( id.as_str(), - "int" | "str" | "float" | "bool" | "complex" | "bytes" + "int" + | "str" + | "float" + | "bool" + | "complex" + | "bytes" + | "list" + | "dict" + | "set" ) && checker.semantic().is_builtin(id) { checker diff --git a/crates/ruff/src/rules/pycodestyle/settings.rs b/crates/ruff/src/rules/pycodestyle/settings.rs index 7366930d10..7d5d2bcb6b 100644 --- a/crates/ruff/src/rules/pycodestyle/settings.rs +++ b/crates/ruff/src/rules/pycodestyle/settings.rs @@ -20,7 +20,10 @@ pub struct Options { "# )] /// The maximum line length to allow for line-length violations within - /// documentation (`W505`), including standalone comments. + /// documentation (`W505`), including standalone comments. By default, + /// this is set to null which disables reporting violations. + /// + /// See the [`doc-line-too-long`](https://beta.ruff.rs/docs/rules/doc-line-too-long/) rule for more information. pub max_doc_length: Option, #[option( default = "false", diff --git a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__E402_E402.py.snap b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__E402_E402.py.snap index f768015c97..a0518e1437 100644 --- a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__E402_E402.py.snap +++ b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__E402_E402.py.snap @@ -9,4 +9,20 @@ E402.py:24:1: E402 Module level import not at top of file | ^^^^^^^^ E402 | +E402.py:34:1: E402 Module level import not at top of file + | +32 | import g +33 | +34 | import h; import i + | ^^^^^^^^ E402 + | + +E402.py:34:11: E402 Module level import not at top of file + | +32 | import g +33 | +34 | import h; import i + | ^^^^^^^^ E402 + | + diff --git a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__E721_E721.py.snap b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__E721_E721.py.snap index 1979999384..50476a5090 100644 --- a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__E721_E721.py.snap +++ b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__E721_E721.py.snap @@ -152,4 +152,22 @@ E721.py:63:8: E721 Do not compare types, use `isinstance()` | ^^^^^^^^^^^^^^^^ E721 | +E721.py:69:12: E721 Do not compare types, use `isinstance()` + | +67 | def asdf(self, value: str | None): +68 | #: E721 +69 | if type(value) is str: + | ^^^^^^^^^^^^^^^^^^ E721 +70 | ... + | + +E721.py:79:12: E721 Do not compare types, use `isinstance()` + | +77 | def asdf(self, value: str | None): +78 | #: E721 +79 | if type(value) is str: + | ^^^^^^^^^^^^^^^^^^ E721 +80 | ... + | + diff --git a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_1.snap b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_1.snap index 46f4bc8f55..b20cb9ecbf 100644 --- a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_1.snap +++ b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_1.snap @@ -1,56 +1,51 @@ --- source: crates/ruff/src/rules/pycodestyle/mod.rs --- -E501_2.py:1:81: E501 Line too long (89 > 88 characters) +E501_2.py:2:7: E501 Line too long (7 > 6 characters) | -1 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +1 | # aaaa +2 | # aaaaa + | ^ E501 +3 | # a +4 | # a | -E501_2.py:2:81: E501 Line too long (89 > 88 characters) +E501_2.py:3:7: E501 Line too long (7 > 6 characters) | -1 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -3 | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +1 | # aaaa +2 | # aaaaa +3 | # a + | ^ E501 +4 | # a +5 | # aa | -E501_2.py:4:81: E501 Line too long (89 > 88 characters) +E501_2.py:7:7: E501 Line too long (7 > 6 characters) | -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -3 | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +5 | # aa +6 | # aaa +7 | # aaaa + | ^ E501 +8 | # a +9 | # aa | -E501_2.py:5:81: E501 Line too long (89 > 88 characters) - | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -6 | -7 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | - -E501_2.py:7:82: E501 Line too long (89 > 88 characters) - | -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -6 | -7 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -8 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | - -E501_2.py:10:82: E501 Line too long (89 > 88 characters) +E501_2.py:10:7: E501 Line too long (7 > 6 characters) | - 8 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - 9 | -10 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -11 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" + 8 | # a + 9 | # aa +10 | # aaa + | ^ E501 +11 | +12 | if True: # noqa: E501 + | + +E501_2.py:16:7: E501 Line too long (7 > 6 characters) + | +14 | [12 ] +15 | [1,2] +16 | [1, 2] + | ^ E501 | diff --git a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_2.snap b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_2.snap index 46f4bc8f55..e2f7159f9c 100644 --- a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_2.snap +++ b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_2.snap @@ -1,56 +1,90 @@ --- source: crates/ruff/src/rules/pycodestyle/mod.rs --- -E501_2.py:1:81: E501 Line too long (89 > 88 characters) +E501_2.py:2:7: E501 Line too long (7 > 6 characters) | -1 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +1 | # aaaa +2 | # aaaaa + | ^ E501 +3 | # a +4 | # a | -E501_2.py:2:81: E501 Line too long (89 > 88 characters) +E501_2.py:3:7: E501 Line too long (7 > 6 characters) | -1 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -3 | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +1 | # aaaa +2 | # aaaaa +3 | # a + | ^ E501 +4 | # a +5 | # aa | -E501_2.py:4:81: E501 Line too long (89 > 88 characters) +E501_2.py:6:6: E501 Line too long (7 > 6 characters) | -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -3 | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +4 | # a +5 | # aa +6 | # aaa + | ^ E501 +7 | # aaaa +8 | # a | -E501_2.py:5:81: E501 Line too long (89 > 88 characters) +E501_2.py:7:6: E501 Line too long (8 > 6 characters) | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -6 | -7 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +5 | # aa +6 | # aaa +7 | # aaaa + | ^^ E501 +8 | # a +9 | # aa | -E501_2.py:7:82: E501 Line too long (89 > 88 characters) - | -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -6 | -7 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -8 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | - -E501_2.py:10:82: E501 Line too long (89 > 88 characters) +E501_2.py:8:5: E501 Line too long (7 > 6 characters) | - 8 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - 9 | -10 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -11 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" + 6 | # aaa + 7 | # aaaa + 8 | # a + | ^ E501 + 9 | # aa +10 | # aaa + | + +E501_2.py:9:5: E501 Line too long (8 > 6 characters) + | + 7 | # aaaa + 8 | # a + 9 | # aa + | ^^ E501 +10 | # aaa + | + +E501_2.py:10:5: E501 Line too long (9 > 6 characters) + | + 8 | # a + 9 | # aa +10 | # aaa + | ^^^ E501 +11 | +12 | if True: # noqa: E501 + | + +E501_2.py:14:6: E501 Line too long (7 > 6 characters) + | +12 | if True: # noqa: E501 +13 | [12] +14 | [12 ] + | ^ E501 +15 | [1,2] +16 | [1, 2] + | + +E501_2.py:16:6: E501 Line too long (8 > 6 characters) + | +14 | [12 ] +15 | [1,2] +16 | [1, 2] + | ^^ E501 | diff --git a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_4.snap b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_4.snap index dc40a96154..3fd272e5d0 100644 --- a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_4.snap +++ b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_4.snap @@ -1,65 +1,110 @@ --- source: crates/ruff/src/rules/pycodestyle/mod.rs --- -E501_2.py:1:81: E501 Line too long (89 > 88 characters) +E501_2.py:2:7: E501 Line too long (7 > 6 characters) | -1 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +1 | # aaaa +2 | # aaaaa + | ^ E501 +3 | # a +4 | # a | -E501_2.py:2:77: E501 Line too long (93 > 88 characters) +E501_2.py:3:7: E501 Line too long (7 > 6 characters) | -1 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^^^^^ E501 -3 | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +1 | # aaaa +2 | # aaaaa +3 | # a + | ^ E501 +4 | # a +5 | # aa | -E501_2.py:4:81: E501 Line too long (89 > 88 characters) +E501_2.py:4:4: E501 Line too long (7 > 6 characters) | -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -3 | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +2 | # aaaaa +3 | # a +4 | # a + | ^ E501 +5 | # aa +6 | # aaa | -E501_2.py:5:77: E501 Line too long (93 > 88 characters) +E501_2.py:5:4: E501 Line too long (8 > 6 characters) | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^^^^^ E501 -6 | -7 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +3 | # a +4 | # a +5 | # aa + | ^^ E501 +6 | # aaa +7 | # aaaa | -E501_2.py:7:82: E501 Line too long (89 > 88 characters) +E501_2.py:6:4: E501 Line too long (9 > 6 characters) | -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -6 | -7 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -8 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +4 | # a +5 | # aa +6 | # aaa + | ^^^ E501 +7 | # aaaa +8 | # a | -E501_2.py:8:78: E501 Line too long (89 > 88 characters) +E501_2.py:7:4: E501 Line too long (10 > 6 characters) + | +5 | # aa +6 | # aaa +7 | # aaaa + | ^^^^ E501 +8 | # a +9 | # aa + | + +E501_2.py:8:3: E501 Line too long (11 > 6 characters) | - 7 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - 8 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 - 9 | -10 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" + 6 | # aaa + 7 | # aaaa + 8 | # a + | ^^^ E501 + 9 | # aa +10 | # aaa | -E501_2.py:10:82: E501 Line too long (89 > 88 characters) +E501_2.py:9:3: E501 Line too long (12 > 6 characters) | - 8 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - 9 | -10 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -11 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" + 7 | # aaaa + 8 | # a + 9 | # aa + | ^^^^ E501 +10 | # aaa + | + +E501_2.py:10:3: E501 Line too long (13 > 6 characters) + | + 8 | # a + 9 | # aa +10 | # aaa + | ^^^^^ E501 +11 | +12 | if True: # noqa: E501 + | + +E501_2.py:14:4: E501 Line too long (9 > 6 characters) + | +12 | if True: # noqa: E501 +13 | [12] +14 | [12 ] + | ^^^ E501 +15 | [1,2] +16 | [1, 2] + | + +E501_2.py:16:4: E501 Line too long (10 > 6 characters) + | +14 | [12 ] +15 | [1,2] +16 | [1, 2] + | ^^^^ E501 | diff --git a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_8.snap b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_8.snap index bce5eac6e3..7b2dd3f8f9 100644 --- a/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_8.snap +++ b/crates/ruff/src/rules/pycodestyle/snapshots/ruff__rules__pycodestyle__tests__tab_size_8.snap @@ -1,72 +1,110 @@ --- source: crates/ruff/src/rules/pycodestyle/mod.rs --- -E501_2.py:1:81: E501 Line too long (89 > 88 characters) +E501_2.py:2:7: E501 Line too long (7 > 6 characters) | -1 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +1 | # aaaa +2 | # aaaaa + | ^ E501 +3 | # a +4 | # a | -E501_2.py:2:70: E501 Line too long (101 > 88 characters) +E501_2.py:3:7: E501 Line too long (7 > 6 characters) | -1 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^^^^^^^^^^^^^ E501 -3 | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +1 | # aaaa +2 | # aaaaa +3 | # a + | ^ E501 +4 | # a +5 | # aa | -E501_2.py:4:81: E501 Line too long (89 > 88 characters) +E501_2.py:4:2: E501 Line too long (11 > 6 characters) | -2 | a = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -3 | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +2 | # aaaaa +3 | # a +4 | # a + | ^^^ E501 +5 | # aa +6 | # aaa | -E501_2.py:5:70: E501 Line too long (101 > 88 characters) +E501_2.py:5:2: E501 Line too long (12 > 6 characters) | -4 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^^^^^^^^^^^^^ E501 -6 | -7 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +3 | # a +4 | # a +5 | # aa + | ^^^^ E501 +6 | # aaa +7 | # aaaa | -E501_2.py:7:82: E501 Line too long (89 > 88 characters) +E501_2.py:6:2: E501 Line too long (13 > 6 characters) | -5 | b = """ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -6 | -7 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -8 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" +4 | # a +5 | # aa +6 | # aaa + | ^^^^^ E501 +7 | # aaaa +8 | # a | -E501_2.py:8:71: E501 Line too long (97 > 88 characters) +E501_2.py:7:2: E501 Line too long (14 > 6 characters) + | +5 | # aa +6 | # aaa +7 | # aaaa + | ^^^^^^ E501 +8 | # a +9 | # aa + | + +E501_2.py:8:2: E501 Line too long (19 > 6 characters) | - 7 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - 8 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^^^^^^^^ E501 - 9 | -10 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" + 6 | # aaa + 7 | # aaaa + 8 | # a + | ^^^^^^^ E501 + 9 | # aa +10 | # aaa | -E501_2.py:10:82: E501 Line too long (89 > 88 characters) +E501_2.py:9:2: E501 Line too long (20 > 6 characters) | - 8 | c = """2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - 9 | -10 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 -11 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" + 7 | # aaaa + 8 | # a + 9 | # aa + | ^^^^^^^^ E501 +10 | # aaa | -E501_2.py:11:70: E501 Line too long (89 > 88 characters) +E501_2.py:10:2: E501 Line too long (21 > 6 characters) | -10 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" -11 | d = """💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A67ß9💣2ℝ4A6""" - | ^ E501 + 8 | # a + 9 | # aa +10 | # aaa + | ^^^^^^^^^ E501 +11 | +12 | if True: # noqa: E501 + | + +E501_2.py:14:2: E501 Line too long (13 > 6 characters) + | +12 | if True: # noqa: E501 +13 | [12] +14 | [12 ] + | ^^^^^ E501 +15 | [1,2] +16 | [1, 2] + | + +E501_2.py:16:2: E501 Line too long (14 > 6 characters) + | +14 | [12 ] +15 | [1,2] +16 | [1, 2] + | ^^^^^^ E501 | diff --git a/crates/ruff/src/rules/pydocstyle/helpers.rs b/crates/ruff/src/rules/pydocstyle/helpers.rs index 17aab82f78..c582bb1742 100644 --- a/crates/ruff/src/rules/pydocstyle/helpers.rs +++ b/crates/ruff/src/rules/pydocstyle/helpers.rs @@ -1,10 +1,9 @@ use std::collections::BTreeSet; use ruff_python_ast::call_path::from_qualified_name; -use ruff_python_ast::cast; use ruff_python_ast::helpers::map_callable; -use ruff_python_ast::str::is_implicit_concatenation; -use ruff_python_semantic::{Definition, Member, MemberKind, SemanticModel}; +use ruff_python_ast::Expr; +use ruff_python_semantic::{Definition, SemanticModel}; use ruff_source_file::UniversalNewlines; /// Return the index of the first logical line in a string. @@ -48,31 +47,27 @@ pub(crate) fn should_ignore_definition( return false; } - if let Definition::Member(Member { - kind: MemberKind::Function | MemberKind::NestedFunction | MemberKind::Method, - stmt, - .. - }) = definition - { - for decorator in cast::decorator_list(stmt) { - if let Some(call_path) = semantic.resolve_call_path(map_callable(&decorator.expression)) - { - if ignore_decorators + let Some(function) = definition.as_function_def() else { + return false; + }; + + function.decorator_list.iter().any(|decorator| { + semantic + .resolve_call_path(map_callable(&decorator.expression)) + .is_some_and(|call_path| { + ignore_decorators .iter() .any(|decorator| from_qualified_name(decorator) == call_path) - { - return true; - } - } - } - } - false + }) + }) } /// Check if a docstring should be ignored. -pub(crate) fn should_ignore_docstring(contents: &str) -> bool { +pub(crate) fn should_ignore_docstring(docstring: &Expr) -> bool { // Avoid analyzing docstrings that contain implicit string concatenations. // Python does consider these docstrings, but they're almost certainly a // user error, and supporting them "properly" is extremely difficult. - is_implicit_concatenation(contents) + docstring + .as_constant_expr() + .is_some_and(|constant| constant.value.is_implicit_concatenated()) } diff --git a/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_class.rs b/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_class.rs index 556f1624bc..3b97c4f80c 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_class.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_class.rs @@ -1,11 +1,9 @@ -use ruff_python_ast::Ranged; -use ruff_text_size::{TextLen, TextRange}; - use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_semantic::{Definition, Member, MemberKind}; +use ruff_python_ast::Ranged; use ruff_python_trivia::PythonWhitespace; use ruff_source_file::{UniversalNewlineIterator, UniversalNewlines}; +use ruff_text_size::{TextLen, TextRange}; use crate::checkers::ast::Checker; use crate::docstrings::Docstring; @@ -155,12 +153,7 @@ impl AlwaysAutofixableViolation for BlankLineBeforeClass { /// D203, D204, D211 pub(crate) fn blank_before_after_class(checker: &mut Checker, docstring: &Docstring) { - let Definition::Member(Member { - kind: MemberKind::Class | MemberKind::NestedClass, - stmt, - .. - }) = docstring.definition - else { + let Some(class) = docstring.definition.as_class_def() else { return; }; @@ -168,7 +161,7 @@ pub(crate) fn blank_before_after_class(checker: &mut Checker, docstring: &Docstr // ```python // class PhotoMetadata: """Metadata about a photo.""" // ``` - let between_range = TextRange::new(stmt.start(), docstring.start()); + let between_range = TextRange::new(class.start(), docstring.start()); if !checker.locator().contains_line_break(between_range) { return; } @@ -223,7 +216,7 @@ pub(crate) fn blank_before_after_class(checker: &mut Checker, docstring: &Docstr } if checker.enabled(Rule::OneBlankLineAfterClass) { - let after_range = TextRange::new(docstring.end(), stmt.end()); + let after_range = TextRange::new(docstring.end(), class.end()); let after = checker.locator().slice(after_range); diff --git a/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_function.rs b/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_function.rs index 6d32259bc5..8ae76d0538 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_function.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_function.rs @@ -1,13 +1,12 @@ use once_cell::sync::Lazy; use regex::Regex; -use ruff_python_ast::Ranged; -use ruff_text_size::{TextLen, TextRange}; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_semantic::{Definition, Member, MemberKind}; +use ruff_python_ast::Ranged; use ruff_python_trivia::PythonWhitespace; use ruff_source_file::{UniversalNewlineIterator, UniversalNewlines}; +use ruff_text_size::{TextLen, TextRange}; use crate::checkers::ast::Checker; use crate::docstrings::Docstring; @@ -104,21 +103,16 @@ static INNER_FUNCTION_OR_CLASS_REGEX: Lazy = /// D201, D202 pub(crate) fn blank_before_after_function(checker: &mut Checker, docstring: &Docstring) { - let Definition::Member(Member { - kind: MemberKind::Function | MemberKind::NestedFunction | MemberKind::Method, - stmt, - .. - }) = docstring.definition - else { + let Some(function) = docstring.definition.as_function_def() else { return; }; if checker.enabled(Rule::NoBlankLineBeforeFunction) { let before = checker .locator() - .slice(TextRange::new(stmt.start(), docstring.start())); + .slice(TextRange::new(function.start(), docstring.start())); - let mut lines = UniversalNewlineIterator::with_offset(before, stmt.start()).rev(); + let mut lines = UniversalNewlineIterator::with_offset(before, function.start()).rev(); let mut blank_lines_before = 0usize; let mut blank_lines_start = lines.next().map(|l| l.end()).unwrap_or_default(); @@ -152,7 +146,7 @@ pub(crate) fn blank_before_after_function(checker: &mut Checker, docstring: &Doc if checker.enabled(Rule::NoBlankLineAfterFunction) { let after = checker .locator() - .slice(TextRange::new(docstring.end(), stmt.end())); + .slice(TextRange::new(docstring.end(), function.end())); // If the docstring is only followed by blank and commented lines, abort. let all_blank_after = after.universal_newlines().skip(1).all(|line| { diff --git a/crates/ruff/src/rules/pydocstyle/rules/capitalized.rs b/crates/ruff/src/rules/pydocstyle/rules/capitalized.rs index 918a5d2c32..f329672405 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/capitalized.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/capitalized.rs @@ -1,9 +1,7 @@ -use ruff_python_ast::Ranged; -use ruff_text_size::{TextLen, TextRange}; - use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_semantic::{Definition, Member, MemberKind}; +use ruff_python_ast::Ranged; +use ruff_text_size::{TextLen, TextRange}; use crate::checkers::ast::Checker; use crate::docstrings::Docstring; @@ -57,13 +55,7 @@ impl AlwaysAutofixableViolation for FirstLineCapitalized { /// D403 pub(crate) fn capitalized(checker: &mut Checker, docstring: &Docstring) { - if !matches!( - docstring.definition, - Definition::Member(Member { - kind: MemberKind::Function | MemberKind::NestedFunction | MemberKind::Method, - .. - }) - ) { + if docstring.definition.as_function_def().is_none() { return; } diff --git a/crates/ruff/src/rules/pydocstyle/rules/if_needed.rs b/crates/ruff/src/rules/pydocstyle/rules/if_needed.rs index ee9e2364ea..e4880a609d 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/if_needed.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/if_needed.rs @@ -1,9 +1,7 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::cast; use ruff_python_ast::identifier::Identifier; use ruff_python_semantic::analyze::visibility::is_overload; -use ruff_python_semantic::{Definition, Member, MemberKind}; use crate::checkers::ast::Checker; use crate::docstrings::Docstring; @@ -80,18 +78,13 @@ impl Violation for OverloadWithDocstring { /// D418 pub(crate) fn if_needed(checker: &mut Checker, docstring: &Docstring) { - let Definition::Member(Member { - kind: MemberKind::Function | MemberKind::NestedFunction | MemberKind::Method, - stmt, - .. - }) = docstring.definition - else { + let Some(function) = docstring.definition.as_function_def() else { return; }; - if !is_overload(cast::decorator_list(stmt), checker.semantic()) { - return; + if is_overload(&function.decorator_list, checker.semantic()) { + checker.diagnostics.push(Diagnostic::new( + OverloadWithDocstring, + function.identifier(), + )); } - checker - .diagnostics - .push(Diagnostic::new(OverloadWithDocstring, stmt.identifier())); } diff --git a/crates/ruff/src/rules/pydocstyle/rules/multi_line_summary_start.rs b/crates/ruff/src/rules/pydocstyle/rules/multi_line_summary_start.rs index 46d3f6eed3..1d58abeb56 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/multi_line_summary_start.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/multi_line_summary_start.rs @@ -4,7 +4,7 @@ use ruff_text_size::{TextRange, TextSize}; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::str::{is_triple_quote, leading_quote}; -use ruff_python_semantic::{Definition, Member}; +use ruff_python_semantic::Definition; use ruff_source_file::{NewlineWithTrailingNewline, UniversalNewlineIterator}; use crate::checkers::ast::Checker; @@ -164,11 +164,11 @@ pub(crate) fn multi_line_summary_start(checker: &mut Checker, docstring: &Docstr // If the docstring isn't on its own line, look at the statement indentation, // and add the default indentation to get the "right" level. - if let Definition::Member(Member { stmt, .. }) = &docstring.definition { - let stmt_line_start = checker.locator().line_start(stmt.start()); + if let Definition::Member(member) = &docstring.definition { + let stmt_line_start = checker.locator().line_start(member.start()); let stmt_indentation = checker .locator() - .slice(TextRange::new(stmt_line_start, stmt.start())); + .slice(TextRange::new(stmt_line_start, member.start())); if stmt_indentation.chars().all(char::is_whitespace) { indentation.clear(); diff --git a/crates/ruff/src/rules/pydocstyle/rules/no_signature.rs b/crates/ruff/src/rules/pydocstyle/rules/no_signature.rs index 34ae382a3c..e5a5a9d167 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/no_signature.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/no_signature.rs @@ -1,8 +1,5 @@ -use ruff_python_ast::{self as ast, Stmt}; - use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_semantic::{Definition, Member, MemberKind}; use ruff_source_file::UniversalNewlines; use crate::checkers::ast::Checker; @@ -54,15 +51,7 @@ impl Violation for NoSignature { /// D402 pub(crate) fn no_signature(checker: &mut Checker, docstring: &Docstring) { - let Definition::Member(Member { - kind: MemberKind::Function | MemberKind::NestedFunction | MemberKind::Method, - stmt, - .. - }) = docstring.definition - else { - return; - }; - let Stmt::FunctionDef(ast::StmtFunctionDef { name, .. }) = stmt else { + let Some(function) = docstring.definition.as_function_def() else { return; }; @@ -75,8 +64,8 @@ pub(crate) fn no_signature(checker: &mut Checker, docstring: &Docstring) { // Search for occurrences of the function name followed by an open parenthesis (e.g., `foo(` for // a function named `foo`). if first_line - .match_indices(name.as_str()) - .any(|(index, _)| first_line[index + name.len()..].starts_with('(')) + .match_indices(function.name.as_str()) + .any(|(index, _)| first_line[index + function.name.len()..].starts_with('(')) { checker .diagnostics diff --git a/crates/ruff/src/rules/pydocstyle/rules/non_imperative_mood.rs b/crates/ruff/src/rules/pydocstyle/rules/non_imperative_mood.rs index 39d72e7dba..2f2c0b02d1 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/non_imperative_mood.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/non_imperative_mood.rs @@ -6,9 +6,7 @@ use once_cell::sync::Lazy; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::call_path::{from_qualified_name, CallPath}; -use ruff_python_ast::cast; use ruff_python_semantic::analyze::visibility::{is_property, is_test}; -use ruff_python_semantic::{Definition, Member, MemberKind}; use ruff_source_file::UniversalNewlines; use crate::checkers::ast::Checker; @@ -69,25 +67,18 @@ pub(crate) fn non_imperative_mood( docstring: &Docstring, property_decorators: &BTreeSet, ) { - let Definition::Member(Member { kind, stmt, .. }) = &docstring.definition else { + let Some(function) = docstring.definition.as_function_def() else { return; }; - if !matches!( - kind, - MemberKind::Function | MemberKind::NestedFunction | MemberKind::Method, - ) { - return; - } - let property_decorators = property_decorators .iter() .map(|decorator| from_qualified_name(decorator)) .collect::>(); - if is_test(cast::name(stmt)) + if is_test(&function.name) || is_property( - cast::decorator_list(stmt), + &function.decorator_list, &property_decorators, checker.semantic(), ) diff --git a/crates/ruff/src/rules/pydocstyle/rules/not_missing.rs b/crates/ruff/src/rules/pydocstyle/rules/not_missing.rs index 00ec74d836..9288f3ff37 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/not_missing.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/not_missing.rs @@ -1,13 +1,11 @@ -use ruff_text_size::TextRange; - use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::cast; use ruff_python_ast::identifier::Identifier; use ruff_python_semantic::analyze::visibility::{ is_call, is_init, is_magic, is_new, is_overload, is_override, Visibility, }; use ruff_python_semantic::{Definition, Member, MemberKind, Module, ModuleKind}; +use ruff_text_size::TextRange; use crate::checkers::ast::Checker; use crate::registry::Rule; @@ -557,82 +555,82 @@ pub(crate) fn not_missing( false } Definition::Member(Member { - kind: MemberKind::Class, - stmt, + kind: MemberKind::Class(class), .. }) => { if checker.enabled(Rule::UndocumentedPublicClass) { checker .diagnostics - .push(Diagnostic::new(UndocumentedPublicClass, stmt.identifier())); + .push(Diagnostic::new(UndocumentedPublicClass, class.identifier())); } false } Definition::Member(Member { - kind: MemberKind::NestedClass, - stmt, + kind: MemberKind::NestedClass(function), .. }) => { if checker.enabled(Rule::UndocumentedPublicNestedClass) { checker.diagnostics.push(Diagnostic::new( UndocumentedPublicNestedClass, - stmt.identifier(), + function.identifier(), )); } false } Definition::Member(Member { - kind: MemberKind::Function | MemberKind::NestedFunction, - stmt, + kind: MemberKind::Function(function) | MemberKind::NestedFunction(function), .. }) => { - if is_overload(cast::decorator_list(stmt), checker.semantic()) { + if is_overload(&function.decorator_list, checker.semantic()) { true } else { if checker.enabled(Rule::UndocumentedPublicFunction) { checker.diagnostics.push(Diagnostic::new( UndocumentedPublicFunction, - stmt.identifier(), + function.identifier(), )); } false } } Definition::Member(Member { - kind: MemberKind::Method, - stmt, + kind: MemberKind::Method(function), .. }) => { - if is_overload(cast::decorator_list(stmt), checker.semantic()) - || is_override(cast::decorator_list(stmt), checker.semantic()) + if is_overload(&function.decorator_list, checker.semantic()) + || is_override(&function.decorator_list, checker.semantic()) { true - } else if is_init(cast::name(stmt)) { + } else if is_init(&function.name) { if checker.enabled(Rule::UndocumentedPublicInit) { - checker - .diagnostics - .push(Diagnostic::new(UndocumentedPublicInit, stmt.identifier())); + checker.diagnostics.push(Diagnostic::new( + UndocumentedPublicInit, + function.identifier(), + )); } true - } else if is_new(cast::name(stmt)) || is_call(cast::name(stmt)) { + } else if is_new(&function.name) || is_call(&function.name) { if checker.enabled(Rule::UndocumentedPublicMethod) { - checker - .diagnostics - .push(Diagnostic::new(UndocumentedPublicMethod, stmt.identifier())); + checker.diagnostics.push(Diagnostic::new( + UndocumentedPublicMethod, + function.identifier(), + )); } true - } else if is_magic(cast::name(stmt)) { + } else if is_magic(&function.name) { if checker.enabled(Rule::UndocumentedMagicMethod) { - checker - .diagnostics - .push(Diagnostic::new(UndocumentedMagicMethod, stmt.identifier())); + checker.diagnostics.push(Diagnostic::new( + UndocumentedMagicMethod, + function.identifier(), + )); } true } else { if checker.enabled(Rule::UndocumentedPublicMethod) { - checker - .diagnostics - .push(Diagnostic::new(UndocumentedPublicMethod, stmt.identifier())); + checker.diagnostics.push(Diagnostic::new( + UndocumentedPublicMethod, + function.identifier(), + )); } true } diff --git a/crates/ruff/src/rules/pydocstyle/rules/sections.rs b/crates/ruff/src/rules/pydocstyle/rules/sections.rs index 001e5830ff..da87a98256 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/sections.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/sections.rs @@ -1,20 +1,18 @@ use itertools::Itertools; use once_cell::sync::Lazy; use regex::Regex; -use ruff_python_ast::{self as ast, ParameterWithDefault, Stmt}; -use ruff_text_size::{TextLen, TextRange, TextSize}; use rustc_hash::FxHashSet; use ruff_diagnostics::{AlwaysAutofixableViolation, Violation}; use ruff_diagnostics::{Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::cast; use ruff_python_ast::docstrings::{clean_space, leading_space}; use ruff_python_ast::identifier::Identifier; +use ruff_python_ast::ParameterWithDefault; use ruff_python_semantic::analyze::visibility::is_staticmethod; -use ruff_python_semantic::{Definition, Member, MemberKind}; use ruff_python_trivia::{textwrap::dedent, PythonWhitespace}; use ruff_source_file::NewlineWithTrailingNewline; +use ruff_text_size::{TextLen, TextRange, TextSize}; use crate::checkers::ast::Checker; use crate::docstrings::sections::{SectionContext, SectionContexts, SectionKind}; @@ -1717,18 +1715,7 @@ fn common_section( } fn missing_args(checker: &mut Checker, docstring: &Docstring, docstrings_args: &FxHashSet) { - let Definition::Member(Member { - kind: MemberKind::Function | MemberKind::NestedFunction | MemberKind::Method, - stmt, - .. - }) = docstring.definition - else { - return; - }; - - let (Stmt::FunctionDef(ast::StmtFunctionDef { parameters, .. }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { parameters, .. })) = stmt - else { + let Some(function) = docstring.definition.as_function_def() else { return; }; @@ -1738,16 +1725,17 @@ fn missing_args(checker: &mut Checker, docstring: &Docstring, docstrings_args: & parameter, default: _, range: _, - } in parameters + } in function + .parameters .posonlyargs .iter() - .chain(¶meters.args) - .chain(¶meters.kwonlyargs) + .chain(&function.parameters.args) + .chain(&function.parameters.kwonlyargs) .skip( // If this is a non-static method, skip `cls` or `self`. usize::from( docstring.definition.is_method() - && !is_staticmethod(cast::decorator_list(stmt), checker.semantic()), + && !is_staticmethod(&function.decorator_list, checker.semantic()), ), ) { @@ -1759,7 +1747,7 @@ fn missing_args(checker: &mut Checker, docstring: &Docstring, docstrings_args: & // Check specifically for `vararg` and `kwarg`, which can be prefixed with a // single or double star, respectively. - if let Some(arg) = ¶meters.vararg { + if let Some(arg) = function.parameters.vararg.as_ref() { let arg_name = arg.name.as_str(); let starred_arg_name = format!("*{arg_name}"); if !arg_name.starts_with('_') @@ -1769,7 +1757,7 @@ fn missing_args(checker: &mut Checker, docstring: &Docstring, docstrings_args: & missing_arg_names.insert(starred_arg_name); } } - if let Some(arg) = ¶meters.kwarg { + if let Some(arg) = function.parameters.kwarg.as_ref() { let arg_name = arg.name.as_str(); let starred_arg_name = format!("**{arg_name}"); if !arg_name.starts_with('_') @@ -1788,7 +1776,7 @@ fn missing_args(checker: &mut Checker, docstring: &Docstring, docstrings_args: & definition: definition.to_string(), names, }, - stmt.identifier(), + function.identifier(), )); } } diff --git a/crates/ruff/src/rules/pyflakes/rules/break_outside_loop.rs b/crates/ruff/src/rules/pyflakes/rules/break_outside_loop.rs index cfe9323c43..0fb29fcc04 100644 --- a/crates/ruff/src/rules/pyflakes/rules/break_outside_loop.rs +++ b/crates/ruff/src/rules/pyflakes/rules/break_outside_loop.rs @@ -36,14 +36,12 @@ pub(crate) fn break_outside_loop<'a>( let mut child = stmt; for parent in parents { match parent { - Stmt::For(ast::StmtFor { orelse, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { orelse, .. }) - | Stmt::While(ast::StmtWhile { orelse, .. }) => { + Stmt::For(ast::StmtFor { orelse, .. }) | Stmt::While(ast::StmtWhile { orelse, .. }) => { if !orelse.contains(child) { return None; } } - Stmt::FunctionDef(_) | Stmt::AsyncFunctionDef(_) | Stmt::ClassDef(_) => { + Stmt::FunctionDef(_) | Stmt::ClassDef(_) => { break; } _ => {} diff --git a/crates/ruff/src/rules/pyflakes/rules/continue_outside_loop.rs b/crates/ruff/src/rules/pyflakes/rules/continue_outside_loop.rs index 5e773e4095..15a0accc9c 100644 --- a/crates/ruff/src/rules/pyflakes/rules/continue_outside_loop.rs +++ b/crates/ruff/src/rules/pyflakes/rules/continue_outside_loop.rs @@ -36,14 +36,12 @@ pub(crate) fn continue_outside_loop<'a>( let mut child = stmt; for parent in parents { match parent { - Stmt::For(ast::StmtFor { orelse, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { orelse, .. }) - | Stmt::While(ast::StmtWhile { orelse, .. }) => { + Stmt::For(ast::StmtFor { orelse, .. }) | Stmt::While(ast::StmtWhile { orelse, .. }) => { if !orelse.contains(child) { return None; } } - Stmt::FunctionDef(_) | Stmt::AsyncFunctionDef(_) | Stmt::ClassDef(_) => { + Stmt::FunctionDef(_) | Stmt::ClassDef(_) => { break; } _ => {} diff --git a/crates/ruff/src/rules/pyflakes/rules/f_string_missing_placeholders.rs b/crates/ruff/src/rules/pyflakes/rules/f_string_missing_placeholders.rs index 4de5016a3a..fd2982c11a 100644 --- a/crates/ruff/src/rules/pyflakes/rules/f_string_missing_placeholders.rs +++ b/crates/ruff/src/rules/pyflakes/rules/f_string_missing_placeholders.rs @@ -48,7 +48,7 @@ impl AlwaysAutofixableViolation for FStringMissingPlaceholders { } } -/// Find f-strings that don't contain any formatted values in a `JoinedStr`. +/// Find f-strings that don't contain any formatted values in an [`FString`]. fn find_useless_f_strings<'a>( expr: &'a Expr, locator: &'a Locator, diff --git a/crates/ruff/src/rules/pyflakes/rules/repeated_keys.rs b/crates/ruff/src/rules/pyflakes/rules/repeated_keys.rs index 1876b65c05..7fe38263ef 100644 --- a/crates/ruff/src/rules/pyflakes/rules/repeated_keys.rs +++ b/crates/ruff/src/rules/pyflakes/rules/repeated_keys.rs @@ -130,7 +130,7 @@ pub(crate) fn repeated_keys(checker: &mut Checker, keys: &[Option], values }; match key { - Expr::Constant(_) | Expr::Tuple(_) | Expr::JoinedStr(_) => { + Expr::Constant(_) | Expr::Tuple(_) | Expr::FString(_) => { if checker.enabled(Rule::MultiValueRepeatedKeyLiteral) { let mut diagnostic = Diagnostic::new( MultiValueRepeatedKeyLiteral { diff --git a/crates/ruff/src/rules/pyflakes/rules/return_outside_function.rs b/crates/ruff/src/rules/pyflakes/rules/return_outside_function.rs index 6028e57491..c6416d5e3d 100644 --- a/crates/ruff/src/rules/pyflakes/rules/return_outside_function.rs +++ b/crates/ruff/src/rules/pyflakes/rules/return_outside_function.rs @@ -33,7 +33,7 @@ impl Violation for ReturnOutsideFunction { pub(crate) fn return_outside_function(checker: &mut Checker, stmt: &Stmt) { if matches!( - checker.semantic().scope().kind, + checker.semantic().current_scope().kind, ScopeKind::Class(_) | ScopeKind::Module ) { checker diff --git a/crates/ruff/src/rules/pyflakes/rules/strings.rs b/crates/ruff/src/rules/pyflakes/rules/strings.rs index a57ceead4d..17d9be995b 100644 --- a/crates/ruff/src/rules/pyflakes/rules/strings.rs +++ b/crates/ruff/src/rules/pyflakes/rules/strings.rs @@ -583,10 +583,10 @@ pub(crate) fn percent_format_extra_named_arguments( .enumerate() .filter_map(|(index, key)| match key { Some(Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), + value: Constant::Str(ast::StringConstant { value, .. }), .. })) => { - if summary.keywords.contains(value) { + if summary.keywords.contains(value.as_str()) { None } else { Some((index, value.as_str())) @@ -646,7 +646,7 @@ pub(crate) fn percent_format_missing_arguments( for key in keys.iter().flatten() { match key { Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), + value: Constant::Str(ast::StringConstant { value, .. }), .. }) => { keywords.insert(value); diff --git a/crates/ruff/src/rules/pyflakes/rules/undefined_local.rs b/crates/ruff/src/rules/pyflakes/rules/undefined_local.rs index 43c4eda595..e4f931a7bc 100644 --- a/crates/ruff/src/rules/pyflakes/rules/undefined_local.rs +++ b/crates/ruff/src/rules/pyflakes/rules/undefined_local.rs @@ -51,7 +51,7 @@ pub(crate) fn undefined_local( scope: &Scope, diagnostics: &mut Vec, ) { - if scope.kind.is_any_function() { + if scope.kind.is_function() { for (name, binding_id) in scope.bindings() { // If the variable shadows a binding in a parent scope... if let Some(shadowed_id) = checker.semantic().shadowed_binding(binding_id) { diff --git a/crates/ruff/src/rules/pyflakes/rules/unused_import.rs b/crates/ruff/src/rules/pyflakes/rules/unused_import.rs index 54aaea3f40..6f1413d555 100644 --- a/crates/ruff/src/rules/pyflakes/rules/unused_import.rs +++ b/crates/ruff/src/rules/pyflakes/rules/unused_import.rs @@ -1,10 +1,11 @@ +use std::borrow::Cow; + use anyhow::Result; use rustc_hash::FxHashMap; -use std::borrow::Cow; use ruff_diagnostics::{AutofixKind, Diagnostic, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_semantic::{AnyImport, Exceptions, Imported, NodeId, Scope}; +use ruff_python_semantic::{AnyImport, Exceptions, Imported, Scope, StatementId}; use ruff_text_size::TextRange; use crate::autofix; @@ -98,8 +99,9 @@ impl Violation for UnusedImport { pub(crate) fn unused_import(checker: &Checker, scope: &Scope, diagnostics: &mut Vec) { // Collect all unused imports by statement. - let mut unused: FxHashMap<(NodeId, Exceptions), Vec> = FxHashMap::default(); - let mut ignored: FxHashMap<(NodeId, Exceptions), Vec> = FxHashMap::default(); + let mut unused: FxHashMap<(StatementId, Exceptions), Vec> = FxHashMap::default(); + let mut ignored: FxHashMap<(StatementId, Exceptions), Vec> = + FxHashMap::default(); for binding_id in scope.binding_ids() { let binding = checker.semantic().binding(binding_id); @@ -116,7 +118,7 @@ pub(crate) fn unused_import(checker: &Checker, scope: &Scope, diagnostics: &mut continue; }; - let Some(stmt_id) = binding.source else { + let Some(statement_id) = binding.source else { continue; }; @@ -132,12 +134,12 @@ pub(crate) fn unused_import(checker: &Checker, scope: &Scope, diagnostics: &mut }) { ignored - .entry((stmt_id, binding.exceptions)) + .entry((statement_id, binding.exceptions)) .or_default() .push(import); } else { unused - .entry((stmt_id, binding.exceptions)) + .entry((statement_id, binding.exceptions)) .or_default() .push(import); } @@ -148,13 +150,13 @@ pub(crate) fn unused_import(checker: &Checker, scope: &Scope, diagnostics: &mut // Generate a diagnostic for every import, but share a fix across all imports within the same // statement (excluding those that are ignored). - for ((stmt_id, exceptions), imports) in unused { + for ((statement_id, exceptions), imports) in unused { let in_except_handler = exceptions.intersects(Exceptions::MODULE_NOT_FOUND_ERROR | Exceptions::IMPORT_ERROR); let multiple = imports.len() > 1; let fix = if !in_init && !in_except_handler && checker.patch(Rule::UnusedImport) { - fix_imports(checker, stmt_id, &imports).ok() + fix_imports(checker, statement_id, &imports).ok() } else { None }; @@ -225,18 +227,23 @@ struct ImportBinding<'a> { } /// Generate a [`Fix`] to remove unused imports from a statement. -fn fix_imports(checker: &Checker, stmt_id: NodeId, imports: &[ImportBinding]) -> Result { - let stmt = checker.semantic().stmts[stmt_id]; - let parent = checker.semantic().stmts.parent(stmt); +fn fix_imports( + checker: &Checker, + statement_id: StatementId, + imports: &[ImportBinding], +) -> Result { + let statement = checker.semantic().statement(statement_id); + let parent = checker.semantic().parent_statement(statement_id); let member_names: Vec> = imports .iter() - .map(|ImportBinding { import, .. }| import.member_name()) + .map(|ImportBinding { import, .. }| import) + .map(Imported::member_name) .collect(); let edit = autofix::edits::remove_unused_imports( member_names.iter().map(AsRef::as_ref), - stmt, + statement, parent, checker.locator(), checker.stylist(), diff --git a/crates/ruff/src/rules/pyflakes/rules/unused_variable.rs b/crates/ruff/src/rules/pyflakes/rules/unused_variable.rs index 94cbad3727..4e723160be 100644 --- a/crates/ruff/src/rules/pyflakes/rules/unused_variable.rs +++ b/crates/ruff/src/rules/pyflakes/rules/unused_variable.rs @@ -1,13 +1,13 @@ use itertools::Itertools; -use ruff_python_ast::{self as ast, PySourceType, Ranged, Stmt}; -use ruff_python_parser::{lexer, AsMode, Tok}; -use ruff_text_size::{TextRange, TextSize}; use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::contains_effect; +use ruff_python_ast::{self as ast, PySourceType, Ranged, Stmt}; +use ruff_python_parser::{lexer, AsMode, Tok}; use ruff_python_semantic::Scope; use ruff_source_file::Locator; +use ruff_text_size::{TextRange, TextSize}; use crate::autofix::edits::delete_stmt; use crate::checkers::ast::Checker; @@ -299,7 +299,7 @@ fn remove_unused_variable( /// F841 pub(crate) fn unused_variable(checker: &Checker, scope: &Scope, diagnostics: &mut Vec) { - if scope.uses_locals() && scope.kind.is_any_function() { + if scope.uses_locals() && scope.kind.is_function() { return; } @@ -312,10 +312,13 @@ pub(crate) fn unused_variable(checker: &Checker, scope: &Scope, diagnostics: &mu && !binding.is_global() && !binding.is_used() && !checker.settings.dummy_variable_rgx.is_match(name) - && name != "__tracebackhide__" - && name != "__traceback_info__" - && name != "__traceback_supplement__" - && name != "__debuggerskip__" + && !matches!( + name, + "__tracebackhide__" + | "__traceback_info__" + | "__traceback_supplement__" + | "__debuggerskip__" + ) { return Some((name.to_string(), binding.range, binding.source)); } @@ -325,10 +328,10 @@ pub(crate) fn unused_variable(checker: &Checker, scope: &Scope, diagnostics: &mu { let mut diagnostic = Diagnostic::new(UnusedVariable { name }, range); if checker.patch(diagnostic.kind.rule()) { - if let Some(source) = source { - let stmt = checker.semantic().stmts[source]; - let parent = checker.semantic().stmts.parent(stmt); - if let Some(fix) = remove_unused_variable(stmt, parent, range, checker) { + if let Some(statement_id) = source { + let statement = checker.semantic().statement(statement_id); + let parent = checker.semantic().parent_statement(statement_id); + if let Some(fix) = remove_unused_variable(statement, parent, range, checker) { diagnostic.set_fix(fix); } } diff --git a/crates/ruff/src/rules/pyflakes/rules/yield_outside_function.rs b/crates/ruff/src/rules/pyflakes/rules/yield_outside_function.rs index 57c6b4b687..c5a7c5bc42 100644 --- a/crates/ruff/src/rules/pyflakes/rules/yield_outside_function.rs +++ b/crates/ruff/src/rules/pyflakes/rules/yield_outside_function.rs @@ -1,10 +1,8 @@ use std::fmt; -use ruff_python_ast::{Expr, Ranged}; - use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_semantic::ScopeKind; +use ruff_python_ast::{Expr, Ranged}; use crate::checkers::ast::Checker; @@ -26,12 +24,15 @@ impl fmt::Display for DeferralKeyword { } /// ## What it does -/// Checks for `yield` and `yield from` statements outside of functions. +/// Checks for `yield`, `yield from`, and `await` usages outside of functions. /// /// ## Why is this bad? -/// The use of a `yield` or `yield from` statement outside of a function will +/// The use of `yield`, `yield from`, or `await` outside of a function will /// raise a `SyntaxError`. /// +/// As an exception, `await` is allowed at the top level of a Jupyter notebook +/// (see: [autoawait]). +/// /// ## Example /// ```python /// class Foo: @@ -40,6 +41,8 @@ impl fmt::Display for DeferralKeyword { /// /// ## References /// - [Python documentation: `yield`](https://docs.python.org/3/reference/simple_stmts.html#the-yield-statement) +/// +/// [autoawait]: https://ipython.readthedocs.io/en/stable/interactive/autoawait.html #[violation] pub struct YieldOutsideFunction { keyword: DeferralKeyword, @@ -53,17 +56,26 @@ impl Violation for YieldOutsideFunction { } } +/// F704 pub(crate) fn yield_outside_function(checker: &mut Checker, expr: &Expr) { - if matches!( - checker.semantic().scope().kind, - ScopeKind::Class(_) | ScopeKind::Module - ) { + let scope = checker.semantic().current_scope(); + if scope.kind.is_module() || scope.kind.is_class() { let keyword = match expr { Expr::Yield(_) => DeferralKeyword::Yield, Expr::YieldFrom(_) => DeferralKeyword::YieldFrom, Expr::Await(_) => DeferralKeyword::Await, - _ => panic!("Expected Expr::Yield | Expr::YieldFrom | Expr::Await"), + _ => return, }; + + // `await` is allowed at the top level of a Jupyter notebook. + // See: https://ipython.readthedocs.io/en/stable/interactive/autoawait.html. + if scope.kind.is_module() + && checker.source_type.is_jupyter() + && keyword == DeferralKeyword::Await + { + return; + } + checker.diagnostics.push(Diagnostic::new( YieldOutsideFunction { keyword }, expr.range(), diff --git a/crates/ruff/src/rules/pyflakes/snapshots/ruff__rules__pyflakes__tests__F401_F401_0.py.snap b/crates/ruff/src/rules/pyflakes/snapshots/ruff__rules__pyflakes__tests__F401_F401_0.py.snap index 67c97bb6ba..4996e8b899 100644 --- a/crates/ruff/src/rules/pyflakes/snapshots/ruff__rules__pyflakes__tests__F401_F401_0.py.snap +++ b/crates/ruff/src/rules/pyflakes/snapshots/ruff__rules__pyflakes__tests__F401_F401_0.py.snap @@ -151,6 +151,8 @@ F401_0.py:93:16: F401 [*] `x` imported but unused 92 92 | case 0,: 93 |- import x 94 93 | import y +95 94 | +96 95 | F401_0.py:94:16: F401 [*] `y` imported but unused | @@ -166,5 +168,27 @@ F401_0.py:94:16: F401 [*] `y` imported but unused 92 92 | case 0,: 93 93 | import x 94 |- import y +95 94 | +96 95 | +97 96 | # Test: access a sub-importation via an alias. + +F401_0.py:99:8: F401 [*] `foo.bar.baz` imported but unused + | + 97 | # Test: access a sub-importation via an alias. + 98 | import foo.bar as bop + 99 | import foo.bar.baz + | ^^^^^^^^^^^ F401 +100 | +101 | print(bop.baz.read_csv("test.csv")) + | + = help: Remove unused import: `foo.bar.baz` + +ℹ Fix +96 96 | +97 97 | # Test: access a sub-importation via an alias. +98 98 | import foo.bar as bop +99 |-import foo.bar.baz +100 99 | +101 100 | print(bop.baz.read_csv("test.csv")) diff --git a/crates/ruff/src/rules/pyflakes/snapshots/ruff__rules__pyflakes__tests__f841_dummy_variable_rgx.snap b/crates/ruff/src/rules/pyflakes/snapshots/ruff__rules__pyflakes__tests__f841_dummy_variable_rgx.snap index ff53df87e1..5197e53959 100644 --- a/crates/ruff/src/rules/pyflakes/snapshots/ruff__rules__pyflakes__tests__f841_dummy_variable_rgx.snap +++ b/crates/ruff/src/rules/pyflakes/snapshots/ruff__rules__pyflakes__tests__f841_dummy_variable_rgx.snap @@ -256,4 +256,22 @@ F841_0.py:127:21: F841 Local variable `value` is assigned to but never used | = help: Remove assignment to unused variable `value` +F841_0.py:152:25: F841 [*] Local variable `_` is assigned to but never used + | +150 | try: +151 | pass +152 | except Exception as _: + | ^ F841 +153 | pass + | + = help: Remove assignment to unused variable `_` + +ℹ Fix +149 149 | def f(): +150 150 | try: +151 151 | pass +152 |- except Exception as _: + 152 |+ except Exception: +153 153 | pass + diff --git a/crates/ruff/src/rules/pylint/helpers.rs b/crates/ruff/src/rules/pylint/helpers.rs index 425771c55b..60bb0dd223 100644 --- a/crates/ruff/src/rules/pylint/helpers.rs +++ b/crates/ruff/src/rules/pylint/helpers.rs @@ -23,17 +23,12 @@ pub(super) fn type_param_name(arguments: &Arguments) -> Option<&str> { } pub(super) fn in_dunder_init(semantic: &SemanticModel, settings: &Settings) -> bool { - let scope = semantic.scope(); - let (ScopeKind::Function(ast::StmtFunctionDef { + let scope = semantic.current_scope(); + let ScopeKind::Function(ast::StmtFunctionDef { name, decorator_list, .. - }) - | ScopeKind::AsyncFunction(ast::StmtAsyncFunctionDef { - name, - decorator_list, - .. - })) = scope.kind + }) = scope.kind else { return false; }; diff --git a/crates/ruff/src/rules/pylint/mod.rs b/crates/ruff/src/rules/pylint/mod.rs index fbe0c1abe3..7611f18fba 100644 --- a/crates/ruff/src/rules/pylint/mod.rs +++ b/crates/ruff/src/rules/pylint/mod.rs @@ -126,11 +126,16 @@ mod tests { Rule::SubprocessPopenPreexecFn, Path::new("subprocess_popen_preexec_fn.py") )] + #[test_case( + Rule::SubprocessRunWithoutCheck, + Path::new("subprocess_run_without_check.py") + )] + #[test_case(Rule::BadDunderMethodName, Path::new("bad_dunder_method_name.py"))] fn rules(rule_code: Rule, path: &Path) -> Result<()> { let snapshot = format!("{}_{}", rule_code.noqa_code(), path.to_string_lossy()); let diagnostics = test_path( Path::new("pylint").join(path).as_path(), - &Settings::for_rules(vec![rule_code]), + &Settings::for_rule(rule_code), )?; assert_messages!(snapshot, diagnostics); Ok(()) @@ -140,10 +145,8 @@ mod tests { fn repeated_isinstance_calls() -> Result<()> { let diagnostics = test_path( Path::new("pylint/repeated_isinstance_calls.py"), - &Settings { - target_version: PythonVersion::Py39, - ..Settings::for_rules(vec![Rule::RepeatedIsinstanceCalls]) - }, + &Settings::for_rule(Rule::RepeatedIsinstanceCalls) + .with_target_version(PythonVersion::Py39), )?; assert_messages!(diagnostics); Ok(()) @@ -153,10 +156,7 @@ mod tests { fn continue_in_finally() -> Result<()> { let diagnostics = test_path( Path::new("pylint/continue_in_finally.py"), - &Settings { - target_version: PythonVersion::Py37, - ..Settings::for_rules(vec![Rule::ContinueInFinally]) - }, + &Settings::for_rule(Rule::ContinueInFinally).with_target_version(PythonVersion::Py37), )?; assert_messages!(diagnostics); Ok(()) @@ -171,7 +171,7 @@ mod tests { allow_magic_value_types: vec![pylint::settings::ConstantType::Int], ..pylint::settings::Settings::default() }, - ..Settings::for_rules(vec![Rule::MagicValueComparison]) + ..Settings::for_rule(Rule::MagicValueComparison) }, )?; assert_messages!(diagnostics); @@ -187,7 +187,7 @@ mod tests { max_args: 4, ..pylint::settings::Settings::default() }, - ..Settings::for_rules(vec![Rule::TooManyArguments]) + ..Settings::for_rule(Rule::TooManyArguments) }, )?; assert_messages!(diagnostics); @@ -200,7 +200,7 @@ mod tests { Path::new("pylint/too_many_arguments_params.py"), &Settings { dummy_variable_rgx: Regex::new(r"skip_.*").unwrap(), - ..Settings::for_rules(vec![Rule::TooManyArguments]) + ..Settings::for_rule(Rule::TooManyArguments) }, )?; assert_messages!(diagnostics); @@ -216,7 +216,7 @@ mod tests { max_branches: 1, ..pylint::settings::Settings::default() }, - ..Settings::for_rules(vec![Rule::TooManyBranches]) + ..Settings::for_rule(Rule::TooManyBranches) }, )?; assert_messages!(diagnostics); @@ -232,7 +232,7 @@ mod tests { max_statements: 1, ..pylint::settings::Settings::default() }, - ..Settings::for_rules(vec![Rule::TooManyStatements]) + ..Settings::for_rule(Rule::TooManyStatements) }, )?; assert_messages!(diagnostics); @@ -248,7 +248,7 @@ mod tests { max_returns: 1, ..pylint::settings::Settings::default() }, - ..Settings::for_rules(vec![Rule::TooManyReturnStatements]) + ..Settings::for_rule(Rule::TooManyReturnStatements) }, )?; assert_messages!(diagnostics); diff --git a/crates/ruff/src/rules/pylint/rules/assert_on_string_literal.rs b/crates/ruff/src/rules/pylint/rules/assert_on_string_literal.rs index 46bbf2e86a..b88987fbae 100644 --- a/crates/ruff/src/rules/pylint/rules/assert_on_string_literal.rs +++ b/crates/ruff/src/rules/pylint/rules/assert_on_string_literal.rs @@ -71,7 +71,7 @@ pub(crate) fn assert_on_string_literal(checker: &mut Checker, test: &Expr) { } _ => {} }, - Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { + Expr::FString(ast::ExprFString { values, .. }) => { checker.diagnostics.push(Diagnostic::new( AssertOnStringLiteral { kind: if values.iter().all(|value| match value { diff --git a/crates/ruff/src/rules/pylint/rules/bad_dunder_method_name.rs b/crates/ruff/src/rules/pylint/rules/bad_dunder_method_name.rs new file mode 100644 index 0000000000..3887ab252a --- /dev/null +++ b/crates/ruff/src/rules/pylint/rules/bad_dunder_method_name.rs @@ -0,0 +1,192 @@ +use ruff_diagnostics::{Diagnostic, Violation}; +use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::identifier::Identifier; +use ruff_python_ast::Stmt; + +use crate::checkers::ast::Checker; + +/// ## What it does +/// Checks for any misspelled dunder name method and for any method +/// defined with `__...__` that's not one of the pre-defined methods. +/// +/// The pre-defined methods encompass all of Python's standard dunder +/// methods. +/// +/// ## Why is this bad? +/// Misspelled dunder name methods may cause your code to not function +/// as expected. +/// +/// Since dunder methods are associated with customizing the behavior +/// of a class in Python, introducing a dunder method such as `__foo__` +/// that diverges from standard Python dunder methods could potentially +/// confuse someone reading the code. +/// +/// ## Example +/// ```python +/// class Foo: +/// def __init_(self): +/// ... +/// ``` +/// +/// Use instead: +/// ```python +/// class Foo: +/// def __init__(self): +/// ... +/// ``` +#[violation] +pub struct BadDunderMethodName { + name: String, +} + +impl Violation for BadDunderMethodName { + #[derive_message_formats] + fn message(&self) -> String { + let BadDunderMethodName { name } = self; + format!("Bad or misspelled dunder method name `{name}`. (bad-dunder-name)") + } +} + +/// PLW3201 +pub(crate) fn bad_dunder_method_name(checker: &mut Checker, class_body: &[Stmt]) { + for method in class_body + .iter() + .filter_map(ruff_python_ast::Stmt::as_function_def_stmt) + .filter(|method| { + if is_known_dunder_method(&method.name) { + return false; + } + method.name.starts_with('_') && method.name.ends_with('_') + }) + { + checker.diagnostics.push(Diagnostic::new( + BadDunderMethodName { + name: method.name.to_string(), + }, + method.identifier(), + )); + } +} + +/// Returns `true` if a method is a known dunder method. +fn is_known_dunder_method(method: &str) -> bool { + matches!( + method, + "__abs__" + | "__add__" + | "__aenter__" + | "__aexit__" + | "__aiter__" + | "__and__" + | "__anext__" + | "__await__" + | "__bool__" + | "__bytes__" + | "__call__" + | "__ceil__" + | "__class__" + | "__class_getitem__" + | "__complex__" + | "__contains__" + | "__copy__" + | "__deepcopy__" + | "__del__" + | "__delattr__" + | "__delete__" + | "__delitem__" + | "__dict__" + | "__dir__" + | "__divmod__" + | "__doc__" + | "__enter__" + | "__eq__" + | "__exit__" + | "__float__" + | "__floor__" + | "__floordiv__" + | "__format__" + | "__fspath__" + | "__ge__" + | "__get__" + | "__getattr__" + | "__getattribute__" + | "__getitem__" + | "__getnewargs__" + | "__getnewargs_ex__" + | "__getstate__" + | "__gt__" + | "__hash__" + | "__iadd__" + | "__iand__" + | "__ifloordiv__" + | "__ilshift__" + | "__imatmul__" + | "__imod__" + | "__imul__" + | "__init__" + | "__init_subclass__" + | "__instancecheck__" + | "__int__" + | "__invert__" + | "__ior__" + | "__ipow__" + | "__irshift__" + | "__isub__" + | "__iter__" + | "__itruediv__" + | "__ixor__" + | "__le__" + | "__len__" + | "__length_hint__" + | "__lshift__" + | "__lt__" + | "__matmul__" + | "__missing__" + | "__mod__" + | "__module__" + | "__mul__" + | "__ne__" + | "__neg__" + | "__new__" + | "__next__" + | "__or__" + | "__pos__" + | "__post_init__" + | "__pow__" + | "__radd__" + | "__rand__" + | "__rdivmod__" + | "__reduce__" + | "__reduce_ex__" + | "__repr__" + | "__reversed__" + | "__rfloordiv__" + | "__rlshift__" + | "__rmatmul__" + | "__rmod__" + | "__rmul__" + | "__ror__" + | "__round__" + | "__rpow__" + | "__rrshift__" + | "__rshift__" + | "__rsub__" + | "__rtruediv__" + | "__rxor__" + | "__set__" + | "__set_name__" + | "__setattr__" + | "__setitem__" + | "__setstate__" + | "__sizeof__" + | "__str__" + | "__sub__" + | "__subclasscheck__" + | "__subclasses__" + | "__subclasshook__" + | "__truediv__" + | "__trunc__" + | "__weakref__" + | "__xor__" + ) +} diff --git a/crates/ruff/src/rules/pylint/rules/bad_string_format_character.rs b/crates/ruff/src/rules/pylint/rules/bad_string_format_character.rs index 39fd1c4b34..6639fb95ce 100644 --- a/crates/ruff/src/rules/pylint/rules/bad_string_format_character.rs +++ b/crates/ruff/src/rules/pylint/rules/bad_string_format_character.rs @@ -19,8 +19,7 @@ use crate::checkers::ast::Checker; /// Checks for unsupported format types in format strings. /// /// ## Why is this bad? -/// The format string is not checked at compile time, so it is easy to -/// introduce bugs by mistyping the format string. +/// An invalid format string character will result in an error at runtime. /// /// ## Example /// ```python @@ -41,6 +40,7 @@ impl Violation for BadStringFormatCharacter { } } +/// PLE1300 /// Ex) `"{:z}".format("1")` pub(crate) fn call(checker: &mut Checker, string: &str, range: TextRange) { if let Ok(format_string) = FormatString::from_str(string) { @@ -64,6 +64,7 @@ pub(crate) fn call(checker: &mut Checker, string: &str, range: TextRange) { } } +/// PLE1300 /// Ex) `"%z" % "1"` pub(crate) fn percent(checker: &mut Checker, expr: &Expr) { // Grab each string segment (in case there's an implicit concatenation). diff --git a/crates/ruff/src/rules/pylint/rules/bad_string_format_type.rs b/crates/ruff/src/rules/pylint/rules/bad_string_format_type.rs index 1f2905751d..7ae0e648fe 100644 --- a/crates/ruff/src/rules/pylint/rules/bad_string_format_type.rs +++ b/crates/ruff/src/rules/pylint/rules/bad_string_format_type.rs @@ -9,7 +9,7 @@ use rustc_hash::FxHashMap; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::str::{leading_quote, trailing_quote}; -use ruff_python_semantic::analyze::type_inference::PythonType; +use ruff_python_semantic::analyze::type_inference::{NumberLike, PythonType, ResolvedPythonType}; use crate::checkers::ast::Checker; @@ -59,14 +59,16 @@ impl FormatType { | PythonType::Set | PythonType::Tuple | PythonType::Generator - | PythonType::Complex - | PythonType::Bool | PythonType::Ellipsis | PythonType::None => matches!( self, FormatType::Unknown | FormatType::String | FormatType::Repr ), - PythonType::Integer => matches!( + PythonType::Number(NumberLike::Complex | NumberLike::Bool) => matches!( + self, + FormatType::Unknown | FormatType::String | FormatType::Repr + ), + PythonType::Number(NumberLike::Integer) => matches!( self, FormatType::Unknown | FormatType::String @@ -75,7 +77,7 @@ impl FormatType { | FormatType::Float | FormatType::Number ), - PythonType::Float => matches!( + PythonType::Number(NumberLike::Float) => matches!( self, FormatType::Unknown | FormatType::String @@ -83,7 +85,6 @@ impl FormatType { | FormatType::Float | FormatType::Number ), - PythonType::Unknown => true, } } } @@ -118,16 +119,22 @@ fn collect_specs(formats: &[CFormatStrOrBytes]) -> Vec<&CFormatSpec> { /// Return `true` if the format string is equivalent to the constant type fn equivalent(format: &CFormatSpec, value: &Expr) -> bool { - let format: FormatType = format.format_char.into(); - let constant: PythonType = value.into(); - format.is_compatible_with(constant) + let format = FormatType::from(format.format_char); + match ResolvedPythonType::from(value) { + ResolvedPythonType::Atom(atom) => format.is_compatible_with(atom), + ResolvedPythonType::Union(atoms) => { + atoms.iter().all(|atom| format.is_compatible_with(*atom)) + } + ResolvedPythonType::Unknown => true, + ResolvedPythonType::TypeError => true, + } } -/// Return `true` if the [`Constnat`] aligns with the format type. +/// Return `true` if the [`Constant`] aligns with the format type. fn is_valid_constant(formats: &[CFormatStrOrBytes], value: &Expr) -> bool { let formats = collect_specs(formats); - // If there is more than one format, this is not valid python and we should - // return true so that no error is reported + // If there is more than one format, this is not valid Python and we should + // return true so that no error is reported. let [format] = formats.as_slice() else { return true; }; @@ -180,7 +187,10 @@ fn is_valid_dict( return true; }; if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(mapping_key), + value: + Constant::Str(ast::StringConstant { + value: mapping_key, .. + }), .. }) = key { @@ -242,8 +252,7 @@ pub(crate) fn bad_string_format_type(checker: &mut Checker, expr: &Expr, right: values, range: _, }) => is_valid_dict(&format_strings, keys, values), - Expr::Constant(_) => is_valid_constant(&format_strings, right), - _ => true, + _ => is_valid_constant(&format_strings, right), }; if !is_valid { checker diff --git a/crates/ruff/src/rules/pylint/rules/compare_to_empty_string.rs b/crates/ruff/src/rules/pylint/rules/compare_to_empty_string.rs index f784489f60..a6d34938fd 100644 --- a/crates/ruff/src/rules/pylint/rules/compare_to_empty_string.rs +++ b/crates/ruff/src/rules/pylint/rules/compare_to_empty_string.rs @@ -67,8 +67,8 @@ pub(crate) fn compare_to_empty_string( // DataFrame and np.ndarray indexing. if checker .semantic() - .expr_ancestors() - .any(|parent| parent.is_subscript_expr()) + .current_expressions() + .any(Expr::is_subscript_expr) { return; } diff --git a/crates/ruff/src/rules/pylint/rules/continue_in_finally.rs b/crates/ruff/src/rules/pylint/rules/continue_in_finally.rs index 90f75b83e4..78e4ae85aa 100644 --- a/crates/ruff/src/rules/pylint/rules/continue_in_finally.rs +++ b/crates/ruff/src/rules/pylint/rules/continue_in_finally.rs @@ -64,16 +64,14 @@ fn traverse_body(checker: &mut Checker, body: &[Stmt]) { traverse_body(checker, &clause.body); } } - Stmt::Try(ast::StmtTry { body, orelse, .. }) - | Stmt::TryStar(ast::StmtTryStar { body, orelse, .. }) => { + Stmt::Try(ast::StmtTry { body, orelse, .. }) => { traverse_body(checker, body); traverse_body(checker, orelse); } - Stmt::For(ast::StmtFor { orelse, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { orelse, .. }) - | Stmt::While(ast::StmtWhile { orelse, .. }) => traverse_body(checker, orelse), - Stmt::With(ast::StmtWith { body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) => { + Stmt::For(ast::StmtFor { orelse, .. }) | Stmt::While(ast::StmtWhile { orelse, .. }) => { + traverse_body(checker, orelse); + } + Stmt::With(ast::StmtWith { body, .. }) => { traverse_body(checker, body); } Stmt::Match(ast::StmtMatch { cases, .. }) => { diff --git a/crates/ruff/src/rules/pylint/rules/duplicate_value.rs b/crates/ruff/src/rules/pylint/rules/duplicate_value.rs deleted file mode 100644 index 194e0bc55d..0000000000 --- a/crates/ruff/src/rules/pylint/rules/duplicate_value.rs +++ /dev/null @@ -1,57 +0,0 @@ -use ruff_python_ast::{self as ast, Expr, Ranged}; -use rustc_hash::FxHashSet; - -use ruff_diagnostics::{Diagnostic, Violation}; -use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::comparable::ComparableExpr; - -use crate::checkers::ast::Checker; - -/// ## What it does -/// Checks for set literals that contain duplicate values. -/// -/// ## Why is this bad? -/// In Python, sets are unordered collections of unique elements. Including a -/// duplicate value in a set literal is redundant, and may be indicative of a -/// mistake. -/// -/// ## Example -/// ```python -/// {1, 2, 3, 1} -/// ``` -/// -/// Use instead: -/// ```python -/// {1, 2, 3} -/// ``` -#[violation] -pub struct DuplicateValue { - value: String, -} - -impl Violation for DuplicateValue { - #[derive_message_formats] - fn message(&self) -> String { - let DuplicateValue { value } = self; - format!("Duplicate value `{value}` in set") - } -} - -/// PLW0130 -pub(crate) fn duplicate_value(checker: &mut Checker, elts: &Vec) { - let mut seen_values: FxHashSet = FxHashSet::default(); - for elt in elts { - if let Expr::Constant(ast::ExprConstant { value, .. }) = elt { - let comparable_value: ComparableExpr = elt.into(); - - if !seen_values.insert(comparable_value) { - checker.diagnostics.push(Diagnostic::new( - DuplicateValue { - value: checker.generator().constant(value), - }, - elt.range(), - )); - } - }; - } -} diff --git a/crates/ruff/src/rules/pylint/rules/invalid_envvar_default.rs b/crates/ruff/src/rules/pylint/rules/invalid_envvar_default.rs index bbe2e40581..a6972b1d26 100644 --- a/crates/ruff/src/rules/pylint/rules/invalid_envvar_default.rs +++ b/crates/ruff/src/rules/pylint/rules/invalid_envvar_default.rs @@ -5,25 +5,29 @@ use ruff_python_ast::{self as ast, Constant, Expr, Operator, Ranged}; use crate::checkers::ast::Checker; /// ## What it does -/// Checks for `env.getenv` calls with invalid default values. +/// Checks for `os.getenv` calls with invalid default values. /// /// ## Why is this bad? -/// If an environment variable is set, `env.getenv` will return its value as -/// a string. If the environment variable is _not_ set, `env.getenv` will +/// If an environment variable is set, `os.getenv` will return its value as +/// a string. If the environment variable is _not_ set, `os.getenv` will /// return `None`, or the default value if one is provided. /// /// If the default value is not a string or `None`, then it will be -/// inconsistent with the return type of `env.getenv`, which can lead to +/// inconsistent with the return type of `os.getenv`, which can lead to /// confusing behavior. /// /// ## Example /// ```python -/// int(env.getenv("FOO", 1)) +/// import os +/// +/// int(os.getenv("FOO", 1)) /// ``` /// /// Use instead: /// ```python -/// int(env.getenv("FOO", "1")) +/// import os +/// +/// int(os.getenv("FOO", "1")) /// ``` #[violation] pub struct InvalidEnvvarDefault; @@ -71,7 +75,7 @@ fn is_valid_default(expr: &Expr) -> bool { Expr::Constant(ast::ExprConstant { value: Constant::Str { .. } | Constant::None { .. }, .. - }) | Expr::JoinedStr(_) + }) | Expr::FString(_) ) } diff --git a/crates/ruff/src/rules/pylint/rules/invalid_envvar_value.rs b/crates/ruff/src/rules/pylint/rules/invalid_envvar_value.rs index eccbd4077f..174a6a1359 100644 --- a/crates/ruff/src/rules/pylint/rules/invalid_envvar_value.rs +++ b/crates/ruff/src/rules/pylint/rules/invalid_envvar_value.rs @@ -1,6 +1,7 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr, Operator, Ranged}; +use ruff_python_ast::{self as ast, Ranged}; +use ruff_python_semantic::analyze::type_inference::{PythonType, ResolvedPythonType}; use crate::checkers::ast::Checker; @@ -32,46 +33,6 @@ impl Violation for InvalidEnvvarValue { } } -fn is_valid_key(expr: &Expr) -> bool { - // We can't infer the types of these defaults, so assume they're valid. - if matches!( - expr, - Expr::Name(_) | Expr::Attribute(_) | Expr::Subscript(_) | Expr::Call(_) - ) { - return true; - } - - // Allow string concatenation. - if let Expr::BinOp(ast::ExprBinOp { - left, - right, - op: Operator::Add, - range: _, - }) = expr - { - return is_valid_key(left) && is_valid_key(right); - } - - // Allow string formatting. - if let Expr::BinOp(ast::ExprBinOp { - left, - op: Operator::Mod, - .. - }) = expr - { - return is_valid_key(left); - } - - // Otherwise, the default must be a string. - matches!( - expr, - Expr::Constant(ast::ExprConstant { - value: Constant::Str { .. }, - .. - }) | Expr::JoinedStr(_) - ) -} - /// PLE1507 pub(crate) fn invalid_envvar_value(checker: &mut Checker, call: &ast::ExprCall) { if checker @@ -84,10 +45,15 @@ pub(crate) fn invalid_envvar_value(checker: &mut Checker, call: &ast::ExprCall) return; }; - if !is_valid_key(expr) { - checker - .diagnostics - .push(Diagnostic::new(InvalidEnvvarValue, expr.range())); + if matches!( + ResolvedPythonType::from(expr), + ResolvedPythonType::Unknown | ResolvedPythonType::Atom(PythonType::String) + ) { + return; } + + checker + .diagnostics + .push(Diagnostic::new(InvalidEnvvarValue, expr.range())); } } diff --git a/crates/ruff/src/rules/pylint/rules/invalid_str_return.rs b/crates/ruff/src/rules/pylint/rules/invalid_str_return.rs index 74eddd0f92..3dd341a8f5 100644 --- a/crates/ruff/src/rules/pylint/rules/invalid_str_return.rs +++ b/crates/ruff/src/rules/pylint/rules/invalid_str_return.rs @@ -3,7 +3,7 @@ use ruff_python_ast::{Ranged, Stmt}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::{helpers::ReturnStatementVisitor, statement_visitor::StatementVisitor}; -use ruff_python_semantic::analyze::type_inference::PythonType; +use ruff_python_semantic::analyze::type_inference::{PythonType, ResolvedPythonType}; use crate::checkers::ast::Checker; @@ -29,7 +29,7 @@ pub(crate) fn invalid_str_return(checker: &mut Checker, name: &str, body: &[Stmt return; } - if !checker.semantic().scope().kind.is_class() { + if !checker.semantic().current_scope().kind.is_class() { return; } @@ -41,10 +41,9 @@ pub(crate) fn invalid_str_return(checker: &mut Checker, name: &str, body: &[Stmt for stmt in returns { if let Some(value) = stmt.value.as_deref() { - // Disallow other, non- if !matches!( - PythonType::from(value), - PythonType::String | PythonType::Unknown + ResolvedPythonType::from(value), + ResolvedPythonType::Unknown | ResolvedPythonType::Atom(PythonType::String) ) { checker .diagnostics diff --git a/crates/ruff/src/rules/pylint/rules/logging.rs b/crates/ruff/src/rules/pylint/rules/logging.rs index 5d2f0604ac..1c05df692f 100644 --- a/crates/ruff/src/rules/pylint/rules/logging.rs +++ b/crates/ruff/src/rules/pylint/rules/logging.rs @@ -109,9 +109,9 @@ pub(crate) fn logging_call(checker: &mut Checker, call: &ast::ExprCall) { } let Some(Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), + value: Constant::Str(ast::StringConstant { value, .. }), .. - })) = call.arguments.find_argument("msg", 0) + })) = call.arguments.find_positional(0) else { return; }; diff --git a/crates/ruff/src/rules/pylint/rules/magic_value_comparison.rs b/crates/ruff/src/rules/pylint/rules/magic_value_comparison.rs index 0c7385c410..3f96d789c2 100644 --- a/crates/ruff/src/rules/pylint/rules/magic_value_comparison.rs +++ b/crates/ruff/src/rules/pylint/rules/magic_value_comparison.rs @@ -79,7 +79,9 @@ fn is_magic_value(constant: &Constant, allowed_types: &[ConstantType]) -> bool { Constant::Bool(_) => false, Constant::Ellipsis => false, // Otherwise, special-case some common string and integer types. - Constant::Str(value) => !matches!(value.as_str(), "" | "__main__"), + Constant::Str(ast::StringConstant { value, .. }) => { + !matches!(value.as_str(), "" | "__main__") + } Constant::Int(value) => !matches!(value.try_into(), Ok(0 | 1)), Constant::Bytes(_) => true, Constant::Float(_) => true, diff --git a/crates/ruff/src/rules/pylint/rules/mod.rs b/crates/ruff/src/rules/pylint/rules/mod.rs index bfd44d030e..a2a498cb87 100644 --- a/crates/ruff/src/rules/pylint/rules/mod.rs +++ b/crates/ruff/src/rules/pylint/rules/mod.rs @@ -1,5 +1,6 @@ pub(crate) use assert_on_string_literal::*; pub(crate) use await_outside_async::*; +pub(crate) use bad_dunder_method_name::*; pub(crate) use bad_str_strip_call::*; pub(crate) use bad_string_format_character::BadStringFormatCharacter; pub(crate) use bad_string_format_type::*; @@ -37,6 +38,7 @@ pub(crate) use return_in_init::*; pub(crate) use self_assigning_variable::*; pub(crate) use single_string_slots::*; pub(crate) use subprocess_popen_preexec_fn::*; +pub(crate) use subprocess_run_without_check::*; pub(crate) use sys_exit_alias::*; pub(crate) use too_many_arguments::*; pub(crate) use too_many_branches::*; @@ -55,6 +57,7 @@ pub(crate) use yield_in_init::*; mod assert_on_string_literal; mod await_outside_async; +mod bad_dunder_method_name; mod bad_str_strip_call; pub(crate) mod bad_string_format_character; mod bad_string_format_type; @@ -92,6 +95,7 @@ mod return_in_init; mod self_assigning_variable; mod single_string_slots; mod subprocess_popen_preexec_fn; +mod subprocess_run_without_check; mod sys_exit_alias; mod too_many_arguments; mod too_many_branches; diff --git a/crates/ruff/src/rules/pylint/rules/redefined_loop_name.rs b/crates/ruff/src/rules/pylint/rules/redefined_loop_name.rs index 870da016f6..23ec06ba31 100644 --- a/crates/ruff/src/rules/pylint/rules/redefined_loop_name.rs +++ b/crates/ruff/src/rules/pylint/rules/redefined_loop_name.rs @@ -147,9 +147,7 @@ impl<'a, 'b> StatementVisitor<'b> for InnerForWithAssignTargetsVisitor<'a, 'b> { fn visit_stmt(&mut self, stmt: &'b Stmt) { // Collect target expressions. match stmt { - // For and async for. - Stmt::For(ast::StmtFor { target, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { target, .. }) => { + Stmt::For(ast::StmtFor { target, .. }) => { self.assignment_targets.extend( assignment_targets_from_expr(target, self.dummy_variable_rgx).map(|expr| { ExprWithInnerBindingKind { @@ -159,7 +157,6 @@ impl<'a, 'b> StatementVisitor<'b> for InnerForWithAssignTargetsVisitor<'a, 'b> { }), ); } - // With. Stmt::With(ast::StmtWith { items, .. }) => { self.assignment_targets.extend( assignment_targets_from_with_items(items, self.dummy_variable_rgx).map( @@ -170,7 +167,6 @@ impl<'a, 'b> StatementVisitor<'b> for InnerForWithAssignTargetsVisitor<'a, 'b> { ), ); } - // Assignment, augmented assignment, and annotated assignment. Stmt::Assign(ast::StmtAssign { targets, value, .. }) => { // Check for single-target assignments which are of the // form `x = cast(..., x)`. @@ -217,8 +213,7 @@ impl<'a, 'b> StatementVisitor<'b> for InnerForWithAssignTargetsVisitor<'a, 'b> { // Decide whether to recurse. match stmt { // Don't recurse into blocks that create a new scope. - Stmt::ClassDef(_) => {} - Stmt::FunctionDef(_) => {} + Stmt::ClassDef(_) | Stmt::FunctionDef(_) => {} // Otherwise, do recurse. _ => { walk_stmt(self, stmt); @@ -339,8 +334,7 @@ fn assignment_targets_from_assign_targets<'a>( /// PLW2901 pub(crate) fn redefined_loop_name(checker: &mut Checker, stmt: &Stmt) { let (outer_assignment_targets, inner_assignment_targets) = match stmt { - Stmt::With(ast::StmtWith { items, body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { items, body, .. }) => { + Stmt::With(ast::StmtWith { items, body, .. }) => { let outer_assignment_targets: Vec = assignment_targets_from_with_items(items, &checker.settings.dummy_variable_rgx) .map(|expr| ExprWithOuterBindingKind { @@ -358,8 +352,7 @@ pub(crate) fn redefined_loop_name(checker: &mut Checker, stmt: &Stmt) { } (outer_assignment_targets, visitor.assignment_targets) } - Stmt::For(ast::StmtFor { target, body, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { target, body, .. }) => { + Stmt::For(ast::StmtFor { target, body, .. }) => { let outer_assignment_targets: Vec = assignment_targets_from_expr(target, &checker.settings.dummy_variable_rgx) .map(|expr| ExprWithOuterBindingKind { @@ -377,9 +370,7 @@ pub(crate) fn redefined_loop_name(checker: &mut Checker, stmt: &Stmt) { } (outer_assignment_targets, visitor.assignment_targets) } - _ => panic!( - "redefined_loop_name called on Statement that is not a With, For, AsyncWith, or AsyncFor" - ) + _ => panic!("redefined_loop_name called on Statement that is not a `With` or `For`"), }; let mut diagnostics = Vec::new(); diff --git a/crates/ruff/src/rules/pylint/rules/self_assigning_variable.rs b/crates/ruff/src/rules/pylint/rules/self_assigning_variable.rs index fe54bb484e..4176626a33 100644 --- a/crates/ruff/src/rules/pylint/rules/self_assigning_variable.rs +++ b/crates/ruff/src/rules/pylint/rules/self_assigning_variable.rs @@ -62,7 +62,7 @@ pub(crate) fn self_assigning_variable(checker: &mut Checker, target: &Expr, valu // Assignments in class bodies are attributes (e.g., `x = x` assigns `x` to `self.x`, and thus // is not a self-assignment). - if checker.semantic().scope().kind.is_class() { + if checker.semantic().current_scope().kind.is_class() { return; } diff --git a/crates/ruff/src/rules/pylint/rules/single_string_slots.rs b/crates/ruff/src/rules/pylint/rules/single_string_slots.rs index e4b51fd9cd..82ba8bbbc9 100644 --- a/crates/ruff/src/rules/pylint/rules/single_string_slots.rs +++ b/crates/ruff/src/rules/pylint/rules/single_string_slots.rs @@ -70,7 +70,7 @@ pub(crate) fn single_string_slots(checker: &mut Checker, class: &StmtClassDef) { Expr::Constant(ast::ExprConstant { value: Constant::Str(_), .. - }) | Expr::JoinedStr(_) + }) | Expr::FString(_) ) { checker .diagnostics @@ -92,7 +92,7 @@ pub(crate) fn single_string_slots(checker: &mut Checker, class: &StmtClassDef) { Expr::Constant(ast::ExprConstant { value: Constant::Str(_), .. - }) | Expr::JoinedStr(_) + }) | Expr::FString(_) ) { checker .diagnostics diff --git a/crates/ruff/src/rules/pylint/rules/subprocess_run_without_check.rs b/crates/ruff/src/rules/pylint/rules/subprocess_run_without_check.rs new file mode 100644 index 0000000000..f147e8446c --- /dev/null +++ b/crates/ruff/src/rules/pylint/rules/subprocess_run_without_check.rs @@ -0,0 +1,65 @@ +use ruff_diagnostics::{Diagnostic, Violation}; +use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast as ast; +use ruff_python_ast::Ranged; + +use crate::checkers::ast::Checker; + +/// ## What it does +/// Checks for uses of `subprocess.run` without an explicit `check` argument. +/// +/// ## Why is this bad? +/// By default, `subprocess.run` does not check the return code of the process +/// it runs. This can lead to silent failures. +/// +/// Instead, consider using `check=True` to raise an exception if the process +/// fails, or set `check=False` explicitly to mark the behavior as intentional. +/// +/// ## Example +/// ```python +/// import subprocess +/// +/// subprocess.run(["ls", "nonexistent"]) # No exception raised. +/// ``` +/// +/// Use instead: +/// ```python +/// import subprocess +/// +/// subprocess.run(["ls", "nonexistent"], check=True) # Raises exception. +/// ``` +/// +/// Or: +/// ```python +/// import subprocess +/// +/// subprocess.run(["ls", "nonexistent"], check=False) # Explicitly no check. +/// ``` +/// +/// ## References +/// - [Python documentation: `subprocess.run`](https://docs.python.org/3/library/subprocess.html#subprocess.run) +#[violation] +pub struct SubprocessRunWithoutCheck; + +impl Violation for SubprocessRunWithoutCheck { + #[derive_message_formats] + fn message(&self) -> String { + format!("`subprocess.run` without explicit `check` argument") + } +} + +/// PLW1510 +pub(crate) fn subprocess_run_without_check(checker: &mut Checker, call: &ast::ExprCall) { + if checker + .semantic() + .resolve_call_path(&call.func) + .is_some_and(|call_path| matches!(call_path.as_slice(), ["subprocess", "run"])) + { + if call.arguments.find_keyword("check").is_none() { + checker.diagnostics.push(Diagnostic::new( + SubprocessRunWithoutCheck, + call.func.range(), + )); + } + } +} diff --git a/crates/ruff/src/rules/pylint/rules/too_many_arguments.rs b/crates/ruff/src/rules/pylint/rules/too_many_arguments.rs index 501cb0edc6..8948aeb0cc 100644 --- a/crates/ruff/src/rules/pylint/rules/too_many_arguments.rs +++ b/crates/ruff/src/rules/pylint/rules/too_many_arguments.rs @@ -10,7 +10,7 @@ use crate::checkers::ast::Checker; /// Checks for function definitions that include too many arguments. /// /// By default, this rule allows up to five arguments, as configured by the -/// `pylint.max-args` option. +/// [`pylint.max-args`] option. /// /// ## Why is this bad? /// Functions with many arguments are harder to understand, maintain, and call. diff --git a/crates/ruff/src/rules/pylint/rules/too_many_branches.rs b/crates/ruff/src/rules/pylint/rules/too_many_branches.rs index bc5e459e9f..7c083b10f7 100644 --- a/crates/ruff/src/rules/pylint/rules/too_many_branches.rs +++ b/crates/ruff/src/rules/pylint/rules/too_many_branches.rs @@ -8,7 +8,7 @@ use ruff_python_ast::identifier::Identifier; /// Checks for functions or methods with too many branches. /// /// By default, this rule allows up to 12 branches. This can be configured -/// using the `max-branches` option. +/// using the [`pylint.max-branches`] option. /// /// ## Why is this bad? /// Functions or methods with many branches are harder to understand @@ -66,8 +66,8 @@ use ruff_python_ast::identifier::Identifier; /// return city /// ``` /// -/// ## References -/// - [Ruff configuration documentation](https://beta.ruff.rs/docs/settings/#max-branches) +/// ## Options +/// - `pylint.max-branches` #[violation] pub struct TooManyBranches { branches: usize, @@ -108,7 +108,6 @@ fn num_branches(stmts: &[Stmt]) -> usize { .sum::() } Stmt::For(ast::StmtFor { body, orelse, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { body, orelse, .. }) | Stmt::While(ast::StmtWhile { body, orelse, .. }) => { 1 + num_branches(body) + (if orelse.is_empty() { @@ -122,14 +121,7 @@ fn num_branches(stmts: &[Stmt]) -> usize { handlers, orelse, finalbody, - range: _, - }) - | Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - range: _, + .. }) => { 1 + num_branches(body) + (if orelse.is_empty() { diff --git a/crates/ruff/src/rules/pylint/rules/too_many_return_statements.rs b/crates/ruff/src/rules/pylint/rules/too_many_return_statements.rs index 2ee2abb11d..8fc7fe16e6 100644 --- a/crates/ruff/src/rules/pylint/rules/too_many_return_statements.rs +++ b/crates/ruff/src/rules/pylint/rules/too_many_return_statements.rs @@ -10,7 +10,7 @@ use ruff_python_ast::statement_visitor::StatementVisitor; /// Checks for functions or methods with too many return statements. /// /// By default, this rule allows up to six return statements, as configured by -/// the `pylint.max-returns` option. +/// the [`pylint.max-returns`] option. /// /// ## Why is this bad? /// Functions or methods with many return statements are harder to understand diff --git a/crates/ruff/src/rules/pylint/rules/too_many_statements.rs b/crates/ruff/src/rules/pylint/rules/too_many_statements.rs index 0df12604ac..406f5959fc 100644 --- a/crates/ruff/src/rules/pylint/rules/too_many_statements.rs +++ b/crates/ruff/src/rules/pylint/rules/too_many_statements.rs @@ -8,7 +8,7 @@ use ruff_python_ast::identifier::Identifier; /// Checks for functions or methods with too many statements. /// /// By default, this rule allows up to 50 statements, as configured by the -/// `pylint.max-statements` option. +/// [`pylint.max-statements`] option. /// /// ## Why is this bad? /// Functions or methods with many statements are harder to understand @@ -78,8 +78,7 @@ fn num_statements(stmts: &[Stmt]) -> usize { count += num_statements(&clause.body); } } - Stmt::For(ast::StmtFor { body, orelse, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { body, orelse, .. }) => { + Stmt::For(ast::StmtFor { body, orelse, .. }) => { count += num_statements(body); count += num_statements(orelse); } @@ -99,14 +98,7 @@ fn num_statements(stmts: &[Stmt]) -> usize { handlers, orelse, finalbody, - range: _, - }) - | Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - range: _, + .. }) => { count += 1; count += num_statements(body); @@ -129,7 +121,6 @@ fn num_statements(stmts: &[Stmt]) -> usize { } } Stmt::FunctionDef(ast::StmtFunctionDef { body, .. }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { body, .. }) | Stmt::With(ast::StmtWith { body, .. }) => { count += 1; count += num_statements(body); diff --git a/crates/ruff/src/rules/pylint/rules/unexpected_special_method_signature.rs b/crates/ruff/src/rules/pylint/rules/unexpected_special_method_signature.rs index 5727667c82..09182ef384 100644 --- a/crates/ruff/src/rules/pylint/rules/unexpected_special_method_signature.rs +++ b/crates/ruff/src/rules/pylint/rules/unexpected_special_method_signature.rs @@ -143,7 +143,7 @@ pub(crate) fn unexpected_special_method_signature( decorator_list: &[Decorator], parameters: &Parameters, ) { - if !checker.semantic().scope().kind.is_class() { + if !checker.semantic().current_scope().kind.is_class() { return; } diff --git a/crates/ruff/src/rules/pylint/rules/useless_else_on_loop.rs b/crates/ruff/src/rules/pylint/rules/useless_else_on_loop.rs index 00b0caad33..ff354860c5 100644 --- a/crates/ruff/src/rules/pylint/rules/useless_else_on_loop.rs +++ b/crates/ruff/src/rules/pylint/rules/useless_else_on_loop.rs @@ -63,8 +63,7 @@ fn loop_exits_early(body: &[Stmt]) -> bool { .iter() .any(|clause| loop_exits_early(&clause.body)) } - Stmt::With(ast::StmtWith { body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) => loop_exits_early(body), + Stmt::With(ast::StmtWith { body, .. }) => loop_exits_early(body), Stmt::Match(ast::StmtMatch { cases, .. }) => cases .iter() .any(|MatchCase { body, .. }| loop_exits_early(body)), @@ -74,13 +73,6 @@ fn loop_exits_early(body: &[Stmt]) -> bool { orelse, finalbody, .. - }) - | Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - .. }) => { loop_exits_early(body) || loop_exits_early(orelse) @@ -91,9 +83,9 @@ fn loop_exits_early(body: &[Stmt]) -> bool { }) => loop_exits_early(body), }) } - Stmt::For(ast::StmtFor { orelse, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { orelse, .. }) - | Stmt::While(ast::StmtWhile { orelse, .. }) => loop_exits_early(orelse), + Stmt::For(ast::StmtFor { orelse, .. }) | Stmt::While(ast::StmtWhile { orelse, .. }) => { + loop_exits_early(orelse) + } Stmt::Break(_) => true, _ => false, }) diff --git a/crates/ruff/src/rules/pylint/rules/yield_from_in_async_function.rs b/crates/ruff/src/rules/pylint/rules/yield_from_in_async_function.rs index 5ed24e994a..a94f388a03 100644 --- a/crates/ruff/src/rules/pylint/rules/yield_from_in_async_function.rs +++ b/crates/ruff/src/rules/pylint/rules/yield_from_in_async_function.rs @@ -1,7 +1,7 @@ -use ruff_python_ast::{ExprYieldFrom, Ranged}; - use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::{self as ast, Ranged}; +use ruff_python_semantic::ScopeKind; use crate::checkers::ast::Checker; @@ -37,9 +37,11 @@ impl Violation for YieldFromInAsyncFunction { } /// PLE1700 -pub(crate) fn yield_from_in_async_function(checker: &mut Checker, expr: &ExprYieldFrom) { - let scope = checker.semantic().scope(); - if scope.kind.is_async_function() { +pub(crate) fn yield_from_in_async_function(checker: &mut Checker, expr: &ast::ExprYieldFrom) { + if matches!( + checker.semantic().current_scope().kind, + ScopeKind::Function(ast::StmtFunctionDef { is_async: true, .. }) + ) { checker .diagnostics .push(Diagnostic::new(YieldFromInAsyncFunction, expr.range())); diff --git a/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLE1307_bad_string_format_type.py.snap b/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLE1307_bad_string_format_type.py.snap index a0366a476b..e50006d763 100644 --- a/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLE1307_bad_string_format_type.py.snap +++ b/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLE1307_bad_string_format_type.py.snap @@ -69,6 +69,16 @@ bad_string_format_type.py:10:1: PLE1307 Format type does not match argument type 12 | "%d" % ([],) | +bad_string_format_type.py:11:1: PLE1307 Format type does not match argument type + | + 9 | "%x" % 1.1 +10 | "%(key)x" % {"key": 1.1} +11 | "%d" % [] + | ^^^^^^^^^ PLE1307 +12 | "%d" % ([],) +13 | "%(key)d" % {"key": []} + | + bad_string_format_type.py:12:1: PLE1307 Format type does not match argument type | 10 | "%(key)x" % {"key": 1.1} @@ -96,6 +106,7 @@ bad_string_format_type.py:14:7: PLE1307 Format type does not match argument type 14 | print("%d" % ("%s" % ("nested",),)) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLE1307 15 | "%d" % ((1, 2, 3),) +16 | "%d" % (1 if x > 0 else []) | bad_string_format_type.py:15:1: PLE1307 Format type does not match argument type @@ -104,8 +115,17 @@ bad_string_format_type.py:15:1: PLE1307 Format type does not match argument type 14 | print("%d" % ("%s" % ("nested",),)) 15 | "%d" % ((1, 2, 3),) | ^^^^^^^^^^^^^^^^^^^ PLE1307 -16 | -17 | # False negatives +16 | "%d" % (1 if x > 0 else []) + | + +bad_string_format_type.py:16:1: PLE1307 Format type does not match argument type + | +14 | print("%d" % ("%s" % ("nested",),)) +15 | "%d" % ((1, 2, 3),) +16 | "%d" % (1 if x > 0 else []) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLE1307 +17 | +18 | # False negatives | diff --git a/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLE1507_invalid_envvar_value.py.snap b/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLE1507_invalid_envvar_value.py.snap index 1e8c0a24dd..6564ff6dd0 100644 --- a/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLE1507_invalid_envvar_value.py.snap +++ b/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLE1507_invalid_envvar_value.py.snap @@ -37,8 +37,18 @@ invalid_envvar_value.py:12:15: PLE1507 Invalid type for initial `os.getenv` argu 11 | os.getenv(key="foo" + "bar", default=1) 12 | os.getenv(key=1 + "bar", default=1) # [invalid-envvar-value] | ^^^^^^^^^ PLE1507 -13 | -14 | AA = "aa" +13 | os.getenv("PATH_TEST" if using_clear_path else "PATH_ORIG") +14 | os.getenv(1 if using_clear_path else "PATH_ORIG") + | + +invalid_envvar_value.py:14:11: PLE1507 Invalid type for initial `os.getenv` argument; expected `str` + | +12 | os.getenv(key=1 + "bar", default=1) # [invalid-envvar-value] +13 | os.getenv("PATH_TEST" if using_clear_path else "PATH_ORIG") +14 | os.getenv(1 if using_clear_path else "PATH_ORIG") + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLE1507 +15 | +16 | AA = "aa" | diff --git a/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLW1510_subprocess_run_without_check.py.snap b/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLW1510_subprocess_run_without_check.py.snap new file mode 100644 index 0000000000..481f380608 --- /dev/null +++ b/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLW1510_subprocess_run_without_check.py.snap @@ -0,0 +1,22 @@ +--- +source: crates/ruff/src/rules/pylint/mod.rs +--- +subprocess_run_without_check.py:4:1: PLW1510 `subprocess.run` without explicit `check` argument + | +3 | # Errors. +4 | subprocess.run("ls") + | ^^^^^^^^^^^^^^ PLW1510 +5 | subprocess.run("ls", shell=True) + | + +subprocess_run_without_check.py:5:1: PLW1510 `subprocess.run` without explicit `check` argument + | +3 | # Errors. +4 | subprocess.run("ls") +5 | subprocess.run("ls", shell=True) + | ^^^^^^^^^^^^^^ PLW1510 +6 | +7 | # Non-errors. + | + + diff --git a/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLW3201_bad_dunder_method_name.py.snap b/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLW3201_bad_dunder_method_name.py.snap new file mode 100644 index 0000000000..f3c6b81661 --- /dev/null +++ b/crates/ruff/src/rules/pylint/snapshots/ruff__rules__pylint__tests__PLW3201_bad_dunder_method_name.py.snap @@ -0,0 +1,61 @@ +--- +source: crates/ruff/src/rules/pylint/mod.rs +--- +bad_dunder_method_name.py:2:9: PLW3201 Bad or misspelled dunder method name `_init_`. (bad-dunder-name) + | +1 | class Apples: +2 | def _init_(self): # [bad-dunder-name] + | ^^^^^^ PLW3201 +3 | pass + | + +bad_dunder_method_name.py:5:9: PLW3201 Bad or misspelled dunder method name `__hello__`. (bad-dunder-name) + | +3 | pass +4 | +5 | def __hello__(self): # [bad-dunder-name] + | ^^^^^^^^^ PLW3201 +6 | print("hello") + | + +bad_dunder_method_name.py:8:9: PLW3201 Bad or misspelled dunder method name `__init_`. (bad-dunder-name) + | + 6 | print("hello") + 7 | + 8 | def __init_(self): # [bad-dunder-name] + | ^^^^^^^ PLW3201 + 9 | # author likely unintentionally misspelled the correct init dunder. +10 | pass + | + +bad_dunder_method_name.py:12:9: PLW3201 Bad or misspelled dunder method name `_init_`. (bad-dunder-name) + | +10 | pass +11 | +12 | def _init_(self): # [bad-dunder-name] + | ^^^^^^ PLW3201 +13 | # author likely unintentionally misspelled the correct init dunder. +14 | pass + | + +bad_dunder_method_name.py:16:9: PLW3201 Bad or misspelled dunder method name `___neg__`. (bad-dunder-name) + | +14 | pass +15 | +16 | def ___neg__(self): # [bad-dunder-name] + | ^^^^^^^^ PLW3201 +17 | # author likely accidentally added an additional `_` +18 | pass + | + +bad_dunder_method_name.py:20:9: PLW3201 Bad or misspelled dunder method name `__inv__`. (bad-dunder-name) + | +18 | pass +19 | +20 | def __inv__(self): # [bad-dunder-name] + | ^^^^^^^ PLW3201 +21 | # author likely meant to call the invert dunder method +22 | pass + | + + diff --git a/crates/ruff/src/rules/pyupgrade/mod.rs b/crates/ruff/src/rules/pyupgrade/mod.rs index 7ffeb2b116..3e75dc8550 100644 --- a/crates/ruff/src/rules/pyupgrade/mod.rs +++ b/crates/ruff/src/rules/pyupgrade/mod.rs @@ -30,7 +30,6 @@ mod tests { #[test_case(Rule::FString, Path::new("UP032_2.py"))] #[test_case(Rule::FormatLiterals, Path::new("UP030_0.py"))] #[test_case(Rule::FormatLiterals, Path::new("UP030_1.py"))] - #[test_case(Rule::FormatLiterals, Path::new("UP030_2.py"))] #[test_case(Rule::LRUCacheWithMaxsizeNone, Path::new("UP033_0.py"))] #[test_case(Rule::LRUCacheWithMaxsizeNone, Path::new("UP033_1.py"))] #[test_case(Rule::LRUCacheWithoutParameters, Path::new("UP011.py"))] @@ -78,6 +77,7 @@ mod tests { #[test_case(Rule::UselessObjectInheritance, Path::new("UP004.py"))] #[test_case(Rule::YieldInForLoop, Path::new("UP028_0.py"))] #[test_case(Rule::YieldInForLoop, Path::new("UP028_1.py"))] + #[test_case(Rule::NonPEP695TypeAlias, Path::new("UP040.py"))] fn rules(rule_code: Rule, path: &Path) -> Result<()> { let snapshot = path.to_string_lossy().to_string(); let diagnostics = test_path( @@ -101,19 +101,6 @@ mod tests { Ok(()) } - #[test] - fn non_pep695_type_alias_py312() -> Result<()> { - let diagnostics = test_path( - Path::new("pyupgrade/UP040.py"), - &settings::Settings { - target_version: PythonVersion::Py312, - ..settings::Settings::for_rule(Rule::NonPEP695TypeAlias) - }, - )?; - assert_messages!(diagnostics); - Ok(()) - } - #[test] fn future_annotations_keep_runtime_typing_p37() -> Result<()> { let diagnostics = test_path( diff --git a/crates/ruff/src/rules/pyupgrade/rules/convert_named_tuple_functional_to_class.rs b/crates/ruff/src/rules/pyupgrade/rules/convert_named_tuple_functional_to_class.rs index a245a15e4f..927716050f 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/convert_named_tuple_functional_to_class.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/convert_named_tuple_functional_to_class.rs @@ -130,7 +130,10 @@ fn create_properties_from_fields_arg(fields: &Expr) -> Result> { bail!("Expected `elts` to have exactly two elements") }; let Expr::Constant(ast::ExprConstant { - value: Constant::Str(property), + value: + Constant::Str(ast::StringConstant { + value: property, .. + }), .. }) = &field_name else { diff --git a/crates/ruff/src/rules/pyupgrade/rules/convert_typed_dict_functional_to_class.rs b/crates/ruff/src/rules/pyupgrade/rules/convert_typed_dict_functional_to_class.rs index e59f0b50e5..6312bcaa86 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/convert_typed_dict_functional_to_class.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/convert_typed_dict_functional_to_class.rs @@ -147,7 +147,10 @@ fn properties_from_dict_literal(keys: &[Option], values: &[Expr]) -> Resul .zip(values.iter()) .map(|(key, value)| match key { Some(Expr::Constant(ast::ExprConstant { - value: Constant::Str(property), + value: + Constant::Str(ast::StringConstant { + value: property, .. + }), .. })) => { if !is_identifier(property) { diff --git a/crates/ruff/src/rules/pyupgrade/rules/deprecated_unittest_alias.rs b/crates/ruff/src/rules/pyupgrade/rules/deprecated_unittest_alias.rs index f716a465bb..a939672f30 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/deprecated_unittest_alias.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/deprecated_unittest_alias.rs @@ -59,21 +59,21 @@ impl AlwaysAutofixableViolation for DeprecatedUnittestAlias { static DEPRECATED_ALIASES: Lazy> = Lazy::new(|| { FxHashMap::from_iter([ - ("failUnlessEqual", "assertEqual"), - ("assertEquals", "assertEqual"), - ("failIfEqual", "assertNotEqual"), - ("assertNotEquals", "assertNotEqual"), - ("failUnless", "assertTrue"), - ("assert_", "assertTrue"), - ("failIf", "assertFalse"), - ("failUnlessRaises", "assertRaises"), - ("failUnlessAlmostEqual", "assertAlmostEqual"), ("assertAlmostEquals", "assertAlmostEqual"), - ("failIfAlmostEqual", "assertNotAlmostEqual"), + ("assertEquals", "assertEqual"), ("assertNotAlmostEquals", "assertNotAlmostEqual"), - ("assertRegexpMatches", "assertRegex"), + ("assertNotEquals", "assertNotEqual"), ("assertNotRegexpMatches", "assertNotRegex"), ("assertRaisesRegexp", "assertRaisesRegex"), + ("assertRegexpMatches", "assertRegex"), + ("assert_", "assertTrue"), + ("failIf", "assertFalse"), + ("failIfAlmostEqual", "assertNotAlmostEqual"), + ("failIfEqual", "assertNotEqual"), + ("failUnless", "assertTrue"), + ("failUnlessAlmostEqual", "assertAlmostEqual"), + ("failUnlessEqual", "assertEqual"), + ("failUnlessRaises", "assertRaises"), ]) }); diff --git a/crates/ruff/src/rules/pyupgrade/rules/format_literals.rs b/crates/ruff/src/rules/pyupgrade/rules/format_literals.rs index 1469cb7e74..90ad01b228 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/format_literals.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/format_literals.rs @@ -2,7 +2,7 @@ use anyhow::{anyhow, Result}; use libcst_native::{Arg, Expression}; use once_cell::sync::Lazy; use regex::Regex; -use ruff_python_ast::{Expr, Ranged}; +use ruff_python_ast::{self as ast, Expr, Ranged}; use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -55,13 +55,84 @@ impl Violation for FormatLiterals { } } +/// UP030 +pub(crate) fn format_literals( + checker: &mut Checker, + summary: &FormatSummary, + call: &ast::ExprCall, +) { + // The format we expect is, e.g.: `"{0} {1}".format(...)` + if summary.has_nested_parts { + return; + } + if !summary.keywords.is_empty() { + return; + } + if !summary.autos.is_empty() { + return; + } + if summary.indices.is_empty() { + return; + } + if (0..summary.indices.len()).any(|index| !summary.indices.contains(&index)) { + return; + } + + // If the positional indices aren't sequential (e.g., `"{1} {0}".format(1, 2)`), then we + // need to reorder the function arguments; so we need to ensure that the function + // arguments aren't splatted (e.g., `"{1} {0}".format(*foo)`), that there are a sufficient + // number of them, etc. + let arguments = if is_sequential(&summary.indices) { + Arguments::Preserve + } else { + // Ex) `"{1} {0}".format(foo=1, bar=2)` + if !call.arguments.keywords.is_empty() { + return; + } + + // Ex) `"{1} {0}".format(foo)` + if call.arguments.args.len() < summary.indices.len() { + return; + } + + // Ex) `"{1} {0}".format(*foo)` + if call + .arguments + .args + .iter() + .take(summary.indices.len()) + .any(Expr::is_starred_expr) + { + return; + } + + Arguments::Reorder(&summary.indices) + }; + + let mut diagnostic = Diagnostic::new(FormatLiterals, call.range()); + if checker.patch(diagnostic.kind.rule()) { + diagnostic.try_set_fix(|| { + Ok(Fix::suggested(Edit::range_replacement( + generate_call(call, arguments, checker.locator(), checker.stylist())?, + call.range(), + ))) + }); + } + checker.diagnostics.push(diagnostic); +} + +/// Returns true if the indices are sequential. +fn is_sequential(indices: &[usize]) -> bool { + indices.iter().enumerate().all(|(idx, value)| idx == *value) +} + // An opening curly brace, followed by any integer, followed by any text, // followed by a closing brace. static FORMAT_SPECIFIER: Lazy = Lazy::new(|| Regex::new(r"\{(?P\d+)(?P.*?)}").unwrap()); /// Remove the explicit positional indices from a format string. -fn remove_specifiers<'a>(value: &mut Expression<'a>, arena: &'a mut typed_arena::Arena) { +fn remove_specifiers<'a>(value: &mut Expression<'a>, arena: &'a typed_arena::Arena) { match value { Expression::SimpleString(expr) => { expr.value = arena.alloc( @@ -118,32 +189,36 @@ fn generate_arguments<'a>(arguments: &[Arg<'a>], order: &'a [usize]) -> Result bool { - indices.iter().enumerate().all(|(idx, value)| idx == *value) +#[derive(Debug, Copy, Clone)] +enum Arguments<'a> { + /// Preserve the arguments to the `.format(...)` call. + Preserve, + /// Reorder the arguments to the `.format(...)` call, based on the given + /// indices. + Reorder(&'a [usize]), } /// Returns the corrected function call. fn generate_call( - expr: &Expr, - correct_order: &[usize], + call: &ast::ExprCall, + arguments: Arguments, locator: &Locator, stylist: &Stylist, ) -> Result { - let content = locator.slice(expr.range()); + let content = locator.slice(call.range()); let parenthesized_content = format!("({content})"); let mut expression = match_expression(&parenthesized_content)?; // Fix the call arguments. let call = match_call_mut(&mut expression)?; - if !is_sequential(correct_order) { - call.args = generate_arguments(&call.args, correct_order)?; + if let Arguments::Reorder(order) = arguments { + call.args = generate_arguments(&call.args, order)?; } // Fix the string itself. let item = match_attribute(&mut call.func)?; - let mut arena = typed_arena::Arena::new(); - remove_specifiers(&mut item.value, &mut arena); + let arena = typed_arena::Arena::new(); + remove_specifiers(&mut item.value, &arena); // Remove the parentheses (first and last characters). let mut output = expression.codegen_stylist(stylist); @@ -157,34 +232,3 @@ fn generate_call( Ok(output) } - -/// UP030 -pub(crate) fn format_literals(checker: &mut Checker, summary: &FormatSummary, expr: &Expr) { - // The format we expect is, e.g.: `"{0} {1}".format(...)` - if summary.has_nested_parts { - return; - } - if !summary.keywords.is_empty() { - return; - } - if !summary.autos.is_empty() { - return; - } - if summary.indices.is_empty() { - return; - } - if (0..summary.indices.len()).any(|index| !summary.indices.contains(&index)) { - return; - } - - let mut diagnostic = Diagnostic::new(FormatLiterals, expr.range()); - if checker.patch(diagnostic.kind.rule()) { - diagnostic.try_set_fix(|| { - Ok(Fix::suggested(Edit::range_replacement( - generate_call(expr, &summary.indices, checker.locator(), checker.stylist())?, - expr.range(), - ))) - }); - } - checker.diagnostics.push(diagnostic); -} diff --git a/crates/ruff/src/rules/pyupgrade/rules/native_literals.rs b/crates/ruff/src/rules/pyupgrade/rules/native_literals.rs index f0942da106..92ecd58434 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/native_literals.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/native_literals.rs @@ -2,11 +2,10 @@ use std::fmt; use std::str::FromStr; use num_bigint::BigInt; -use ruff_python_ast::{self as ast, Constant, Expr, Keyword, Ranged}; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::str::is_implicit_concatenation; +use ruff_python_ast::{self as ast, Constant, Expr, Keyword, Ranged}; use crate::checkers::ast::Checker; use crate::registry::AsRule; @@ -38,8 +37,14 @@ impl FromStr for LiteralType { impl From for Constant { fn from(value: LiteralType) -> Self { match value { - LiteralType::Str => Constant::Str(String::new()), - LiteralType::Bytes => Constant::Bytes(vec![]), + LiteralType::Str => Constant::Str(ast::StringConstant { + value: String::new(), + implicit_concatenated: false, + }), + LiteralType::Bytes => Constant::Bytes(ast::BytesConstant { + value: Vec::new(), + implicit_concatenated: false, + }), LiteralType::Int => Constant::Int(BigInt::from(0)), LiteralType::Float => Constant::Float(0.0), LiteralType::Bool => Constant::Bool(false), @@ -149,8 +154,8 @@ pub(crate) fn native_literals( if checker.semantic().in_f_string() { if checker .semantic() - .expr_ancestors() - .filter(|expr| expr.is_joined_str_expr()) + .current_expressions() + .filter(|expr| expr.is_f_string_expr()) .count() > 1 { @@ -176,6 +181,11 @@ pub(crate) fn native_literals( return; }; + // Skip implicit string concatenations. + if value.is_implicit_concatenated() { + return; + } + let Ok(arg_literal_type) = LiteralType::try_from(value) else { return; }; @@ -186,13 +196,6 @@ pub(crate) fn native_literals( let arg_code = checker.locator().slice(arg.range()); - // Skip implicit string concatenations. - if matches!(arg_literal_type, LiteralType::Str | LiteralType::Bytes) - && is_implicit_concatenation(arg_code) - { - return; - } - let mut diagnostic = Diagnostic::new(NativeLiterals { literal_type }, expr.range()); if checker.patch(diagnostic.kind.rule()) { diagnostic.set_fix(Fix::automatic(Edit::range_replacement( diff --git a/crates/ruff/src/rules/pyupgrade/rules/outdated_version_block.rs b/crates/ruff/src/rules/pyupgrade/rules/outdated_version_block.rs index 493b8413c7..25fecdf628 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/outdated_version_block.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/outdated_version_block.rs @@ -124,8 +124,8 @@ fn fix_py2_block(checker: &Checker, stmt_if: &StmtIf, branch: &IfElifBranch) -> BranchKind::If => match stmt_if.elif_else_clauses.first() { // If we have a lone `if`, delete as statement (insert pass in parent if required) None => { - let stmt = checker.semantic().stmt(); - let parent = checker.semantic().stmt_parent(); + let stmt = checker.semantic().current_statement(); + let parent = checker.semantic().current_statement_parent(); let edit = delete_stmt(stmt, parent, checker.locator(), checker.indexer()); Some(Fix::suggested(edit)) } diff --git a/crates/ruff/src/rules/pyupgrade/rules/printf_string_formatting.rs b/crates/ruff/src/rules/pyupgrade/rules/printf_string_formatting.rs index d60ef54eab..68032f5b9f 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/printf_string_formatting.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/printf_string_formatting.rs @@ -202,7 +202,10 @@ fn clean_params_dictionary( match key { Some(key) => { if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(key_string), + value: + Constant::Str(ast::StringConstant { + value: key_string, .. + }), .. }) = key { @@ -400,7 +403,7 @@ pub(crate) fn printf_string_formatting( // Parse the parameters. let params_string = match right { - Expr::Constant(_) | Expr::JoinedStr(_) => { + Expr::Constant(_) | Expr::FString(_) => { format!("({})", checker.locator().slice(right.range())) } Expr::Name(_) | Expr::Attribute(_) | Expr::Subscript(_) | Expr::Call(_) => { diff --git a/crates/ruff/src/rules/pyupgrade/rules/redundant_open_modes.rs b/crates/ruff/src/rules/pyupgrade/rules/redundant_open_modes.rs index d09ec73155..0a99e7a3f7 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/redundant_open_modes.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/redundant_open_modes.rs @@ -73,11 +73,15 @@ pub(crate) fn redundant_open_modes(checker: &mut Checker, call: &ast::ExprCall) if !call.arguments.is_empty() { if let Some(keyword) = call.arguments.find_keyword(MODE_KEYWORD_ARGUMENT) { if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(mode_param_value), + value: + Constant::Str(ast::StringConstant { + value: mode_param_value, + .. + }), .. }) = &keyword.value { - if let Ok(mode) = OpenMode::from_str(mode_param_value.as_str()) { + if let Ok(mode) = OpenMode::from_str(mode_param_value) { checker.diagnostics.push(create_check( call, &keyword.value, @@ -97,7 +101,7 @@ pub(crate) fn redundant_open_modes(checker: &mut Checker, call: &ast::ExprCall) .. }) = &mode_param { - if let Ok(mode) = OpenMode::from_str(value.as_str()) { + if let Ok(mode) = OpenMode::from_str(value) { checker.diagnostics.push(create_check( call, mode_param, @@ -116,11 +120,11 @@ const OPEN_FUNC_NAME: &str = "open"; const MODE_KEYWORD_ARGUMENT: &str = "mode"; /// Returns `true` if the given `call` is a call to the `open` builtin. -fn is_open_builtin(func: &Expr, model: &SemanticModel) -> bool { +fn is_open_builtin(func: &Expr, semantic: &SemanticModel) -> bool { let Some(ast::ExprName { id, .. }) = func.as_name_expr() else { return false; }; - id.as_str() == OPEN_FUNC_NAME && model.is_builtin(id) + id.as_str() == OPEN_FUNC_NAME && semantic.is_builtin(id) } #[derive(Debug, Copy, Clone)] diff --git a/crates/ruff/src/rules/pyupgrade/rules/super_call_with_parameters.rs b/crates/ruff/src/rules/pyupgrade/rules/super_call_with_parameters.rs index 8a67f5cf8d..d8c6981aa0 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/super_call_with_parameters.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/super_call_with_parameters.rs @@ -80,14 +80,14 @@ pub(crate) fn super_call_with_parameters( if !is_super_call_with_arguments(func, args) { return; } - let scope = checker.semantic().scope(); + let scope = checker.semantic().current_scope(); // Check: are we in a Function scope? - if !scope.kind.is_any_function() { + if !scope.kind.is_function() { return; } - let mut parents = checker.semantic().parents(); + let mut parents = checker.semantic().current_statements(); // For a `super` invocation to be unnecessary, the first argument needs to match // the enclosing class, and the second argument needs to match the first diff --git a/crates/ruff/src/rules/pyupgrade/rules/unnecessary_builtin_import.rs b/crates/ruff/src/rules/pyupgrade/rules/unnecessary_builtin_import.rs index 17fbcbe284..bf7e6724b2 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/unnecessary_builtin_import.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/unnecessary_builtin_import.rs @@ -122,14 +122,14 @@ pub(crate) fn unnecessary_builtin_import( ); if checker.patch(diagnostic.kind.rule()) { diagnostic.try_set_fix(|| { - let stmt = checker.semantic().stmt(); - let parent = checker.semantic().stmt_parent(); + let statement = checker.semantic().current_statement(); + let parent = checker.semantic().current_statement_parent(); let edit = autofix::edits::remove_unused_imports( unused_imports .iter() .map(|alias| &alias.name) .map(ruff_python_ast::Identifier::as_str), - stmt, + statement, parent, checker.locator(), checker.stylist(), diff --git a/crates/ruff/src/rules/pyupgrade/rules/unnecessary_encode_utf8.rs b/crates/ruff/src/rules/pyupgrade/rules/unnecessary_encode_utf8.rs index 8e9dae557e..d6e3aa5e36 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/unnecessary_encode_utf8.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/unnecessary_encode_utf8.rs @@ -226,7 +226,7 @@ pub(crate) fn unnecessary_encode_utf8(checker: &mut Checker, call: &ast::ExprCal } } // Ex) `f"foo{bar}".encode("utf-8")` - Expr::JoinedStr(_) => { + Expr::FString(_) => { if let Some(encoding_arg) = match_encoding_arg(&call.arguments) { if let EncodingArg::Keyword(kwarg) = encoding_arg { // Ex) Convert `f"unicode text©".encode(encoding="utf-8")` to diff --git a/crates/ruff/src/rules/pyupgrade/rules/unnecessary_future_import.rs b/crates/ruff/src/rules/pyupgrade/rules/unnecessary_future_import.rs index ec4e4d7ba8..2cbf8dbe06 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/unnecessary_future_import.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/unnecessary_future_import.rs @@ -111,14 +111,14 @@ pub(crate) fn unnecessary_future_import(checker: &mut Checker, stmt: &Stmt, name if checker.patch(diagnostic.kind.rule()) { diagnostic.try_set_fix(|| { - let stmt = checker.semantic().stmt(); - let parent = checker.semantic().stmt_parent(); + let statement = checker.semantic().current_statement(); + let parent = checker.semantic().current_statement_parent(); let edit = autofix::edits::remove_unused_imports( unused_imports .iter() .map(|alias| &alias.name) .map(ruff_python_ast::Identifier::as_str), - stmt, + statement, parent, checker.locator(), checker.stylist(), diff --git a/crates/ruff/src/rules/pyupgrade/rules/use_pep695_type_alias.rs b/crates/ruff/src/rules/pyupgrade/rules/use_pep695_type_alias.rs index 64d00f6a80..4c51960ec9 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/use_pep695_type_alias.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/use_pep695_type_alias.rs @@ -1,4 +1,11 @@ -use ruff_python_ast::{Expr, ExprName, Ranged, Stmt, StmtAnnAssign, StmtTypeAlias}; +use ast::{Constant, ExprCall, ExprConstant}; +use ruff_python_ast::{ + self as ast, + visitor::{self, Visitor}, + Expr, ExprName, ExprSubscript, Identifier, Ranged, Stmt, StmtAnnAssign, StmtAssign, + StmtTypeAlias, TypeParam, TypeParamTypeVar, +}; +use ruff_python_semantic::SemanticModel; use crate::{registry::AsRule, settings::types::PythonVersion}; use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; @@ -75,11 +82,36 @@ pub(crate) fn non_pep695_type_alias(checker: &mut Checker, stmt: &StmtAnnAssign) // as type params instead let mut diagnostic = Diagnostic::new(NonPEP695TypeAlias { name: name.clone() }, stmt.range()); if checker.patch(diagnostic.kind.rule()) { + let mut visitor = TypeVarReferenceVisitor { + names: vec![], + semantic: checker.semantic(), + }; + visitor.visit_expr(value); + + let type_params = if visitor.names.is_empty() { + None + } else { + Some(ast::TypeParams { + range: TextRange::default(), + type_params: visitor + .names + .iter() + .map(|name| { + TypeParam::TypeVar(TypeParamTypeVar { + range: TextRange::default(), + name: Identifier::new(name.id.clone(), TextRange::default()), + bound: None, + }) + }) + .collect(), + }) + }; + diagnostic.set_fix(Fix::automatic(Edit::range_replacement( checker.generator().stmt(&Stmt::from(StmtTypeAlias { range: TextRange::default(), name: target.clone(), - type_params: None, + type_params, value: value.clone(), })), stmt.range(), @@ -87,3 +119,64 @@ pub(crate) fn non_pep695_type_alias(checker: &mut Checker, stmt: &StmtAnnAssign) } checker.diagnostics.push(diagnostic); } + +struct TypeVarReferenceVisitor<'a> { + names: Vec<&'a ExprName>, + semantic: &'a SemanticModel<'a>, +} + +/// Recursively collects the names of type variable references present in an expression. +impl<'a> Visitor<'a> for TypeVarReferenceVisitor<'a> { + fn visit_expr(&mut self, expr: &'a Expr) { + match expr { + Expr::Name(name) if name.ctx.is_load() => { + let Some(Stmt::Assign(StmtAssign { value, .. })) = self + .semantic + .lookup_symbol(name.id.as_str()) + .and_then(|binding_id| { + self.semantic + .binding(binding_id) + .source + .map(|node_id| self.semantic.statement(node_id)) + }) + else { + return; + }; + + match value.as_ref() { + Expr::Subscript(ExprSubscript { + value: ref subscript_value, + .. + }) => { + if self.semantic.match_typing_expr(subscript_value, "TypeVar") { + self.names.push(name); + } + } + Expr::Call(ExprCall { + func, arguments, .. + }) => { + // TODO(zanieb): Add support for bounds and variance declarations + // for now this only supports `TypeVar("...")` + if self.semantic.match_typing_expr(func, "TypeVar") + && arguments.args.len() == 1 + && arguments.args.first().is_some_and(|arg| { + matches!( + arg, + Expr::Constant(ExprConstant { + value: Constant::Str(_), + .. + }) + ) + }) + && arguments.keywords.is_empty() + { + self.names.push(name); + } + } + _ => {} + } + } + _ => visitor::walk_expr(self, expr), + } + } +} diff --git a/crates/ruff/src/rules/pyupgrade/rules/useless_metaclass_type.rs b/crates/ruff/src/rules/pyupgrade/rules/useless_metaclass_type.rs index 70fd141857..c0ee032ef9 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/useless_metaclass_type.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/useless_metaclass_type.rs @@ -63,8 +63,8 @@ pub(crate) fn useless_metaclass_type( let mut diagnostic = Diagnostic::new(UselessMetaclassType, stmt.range()); if checker.patch(diagnostic.kind.rule()) { - let stmt = checker.semantic().stmt(); - let parent = checker.semantic().stmt_parent(); + let stmt = checker.semantic().current_statement(); + let parent = checker.semantic().current_statement_parent(); let edit = autofix::edits::delete_stmt(stmt, parent, checker.locator(), checker.indexer()); diagnostic.set_fix(Fix::automatic(edit).isolate(checker.isolation(parent))); } diff --git a/crates/ruff/src/rules/pyupgrade/rules/yield_in_for_loop.rs b/crates/ruff/src/rules/pyupgrade/rules/yield_in_for_loop.rs index ddb832a4a5..acf96c59be 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/yield_in_for_loop.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/yield_in_for_loop.rs @@ -1,12 +1,12 @@ -use ruff_python_ast::{self as ast, Expr, ExprContext, Ranged, Stmt}; use rustc_hash::FxHashMap; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::statement_visitor::StatementVisitor; -use ruff_python_ast::types::RefEquality; use ruff_python_ast::visitor::Visitor; +use ruff_python_ast::{self as ast, Expr, ExprContext, Ranged, Stmt}; use ruff_python_ast::{statement_visitor, visitor}; +use ruff_python_semantic::StatementKey; use crate::checkers::ast::Checker; use crate::registry::AsRule; @@ -120,7 +120,7 @@ impl<'a> StatementVisitor<'a> for YieldFromVisitor<'a> { } } } - Stmt::FunctionDef(_) | Stmt::AsyncFunctionDef(_) | Stmt::ClassDef(_) => { + Stmt::FunctionDef(_) | Stmt::ClassDef(_) => { // Don't recurse into anything that defines a new scope. } _ => statement_visitor::walk_stmt(self, stmt), @@ -131,7 +131,7 @@ impl<'a> StatementVisitor<'a> for YieldFromVisitor<'a> { #[derive(Default)] struct ReferenceVisitor<'a> { parent: Option<&'a Stmt>, - references: FxHashMap, Vec<&'a str>>, + references: FxHashMap>, } impl<'a> Visitor<'a> for ReferenceVisitor<'a> { @@ -148,7 +148,7 @@ impl<'a> Visitor<'a> for ReferenceVisitor<'a> { if matches!(ctx, ExprContext::Load | ExprContext::Del) { if let Some(parent) = self.parent { self.references - .entry(RefEquality(parent)) + .entry(StatementKey::from(parent)) .or_default() .push(id); } @@ -162,39 +162,46 @@ impl<'a> Visitor<'a> for ReferenceVisitor<'a> { /// UP028 pub(crate) fn yield_in_for_loop(checker: &mut Checker, stmt: &Stmt) { // Intentionally omit async functions. - if let Stmt::FunctionDef(ast::StmtFunctionDef { body, .. }) = stmt { - let yields = { - let mut visitor = YieldFromVisitor::default(); - visitor.visit_body(body); - visitor.yields - }; + let Stmt::FunctionDef(ast::StmtFunctionDef { + is_async: false, + body, + .. + }) = stmt + else { + return; + }; - let references = { - let mut visitor = ReferenceVisitor::default(); - visitor.visit_body(body); - visitor.references - }; + let yields = { + let mut visitor = YieldFromVisitor::default(); + visitor.visit_body(body); + visitor.yields + }; - for item in yields { - // If any of the bound names are used outside of the loop, don't rewrite. - if references.iter().any(|(stmt, names)| { - stmt != &RefEquality(item.stmt) - && stmt != &RefEquality(item.body) - && item.names.iter().any(|name| names.contains(name)) - }) { - continue; - } + let references = { + let mut visitor = ReferenceVisitor::default(); + visitor.visit_body(body); + visitor.references + }; - let mut diagnostic = Diagnostic::new(YieldInForLoop, item.stmt.range()); - if checker.patch(diagnostic.kind.rule()) { - let contents = checker.locator().slice(item.iter.range()); - let contents = format!("yield from {contents}"); - diagnostic.set_fix(Fix::suggested(Edit::range_replacement( - contents, - item.stmt.range(), - ))); - } - checker.diagnostics.push(diagnostic); + for item in yields { + // If any of the bound names are used outside of the loop, don't rewrite. + if references.iter().any(|(statement, names)| { + *statement != StatementKey::from(item.stmt) + && *statement != StatementKey::from(item.body) + && item.names.iter().any(|name| names.contains(name)) + }) { + continue; } + + let mut diagnostic = Diagnostic::new(YieldInForLoop, item.stmt.range()); + if checker.patch(diagnostic.kind.rule()) { + let contents = checker.locator().slice(item.iter.range()); + let contents = format!("yield from {contents}"); + diagnostic.set_fix(Fix::suggested(Edit::range_replacement( + contents, + item.stmt.range(), + ))); + } + checker.diagnostics.push(diagnostic); } } diff --git a/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP030_0.py.snap b/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP030_0.py.snap index 393bdb502c..a0b8e1a467 100644 --- a/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP030_0.py.snap +++ b/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP030_0.py.snap @@ -249,7 +249,255 @@ UP030_0.py:34:1: UP030 Use implicit references for positional format fields 33 | 34 | '{' '0}'.format(1) | ^^^^^^^^^^^^^^^^^^ UP030 +35 | +36 | args = list(range(10)) | = help: Remove explicit positional indices +UP030_0.py:39:1: UP030 [*] Use implicit references for positional format fields + | +37 | kwargs = {x: x for x in range(10)} +38 | +39 | "{0}".format(*args) + | ^^^^^^^^^^^^^^^^^^^ UP030 +40 | +41 | "{0}".format(**kwargs) + | + = help: Remove explicit positional indices + +ℹ Suggested fix +36 36 | args = list(range(10)) +37 37 | kwargs = {x: x for x in range(10)} +38 38 | +39 |-"{0}".format(*args) + 39 |+"{}".format(*args) +40 40 | +41 41 | "{0}".format(**kwargs) +42 42 | + +UP030_0.py:41:1: UP030 [*] Use implicit references for positional format fields + | +39 | "{0}".format(*args) +40 | +41 | "{0}".format(**kwargs) + | ^^^^^^^^^^^^^^^^^^^^^^ UP030 +42 | +43 | "{0}_{1}".format(*args) + | + = help: Remove explicit positional indices + +ℹ Suggested fix +38 38 | +39 39 | "{0}".format(*args) +40 40 | +41 |-"{0}".format(**kwargs) + 41 |+"{}".format(**kwargs) +42 42 | +43 43 | "{0}_{1}".format(*args) +44 44 | + +UP030_0.py:43:1: UP030 [*] Use implicit references for positional format fields + | +41 | "{0}".format(**kwargs) +42 | +43 | "{0}_{1}".format(*args) + | ^^^^^^^^^^^^^^^^^^^^^^^ UP030 +44 | +45 | "{0}_{1}".format(1, *args) + | + = help: Remove explicit positional indices + +ℹ Suggested fix +40 40 | +41 41 | "{0}".format(**kwargs) +42 42 | +43 |-"{0}_{1}".format(*args) + 43 |+"{}_{}".format(*args) +44 44 | +45 45 | "{0}_{1}".format(1, *args) +46 46 | + +UP030_0.py:45:1: UP030 [*] Use implicit references for positional format fields + | +43 | "{0}_{1}".format(*args) +44 | +45 | "{0}_{1}".format(1, *args) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 +46 | +47 | "{0}_{1}".format(1, 2, *args) + | + = help: Remove explicit positional indices + +ℹ Suggested fix +42 42 | +43 43 | "{0}_{1}".format(*args) +44 44 | +45 |-"{0}_{1}".format(1, *args) + 45 |+"{}_{}".format(1, *args) +46 46 | +47 47 | "{0}_{1}".format(1, 2, *args) +48 48 | + +UP030_0.py:47:1: UP030 [*] Use implicit references for positional format fields + | +45 | "{0}_{1}".format(1, *args) +46 | +47 | "{0}_{1}".format(1, 2, *args) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 +48 | +49 | "{0}_{1}".format(*args, 1, 2) + | + = help: Remove explicit positional indices + +ℹ Suggested fix +44 44 | +45 45 | "{0}_{1}".format(1, *args) +46 46 | +47 |-"{0}_{1}".format(1, 2, *args) + 47 |+"{}_{}".format(1, 2, *args) +48 48 | +49 49 | "{0}_{1}".format(*args, 1, 2) +50 50 | + +UP030_0.py:49:1: UP030 [*] Use implicit references for positional format fields + | +47 | "{0}_{1}".format(1, 2, *args) +48 | +49 | "{0}_{1}".format(*args, 1, 2) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 +50 | +51 | "{0}_{1}_{2}".format(1, **kwargs) + | + = help: Remove explicit positional indices + +ℹ Suggested fix +46 46 | +47 47 | "{0}_{1}".format(1, 2, *args) +48 48 | +49 |-"{0}_{1}".format(*args, 1, 2) + 49 |+"{}_{}".format(*args, 1, 2) +50 50 | +51 51 | "{0}_{1}_{2}".format(1, **kwargs) +52 52 | + +UP030_0.py:51:1: UP030 [*] Use implicit references for positional format fields + | +49 | "{0}_{1}".format(*args, 1, 2) +50 | +51 | "{0}_{1}_{2}".format(1, **kwargs) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 +52 | +53 | "{0}_{1}_{2}".format(1, 2, **kwargs) + | + = help: Remove explicit positional indices + +ℹ Suggested fix +48 48 | +49 49 | "{0}_{1}".format(*args, 1, 2) +50 50 | +51 |-"{0}_{1}_{2}".format(1, **kwargs) + 51 |+"{}_{}_{}".format(1, **kwargs) +52 52 | +53 53 | "{0}_{1}_{2}".format(1, 2, **kwargs) +54 54 | + +UP030_0.py:53:1: UP030 [*] Use implicit references for positional format fields + | +51 | "{0}_{1}_{2}".format(1, **kwargs) +52 | +53 | "{0}_{1}_{2}".format(1, 2, **kwargs) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 +54 | +55 | "{0}_{1}_{2}".format(1, 2, 3, **kwargs) + | + = help: Remove explicit positional indices + +ℹ Suggested fix +50 50 | +51 51 | "{0}_{1}_{2}".format(1, **kwargs) +52 52 | +53 |-"{0}_{1}_{2}".format(1, 2, **kwargs) + 53 |+"{}_{}_{}".format(1, 2, **kwargs) +54 54 | +55 55 | "{0}_{1}_{2}".format(1, 2, 3, **kwargs) +56 56 | + +UP030_0.py:55:1: UP030 [*] Use implicit references for positional format fields + | +53 | "{0}_{1}_{2}".format(1, 2, **kwargs) +54 | +55 | "{0}_{1}_{2}".format(1, 2, 3, **kwargs) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 +56 | +57 | "{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) + | + = help: Remove explicit positional indices + +ℹ Suggested fix +52 52 | +53 53 | "{0}_{1}_{2}".format(1, 2, **kwargs) +54 54 | +55 |-"{0}_{1}_{2}".format(1, 2, 3, **kwargs) + 55 |+"{}_{}_{}".format(1, 2, 3, **kwargs) +56 56 | +57 57 | "{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) +58 58 | + +UP030_0.py:57:1: UP030 [*] Use implicit references for positional format fields + | +55 | "{0}_{1}_{2}".format(1, 2, 3, **kwargs) +56 | +57 | "{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 +58 | +59 | "{1}_{0}".format(1, 2, *args) + | + = help: Remove explicit positional indices + +ℹ Suggested fix +54 54 | +55 55 | "{0}_{1}_{2}".format(1, 2, 3, **kwargs) +56 56 | +57 |-"{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) + 57 |+"{}_{}_{}".format(1, 2, 3, *args, **kwargs) +58 58 | +59 59 | "{1}_{0}".format(1, 2, *args) +60 60 | + +UP030_0.py:59:1: UP030 [*] Use implicit references for positional format fields + | +57 | "{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) +58 | +59 | "{1}_{0}".format(1, 2, *args) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 +60 | +61 | "{1}_{0}".format(1, 2) + | + = help: Remove explicit positional indices + +ℹ Suggested fix +56 56 | +57 57 | "{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) +58 58 | +59 |-"{1}_{0}".format(1, 2, *args) + 59 |+"{}_{}".format(2, 1, ) +60 60 | +61 61 | "{1}_{0}".format(1, 2) + +UP030_0.py:61:1: UP030 [*] Use implicit references for positional format fields + | +59 | "{1}_{0}".format(1, 2, *args) +60 | +61 | "{1}_{0}".format(1, 2) + | ^^^^^^^^^^^^^^^^^^^^^^ UP030 + | + = help: Remove explicit positional indices + +ℹ Suggested fix +58 58 | +59 59 | "{1}_{0}".format(1, 2, *args) +60 60 | +61 |-"{1}_{0}".format(1, 2) + 61 |+"{}_{}".format(2, 1) + diff --git a/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP030_2.py.snap b/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP030_2.py.snap deleted file mode 100644 index 7a96569187..0000000000 --- a/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP030_2.py.snap +++ /dev/null @@ -1,240 +0,0 @@ ---- -source: crates/ruff/src/rules/pyupgrade/mod.rs ---- -UP030_2.py:6:1: UP030 [*] Use implicit references for positional format fields - | -4 | kwargs = {x: x for x in range(10)} -5 | -6 | "{0}".format(*args) - | ^^^^^^^^^^^^^^^^^^^ UP030 -7 | -8 | "{0}".format(**kwargs) - | - = help: Remove explicit positional indices - -ℹ Suggested fix -3 3 | args = list(range(10)) -4 4 | kwargs = {x: x for x in range(10)} -5 5 | -6 |-"{0}".format(*args) - 6 |+"{}".format(*args) -7 7 | -8 8 | "{0}".format(**kwargs) -9 9 | - -UP030_2.py:8:1: UP030 [*] Use implicit references for positional format fields - | - 6 | "{0}".format(*args) - 7 | - 8 | "{0}".format(**kwargs) - | ^^^^^^^^^^^^^^^^^^^^^^ UP030 - 9 | -10 | "{0}_{1}".format(*args) - | - = help: Remove explicit positional indices - -ℹ Suggested fix -5 5 | -6 6 | "{0}".format(*args) -7 7 | -8 |-"{0}".format(**kwargs) - 8 |+"{}".format(**kwargs) -9 9 | -10 10 | "{0}_{1}".format(*args) -11 11 | - -UP030_2.py:10:1: UP030 [*] Use implicit references for positional format fields - | - 8 | "{0}".format(**kwargs) - 9 | -10 | "{0}_{1}".format(*args) - | ^^^^^^^^^^^^^^^^^^^^^^^ UP030 -11 | -12 | "{0}_{1}".format(1, *args) - | - = help: Remove explicit positional indices - -ℹ Suggested fix -7 7 | -8 8 | "{0}".format(**kwargs) -9 9 | -10 |-"{0}_{1}".format(*args) - 10 |+"{}_{}".format(*args) -11 11 | -12 12 | "{0}_{1}".format(1, *args) -13 13 | - -UP030_2.py:12:1: UP030 [*] Use implicit references for positional format fields - | -10 | "{0}_{1}".format(*args) -11 | -12 | "{0}_{1}".format(1, *args) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 -13 | -14 | "{1}_{0}".format(*args) - | - = help: Remove explicit positional indices - -ℹ Suggested fix -9 9 | -10 10 | "{0}_{1}".format(*args) -11 11 | -12 |-"{0}_{1}".format(1, *args) - 12 |+"{}_{}".format(1, *args) -13 13 | -14 14 | "{1}_{0}".format(*args) -15 15 | - -UP030_2.py:14:1: UP030 Use implicit references for positional format fields - | -12 | "{0}_{1}".format(1, *args) -13 | -14 | "{1}_{0}".format(*args) - | ^^^^^^^^^^^^^^^^^^^^^^^ UP030 -15 | -16 | "{1}_{0}".format(1, *args) - | - = help: Remove explicit positional indices - -UP030_2.py:16:1: UP030 [*] Use implicit references for positional format fields - | -14 | "{1}_{0}".format(*args) -15 | -16 | "{1}_{0}".format(1, *args) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 -17 | -18 | "{0}_{1}".format(1, 2, *args) - | - = help: Remove explicit positional indices - -ℹ Suggested fix -13 13 | -14 14 | "{1}_{0}".format(*args) -15 15 | -16 |-"{1}_{0}".format(1, *args) - 16 |+"{}_{}".format(*args, 1) -17 17 | -18 18 | "{0}_{1}".format(1, 2, *args) -19 19 | - -UP030_2.py:18:1: UP030 [*] Use implicit references for positional format fields - | -16 | "{1}_{0}".format(1, *args) -17 | -18 | "{0}_{1}".format(1, 2, *args) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 -19 | -20 | "{0}_{1}".format(*args, 1, 2) - | - = help: Remove explicit positional indices - -ℹ Suggested fix -15 15 | -16 16 | "{1}_{0}".format(1, *args) -17 17 | -18 |-"{0}_{1}".format(1, 2, *args) - 18 |+"{}_{}".format(1, 2, *args) -19 19 | -20 20 | "{0}_{1}".format(*args, 1, 2) -21 21 | - -UP030_2.py:20:1: UP030 [*] Use implicit references for positional format fields - | -18 | "{0}_{1}".format(1, 2, *args) -19 | -20 | "{0}_{1}".format(*args, 1, 2) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 -21 | -22 | "{0}_{1}_{2}".format(1, **kwargs) - | - = help: Remove explicit positional indices - -ℹ Suggested fix -17 17 | -18 18 | "{0}_{1}".format(1, 2, *args) -19 19 | -20 |-"{0}_{1}".format(*args, 1, 2) - 20 |+"{}_{}".format(*args, 1, 2) -21 21 | -22 22 | "{0}_{1}_{2}".format(1, **kwargs) -23 23 | - -UP030_2.py:22:1: UP030 [*] Use implicit references for positional format fields - | -20 | "{0}_{1}".format(*args, 1, 2) -21 | -22 | "{0}_{1}_{2}".format(1, **kwargs) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 -23 | -24 | "{0}_{1}_{2}".format(1, 2, **kwargs) - | - = help: Remove explicit positional indices - -ℹ Suggested fix -19 19 | -20 20 | "{0}_{1}".format(*args, 1, 2) -21 21 | -22 |-"{0}_{1}_{2}".format(1, **kwargs) - 22 |+"{}_{}_{}".format(1, **kwargs) -23 23 | -24 24 | "{0}_{1}_{2}".format(1, 2, **kwargs) -25 25 | - -UP030_2.py:24:1: UP030 [*] Use implicit references for positional format fields - | -22 | "{0}_{1}_{2}".format(1, **kwargs) -23 | -24 | "{0}_{1}_{2}".format(1, 2, **kwargs) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 -25 | -26 | "{0}_{1}_{2}".format(1, 2, 3, **kwargs) - | - = help: Remove explicit positional indices - -ℹ Suggested fix -21 21 | -22 22 | "{0}_{1}_{2}".format(1, **kwargs) -23 23 | -24 |-"{0}_{1}_{2}".format(1, 2, **kwargs) - 24 |+"{}_{}_{}".format(1, 2, **kwargs) -25 25 | -26 26 | "{0}_{1}_{2}".format(1, 2, 3, **kwargs) -27 27 | - -UP030_2.py:26:1: UP030 [*] Use implicit references for positional format fields - | -24 | "{0}_{1}_{2}".format(1, 2, **kwargs) -25 | -26 | "{0}_{1}_{2}".format(1, 2, 3, **kwargs) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 -27 | -28 | "{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) - | - = help: Remove explicit positional indices - -ℹ Suggested fix -23 23 | -24 24 | "{0}_{1}_{2}".format(1, 2, **kwargs) -25 25 | -26 |-"{0}_{1}_{2}".format(1, 2, 3, **kwargs) - 26 |+"{}_{}_{}".format(1, 2, 3, **kwargs) -27 27 | -28 28 | "{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) - -UP030_2.py:28:1: UP030 [*] Use implicit references for positional format fields - | -26 | "{0}_{1}_{2}".format(1, 2, 3, **kwargs) -27 | -28 | "{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP030 - | - = help: Remove explicit positional indices - -ℹ Suggested fix -25 25 | -26 26 | "{0}_{1}_{2}".format(1, 2, 3, **kwargs) -27 27 | -28 |-"{0}_{1}_{2}".format(1, 2, 3, *args, **kwargs) - 28 |+"{}_{}_{}".format(1, 2, 3, *args, **kwargs) - - diff --git a/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP035.py.snap b/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP035.py.snap index f610969a3c..04319f36dc 100644 --- a/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP035.py.snap +++ b/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP035.py.snap @@ -974,4 +974,19 @@ UP035.py:76:1: UP035 [*] Import from `collections.abc` instead: `Generator` 78 78 | # OK 79 79 | from a import b +UP035.py:88:1: UP035 [*] Import from `typing` instead: `dataclass_transform` + | +87 | # Ok: `typing_extensions` supports `frozen_default` (backported from 3.12). +88 | from typing_extensions import dataclass_transform + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP035 + | + = help: Import from `typing` + +ℹ Suggested fix +85 85 | from typing_extensions import NamedTuple +86 86 | +87 87 | # Ok: `typing_extensions` supports `frozen_default` (backported from 3.12). +88 |-from typing_extensions import dataclass_transform + 88 |+from typing import dataclass_transform + diff --git a/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP040.py.snap b/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP040.py.snap new file mode 100644 index 0000000000..33d0e3b165 --- /dev/null +++ b/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__UP040.py.snap @@ -0,0 +1,232 @@ +--- +source: crates/ruff/src/rules/pyupgrade/mod.rs +--- +UP040.py:5:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword + | +4 | # UP040 +5 | x: typing.TypeAlias = int + | ^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 +6 | x: TypeAlias = int + | + = help: Use the `type` keyword + +ℹ Fix +2 2 | from typing import TypeAlias +3 3 | +4 4 | # UP040 +5 |-x: typing.TypeAlias = int + 5 |+type x = int +6 6 | x: TypeAlias = int +7 7 | +8 8 | # UP040 simple generic + +UP040.py:6:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword + | +4 | # UP040 +5 | x: typing.TypeAlias = int +6 | x: TypeAlias = int + | ^^^^^^^^^^^^^^^^^^ UP040 +7 | +8 | # UP040 simple generic + | + = help: Use the `type` keyword + +ℹ Fix +3 3 | +4 4 | # UP040 +5 5 | x: typing.TypeAlias = int +6 |-x: TypeAlias = int + 6 |+type x = int +7 7 | +8 8 | # UP040 simple generic +9 9 | T = typing.TypeVar["T"] + +UP040.py:10:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword + | + 8 | # UP040 simple generic + 9 | T = typing.TypeVar["T"] +10 | x: typing.TypeAlias = list[T] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 +11 | +12 | # UP040 call style generic + | + = help: Use the `type` keyword + +ℹ Fix +7 7 | +8 8 | # UP040 simple generic +9 9 | T = typing.TypeVar["T"] +10 |-x: typing.TypeAlias = list[T] + 10 |+type x[T] = list[T] +11 11 | +12 12 | # UP040 call style generic +13 13 | T = typing.TypeVar("T") + +UP040.py:14:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword + | +12 | # UP040 call style generic +13 | T = typing.TypeVar("T") +14 | x: typing.TypeAlias = list[T] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 +15 | +16 | # UP040 bounded generic (todo) + | + = help: Use the `type` keyword + +ℹ Fix +11 11 | +12 12 | # UP040 call style generic +13 13 | T = typing.TypeVar("T") +14 |-x: typing.TypeAlias = list[T] + 14 |+type x[T] = list[T] +15 15 | +16 16 | # UP040 bounded generic (todo) +17 17 | T = typing.TypeVar("T", bound=int) + +UP040.py:18:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword + | +16 | # UP040 bounded generic (todo) +17 | T = typing.TypeVar("T", bound=int) +18 | x: typing.TypeAlias = list[T] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 +19 | +20 | T = typing.TypeVar("T", int, str) + | + = help: Use the `type` keyword + +ℹ Fix +15 15 | +16 16 | # UP040 bounded generic (todo) +17 17 | T = typing.TypeVar("T", bound=int) +18 |-x: typing.TypeAlias = list[T] + 18 |+type x = list[T] +19 19 | +20 20 | T = typing.TypeVar("T", int, str) +21 21 | x: typing.TypeAlias = list[T] + +UP040.py:21:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword + | +20 | T = typing.TypeVar("T", int, str) +21 | x: typing.TypeAlias = list[T] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 +22 | +23 | # UP040 contravariant generic (todo) + | + = help: Use the `type` keyword + +ℹ Fix +18 18 | x: typing.TypeAlias = list[T] +19 19 | +20 20 | T = typing.TypeVar("T", int, str) +21 |-x: typing.TypeAlias = list[T] + 21 |+type x = list[T] +22 22 | +23 23 | # UP040 contravariant generic (todo) +24 24 | T = typing.TypeVar("T", contravariant=True) + +UP040.py:25:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword + | +23 | # UP040 contravariant generic (todo) +24 | T = typing.TypeVar("T", contravariant=True) +25 | x: typing.TypeAlias = list[T] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 +26 | +27 | # UP040 covariant generic (todo) + | + = help: Use the `type` keyword + +ℹ Fix +22 22 | +23 23 | # UP040 contravariant generic (todo) +24 24 | T = typing.TypeVar("T", contravariant=True) +25 |-x: typing.TypeAlias = list[T] + 25 |+type x = list[T] +26 26 | +27 27 | # UP040 covariant generic (todo) +28 28 | T = typing.TypeVar("T", covariant=True) + +UP040.py:29:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword + | +27 | # UP040 covariant generic (todo) +28 | T = typing.TypeVar("T", covariant=True) +29 | x: typing.TypeAlias = list[T] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 +30 | +31 | # UP040 in class scope + | + = help: Use the `type` keyword + +ℹ Fix +26 26 | +27 27 | # UP040 covariant generic (todo) +28 28 | T = typing.TypeVar("T", covariant=True) +29 |-x: typing.TypeAlias = list[T] + 29 |+type x = list[T] +30 30 | +31 31 | # UP040 in class scope +32 32 | T = typing.TypeVar["T"] + +UP040.py:35:5: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword + | +33 | class Foo: +34 | # reference to global variable +35 | x: typing.TypeAlias = list[T] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 +36 | +37 | # reference to class variable + | + = help: Use the `type` keyword + +ℹ Fix +32 32 | T = typing.TypeVar["T"] +33 33 | class Foo: +34 34 | # reference to global variable +35 |- x: typing.TypeAlias = list[T] + 35 |+ type x[T] = list[T] +36 36 | +37 37 | # reference to class variable +38 38 | TCLS = typing.TypeVar["TCLS"] + +UP040.py:39:5: UP040 [*] Type alias `y` uses `TypeAlias` annotation instead of the `type` keyword + | +37 | # reference to class variable +38 | TCLS = typing.TypeVar["TCLS"] +39 | y: typing.TypeAlias = list[TCLS] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 +40 | +41 | # UP040 wont add generics in fix + | + = help: Use the `type` keyword + +ℹ Fix +36 36 | +37 37 | # reference to class variable +38 38 | TCLS = typing.TypeVar["TCLS"] +39 |- y: typing.TypeAlias = list[TCLS] + 39 |+ type y[TCLS] = list[TCLS] +40 40 | +41 41 | # UP040 wont add generics in fix +42 42 | T = typing.TypeVar(*args) + +UP040.py:43:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword + | +41 | # UP040 wont add generics in fix +42 | T = typing.TypeVar(*args) +43 | x: typing.TypeAlias = list[T] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 +44 | +45 | # OK + | + = help: Use the `type` keyword + +ℹ Fix +40 40 | +41 41 | # UP040 wont add generics in fix +42 42 | T = typing.TypeVar(*args) +43 |-x: typing.TypeAlias = list[T] + 43 |+type x = list[T] +44 44 | +45 45 | # OK +46 46 | x: TypeAlias + + diff --git a/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__non_pep695_type_alias_py312.snap b/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__non_pep695_type_alias_py312.snap deleted file mode 100644 index c46a4b8879..0000000000 --- a/crates/ruff/src/rules/pyupgrade/snapshots/ruff__rules__pyupgrade__tests__non_pep695_type_alias_py312.snap +++ /dev/null @@ -1,61 +0,0 @@ ---- -source: crates/ruff/src/rules/pyupgrade/mod.rs ---- -UP040.py:5:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword - | -4 | # UP040 -5 | x: typing.TypeAlias = int - | ^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 -6 | x: TypeAlias = int - | - = help: Use the `type` keyword - -ℹ Fix -2 2 | from typing import TypeAlias -3 3 | -4 4 | # UP040 -5 |-x: typing.TypeAlias = int - 5 |+type x = int -6 6 | x: TypeAlias = int -7 7 | -8 8 | - -UP040.py:6:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword - | -4 | # UP040 -5 | x: typing.TypeAlias = int -6 | x: TypeAlias = int - | ^^^^^^^^^^^^^^^^^^ UP040 - | - = help: Use the `type` keyword - -ℹ Fix -3 3 | -4 4 | # UP040 -5 5 | x: typing.TypeAlias = int -6 |-x: TypeAlias = int - 6 |+type x = int -7 7 | -8 8 | -9 9 | # UP040 with generics (todo) - -UP040.py:11:1: UP040 [*] Type alias `x` uses `TypeAlias` annotation instead of the `type` keyword - | - 9 | # UP040 with generics (todo) -10 | T = typing.TypeVar["T"] -11 | x: typing.TypeAlias = list[T] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UP040 - | - = help: Use the `type` keyword - -ℹ Fix -8 8 | -9 9 | # UP040 with generics (todo) -10 10 | T = typing.TypeVar["T"] -11 |-x: typing.TypeAlias = list[T] - 11 |+type x = list[T] -12 12 | -13 13 | -14 14 | # OK - - diff --git a/crates/ruff/src/rules/ruff/mod.rs b/crates/ruff/src/rules/ruff/mod.rs index 5c4fe13ce3..be54ab37f2 100644 --- a/crates/ruff/src/rules/ruff/mod.rs +++ b/crates/ruff/src/rules/ruff/mod.rs @@ -61,10 +61,8 @@ mod tests { ); let diagnostics = test_path( Path::new("ruff").join(path).as_path(), - &settings::Settings { - target_version: PythonVersion::Py39, - ..settings::Settings::for_rule(Rule::ImplicitOptional) - }, + &settings::Settings::for_rule(Rule::ImplicitOptional) + .with_target_version(PythonVersion::Py39), )?; assert_messages!(snapshot, diagnostics); Ok(()) @@ -157,6 +155,16 @@ mod tests { Ok(()) } + #[test] + fn ruf100_4() -> Result<()> { + let diagnostics = test_path( + Path::new("ruff/RUF100_4.py"), + &settings::Settings::for_rules(vec![Rule::UnusedNOQA, Rule::UnusedImport]), + )?; + assert_messages!(diagnostics); + Ok(()) + } + #[test] fn flake8_noqa() -> Result<()> { let diagnostics = test_path( diff --git a/crates/ruff/src/rules/ruff/rules/collection_literal_concatenation.rs b/crates/ruff/src/rules/ruff/rules/collection_literal_concatenation.rs index a2156f8e11..125f950e10 100644 --- a/crates/ruff/src/rules/ruff/rules/collection_literal_concatenation.rs +++ b/crates/ruff/src/rules/ruff/rules/collection_literal_concatenation.rs @@ -166,7 +166,7 @@ fn concatenate_expressions(expr: &Expr) -> Option<(Expr, Type)> { pub(crate) fn collection_literal_concatenation(checker: &mut Checker, expr: &Expr) { // If the expression is already a child of an addition, we'll have analyzed it already. if matches!( - checker.semantic().expr_parent(), + checker.semantic().current_expression_parent(), Some(Expr::BinOp(ast::ExprBinOp { op: Operator::Add, .. diff --git a/crates/ruff/src/rules/ruff/rules/invalid_index_type.rs b/crates/ruff/src/rules/ruff/rules/invalid_index_type.rs index 87b30117ab..74be4ac75b 100644 --- a/crates/ruff/src/rules/ruff/rules/invalid_index_type.rs +++ b/crates/ruff/src/rules/ruff/rules/invalid_index_type.rs @@ -63,7 +63,7 @@ pub(crate) fn invalid_index_type(checker: &mut Checker, expr: &ExprSubscript) { Expr::List(_) | Expr::ListComp(_) | Expr::Tuple(_) - | Expr::JoinedStr(_) + | Expr::FString(_) | Expr::Constant(ExprConstant { value: Constant::Str(_) | Constant::Bytes(_), .. @@ -156,7 +156,7 @@ pub(crate) fn invalid_index_type(checker: &mut Checker, expr: &ExprSubscript) { #[derive(Debug)] enum CheckableExprType<'a> { Constant(&'a Constant), - JoinedStr, + FString, List, ListComp, SetComp, @@ -171,7 +171,7 @@ impl fmt::Display for CheckableExprType<'_> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { Self::Constant(constant) => f.write_str(constant_type_name(constant)), - Self::JoinedStr => f.write_str("str"), + Self::FString => f.write_str("str"), Self::List => f.write_str("list"), Self::SetComp => f.write_str("set comprehension"), Self::ListComp => f.write_str("list comprehension"), @@ -188,7 +188,7 @@ impl<'a> CheckableExprType<'a> { fn try_from(expr: &'a Expr) -> Option { match expr { Expr::Constant(ExprConstant { value, .. }) => Some(Self::Constant(value)), - Expr::JoinedStr(_) => Some(Self::JoinedStr), + Expr::FString(_) => Some(Self::FString), Expr::List(_) => Some(Self::List), Expr::ListComp(_) => Some(Self::ListComp), Expr::SetComp(_) => Some(Self::SetComp), diff --git a/crates/ruff/src/rules/ruff/rules/unnecessary_iterable_allocation_for_first_element.rs b/crates/ruff/src/rules/ruff/rules/unnecessary_iterable_allocation_for_first_element.rs index ec61a8b4f9..13c581fdc4 100644 --- a/crates/ruff/src/rules/ruff/rules/unnecessary_iterable_allocation_for_first_element.rs +++ b/crates/ruff/src/rules/ruff/rules/unnecessary_iterable_allocation_for_first_element.rs @@ -149,7 +149,7 @@ struct IterationTarget { /// /// As a special-case, given `[x for x in y]`, returns the range of `y` (rather than the /// redundant comprehension). -fn match_iteration_target(expr: &Expr, model: &SemanticModel) -> Option { +fn match_iteration_target(expr: &Expr, semantic: &SemanticModel) -> Option { let result = match expr { Expr::Call(ast::ExprCall { func, @@ -166,7 +166,7 @@ fn match_iteration_target(expr: &Expr, model: &SemanticModel) -> Option BasicBlocksBuilder<'stmt> { let next = match stmt { // Statements that continue to the next statement after execution. Stmt::FunctionDef(_) - | Stmt::AsyncFunctionDef(_) | Stmt::Import(_) | Stmt::ImportFrom(_) | Stmt::ClassDef(_) @@ -535,12 +534,6 @@ impl<'stmt> BasicBlocksBuilder<'stmt> { body, orelse, .. - }) - | Stmt::AsyncFor(StmtAsyncFor { - iter: condition, - body, - orelse, - .. }) => loop_block(self, Condition::Iterator(condition), body, orelse, after), Stmt::Try(StmtTry { body, @@ -548,13 +541,6 @@ impl<'stmt> BasicBlocksBuilder<'stmt> { orelse, finalbody, .. - }) - | Stmt::TryStar(StmtTryStar { - body, - handlers, - orelse, - finalbody, - .. }) => { // TODO: handle `try` statements. The `try` control flow is very // complex, what blocks are and aren't taken and from which @@ -566,8 +552,7 @@ impl<'stmt> BasicBlocksBuilder<'stmt> { let _ = (body, handlers, orelse, finalbody); // Silence unused code warnings. self.unconditional_next_block(after) } - Stmt::With(StmtWith { items, body, .. }) - | Stmt::AsyncWith(StmtAsyncWith { items, body, .. }) => { + Stmt::With(StmtWith { items, body, .. }) => { // TODO: handle `with` statements, see // . // I recommend to `try` statements first as `with` can desugar @@ -641,7 +626,7 @@ impl<'stmt> BasicBlocksBuilder<'stmt> { | Expr::Compare(_) | Expr::Call(_) | Expr::FormattedValue(_) - | Expr::JoinedStr(_) + | Expr::FString(_) | Expr::Constant(_) | Expr::Attribute(_) | Expr::Subscript(_) @@ -661,13 +646,13 @@ impl<'stmt> BasicBlocksBuilder<'stmt> { | Expr::Await(_) | Expr::Yield(_) | Expr::YieldFrom(_) => self.unconditional_next_block(after), - Expr::LineMagic(_) => todo!(), + Expr::IpyEscapeCommand(_) => todo!(), } } // The tough branches are done, here is an easy one. Stmt::Return(_) => NextBlock::Terminate, Stmt::TypeAlias(_) => todo!(), - Stmt::LineMagic(_) => todo!(), + Stmt::IpyEscapeCommand(_) => todo!(), }; // Include any statements in the block that don't divert the control flow. @@ -889,7 +874,6 @@ fn needs_next_block(stmts: &[Stmt]) -> bool { Stmt::Return(_) | Stmt::Raise(_) => false, Stmt::If(stmt) => needs_next_block(&stmt.body) || stmt.elif_else_clauses.last().map_or(true, |clause| needs_next_block(&clause.body)), Stmt::FunctionDef(_) - | Stmt::AsyncFunctionDef(_) | Stmt::Import(_) | Stmt::ImportFrom(_) | Stmt::ClassDef(_) @@ -905,16 +889,13 @@ fn needs_next_block(stmts: &[Stmt]) -> bool { | Stmt::Break(_) | Stmt::Continue(_) | Stmt::For(_) - | Stmt::AsyncFor(_) | Stmt::While(_) | Stmt::With(_) - | Stmt::AsyncWith(_) | Stmt::Match(_) | Stmt::Try(_) - | Stmt::TryStar(_) | Stmt::Assert(_) => true, Stmt::TypeAlias(_) => todo!(), - Stmt::LineMagic(_) => todo!(), + Stmt::IpyEscapeCommand(_) => todo!(), } } @@ -923,7 +904,6 @@ fn needs_next_block(stmts: &[Stmt]) -> bool { fn is_control_flow_stmt(stmt: &Stmt) -> bool { match stmt { Stmt::FunctionDef(_) - | Stmt::AsyncFunctionDef(_) | Stmt::Import(_) | Stmt::ImportFrom(_) | Stmt::ClassDef(_) @@ -937,20 +917,17 @@ fn is_control_flow_stmt(stmt: &Stmt) -> bool { | Stmt::Pass(_) => false, Stmt::Return(_) | Stmt::For(_) - | Stmt::AsyncFor(_) | Stmt::While(_) | Stmt::If(_) | Stmt::With(_) - | Stmt::AsyncWith(_) | Stmt::Match(_) | Stmt::Raise(_) | Stmt::Try(_) - | Stmt::TryStar(_) | Stmt::Assert(_) | Stmt::Break(_) | Stmt::Continue(_) => true, Stmt::TypeAlias(_) => todo!(), - Stmt::LineMagic(_) => todo!(), + Stmt::IpyEscapeCommand(_) => todo!(), } } diff --git a/crates/ruff/src/rules/ruff/snapshots/ruff__rules__ruff__tests__ruf100_4.snap b/crates/ruff/src/rules/ruff/snapshots/ruff__rules__ruff__tests__ruf100_4.snap new file mode 100644 index 0000000000..e51f71f811 --- /dev/null +++ b/crates/ruff/src/rules/ruff/snapshots/ruff__rules__ruff__tests__ruf100_4.snap @@ -0,0 +1,4 @@ +--- +source: crates/ruff/src/rules/ruff/mod.rs +--- + diff --git a/crates/ruff/src/rules/tryceratops/rules/raise_vanilla_args.rs b/crates/ruff/src/rules/tryceratops/rules/raise_vanilla_args.rs index 8850aea86f..aadfa930c4 100644 --- a/crates/ruff/src/rules/tryceratops/rules/raise_vanilla_args.rs +++ b/crates/ruff/src/rules/tryceratops/rules/raise_vanilla_args.rs @@ -1,7 +1,6 @@ -use ruff_python_ast::{self as ast, Arguments, Constant, Expr, Ranged}; - use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::{self as ast, Arguments, Constant, Expr, Ranged}; use crate::checkers::ast::Checker; @@ -17,6 +16,10 @@ use crate::checkers::ast::Checker; /// If the exception message is instead defined within the exception class, it /// will be consistent across all `raise` invocations. /// +/// This rule is not enforced for some built-in exceptions that are commonly +/// raised with a message and would be unusual to subclass, such as +/// `NotImplementedError`. +/// /// ## Example /// ```python /// class CantBeNegative(Exception): @@ -49,23 +52,54 @@ impl Violation for RaiseVanillaArgs { } } -fn any_string(expr: &Expr, predicate: F) -> bool -where - F: (Fn(&str) -> bool) + Copy, -{ +/// TRY003 +pub(crate) fn raise_vanilla_args(checker: &mut Checker, expr: &Expr) { + let Expr::Call(ast::ExprCall { + func, + arguments: Arguments { args, .. }, + .. + }) = expr + else { + return; + }; + + let Some(arg) = args.first() else { + return; + }; + + // Ignore some built-in exceptions that don't make sense to subclass, like + // `NotImplementedError`. + if checker + .semantic() + .resolve_call_path(func) + .is_some_and(|call_path| matches!(call_path.as_slice(), ["", "NotImplementedError"])) + { + return; + } + + if contains_message(arg) { + checker + .diagnostics + .push(Diagnostic::new(RaiseVanillaArgs, expr.range())); + } +} + +/// Returns `true` if an expression appears to be an exception message (i.e., a string with +/// some whitespace). +fn contains_message(expr: &Expr) -> bool { match expr { - Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { + Expr::FString(ast::ExprFString { values, .. }) => { for value in values { - if any_string(value, predicate) { + if contains_message(value) { return true; } } } Expr::Constant(ast::ExprConstant { - value: Constant::Str(val), + value: Constant::Str(value), .. }) => { - if predicate(val.as_str()) { + if value.chars().any(char::is_whitespace) { return true; } } @@ -74,20 +108,3 @@ where false } - -/// TRY003 -pub(crate) fn raise_vanilla_args(checker: &mut Checker, expr: &Expr) { - if let Expr::Call(ast::ExprCall { - arguments: Arguments { args, .. }, - .. - }) = expr - { - if let Some(arg) = args.first() { - if any_string(arg, |part| part.chars().any(char::is_whitespace)) { - checker - .diagnostics - .push(Diagnostic::new(RaiseVanillaArgs, expr.range())); - } - } - } -} diff --git a/crates/ruff/src/rules/tryceratops/rules/raise_within_try.rs b/crates/ruff/src/rules/tryceratops/rules/raise_within_try.rs index bdaf9f6e38..7748651468 100644 --- a/crates/ruff/src/rules/tryceratops/rules/raise_within_try.rs +++ b/crates/ruff/src/rules/tryceratops/rules/raise_within_try.rs @@ -70,7 +70,7 @@ where fn visit_stmt(&mut self, stmt: &'b Stmt) { match stmt { Stmt::Raise(_) => self.raises.push(stmt), - Stmt::Try(_) | Stmt::TryStar(_) => (), + Stmt::Try(_) => (), _ => walk_stmt(self, stmt), } } diff --git a/crates/ruff/src/rules/tryceratops/rules/type_check_without_type_error.rs b/crates/ruff/src/rules/tryceratops/rules/type_check_without_type_error.rs index 208f9d3ff9..91e1d25b4c 100644 --- a/crates/ruff/src/rules/tryceratops/rules/type_check_without_type_error.rs +++ b/crates/ruff/src/rules/tryceratops/rules/type_check_without_type_error.rs @@ -55,7 +55,7 @@ where { fn visit_stmt(&mut self, stmt: &'b Stmt) { match stmt { - Stmt::FunctionDef(_) | Stmt::AsyncFunctionDef(_) | Stmt::ClassDef(_) => { + Stmt::FunctionDef(_) | Stmt::ClassDef(_) => { // Don't recurse. } Stmt::Return(_) => self.returns.push(stmt), diff --git a/crates/ruff/src/rules/tryceratops/rules/verbose_raise.rs b/crates/ruff/src/rules/tryceratops/rules/verbose_raise.rs index 9c881e1cb3..70ff1e3c21 100644 --- a/crates/ruff/src/rules/tryceratops/rules/verbose_raise.rs +++ b/crates/ruff/src/rules/tryceratops/rules/verbose_raise.rs @@ -61,9 +61,6 @@ where } Stmt::Try(ast::StmtTry { body, finalbody, .. - }) - | Stmt::TryStar(ast::StmtTryStar { - body, finalbody, .. }) => { for stmt in body.iter().chain(finalbody.iter()) { walk_stmt(self, stmt); diff --git a/crates/ruff/src/settings/defaults.rs b/crates/ruff/src/settings/defaults.rs index 6ccc3bf09b..a7ef3d3b88 100644 --- a/crates/ruff/src/settings/defaults.rs +++ b/crates/ruff/src/settings/defaults.rs @@ -24,8 +24,6 @@ pub const PREFIXES: &[RuleSelector] = &[ RuleSelector::Linter(Linter::Pyflakes), ]; -pub const TARGET_VERSION: PythonVersion = PythonVersion::Py310; - pub const TASK_TAGS: &[&str] = &["TODO", "FIXME", "XXX"]; pub static DUMMY_VARIABLE_RGX: Lazy = @@ -91,7 +89,7 @@ impl Default for Settings { respect_gitignore: true, src: vec![path_dedot::CWD.clone()], tab_size: TabSize::default(), - target_version: TARGET_VERSION, + target_version: PythonVersion::default(), task_tags: TASK_TAGS.iter().map(ToString::to_string).collect(), typing_modules: vec![], flake8_annotations: flake8_annotations::settings::Settings::default(), diff --git a/crates/ruff/src/settings/mod.rs b/crates/ruff/src/settings/mod.rs index 3dfc8372cd..ffae78aa08 100644 --- a/crates/ruff/src/settings/mod.rs +++ b/crates/ruff/src/settings/mod.rs @@ -183,7 +183,7 @@ impl Settings { .src .unwrap_or_else(|| vec![project_root.to_path_buf()]), project_root: project_root.to_path_buf(), - target_version: config.target_version.unwrap_or(defaults::TARGET_VERSION), + target_version: config.target_version.unwrap_or_default(), task_tags: config.task_tags.unwrap_or_else(|| { defaults::TASK_TAGS .iter() @@ -298,6 +298,7 @@ impl Settings { pub fn for_rule(rule_code: Rule) -> Self { Self { rules: RuleTable::from_iter([rule_code]), + target_version: PythonVersion::latest(), ..Self::default() } } @@ -305,9 +306,17 @@ impl Settings { pub fn for_rules(rules: impl IntoIterator) -> Self { Self { rules: RuleTable::from_iter(rules), + target_version: PythonVersion::latest(), ..Self::default() } } + + /// Return the [`Settings`] after updating the target [`PythonVersion`]. + #[must_use] + pub fn with_target_version(mut self, target_version: PythonVersion) -> Self { + self.target_version = target_version; + self + } } impl From<&Configuration> for RuleTable { diff --git a/crates/ruff/src/settings/options.rs b/crates/ruff/src/settings/options.rs index 4fe3ecf819..d7e6c67edf 100644 --- a/crates/ruff/src/settings/options.rs +++ b/crates/ruff/src/settings/options.rs @@ -312,13 +312,13 @@ pub struct Options { "# )] /// The line length to use when enforcing long-lines violations (like - /// `E501`). + /// `E501`). Must be greater than `0`. pub line_length: Option, #[option( default = "4", value_type = "int", example = r#" - tab_size = 8 + tab-size = 8 "# )] /// The tabulation size to calculate line length. @@ -456,7 +456,7 @@ pub struct Options { /// contained an `__init__.py` file. pub namespace_packages: Option>, #[option( - default = r#""py310""#, + default = r#""py38""#, value_type = r#""py37" | "py38" | "py39" | "py310" | "py311" | "py312""#, example = r#" # Always generate Python 3.7-compatible code. @@ -464,7 +464,11 @@ pub struct Options { "# )] /// The minimum Python version to target, e.g., when considering automatic - /// code upgrades, like rewriting type annotations. + /// code upgrades, like rewriting type annotations. Ruff will not propose + /// changes using features that are not available in the given version. + /// + /// For example, to represent supporting Python >=3.10 or ==3.10 + /// specify `target-version = "py310"`. /// /// If omitted, and Ruff is configured via a `pyproject.toml` file, the /// target version will be inferred from its `project.requires-python` @@ -596,7 +600,7 @@ pub struct Options { default = "{}", value_type = "dict[str, list[RuleSelector]]", example = r#" - # Also ignore `E401` in all `__init__.py` files. + # Also ignore `E402` in all `__init__.py` files. [tool.ruff.extend-per-file-ignores] "__init__.py" = ["E402"] "# diff --git a/crates/ruff/src/settings/types.rs b/crates/ruff/src/settings/types.rs index 82dc6fe34c..8461604425 100644 --- a/crates/ruff/src/settings/types.rs +++ b/crates/ruff/src/settings/types.rs @@ -19,13 +19,25 @@ use crate::registry::RuleSet; use crate::rule_selector::RuleSelector; #[derive( - Clone, Copy, Debug, PartialOrd, Ord, PartialEq, Eq, Serialize, Deserialize, CacheKey, EnumIter, + Clone, + Copy, + Debug, + PartialOrd, + Ord, + PartialEq, + Eq, + Default, + Serialize, + Deserialize, + CacheKey, + EnumIter, )] #[cfg_attr(feature = "clap", derive(clap::ValueEnum))] #[serde(rename_all = "lowercase")] #[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub enum PythonVersion { Py37, + #[default] Py38, Py39, Py310, @@ -41,6 +53,11 @@ impl From for Pep440Version { } impl PythonVersion { + /// Return the latest supported Python version. + pub const fn latest() -> Self { + Self::Py312 + } + pub const fn as_tuple(&self) -> (u32, u32) { match self { Self::Py37 => (3, 7), diff --git a/crates/ruff/src/test.rs b/crates/ruff/src/test.rs index b89ce5a80f..07e9c15ac1 100644 --- a/crates/ruff/src/test.rs +++ b/crates/ruff/src/test.rs @@ -33,7 +33,7 @@ use crate::source_kind::SourceKind; #[cfg(not(fuzzing))] pub(crate) fn read_jupyter_notebook(path: &Path) -> Result { let path = test_resource_path("fixtures/jupyter").join(path); - Notebook::read(&path).map_err(|err| { + Notebook::from_path(&path).map_err(|err| { anyhow::anyhow!( "Failed to read notebook file `{}`: {:?}", path.display(), diff --git a/crates/ruff_benchmark/Cargo.toml b/crates/ruff_benchmark/Cargo.toml index 734471e1d2..1d2baf66dd 100644 --- a/crates/ruff_benchmark/Cargo.toml +++ b/crates/ruff_benchmark/Cargo.toml @@ -37,6 +37,7 @@ ureq = "2.6.2" ruff.path = "../ruff" ruff_python_ast.path = "../ruff_python_ast" ruff_python_formatter = { path = "../ruff_python_formatter" } +ruff_python_index = { path = "../ruff_python_index" } ruff_python_parser = { path = "../ruff_python_parser" } criterion = { version = "0.5.1"} @@ -45,4 +46,3 @@ mimalloc = "0.1.34" [target.'cfg(all(not(target_os = "windows"), not(target_os = "openbsd"), any(target_arch = "x86_64", target_arch = "aarch64", target_arch = "powerpc64")))'.dev-dependencies] tikv-jemallocator = "0.5.0" - diff --git a/crates/ruff_benchmark/benches/formatter.rs b/crates/ruff_benchmark/benches/formatter.rs index 6895bd2ac1..efcc986e72 100644 --- a/crates/ruff_benchmark/benches/formatter.rs +++ b/crates/ruff_benchmark/benches/formatter.rs @@ -1,8 +1,12 @@ -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput}; -use ruff_benchmark::{TestCase, TestCaseSpeed, TestFile, TestFileDownloadError}; -use ruff_python_formatter::{format_module, PyFormatOptions}; use std::path::Path; -use std::time::Duration; + +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput}; + +use ruff_benchmark::{TestCase, TestFile, TestFileDownloadError}; +use ruff_python_formatter::{format_node, PyFormatOptions}; +use ruff_python_index::CommentRangesBuilder; +use ruff_python_parser::lexer::lex; +use ruff_python_parser::{parse_tokens, Mode}; #[cfg(target_os = "windows")] #[global_allocator] @@ -41,19 +45,33 @@ fn benchmark_formatter(criterion: &mut Criterion) { for case in test_cases { group.throughput(Throughput::Bytes(case.code().len() as u64)); - group.measurement_time(match case.speed() { - TestCaseSpeed::Fast => Duration::from_secs(5), - TestCaseSpeed::Normal => Duration::from_secs(10), - TestCaseSpeed::Slow => Duration::from_secs(20), - }); group.bench_with_input( BenchmarkId::from_parameter(case.name()), &case, |b, case| { + let mut tokens = Vec::new(); + let mut comment_ranges = CommentRangesBuilder::default(); + + for result in lex(case.code(), Mode::Module) { + let (token, range) = result.expect("Input to be a valid python program."); + + comment_ranges.visit_token(&token, range); + tokens.push(Ok((token, range))); + } + + let comment_ranges = comment_ranges.finish(); + + // Parse the AST. + let python_ast = parse_tokens(tokens, Mode::Module, "") + .expect("Input to be a valid python program"); + b.iter(|| { let options = PyFormatOptions::from_extension(Path::new(case.name())); - format_module(case.code(), options).expect("Formatting to succeed") + let formatted = format_node(&python_ast, &comment_ranges, case.code(), options) + .expect("Formatting to succeed"); + + formatted.print().expect("Printing to succeed") }); }, ); diff --git a/crates/ruff_cache/src/cache_key.rs b/crates/ruff_cache/src/cache_key.rs index e015112bda..c62e580d1e 100644 --- a/crates/ruff_cache/src/cache_key.rs +++ b/crates/ruff_cache/src/cache_key.rs @@ -2,6 +2,7 @@ use std::borrow::Cow; use std::collections::hash_map::DefaultHasher; use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; use std::hash::{Hash, Hasher}; +use std::num::NonZeroU8; use std::ops::{Deref, DerefMut}; use std::path::{Path, PathBuf}; @@ -205,6 +206,13 @@ impl CacheKey for i8 { } } +impl CacheKey for NonZeroU8 { + #[inline] + fn cache_key(&self, state: &mut CacheKeyHasher) { + state.write_u8(self.get()); + } +} + macro_rules! impl_cache_key_tuple { () => ( impl CacheKey for () { diff --git a/crates/ruff_cli/Cargo.toml b/crates/ruff_cli/Cargo.toml index 3e9faee31c..4db9aeb55e 100644 --- a/crates/ruff_cli/Cargo.toml +++ b/crates/ruff_cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ruff_cli" -version = "0.0.282" +version = "0.0.284" publish = false authors = { workspace = true } edition = { workspace = true } @@ -11,8 +11,6 @@ repository = { workspace = true } license = { workspace = true } readme = "../../README.md" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [[bin]] name = "ruff" diff --git a/crates/ruff_cli/src/diagnostics.rs b/crates/ruff_cli/src/diagnostics.rs index 5ad6a50fd2..f348468b1b 100644 --- a/crates/ruff_cli/src/diagnostics.rs +++ b/crates/ruff_cli/src/diagnostics.rs @@ -96,12 +96,14 @@ impl AddAssign for Diagnostics { } } -/// Returns either an indexed python jupyter notebook or a diagnostic (which is empty if we skip) -fn load_jupyter_notebook(path: &Path) -> Result> { - let notebook = match Notebook::read(path) { +/// Read a Jupyter Notebook from disk. +/// +/// Returns either an indexed Python Jupyter Notebook or a diagnostic (which is empty if we skip). +fn notebook_from_path(path: &Path) -> Result> { + let notebook = match Notebook::from_path(path) { Ok(notebook) => { if !notebook.is_python_notebook() { - // Not a python notebook, this could e.g. be an R notebook which we want to just skip + // Not a python notebook, this could e.g. be an R notebook which we want to just skip. debug!( "Skipping {} because it's not a Python notebook", path.display() @@ -126,6 +128,44 @@ fn load_jupyter_notebook(path: &Path) -> Result> { Ok(notebook) } +/// Parse a Jupyter Notebook from a JSON string. +/// +/// Returns either an indexed Python Jupyter Notebook or a diagnostic (which is empty if we skip). +fn notebook_from_contents( + contents: &str, + path: Option<&Path>, +) -> Result> { + let notebook = match Notebook::from_contents(contents) { + Ok(notebook) => { + if !notebook.is_python_notebook() { + // Not a python notebook, this could e.g. be an R notebook which we want to just skip. + if let Some(path) = path { + debug!( + "Skipping {} because it's not a Python notebook", + path.display() + ); + } + return Err(Box::default()); + } + notebook + } + Err(diagnostic) => { + // Failed to read the jupyter notebook + return Err(Box::new(Diagnostics { + messages: vec![Message::from_diagnostic( + *diagnostic, + SourceFileBuilder::new(path.map(Path::to_string_lossy).unwrap_or_default(), "") + .finish(), + TextSize::default(), + )], + ..Diagnostics::default() + })); + } + }; + + Ok(notebook) +} + /// Lint the source code at the given `Path`. pub(crate) fn lint_path( path: &Path, @@ -216,7 +256,7 @@ pub(crate) fn lint_path( // Read the file from disk let mut source_kind = if source_type.is_jupyter() { - match load_jupyter_notebook(path) { + match notebook_from_path(path) { Ok(notebook) => SourceKind::Jupyter(notebook), Err(diagnostic) => return Ok(*diagnostic), } @@ -278,7 +318,7 @@ pub(crate) fn lint_path( SourceKind::Jupyter(dest_notebook) => { // We need to load the notebook again, since we might've // mutated it. - let src_notebook = match load_jupyter_notebook(path) { + let src_notebook = match notebook_from_path(path) { Ok(notebook) => notebook, Err(diagnostic) => return Ok(*diagnostic), }; @@ -401,8 +441,19 @@ pub(crate) fn lint_stdin( noqa: flags::Noqa, autofix: flags::FixMode, ) -> Result { - let mut source_kind = SourceKind::Python(contents.to_string()); - let source_type = PySourceType::default(); + let source_type = path.map(PySourceType::from).unwrap_or_default(); + + let mut source_kind = if source_type.is_jupyter() { + // SAFETY: Jupyter isn't the default type, so we must have a path. + match notebook_from_contents(contents, path) { + Ok(notebook) => SourceKind::Jupyter(notebook), + Err(diagnostic) => return Ok(*diagnostic), + } + } else { + SourceKind::Python(contents.to_string()) + }; + + let contents = source_kind.content().to_string(); // Lint the inputs. let ( @@ -417,7 +468,7 @@ pub(crate) fn lint_stdin( transformed, fixed, }) = lint_fix( - contents, + &contents, path.unwrap_or_else(|| Path::new("-")), package, noqa, @@ -433,7 +484,7 @@ pub(crate) fn lint_stdin( flags::FixMode::Diff => { // But only write a diff if it's non-empty. if !fixed.is_empty() { - let text_diff = TextDiff::from_lines(contents, &transformed); + let text_diff = TextDiff::from_lines(contents.as_str(), &transformed); let mut unified_diff = text_diff.unified_diff(); if let Some(path) = path { unified_diff @@ -453,7 +504,7 @@ pub(crate) fn lint_stdin( } else { // If we fail to autofix, lint the original source code. let result = lint_only( - contents, + &contents, path.unwrap_or_else(|| Path::new("-")), package, settings, @@ -472,7 +523,7 @@ pub(crate) fn lint_stdin( } } else { let result = lint_only( - contents, + &contents, path.unwrap_or_else(|| Path::new("-")), package, settings, @@ -508,14 +559,21 @@ pub(crate) fn lint_stdin( mod tests { use std::path::Path; - use crate::diagnostics::{load_jupyter_notebook, Diagnostics}; + use crate::diagnostics::{notebook_from_contents, notebook_from_path, Diagnostics}; #[test] fn test_r() { let path = Path::new("../ruff/resources/test/fixtures/jupyter/R.ipynb"); - // No diagnostics is used as skip signal + // No diagnostics is used as skip signal. assert_eq!( - load_jupyter_notebook(path).unwrap_err(), + notebook_from_path(path).unwrap_err(), + Box::::default() + ); + + let contents = std::fs::read_to_string(path).unwrap(); + // No diagnostics is used as skip signal. + assert_eq!( + notebook_from_contents(&contents, Some(path)).unwrap_err(), Box::::default() ); } diff --git a/crates/ruff_cli/tests/integration_test.rs b/crates/ruff_cli/tests/integration_test.rs index 4d62a835d4..bbb88ad0ec 100644 --- a/crates/ruff_cli/tests/integration_test.rs +++ b/crates/ruff_cli/tests/integration_test.rs @@ -81,6 +81,48 @@ Found 1 error. Ok(()) } +#[test] +fn stdin_source_type() -> Result<()> { + // Raise `TCH` errors in `.py` files. + let mut cmd = Command::cargo_bin(BIN_NAME)?; + let output = cmd + .args([ + "-", + "--format", + "text", + "--stdin-filename", + "TCH.py", + "--isolated", + ]) + .write_stdin("import os\n") + .assert() + .failure(); + assert_eq!( + str::from_utf8(&output.get_output().stdout)?, + r#"TCH.py:1:8: F401 [*] `os` imported but unused +Found 1 error. +[*] 1 potentially fixable with the --fix option. +"# + ); + + // But not in `.pyi` files. + let mut cmd = Command::cargo_bin(BIN_NAME)?; + cmd.args([ + "-", + "--format", + "text", + "--stdin-filename", + "TCH.pyi", + "--isolated", + "--select", + "TCH", + ]) + .write_stdin("import os\n") + .assert() + .success(); + Ok(()) +} + #[cfg(unix)] #[test] fn stdin_json() -> Result<()> { diff --git a/crates/ruff_dev/Cargo.toml b/crates/ruff_dev/Cargo.toml index 505a375308..ccf81d3c9e 100644 --- a/crates/ruff_dev/Cargo.toml +++ b/crates/ruff_dev/Cargo.toml @@ -44,6 +44,11 @@ toml = { workspace = true, features = ["parse"] } tracing = { workspace = true } tracing-indicatif = { workspace = true } tracing-subscriber = { workspace = true, features = ["env-filter"] } +imara-diff = "0.1.5" + +[features] +# Turn off rayon for profiling +singlethreaded = [] [dev-dependencies] indoc = "2.0.3" diff --git a/crates/ruff_dev/src/format_dev.rs b/crates/ruff_dev/src/format_dev.rs index 6b83fb57ed..e04759884f 100644 --- a/crates/ruff_dev/src/format_dev.rs +++ b/crates/ruff_dev/src/format_dev.rs @@ -1,7 +1,11 @@ use anyhow::{bail, format_err, Context, Error}; use clap::{CommandFactory, FromArgMatches}; use ignore::DirEntry; +use imara_diff::intern::InternedInput; +use imara_diff::sink::Counter; +use imara_diff::{diff, Algorithm}; use indicatif::ProgressStyle; +#[cfg_attr(feature = "singlethreaded", allow(unused_imports))] use rayon::iter::{IntoParallelIterator, ParallelIterator}; use ruff::logging::LogLevel; use ruff::resolver::python_files_in_path; @@ -22,7 +26,7 @@ use std::panic::catch_unwind; use std::path::{Path, PathBuf}; use std::process::ExitCode; use std::time::{Duration, Instant}; -use std::{fmt, fs, io}; +use std::{fmt, fs, io, iter}; use tempfile::NamedTempFile; use tracing::{debug, error, info, info_span}; use tracing_indicatif::span_ext::IndicatifSpanExt; @@ -99,16 +103,18 @@ impl Statistics { intersection, } } else { - let diff = TextDiff::from_lines(black, ruff); - let mut statistics = Self::default(); - for change in diff.iter_all_changes() { - match change.tag() { - ChangeTag::Delete => statistics.black_input += 1, - ChangeTag::Insert => statistics.ruff_output += 1, - ChangeTag::Equal => statistics.intersection += 1, - } + // `similar` was too slow (for some files >90% diffing instead of formatting) + let input = InternedInput::new(black, ruff); + let changes = diff(Algorithm::Histogram, &input, Counter::default()); + assert_eq!( + input.before.len() - (changes.removals as usize), + input.after.len() - (changes.insertions as usize) + ); + Self { + black_input: changes.removals, + ruff_output: changes.insertions, + intersection: u32::try_from(input.before.len()).unwrap() - changes.removals, } - statistics } } @@ -187,6 +193,9 @@ pub(crate) struct Args { /// Write all log messages (same as cli) to this file #[arg(long)] pub(crate) log_file: Option, + /// Write a markdown table with the similarity indices to this file + #[arg(long)] + pub(crate) stats_file: Option, /// Assert that there are exactly this many input files with errors. This catches regressions /// (or improvements) in the parser. #[arg(long)] @@ -250,7 +259,10 @@ fn setup_logging(log_level_args: &LogLevelArgs, log_file: Option<&Path>) -> io:: .with_default_directive(log_level.into()) .parse_lossy("") }); - let indicatif_layer = IndicatifLayer::new(); + let indicatif_layer = IndicatifLayer::new().with_progress_style( + // Default without the spinner + ProgressStyle::with_template("{span_child_prefix} {span_name}{{{span_fields}}}").unwrap(), + ); let indicitif_compatible_writer_layer = tracing_subscriber::fmt::layer() .with_writer(indicatif_layer.get_stderr_writer()) .with_target(false); @@ -302,6 +314,8 @@ fn format_dev_multi_project(args: &Args) -> anyhow::Result { None => None, }; + let mut results = Vec::new(); + for project_path in project_paths { debug!(parent: None, "Starting {}", project_path.display()); @@ -332,6 +346,7 @@ fn format_dev_multi_project(args: &Args) -> anyhow::Result { write!(error_file, "{}", result.display(args.format)).unwrap(); error_file.flush().unwrap(); } + results.push(result); pb_span.pb_inc(1); } @@ -353,6 +368,35 @@ fn format_dev_multi_project(args: &Args) -> anyhow::Result { duration.as_secs_f32(), ); + if let Some(stats_file) = &args.stats_file { + results.sort_by(|result1, result2| result1.name.cmp(&result2.name)); + let project_col_len = results + .iter() + .map(|result| result.name.len()) + .chain(iter::once("project".len())) + .max() + .unwrap_or_default(); + let mut stats_file = BufWriter::new(File::create(stats_file)?); + writeln!( + stats_file, + "| {:>>()? + #[cfg(not(feature = "singlethreaded"))] + let iter = { paths.into_par_iter() }; + #[cfg(feature = "singlethreaded")] + let iter = { paths.into_iter() }; + iter.map(|dir_entry| { + let result = format_dir_entry(dir_entry, stability_check, write, &black_options); + pb_span.pb_inc(1); + result + }) + .collect::>>()? }; let mut statistics = Statistics::default(); @@ -433,7 +479,13 @@ fn format_dev_project( let duration = start.elapsed(); + let name = files[0] + .file_name() + .unwrap_or(files[0].as_os_str()) + .to_string_lossy() + .to_string(); Ok(CheckRepoResult { + name, duration, file_count: formatted_counter, diagnostics, @@ -511,6 +563,7 @@ fn diff_show_only_changes( } struct CheckRepoResult { + name: String, duration: Duration, file_count: usize, diagnostics: Vec, diff --git a/crates/ruff_formatter/Cargo.toml b/crates/ruff_formatter/Cargo.toml index 2f9c52ee06..a4cf178196 100644 --- a/crates/ruff_formatter/Cargo.toml +++ b/crates/ruff_formatter/Cargo.toml @@ -17,9 +17,9 @@ drop_bomb = { version = "0.1.5" } rustc-hash = { workspace = true } schemars = { workspace = true, optional = true } serde = { workspace = true, optional = true } -tracing = { version = "0.1.37", default-features = false, features = ["std"] } -unicode-width = { version = "0.1.10" } static_assertions = "1.1.0" +tracing = { version = "0.1.37", default-features = false, features = ["std"] } +unicode-width = { workspace = true } [dev-dependencies] insta = { workspace = true } diff --git a/crates/ruff_formatter/src/arguments.rs b/crates/ruff_formatter/src/arguments.rs index 01ee8f91e8..36b37e64b3 100644 --- a/crates/ruff_formatter/src/arguments.rs +++ b/crates/ruff_formatter/src/arguments.rs @@ -3,8 +3,8 @@ use crate::FormatResult; use std::ffi::c_void; use std::marker::PhantomData; -/// Mono-morphed type to format an object. Used by the [crate::format!], [crate::format_args!], and -/// [crate::write!] macros. +/// Mono-morphed type to format an object. Used by the [`crate::format`!], [`crate::format_args`!], and +/// [`crate::write`!] macros. /// /// This struct is similar to a dynamic dispatch (using `dyn Format`) because it stores a pointer to the value. /// However, it doesn't store the pointer to `dyn Format`'s vtable, instead it statically resolves the function @@ -33,24 +33,25 @@ impl<'fmt, Context> Argument<'fmt, Context> { #[doc(hidden)] #[inline] pub fn new>(value: &'fmt F) -> Self { - #[inline(always)] + #[inline] fn formatter, Context>( ptr: *const c_void, fmt: &mut Formatter, ) -> FormatResult<()> { // SAFETY: Safe because the 'fmt lifetime is captured by the 'lifetime' field. - F::fmt(unsafe { &*(ptr as *const F) }, fmt) + #[allow(unsafe_code)] + F::fmt(unsafe { &*ptr.cast::() }, fmt) } Self { - value: value as *const F as *const c_void, + value: (value as *const F).cast::(), lifetime: PhantomData, formatter: formatter::, } } /// Formats the value stored by this argument using the given formatter. - #[inline(always)] + #[inline] pub(super) fn format(&self, f: &mut Formatter) -> FormatResult<()> { (self.formatter)(self.value, f) } @@ -80,13 +81,14 @@ pub struct Arguments<'fmt, Context>(pub &'fmt [Argument<'fmt, Context>]); impl<'fmt, Context> Arguments<'fmt, Context> { #[doc(hidden)] - #[inline(always)] + #[inline] pub fn new(arguments: &'fmt [Argument<'fmt, Context>]) -> Self { Self(arguments) } /// Returns the arguments #[inline] + #[allow(clippy::trivially_copy_pass_by_ref)] // Bug in Clippy? Sizeof Arguments is 16 pub(super) fn items(&self) -> &'fmt [Argument<'fmt, Context>] { self.0 } @@ -101,7 +103,7 @@ impl Clone for Arguments<'_, Context> { } impl Format for Arguments<'_, Context> { - #[inline(always)] + #[inline] fn fmt(&self, formatter: &mut Formatter) -> FormatResult<()> { formatter.write_fmt(*self) } diff --git a/crates/ruff_formatter/src/buffer.rs b/crates/ruff_formatter/src/buffer.rs index 13cb542085..d2eec095fb 100644 --- a/crates/ruff_formatter/src/buffer.rs +++ b/crates/ruff_formatter/src/buffer.rs @@ -1,21 +1,21 @@ use super::{write, Arguments, FormatElement}; use crate::format_element::Interned; use crate::prelude::LineMode; -use crate::{Format, FormatResult, FormatState}; +use crate::{FormatResult, FormatState}; use rustc_hash::FxHashMap; use std::any::{Any, TypeId}; use std::fmt::Debug; use std::ops::{Deref, DerefMut}; -/// A trait for writing or formatting into [FormatElement]-accepting buffers or streams. +/// A trait for writing or formatting into [`FormatElement`]-accepting buffers or streams. pub trait Buffer { /// The context used during formatting type Context; - /// Writes a [crate::FormatElement] into this buffer, returning whether the write succeeded. + /// Writes a [`crate::FormatElement`] into this buffer, returning whether the write succeeded. /// /// # Errors - /// This function will return an instance of [crate::FormatError] on error. + /// This function will return an instance of [`crate::FormatError`] on error. /// /// # Examples /// @@ -25,11 +25,11 @@ pub trait Buffer { /// let mut state = FormatState::new(SimpleFormatContext::default()); /// let mut buffer = VecBuffer::new(&mut state); /// - /// buffer.write_element(FormatElement::StaticText { text: "test"}).unwrap(); + /// buffer.write_element(FormatElement::StaticText { text: "test"}); /// /// assert_eq!(buffer.into_vec(), vec![FormatElement::StaticText { text: "test" }]); /// ``` - fn write_element(&mut self, element: FormatElement) -> FormatResult<()>; + fn write_element(&mut self, element: FormatElement); /// Returns a slice containing all elements written into this buffer. /// @@ -122,7 +122,7 @@ impl BufferSnapshot { Err(err) => { panic!( "Tried to unwrap snapshot of type {:?} as {:?}", - err.type_id(), + (*err).type_id(), TypeId::of::() ) } @@ -135,8 +135,8 @@ impl BufferSnapshot { impl + ?Sized, Context> Buffer for &mut W { type Context = Context; - fn write_element(&mut self, element: FormatElement) -> FormatResult<()> { - (**self).write_element(element) + fn write_element(&mut self, element: FormatElement) { + (**self).write_element(element); } fn elements(&self) -> &[FormatElement] { @@ -160,7 +160,7 @@ impl + ?Sized, Context> Buffer for &mut W { } fn restore_snapshot(&mut self, snapshot: BufferSnapshot) { - (**self).restore_snapshot(snapshot) + (**self).restore_snapshot(snapshot); } } @@ -218,10 +218,8 @@ impl DerefMut for VecBuffer<'_, Context> { impl Buffer for VecBuffer<'_, Context> { type Context = Context; - fn write_element(&mut self, element: FormatElement) -> FormatResult<()> { + fn write_element(&mut self, element: FormatElement) { self.elements.push(element); - - Ok(()) } fn elements(&self) -> &[FormatElement] { @@ -252,140 +250,6 @@ Make sure that you take and restore the snapshot in order and that this snapshot } } -/// This struct wraps an existing buffer and emits a preamble text when the first text is written. -/// -/// This can be useful if you, for example, want to write some content if what gets written next isn't empty. -/// -/// # Examples -/// -/// ``` -/// use ruff_formatter::{FormatState, Formatted, PreambleBuffer, SimpleFormatContext, VecBuffer, write}; -/// use ruff_formatter::prelude::*; -/// -/// struct Preamble; -/// -/// impl Format for Preamble { -/// fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { -/// write!(f, [text("# heading"), hard_line_break()]) -/// } -/// } -/// -/// # fn main() -> FormatResult<()> { -/// let mut state = FormatState::new(SimpleFormatContext::default()); -/// let mut buffer = VecBuffer::new(&mut state); -/// -/// { -/// let mut with_preamble = PreambleBuffer::new(&mut buffer, Preamble); -/// -/// write!(&mut with_preamble, [text("this text will be on a new line")])?; -/// } -/// -/// let formatted = Formatted::new(Document::from(buffer.into_vec()), SimpleFormatContext::default()); -/// assert_eq!("# heading\nthis text will be on a new line", formatted.print()?.as_code()); -/// -/// # Ok(()) -/// # } -/// ``` -/// -/// The pre-amble does not get written if no content is written to the buffer. -/// -/// ``` -/// use ruff_formatter::{FormatState, Formatted, PreambleBuffer, SimpleFormatContext, VecBuffer, write}; -/// use ruff_formatter::prelude::*; -/// -/// struct Preamble; -/// -/// impl Format for Preamble { -/// fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { -/// write!(f, [text("# heading"), hard_line_break()]) -/// } -/// } -/// -/// # fn main() -> FormatResult<()> { -/// let mut state = FormatState::new(SimpleFormatContext::default()); -/// let mut buffer = VecBuffer::new(&mut state); -/// { -/// let mut with_preamble = PreambleBuffer::new(&mut buffer, Preamble); -/// } -/// -/// let formatted = Formatted::new(Document::from(buffer.into_vec()), SimpleFormatContext::default()); -/// assert_eq!("", formatted.print()?.as_code()); -/// # Ok(()) -/// # } -/// ``` -pub struct PreambleBuffer<'buf, Preamble, Context> { - /// The wrapped buffer - inner: &'buf mut dyn Buffer, - - /// The pre-amble to write once the first content gets written to this buffer. - preamble: Preamble, - - /// Whether some content (including the pre-amble) has been written at this point. - empty: bool, -} - -impl<'buf, Preamble, Context> PreambleBuffer<'buf, Preamble, Context> { - pub fn new(inner: &'buf mut dyn Buffer, preamble: Preamble) -> Self { - Self { - inner, - preamble, - empty: true, - } - } - - /// Returns `true` if the preamble has been written, `false` otherwise. - pub fn did_write_preamble(&self) -> bool { - !self.empty - } -} - -impl Buffer for PreambleBuffer<'_, Preamble, Context> -where - Preamble: Format, -{ - type Context = Context; - - fn write_element(&mut self, element: FormatElement) -> FormatResult<()> { - if self.empty { - write!(self.inner, [&self.preamble])?; - self.empty = false; - } - - self.inner.write_element(element) - } - - fn elements(&self) -> &[FormatElement] { - self.inner.elements() - } - - fn state(&self) -> &FormatState { - self.inner.state() - } - - fn state_mut(&mut self) -> &mut FormatState { - self.inner.state_mut() - } - - fn snapshot(&self) -> BufferSnapshot { - BufferSnapshot::Any(Box::new(PreambleBufferSnapshot { - inner: self.inner.snapshot(), - empty: self.empty, - })) - } - - fn restore_snapshot(&mut self, snapshot: BufferSnapshot) { - let snapshot = snapshot.unwrap_any::(); - - self.empty = snapshot.empty; - self.inner.restore_snapshot(snapshot.inner); - } -} - -struct PreambleBufferSnapshot { - inner: BufferSnapshot, - empty: bool, -} - /// Buffer that allows you inspecting elements as they get written to the formatter. pub struct Inspect<'inner, Context, Inspector> { inner: &'inner mut dyn Buffer, @@ -404,9 +268,9 @@ where { type Context = Context; - fn write_element(&mut self, element: FormatElement) -> FormatResult<()> { + fn write_element(&mut self, element: FormatElement) { (self.inspector)(&element); - self.inner.write_element(element) + self.inner.write_element(element); } fn elements(&self) -> &[FormatElement] { @@ -426,7 +290,7 @@ where } fn restore_snapshot(&mut self, snapshot: BufferSnapshot) { - self.inner.restore_snapshot(snapshot) + self.inner.restore_snapshot(snapshot); } } @@ -508,68 +372,67 @@ fn clean_interned( interned: &Interned, interned_cache: &mut FxHashMap, ) -> Interned { - match interned_cache.get(interned) { - Some(cleaned) => cleaned.clone(), - None => { - // Find the first soft line break element or interned element that must be changed - let result = interned - .iter() - .enumerate() - .find_map(|(index, element)| match element { - FormatElement::Line(LineMode::Soft | LineMode::SoftOrSpace) => { - let mut cleaned = Vec::new(); - cleaned.extend_from_slice(&interned[..index]); - Some((cleaned, &interned[index..])) - } - FormatElement::Interned(inner) => { - let cleaned_inner = clean_interned(inner, interned_cache); - - if &cleaned_inner != inner { - let mut cleaned = Vec::with_capacity(interned.len()); - cleaned.extend_from_slice(&interned[..index]); - cleaned.push(FormatElement::Interned(cleaned_inner)); - Some((cleaned, &interned[index + 1..])) - } else { - None - } - } - - _ => None, - }); - - let result = match result { - // Copy the whole interned buffer so that becomes possible to change the necessary elements. - Some((mut cleaned, rest)) => { - for element in rest { - let element = match element { - FormatElement::Line(LineMode::Soft) => continue, - FormatElement::Line(LineMode::SoftOrSpace) => FormatElement::Space, - FormatElement::Interned(interned) => { - FormatElement::Interned(clean_interned(interned, interned_cache)) - } - element => element.clone(), - }; - cleaned.push(element) - } - - Interned::new(cleaned) + if let Some(cleaned) = interned_cache.get(interned) { + cleaned.clone() + } else { + // Find the first soft line break element or interned element that must be changed + let result = interned + .iter() + .enumerate() + .find_map(|(index, element)| match element { + FormatElement::Line(LineMode::Soft | LineMode::SoftOrSpace) => { + let mut cleaned = Vec::new(); + cleaned.extend_from_slice(&interned[..index]); + Some((cleaned, &interned[index..])) } - // No change necessary, return existing interned element - None => interned.clone(), - }; + FormatElement::Interned(inner) => { + let cleaned_inner = clean_interned(inner, interned_cache); - interned_cache.insert(interned.clone(), result.clone()); - result - } + if &cleaned_inner == inner { + None + } else { + let mut cleaned = Vec::with_capacity(interned.len()); + cleaned.extend_from_slice(&interned[..index]); + cleaned.push(FormatElement::Interned(cleaned_inner)); + Some((cleaned, &interned[index + 1..])) + } + } + + _ => None, + }); + + let result = match result { + // Copy the whole interned buffer so that becomes possible to change the necessary elements. + Some((mut cleaned, rest)) => { + for element in rest { + let element = match element { + FormatElement::Line(LineMode::Soft) => continue, + FormatElement::Line(LineMode::SoftOrSpace) => FormatElement::Space, + FormatElement::Interned(interned) => { + FormatElement::Interned(clean_interned(interned, interned_cache)) + } + element => element.clone(), + }; + cleaned.push(element); + } + + Interned::new(cleaned) + } + // No change necessary, return existing interned element + None => interned.clone(), + }; + + interned_cache.insert(interned.clone(), result.clone()); + result } } impl Buffer for RemoveSoftLinesBuffer<'_, Context> { type Context = Context; - fn write_element(&mut self, element: FormatElement) -> FormatResult<()> { + fn write_element(&mut self, element: FormatElement) { let element = match element { - FormatElement::Line(LineMode::Soft) => return Ok(()), + FormatElement::Line(LineMode::Soft) => return, FormatElement::Line(LineMode::SoftOrSpace) => FormatElement::Space, FormatElement::Interned(interned) => { FormatElement::Interned(self.clean_interned(&interned)) @@ -577,7 +440,7 @@ impl Buffer for RemoveSoftLinesBuffer<'_, Context> { element => element, }; - self.inner.write_element(element) + self.inner.write_element(element); } fn elements(&self) -> &[FormatElement] { @@ -597,7 +460,7 @@ impl Buffer for RemoveSoftLinesBuffer<'_, Context> { } fn restore_snapshot(&mut self, snapshot: BufferSnapshot) { - self.inner.restore_snapshot(snapshot) + self.inner.restore_snapshot(snapshot); } } @@ -654,15 +517,13 @@ pub trait BufferExtensions: Buffer + Sized { } /// Writes a sequence of elements into this buffer. - fn write_elements(&mut self, elements: I) -> FormatResult<()> + fn write_elements(&mut self, elements: I) where I: IntoIterator, { - for element in elements.into_iter() { - self.write_element(element)?; + for element in elements { + self.write_element(element); } - - Ok(()) } } @@ -685,14 +546,14 @@ where } } - #[inline(always)] + #[inline] pub fn write_fmt(&mut self, arguments: Arguments) -> FormatResult<()> { self.buffer.write_fmt(arguments) } - #[inline(always)] - pub fn write_element(&mut self, element: FormatElement) -> FormatResult<()> { - self.buffer.write_element(element) + #[inline] + pub fn write_element(&mut self, element: FormatElement) { + self.buffer.write_element(element); } pub fn stop(self) -> Recorded<'buf> { diff --git a/crates/ruff_formatter/src/builders.rs b/crates/ruff_formatter/src/builders.rs index 9c5e41d9f5..fbc694af13 100644 --- a/crates/ruff_formatter/src/builders.rs +++ b/crates/ruff_formatter/src/builders.rs @@ -8,6 +8,7 @@ use ruff_text_size::TextRange; use std::cell::Cell; use std::marker::PhantomData; use std::num::NonZeroU8; +#[allow(clippy::enum_glob_use)] use Tag::*; /// A line break that only gets printed if the enclosing `Group` doesn't fit on a single line. @@ -34,7 +35,7 @@ use Tag::*; /// # Ok(()) /// # } /// ``` -/// See [soft_line_break_or_space] if you want to insert a space between the elements if the enclosing +/// See [`soft_line_break_or_space`] if you want to insert a space between the elements if the enclosing /// `Group` fits on a single line. /// /// Soft line breaks are emitted if the enclosing `Group` doesn't fit on a single line @@ -202,7 +203,8 @@ impl Line { impl Format for Line { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::Line(self.mode)) + f.write_element(FormatElement::Line(self.mode)); + Ok(()) } } @@ -217,7 +219,7 @@ impl std::fmt::Debug for Line { /// /// # Line feeds /// Tokens may contain line breaks but they must use the line feeds (`\n`). -/// The [crate::Printer] converts the line feed characters to the character specified in the [crate::PrinterOptions]. +/// The [`crate::Printer`] converts the line feed characters to the character specified in the [`crate::PrinterOptions`]. /// /// # Examples /// @@ -265,7 +267,8 @@ pub struct StaticText { impl Format for StaticText { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::StaticText { text: self.text }) + f.write_element(FormatElement::StaticText { text: self.text }); + Ok(()) } } @@ -325,7 +328,8 @@ pub struct SourcePosition(TextSize); impl Format for SourcePosition { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::SourcePosition(self.0)) + f.write_element(FormatElement::SourcePosition(self.0)); + Ok(()) } } @@ -345,12 +349,14 @@ pub struct DynamicText<'a> { impl Format for DynamicText<'_> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { if let Some(source_position) = self.position { - f.write_element(FormatElement::SourcePosition(source_position))?; + f.write_element(FormatElement::SourcePosition(source_position)); } f.write_element(FormatElement::DynamicText { text: self.text.to_string().into_boxed_str(), - }) + }); + + Ok(()) } } @@ -418,7 +424,9 @@ where f.write_element(FormatElement::SourceCodeSlice { slice, contains_newlines, - }) + }); + + Ok(()) } } @@ -465,9 +473,11 @@ pub struct LineSuffix<'a, Context> { impl Format for LineSuffix<'_, Context> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::Tag(StartLineSuffix))?; + f.write_element(FormatElement::Tag(StartLineSuffix)); Arguments::from(&self.content).fmt(f)?; - f.write_element(FormatElement::Tag(EndLineSuffix)) + f.write_element(FormatElement::Tag(EndLineSuffix)); + + Ok(()) } } @@ -512,7 +522,9 @@ pub struct LineSuffixBoundary; impl Format for LineSuffixBoundary { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::LineSuffixBoundary) + f.write_element(FormatElement::LineSuffixBoundary); + + Ok(()) } } @@ -520,7 +532,7 @@ impl Format for LineSuffixBoundary { /// /// This does not directly influence how this content will be printed, but some /// parts of the formatter may inspect the [labelled element](Tag::StartLabelled) -/// using [FormatElements::has_label]. +/// using [`FormatElements::has_label`]. /// /// ## Examples /// @@ -597,9 +609,11 @@ pub struct FormatLabelled<'a, Context> { impl Format for FormatLabelled<'_, Context> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::Tag(StartLabelled(self.label_id)))?; + f.write_element(FormatElement::Tag(StartLabelled(self.label_id))); Arguments::from(&self.content).fmt(f)?; - f.write_element(FormatElement::Tag(EndLabelled)) + f.write_element(FormatElement::Tag(EndLabelled)); + + Ok(()) } } @@ -638,7 +652,9 @@ pub struct Space; impl Format for Space { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::Space) + f.write_element(FormatElement::Space); + + Ok(()) } } @@ -648,7 +664,7 @@ impl Format for Space { /// the line breaks have to be manually added. /// /// This helper should be used only in rare cases, instead you should rely more on -/// [block_indent] and [soft_block_indent] +/// [`block_indent`] and [`soft_block_indent`] /// /// # Examples /// @@ -694,9 +710,11 @@ pub struct Indent<'a, Context> { impl Format for Indent<'_, Context> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::Tag(StartIndent))?; + f.write_element(FormatElement::Tag(StartIndent)); Arguments::from(&self.content).fmt(f)?; - f.write_element(FormatElement::Tag(EndIndent)) + f.write_element(FormatElement::Tag(EndIndent)); + + Ok(()) } } @@ -765,9 +783,11 @@ pub struct Dedent<'a, Context> { impl Format for Dedent<'_, Context> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::Tag(StartDedent(self.mode)))?; + f.write_element(FormatElement::Tag(StartDedent(self.mode))); Arguments::from(&self.content).fmt(f)?; - f.write_element(FormatElement::Tag(EndDedent)) + f.write_element(FormatElement::Tag(EndDedent)); + + Ok(()) } } @@ -950,9 +970,11 @@ pub struct Align<'a, Context> { impl Format for Align<'_, Context> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::Tag(StartAlign(tag::Align(self.count))))?; + f.write_element(FormatElement::Tag(StartAlign(tag::Align(self.count)))); Arguments::from(&self.content).fmt(f)?; - f.write_element(FormatElement::Tag(EndAlign)) + f.write_element(FormatElement::Tag(EndAlign)); + + Ok(()) } } @@ -970,7 +992,7 @@ impl std::fmt::Debug for Align<'_, Context> { /// Block indents indent a block of code, such as in a function body, and therefore insert a line /// break before and after the content. /// -/// Doesn't create an indention if the passed in content is [FormatElement.is_empty]. +/// Doesn't create an indention if the passed in content is [`FormatElement.is_empty`]. /// /// # Examples /// @@ -1170,13 +1192,13 @@ impl Format for BlockIndent<'_, Context> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { let snapshot = f.snapshot(); - f.write_element(FormatElement::Tag(StartIndent))?; + f.write_element(FormatElement::Tag(StartIndent)); match self.mode { IndentMode::Soft => write!(f, [soft_line_break()])?, IndentMode::Block => write!(f, [hard_line_break()])?, IndentMode::SoftLineOrSpace | IndentMode::SoftSpace => { - write!(f, [soft_line_break_or_space()])? + write!(f, [soft_line_break_or_space()])?; } } @@ -1191,7 +1213,7 @@ impl Format for BlockIndent<'_, Context> { return Ok(()); } - f.write_element(FormatElement::Tag(EndIndent))?; + f.write_element(FormatElement::Tag(EndIndent)); match self.mode { IndentMode::Soft => write!(f, [soft_line_break()]), @@ -1374,17 +1396,19 @@ pub struct Group<'a, Context> { } impl Group<'_, Context> { + #[must_use] pub fn with_group_id(mut self, group_id: Option) -> Self { self.group_id = group_id; self } - /// Changes the [PrintMode] of the group from [`Flat`](PrintMode::Flat) to [`Expanded`](PrintMode::Expanded). + /// Changes the [`PrintMode`] of the group from [`Flat`](PrintMode::Flat) to [`Expanded`](PrintMode::Expanded). /// The result is that any soft-line break gets printed as a regular line break. /// - /// This is useful for content rendered inside of a [FormatElement::BestFitting] that prints each variant - /// in [PrintMode::Flat] to change some content to be printed in [`Expanded`](PrintMode::Expanded) regardless. + /// This is useful for content rendered inside of a [`FormatElement::BestFitting`] that prints each variant + /// in [`PrintMode::Flat`] to change some content to be printed in [`Expanded`](PrintMode::Expanded) regardless. /// See the documentation of the [`best_fitting`] macro for an example. + #[must_use] pub fn should_expand(mut self, should_expand: bool) -> Self { self.should_expand = should_expand; self @@ -1393,18 +1417,21 @@ impl Group<'_, Context> { impl Format for Group<'_, Context> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - let mode = match self.should_expand { - true => GroupMode::Expand, - false => GroupMode::Flat, + let mode = if self.should_expand { + GroupMode::Expand + } else { + GroupMode::Flat }; f.write_element(FormatElement::Tag(StartGroup( tag::Group::new().with_id(self.group_id).with_mode(mode), - )))?; + ))); Arguments::from(&self.content).fmt(f)?; - f.write_element(FormatElement::Tag(EndGroup)) + f.write_element(FormatElement::Tag(EndGroup)); + + Ok(()) } } @@ -1532,9 +1559,11 @@ impl Format for ConditionalGroup<'_, Context> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { f.write_element(FormatElement::Tag(StartConditionalGroup( tag::ConditionalGroup::new(self.condition), - )))?; + ))); f.write_fmt(Arguments::from(&self.content))?; - f.write_element(FormatElement::Tag(EndConditionalGroup)) + f.write_element(FormatElement::Tag(EndConditionalGroup)); + + Ok(()) } } @@ -1592,7 +1621,9 @@ pub struct ExpandParent; impl Format for ExpandParent { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::ExpandParent) + f.write_element(FormatElement::ExpandParent); + + Ok(()) } } @@ -1602,7 +1633,7 @@ impl Format for ExpandParent { /// /// The element has no special meaning if used outside of a `Group`. In that case, the content is always emitted. /// -/// If you're looking for a way to only print something if the `Group` fits on a single line see [self::if_group_fits_on_line]. +/// If you're looking for a way to only print something if the `Group` fits on a single line see [`self::if_group_fits_on_line`]. /// /// # Examples /// @@ -1684,7 +1715,7 @@ where /// Adds a conditional content specific for `Group`s that fit on a single line. The content isn't /// emitted for `Group`s spanning multiple lines. /// -/// See [if_group_breaks] if you're looking for a way to print content only for groups spanning multiple lines. +/// See [`if_group_breaks`] if you're looking for a way to print content only for groups spanning multiple lines. /// /// # Examples /// @@ -1823,6 +1854,7 @@ impl IfGroupBreaks<'_, Context> { /// # Ok(()) /// # } /// ``` + #[must_use] pub fn with_group_id(mut self, group_id: Option) -> Self { self.group_id = group_id; self @@ -1833,9 +1865,11 @@ impl Format for IfGroupBreaks<'_, Context> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { f.write_element(FormatElement::Tag(StartConditionalContent( Condition::new(self.mode).with_group_id(self.group_id), - )))?; + ))); Arguments::from(&self.content).fmt(f)?; - f.write_element(FormatElement::Tag(EndConditionalContent)) + f.write_element(FormatElement::Tag(EndConditionalContent)); + + Ok(()) } } @@ -1855,7 +1889,7 @@ impl std::fmt::Debug for IfGroupBreaks<'_, Context> { /// Increases the indent level by one if the group with the specified id breaks. /// -/// This IR has the same semantics as using [if_group_breaks] and [if_group_fits_on_line] together. +/// This IR has the same semantics as using [`if_group_breaks`] and [`if_group_fits_on_line`] together. /// /// ``` /// # use ruff_formatter::prelude::*; @@ -1874,7 +1908,7 @@ impl std::fmt::Debug for IfGroupBreaks<'_, Context> { /// /// If you want to indent some content if the enclosing group breaks, use [`indent`]. /// -/// Use [if_group_breaks] or [if_group_fits_on_line] if the fitting and breaking content differs more than just the +/// Use [`if_group_breaks`] or [`if_group_fits_on_line`] if the fitting and breaking content differs more than just the /// indention level. /// /// # Examples @@ -1955,9 +1989,11 @@ pub struct IndentIfGroupBreaks<'a, Context> { impl Format for IndentIfGroupBreaks<'_, Context> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - f.write_element(FormatElement::Tag(StartIndentIfGroupBreaks(self.group_id)))?; + f.write_element(FormatElement::Tag(StartIndentIfGroupBreaks(self.group_id))); Arguments::from(&self.content).fmt(f)?; - f.write_element(FormatElement::Tag(EndIndentIfGroupBreaks)) + f.write_element(FormatElement::Tag(EndIndentIfGroupBreaks)); + + Ok(()) } } @@ -1972,7 +2008,7 @@ impl std::fmt::Debug for IndentIfGroupBreaks<'_, Context> { /// Changes the definition of *fits* for `content`. Instead of measuring it in *flat*, measure it with /// all line breaks expanded and test if no line exceeds the line width. The [`FitsExpanded`] acts -/// as a expands boundary similar to best fitting, meaning that a [hard_line_break] will not cause the parent group to expand. +/// as a expands boundary similar to best fitting, meaning that a [`hard_line_break`] will not cause the parent group to expand. /// /// Useful in conjunction with a group with a condition. /// @@ -2034,6 +2070,7 @@ pub struct FitsExpanded<'a, Context> { impl FitsExpanded<'_, Context> { /// Sets a `condition` to when the content should fit in expanded mode. The content uses the regular fits /// definition if the `condition` is not met. + #[must_use] pub fn with_condition(mut self, condition: Option) -> Self { self.condition = condition; self @@ -2044,9 +2081,11 @@ impl Format for FitsExpanded<'_, Context> { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { f.write_element(FormatElement::Tag(StartFitsExpanded( tag::FitsExpanded::new().with_condition(self.condition), - )))?; + ))); f.write_fmt(Arguments::from(&self.content))?; - f.write_element(FormatElement::Tag(EndFitsExpanded)) + f.write_element(FormatElement::Tag(EndFitsExpanded)); + + Ok(()) } } @@ -2061,7 +2100,7 @@ impl Format for FormatWith where T: Fn(&mut Formatter) -> FormatResult<()>, { - #[inline(always)] + #[inline] fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { (self.formatter)(f) } @@ -2207,7 +2246,7 @@ impl Format for FormatOnce where T: FnOnce(&mut Formatter) -> FormatResult<()>, { - #[inline(always)] + #[inline] fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { let formatter = self.formatter.take().expect("Tried to format a `format_once` at least twice. This is not allowed. You may want to use `format_with` or `format.memoized` instead."); @@ -2222,7 +2261,7 @@ impl std::fmt::Debug for FormatOnce { } /// Builder to join together a sequence of content. -/// See [Formatter::join] +/// See [`Formatter::join`] #[must_use = "must eventually call `finish()` on Format builders"] pub struct JoinBuilder<'fmt, 'buf, Separator, Context> { result: FormatResult<()>, @@ -2300,10 +2339,10 @@ pub struct FillBuilder<'fmt, 'buf, Context> { impl<'a, 'buf, Context> FillBuilder<'a, 'buf, Context> { pub(crate) fn new(fmt: &'a mut Formatter<'buf, Context>) -> Self { - let result = fmt.write_element(FormatElement::Tag(StartFill)); + fmt.write_element(FormatElement::Tag(StartFill)); Self { - result, + result: Ok(()), fmt, empty: true, } @@ -2332,14 +2371,15 @@ impl<'a, 'buf, Context> FillBuilder<'a, 'buf, Context> { if self.empty { self.empty = false; } else { - self.fmt.write_element(FormatElement::Tag(StartEntry))?; + self.fmt.write_element(FormatElement::Tag(StartEntry)); separator.fmt(self.fmt)?; - self.fmt.write_element(FormatElement::Tag(EndEntry))?; + self.fmt.write_element(FormatElement::Tag(EndEntry)); } - self.fmt.write_element(FormatElement::Tag(StartEntry))?; + self.fmt.write_element(FormatElement::Tag(StartEntry)); entry.fmt(self.fmt)?; - self.fmt.write_element(FormatElement::Tag(EndEntry)) + self.fmt.write_element(FormatElement::Tag(EndEntry)); + Ok(()) }); self @@ -2347,8 +2387,10 @@ impl<'a, 'buf, Context> FillBuilder<'a, 'buf, Context> { /// Finishes the output and returns any error encountered pub fn finish(&mut self) -> FormatResult<()> { + if self.result.is_ok() { + self.fmt.write_element(FormatElement::Tag(EndFill)); + } self.result - .and_then(|_| self.fmt.write_element(FormatElement::Tag(EndFill))) } } @@ -2367,7 +2409,9 @@ impl<'a, Context> BestFitting<'a, Context> { /// You're looking for a way to create a `BestFitting` object, use the `best_fitting![least_expanded, most_expanded]` macro. /// /// ## Safety + /// The slice must contain at least two variants. + #[allow(unsafe_code)] pub unsafe fn from_arguments_unchecked(variants: Arguments<'a, Context>) -> Self { assert!( variants.0.len() >= 2, @@ -2386,15 +2430,16 @@ impl Format for BestFitting<'_, Context> { let mut formatted_variants = Vec::with_capacity(variants.len()); for variant in variants { - buffer.write_element(FormatElement::Tag(StartEntry))?; + buffer.write_element(FormatElement::Tag(StartEntry)); buffer.write_fmt(Arguments::from(variant))?; - buffer.write_element(FormatElement::Tag(EndEntry))?; + buffer.write_element(FormatElement::Tag(EndEntry)); formatted_variants.push(buffer.take_vec().into_boxed_slice()); } // SAFETY: The constructor guarantees that there are always at least two variants. It's, therefore, // safe to call into the unsafe `from_vec_unchecked` function + #[allow(unsafe_code)] let element = unsafe { FormatElement::BestFitting { variants: format_element::BestFittingVariants::from_vec_unchecked( @@ -2403,6 +2448,8 @@ impl Format for BestFitting<'_, Context> { } }; - f.write_element(element) + f.write_element(element); + + Ok(()) } } diff --git a/crates/ruff_formatter/src/format_element.rs b/crates/ruff_formatter/src/format_element.rs index 7506c9cb75..5598f103e1 100644 --- a/crates/ruff_formatter/src/format_element.rs +++ b/crates/ruff_formatter/src/format_element.rs @@ -13,7 +13,7 @@ use ruff_text_size::TextSize; /// Language agnostic IR for formatting source code. /// -/// Use the helper functions like [crate::builders::space], [crate::builders::soft_line_break] etc. defined in this file to create elements. +/// Use the helper functions like [`crate::builders::space`], [`crate::builders::soft_line_break`] etc. defined in this file to create elements. #[derive(Clone, Eq, PartialEq)] pub enum FormatElement { /// A space token, see [crate::builders::space] for documentation. @@ -88,9 +88,7 @@ impl std::fmt::Debug for FormatElement { .debug_struct("BestFitting") .field("variants", variants) .finish(), - FormatElement::Interned(interned) => { - fmt.debug_list().entries(interned.deref()).finish() - } + FormatElement::Interned(interned) => fmt.debug_list().entries(&**interned).finish(), FormatElement::Tag(tag) => fmt.debug_tuple("Tag").field(tag).finish(), FormatElement::SourcePosition(position) => { fmt.debug_tuple("SourcePosition").field(position).finish() @@ -180,7 +178,7 @@ impl Deref for Interned { type Target = [FormatElement]; fn deref(&self) -> &Self::Target { - self.0.deref() + &self.0 } } @@ -217,12 +215,12 @@ pub fn normalize_newlines(text: &str, terminators: [char; N]) -> } impl FormatElement { - /// Returns `true` if self is a [FormatElement::Tag] + /// Returns `true` if self is a [`FormatElement::Tag`] pub const fn is_tag(&self) -> bool { matches!(self, FormatElement::Tag(_)) } - /// Returns `true` if self is a [FormatElement::Tag] and [Tag::is_start] is `true`. + /// Returns `true` if self is a [`FormatElement::Tag`] and [`Tag::is_start`] is `true`. pub const fn is_start_tag(&self) -> bool { match self { FormatElement::Tag(tag) => tag.is_start(), @@ -230,7 +228,7 @@ impl FormatElement { } } - /// Returns `true` if self is a [FormatElement::Tag] and [Tag::is_end] is `true`. + /// Returns `true` if self is a [`FormatElement::Tag`] and [`Tag::is_end`] is `true`. pub const fn is_end_tag(&self) -> bool { match self { FormatElement::Tag(tag) => tag.is_end(), @@ -313,6 +311,7 @@ impl BestFittingVariants { /// ## Safety /// The slice must contain at least two variants. #[doc(hidden)] + #[allow(unsafe_code)] pub unsafe fn from_vec_unchecked(variants: Vec>) -> Self { debug_assert!( variants.len() >= 2, @@ -359,9 +358,9 @@ impl<'a> IntoIterator for &'a BestFittingVariants { } pub trait FormatElements { - /// Returns true if this [FormatElement] is guaranteed to break across multiple lines by the printer. + /// Returns true if this [`FormatElement`] is guaranteed to break across multiple lines by the printer. /// This is the case if this format element recursively contains a: - /// - [crate::builders::empty_line] or [crate::builders::hard_line_break] + /// - [`crate::builders::empty_line`] or [`crate::builders::hard_line_break`] /// - A token containing '\n' /// /// Use this with caution, this is only a heuristic and the printer may print the element over multiple diff --git a/crates/ruff_formatter/src/format_element/document.rs b/crates/ruff_formatter/src/format_element/document.rs index c645b7d49c..2ce0d041d0 100644 --- a/crates/ruff_formatter/src/format_element/document.rs +++ b/crates/ruff_formatter/src/format_element/document.rs @@ -21,9 +21,9 @@ pub struct Document { impl Document { /// Sets [`expand`](tag::Group::expand) to [`GroupMode::Propagated`] if the group contains any of: - /// - a group with [`expand`](tag::Group::expand) set to [GroupMode::Propagated] or [GroupMode::Expand]. - /// - a non-soft [line break](FormatElement::Line) with mode [LineMode::Hard], [LineMode::Empty], or [LineMode::Literal]. - /// - a [FormatElement::ExpandParent] + /// - a group with [`expand`](tag::Group::expand) set to [`GroupMode::Propagated`] or [`GroupMode::Expand`]. + /// - a non-soft [line break](FormatElement::Line) with mode [`LineMode::Hard`], [`LineMode::Empty`], or [`LineMode::Literal`]. + /// - a [`FormatElement::ExpandParent`] /// /// [`BestFitting`] elements act as expand boundaries, meaning that the fact that a /// [`BestFitting`]'s content expands is not propagated past the [`BestFitting`] element. @@ -71,15 +71,16 @@ impl Document { Some(Enclosing::ConditionalGroup(group)) => !group.mode().is_flat(), _ => false, }, - FormatElement::Interned(interned) => match checked_interned.get(interned) { - Some(interned_expands) => *interned_expands, - None => { + FormatElement::Interned(interned) => { + if let Some(interned_expands) = checked_interned.get(interned) { + *interned_expands + } else { let interned_expands = propagate_expands(interned, enclosing, checked_interned); checked_interned.insert(interned, interned_expands); interned_expands } - }, + } FormatElement::BestFitting { variants } => { enclosing.push(Enclosing::BestFitting); @@ -114,7 +115,7 @@ impl Document { if element_expands { expands = true; - expand_parent(enclosing) + expand_parent(enclosing); } } @@ -226,6 +227,7 @@ impl FormatOptions for IrFormatOptions { impl Format> for &[FormatElement] { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { + #[allow(clippy::enum_glob_use)] use Tag::*; write!(f, [ContentArrayStart])?; @@ -245,20 +247,11 @@ impl Format> for &[FormatElement] { first_element = false; match element { - element @ FormatElement::Space - | element @ FormatElement::StaticText { .. } - | element @ FormatElement::DynamicText { .. } - | element @ FormatElement::SourceCodeSlice { .. } => { - if !in_text { - write!(f, [text("\"")])?; - } - - in_text = true; - - fn write_escaped( - element: &FormatElement, - f: &mut Formatter, - ) -> FormatResult<()> { + element @ (FormatElement::Space + | FormatElement::StaticText { .. } + | FormatElement::DynamicText { .. } + | FormatElement::SourceCodeSlice { .. }) => { + fn write_escaped(element: &FormatElement, f: &mut Formatter) { let text = match element { FormatElement::StaticText { text } => text, FormatElement::DynamicText { text } => text.as_ref(), @@ -271,18 +264,24 @@ impl Format> for &[FormatElement] { if text.contains('"') { f.write_element(FormatElement::DynamicText { text: text.replace('"', r#"\""#).into(), - }) + }); } else { - f.write_element(element.clone()) + f.write_element(element.clone()); } } + if !in_text { + write!(f, [text("\"")])?; + } + + in_text = true; + match element { FormatElement::Space => { write!(f, [text(" ")])?; } element if element.is_text() => { - write_escaped(element, f)?; + write_escaped(element, f); } _ => unreachable!(), } @@ -317,7 +316,7 @@ impl Format> for &[FormatElement] { write!( f, [dynamic_text( - &std::format!("source_position({:?})", position), + &std::format!("source_position({position:?})"), None )] )?; @@ -332,16 +331,16 @@ impl Format> for &[FormatElement] { f.write_elements([ FormatElement::Tag(StartIndent), FormatElement::Line(LineMode::Hard), - ])?; + ]); for variant in variants { - write!(f, [variant.deref(), hard_line_break()])?; + write!(f, [&**variant, hard_line_break()])?; } f.write_elements([ FormatElement::Tag(EndIndent), FormatElement::Line(LineMode::Hard), - ])?; + ]); write!(f, [text("])")])?; } @@ -359,7 +358,7 @@ impl Format> for &[FormatElement] { [ dynamic_text(&std::format!(""), None), space(), - &interned.deref(), + &&**interned, ] )?; } @@ -621,7 +620,7 @@ struct ContentArrayStart; impl Format> for ContentArrayStart { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - use Tag::*; + use Tag::{StartGroup, StartIndent}; write!(f, [text("[")])?; @@ -629,7 +628,9 @@ impl Format> for ContentArrayStart { FormatElement::Tag(StartGroup(tag::Group::new())), FormatElement::Tag(StartIndent), FormatElement::Line(LineMode::Soft), - ]) + ]); + + Ok(()) } } @@ -637,12 +638,12 @@ struct ContentArrayEnd; impl Format> for ContentArrayEnd { fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - use Tag::*; + use Tag::{EndGroup, EndIndent}; f.write_elements([ FormatElement::Tag(EndIndent), FormatElement::Line(LineMode::Soft), FormatElement::Tag(EndGroup), - ])?; + ]); write!(f, [text("]")]) } @@ -650,7 +651,7 @@ impl Format> for ContentArrayEnd { impl FormatElements for [FormatElement] { fn will_break(&self) -> bool { - use Tag::*; + use Tag::{EndLineSuffix, StartLineSuffix}; let mut ignore_depth = 0usize; for element in self { @@ -687,9 +688,6 @@ impl FormatElements for [FormatElement] { } fn start_tag(&self, kind: TagKind) -> Option<&Tag> { - // Assert that the document ends at a tag with the specified kind; - let _ = self.end_tag(kind)?; - fn traverse_slice<'a>( slice: &'a [FormatElement], kind: TagKind, @@ -704,9 +702,8 @@ impl FormatElements for [FormatElement] { return None; } else if *depth == 1 { return Some(tag); - } else { - *depth -= 1; } + *depth -= 1; } else { *depth += 1; } @@ -731,6 +728,8 @@ impl FormatElements for [FormatElement] { None } + // Assert that the document ends at a tag with the specified kind; + let _ = self.end_tag(kind)?; let mut depth = 0usize; diff --git a/crates/ruff_formatter/src/format_element/tag.rs b/crates/ruff_formatter/src/format_element/tag.rs index f586cc8b1c..91609b82c4 100644 --- a/crates/ruff_formatter/src/format_element/tag.rs +++ b/crates/ruff_formatter/src/format_element/tag.rs @@ -109,6 +109,7 @@ impl Tag { } pub const fn kind(&self) -> TagKind { + #[allow(clippy::enum_glob_use)] use Tag::*; match self { @@ -180,13 +181,14 @@ impl FitsExpanded { Self::default() } + #[must_use] pub fn with_condition(mut self, condition: Option) -> Self { self.condition = condition; self } pub fn propagate_expand(&self) { - self.propagate_expand.set(true) + self.propagate_expand.set(true); } } @@ -204,11 +206,13 @@ impl Group { } } + #[must_use] pub fn with_id(mut self, id: Option) -> Self { self.id = id; self } + #[must_use] pub fn with_mode(mut self, mode: GroupMode) -> Self { self.mode = Cell::new(mode); self @@ -220,7 +224,7 @@ impl Group { pub fn propagate_expand(&self) { if self.mode.get() == GroupMode::Flat { - self.mode.set(GroupMode::Propagated) + self.mode.set(GroupMode::Propagated); } } @@ -248,7 +252,7 @@ impl ConditionalGroup { } pub fn propagate_expand(&self) { - self.mode.set(GroupMode::Propagated) + self.mode.set(GroupMode::Propagated); } pub fn mode(&self) -> GroupMode { @@ -312,6 +316,7 @@ impl Condition { } } + #[must_use] pub fn with_group_id(mut self, id: Option) -> Self { self.group_id = id; self @@ -350,6 +355,7 @@ impl PartialEq for LabelId { } impl LabelId { + #[allow(clippy::needless_pass_by_value)] pub fn of(label: T) -> Self { Self { value: label.value(), diff --git a/crates/ruff_formatter/src/format_extensions.rs b/crates/ruff_formatter/src/format_extensions.rs index cde30df58a..b1fb33d6b6 100644 --- a/crates/ruff_formatter/src/format_extensions.rs +++ b/crates/ruff_formatter/src/format_extensions.rs @@ -3,7 +3,6 @@ use crate::prelude::*; use std::cell::RefCell; use std::marker::PhantomData; -use std::ops::Deref; use crate::Buffer; @@ -149,7 +148,7 @@ where .get_or_insert_with(|| f.intern(&self.inner)); match result.as_ref() { - Ok(Some(FormatElement::Interned(interned))) => Ok(interned.deref()), + Ok(Some(FormatElement::Interned(interned))) => Ok(&**interned), Ok(Some(other)) => Ok(std::slice::from_ref(other)), Ok(None) => Ok(&[]), Err(error) => Err(*error), @@ -167,7 +166,7 @@ where match result { Ok(Some(elements)) => { - f.write_element(elements.clone())?; + f.write_element(elements.clone()); Ok(()) } diff --git a/crates/ruff_formatter/src/formatter.rs b/crates/ruff_formatter/src/formatter.rs index 2f32010902..9a43635807 100644 --- a/crates/ruff_formatter/src/formatter.rs +++ b/crates/ruff_formatter/src/formatter.rs @@ -35,7 +35,7 @@ impl<'buf, Context> Formatter<'buf, Context> { } /// Creates a new group id that is unique to this document. The passed debug name is used in the - /// [std::fmt::Debug] of the document if this is a debug build. + /// [`std::fmt::Debug`] of the document if this is a debug build. /// The name is unused for production builds and has no meaning on the equality of two group ids. pub fn group_id(&self, debug_name: &'static str) -> GroupId { self.state().group_id(debug_name) @@ -108,7 +108,7 @@ impl<'buf, Context> Formatter<'buf, Context> { JoinBuilder::with_separator(self, joiner) } - /// Concatenates a list of [crate::Format] objects with spaces and line breaks to fit + /// Concatenates a list of [`crate::Format`] objects with spaces and line breaks to fit /// them on as few lines as possible. Each element introduces a conceptual group. The printer /// first tries to print the item in flat mode but then prints it in expanded mode if it doesn't fit. /// @@ -205,16 +205,16 @@ where impl Buffer for Formatter<'_, Context> { type Context = Context; - #[inline(always)] - fn write_element(&mut self, element: FormatElement) -> FormatResult<()> { - self.buffer.write_element(element) + #[inline] + fn write_element(&mut self, element: FormatElement) { + self.buffer.write_element(element); } fn elements(&self) -> &[FormatElement] { self.buffer.elements() } - #[inline(always)] + #[inline] fn write_fmt(&mut self, arguments: Arguments) -> FormatResult<()> { for argument in arguments.items() { argument.format(self)?; @@ -235,7 +235,7 @@ impl Buffer for Formatter<'_, Context> { } fn restore_snapshot(&mut self, snapshot: BufferSnapshot) { - self.buffer.restore_snapshot(snapshot) + self.buffer.restore_snapshot(snapshot); } } diff --git a/crates/ruff_formatter/src/group_id.rs b/crates/ruff_formatter/src/group_id.rs index 8f06ae8e37..aa910dd1f3 100644 --- a/crates/ruff_formatter/src/group_id.rs +++ b/crates/ruff_formatter/src/group_id.rs @@ -25,7 +25,7 @@ impl std::fmt::Debug for DebugGroupId { /// Unique identification for a group. /// -/// See [crate::Formatter::group_id] on how to get a unique id. +/// See [`crate::Formatter::group_id`] on how to get a unique id. #[repr(transparent)] #[derive(Clone, Copy, Eq, PartialEq, Hash)] pub struct ReleaseGroupId { diff --git a/crates/ruff_formatter/src/lib.rs b/crates/ruff_formatter/src/lib.rs index 9034e271d9..475259c52b 100644 --- a/crates/ruff_formatter/src/lib.rs +++ b/crates/ruff_formatter/src/lib.rs @@ -1,15 +1,15 @@ //! Infrastructure for code formatting //! -//! This module defines [FormatElement], an IR to format code documents and provides a mean to print +//! This module defines [`FormatElement`], an IR to format code documents and provides a mean to print //! such a document to a string. Objects that know how to format themselves implement the [Format] trait. //! //! ## Formatting Traits //! //! * [Format]: Implemented by objects that can be formatted. -//! * [FormatRule]: Rule that knows how to format an object of another type. Necessary in the situation where +//! * [`FormatRule`]: Rule that knows how to format an object of another type. Necessary in the situation where //! it's necessary to implement [Format] on an object from another crate. This module defines the -//! [FormatRefWithRule] and [FormatOwnedWithRule] structs to pass an item with its corresponding rule. -//! * [FormatWithRule] implemented by objects that know how to format another type. Useful for implementing +//! [`FormatRefWithRule`] and [`FormatOwnedWithRule`] structs to pass an item with its corresponding rule. +//! * [`FormatWithRule`] implemented by objects that know how to format another type. Useful for implementing //! some reusable formatting logic inside of this module if the type itself doesn't implement [Format] //! //! ## Formatting Macros @@ -19,9 +19,6 @@ //! * [`format_args!`]: Concatenates a sequence of Format objects. //! * [`write!`]: Writes a sequence of formatable objects into an output buffer. -#![allow(clippy::pedantic, unsafe_code)] -#![deny(rustdoc::broken_intra_doc_links)] - mod arguments; mod buffer; mod builders; @@ -45,8 +42,7 @@ use crate::format_element::document::Document; use crate::printer::{Printer, PrinterOptions}; pub use arguments::{Argument, Arguments}; pub use buffer::{ - Buffer, BufferExtensions, BufferSnapshot, Inspect, PreambleBuffer, RemoveSoftLinesBuffer, - VecBuffer, + Buffer, BufferExtensions, BufferSnapshot, Inspect, RemoveSoftLinesBuffer, VecBuffer, }; pub use builders::BestFitting; pub use source_code::{SourceCode, SourceCodeSlice}; @@ -73,12 +69,12 @@ pub enum IndentStyle { impl IndentStyle { pub const DEFAULT_SPACES: u8 = 2; - /// Returns `true` if this is an [IndentStyle::Tab]. + /// Returns `true` if this is an [`IndentStyle::Tab`]. pub const fn is_tab(&self) -> bool { matches!(self, IndentStyle::Tab) } - /// Returns `true` if this is an [IndentStyle::Space]. + /// Returns `true` if this is an [`IndentStyle::Space`]. pub const fn is_space(&self) -> bool { matches!(self, IndentStyle::Space(_)) } @@ -92,7 +88,13 @@ impl FromStr for IndentStyle { "tab" | "Tabs" => Ok(Self::Tab), "space" | "Spaces" => Ok(Self::Space(IndentStyle::DEFAULT_SPACES)), // TODO: replace this error with a diagnostic - _ => Err("Value not supported for IndentStyle"), + v => { + let v = v.strip_prefix("Spaces, size: ").unwrap_or(v); + + u8::from_str(v) + .map(Self::Space) + .map_err(|_| "Value not supported for IndentStyle") + } } } } @@ -115,10 +117,10 @@ impl std::fmt::Display for IndentStyle { pub struct LineWidth(u16); impl LineWidth { - /// Maximum allowed value for a valid [LineWidth] + /// Maximum allowed value for a valid [`LineWidth`] pub const MAX: u16 = 320; - /// Return the numeric value for this [LineWidth] + /// Return the numeric value for this [`LineWidth`] pub fn value(&self) -> u16 { self.0 } @@ -130,7 +132,7 @@ impl Default for LineWidth { } } -/// Error type returned when parsing a [LineWidth] from a string fails +/// Error type returned when parsing a [`LineWidth`] from a string fails pub enum ParseLineWidthError { /// The string could not be parsed as a valid [u16] ParseError(ParseIntError), @@ -163,7 +165,7 @@ impl FromStr for LineWidth { } } -/// Error type returned when converting a u16 to a [LineWidth] fails +/// Error type returned when converting a u16 to a [`LineWidth`] fails #[derive(Clone, Copy, Debug)] pub struct LineWidthFromIntError(pub u16); @@ -232,6 +234,7 @@ impl SimpleFormatContext { } } + #[must_use] pub fn with_source_code(mut self, code: &str) -> Self { self.source_code = String::from(code); self @@ -315,20 +318,20 @@ where Context: FormatContext, { pub fn print(&self) -> PrintResult { - let source_code = self.context.source_code(); - let print_options = self.context.options().as_print_options(); - let printed = Printer::new(source_code, print_options).print(&self.document)?; - - Ok(printed) + let printer = self.create_printer(); + printer.print(&self.document) } pub fn print_with_indent(&self, indent: u16) -> PrintResult { + let printer = self.create_printer(); + printer.print_with_indent(&self.document, indent) + } + + fn create_printer(&self) -> Printer { let source_code = self.context.source_code(); let print_options = self.context.options().as_print_options(); - let printed = - Printer::new(source_code, print_options).print_with_indent(&self.document, indent)?; - Ok(printed) + Printer::new(source_code, print_options) } } @@ -384,20 +387,20 @@ impl Printed { self.range } - /// Returns a list of [SourceMarker] mapping byte positions + /// Returns a list of [`SourceMarker`] mapping byte positions /// in the output string to the input source code. /// It's not guaranteed that the markers are sorted by source position. pub fn sourcemap(&self) -> &[SourceMarker] { &self.sourcemap } - /// Returns a list of [SourceMarker] mapping byte positions + /// Returns a list of [`SourceMarker`] mapping byte positions /// in the output string to the input source code, consuming the result pub fn into_sourcemap(self) -> Vec { self.sourcemap } - /// Takes the list of [SourceMarker] mapping byte positions in the output string + /// Takes the list of [`SourceMarker`] mapping byte positions in the output string /// to the input source code. pub fn take_sourcemap(&mut self) -> Vec { std::mem::take(&mut self.sourcemap) @@ -435,7 +438,7 @@ impl Printed { pub type FormatResult = Result; /// Formatting trait for types that can create a formatted representation. The `ruff_formatter` equivalent -/// to [std::fmt::Display]. +/// to [`std::fmt::Display`]. /// /// ## Example /// Implementing `Format` for a custom struct @@ -474,7 +477,7 @@ impl Format for &T where T: ?Sized + Format, { - #[inline(always)] + #[inline] fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { Format::fmt(&**self, f) } @@ -484,7 +487,7 @@ impl Format for &mut T where T: ?Sized + Format, { - #[inline(always)] + #[inline] fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { Format::fmt(&**self, f) } @@ -512,7 +515,7 @@ impl Format for () { /// Rule that knows how to format an object of type `T`. /// -/// Implementing [Format] on the object itself is preferred over implementing [FormatRule] but +/// Implementing [Format] on the object itself is preferred over implementing [`FormatRule`] but /// this isn't possible inside of a dependent crate for external type. /// /// For example, the `ruff_js_formatter` crate isn't able to implement [Format] on `JsIfStatement` @@ -529,6 +532,7 @@ pub trait FormatRuleWithOptions: FormatRule { type Options; /// Returns a new rule that uses the given options to format an object. + #[must_use] fn with_options(self, options: Self::Options) -> Self; } @@ -541,9 +545,9 @@ pub trait FormatRuleWithOptions: FormatRule { /// /// ## Examples /// -/// This can be useful if you want to format a `SyntaxNode` inside ruff_formatter.. `SyntaxNode` doesn't implement [Format] +/// This can be useful if you want to format a `SyntaxNode` inside `ruff_formatter`.. `SyntaxNode` doesn't implement [Format] /// itself but the language specific crate implements `AsFormat` and `IntoFormat` for it and the returned [Format] -/// implement [FormatWithRule]. +/// implement [`FormatWithRule`]. /// /// ```ignore /// use ruff_formatter::prelude::*; @@ -591,6 +595,7 @@ impl FormatRefWithRule<'_, T, R, C> where R: FormatRuleWithOptions, { + #[must_use] pub fn with_options(mut self, options: O) -> Self { self.rule = self.rule.with_options(options); self @@ -612,7 +617,7 @@ impl Format for FormatRefWithRule<'_, T, R, C> where R: FormatRule, { - #[inline(always)] + #[inline] fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { self.rule.fmt(self.item, f) } @@ -641,6 +646,7 @@ where } } + #[must_use] pub fn with_item(mut self, item: T) -> Self { self.item = item; self @@ -655,7 +661,7 @@ impl Format for FormatOwnedWithRule where R: FormatRule, { - #[inline(always)] + #[inline] fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { self.rule.fmt(&self.item, f) } @@ -665,6 +671,7 @@ impl FormatOwnedWithRule where R: FormatRuleWithOptions, { + #[must_use] pub fn with_options(mut self, options: O) -> Self { self.rule = self.rule.with_options(options); self @@ -723,7 +730,7 @@ where /// # Ok(()) /// # } /// ``` -#[inline(always)] +#[inline] pub fn write( output: &mut dyn Buffer, args: Arguments, @@ -771,8 +778,13 @@ pub fn format( where Context: FormatContext, { + let source_length = context.source_code().as_str().len(); + // Use a simple heuristic to guess the number of expected format elements. + // See [#6612](https://github.com/astral-sh/ruff/pull/6612) for more details on how the formula was determined. Changes to our formatter, or supporting + // more languages may require fine tuning the formula. + let estimated_buffer_size = source_length / 2; let mut state = FormatState::new(context); - let mut buffer = VecBuffer::with_capacity(arguments.items().len(), &mut state); + let mut buffer = VecBuffer::with_capacity(estimated_buffer_size, &mut state); buffer.write_fmt(arguments)?; @@ -784,9 +796,9 @@ where /// This structure stores the state that is relevant for the formatting of the whole document. /// -/// This structure is different from [crate::Formatter] in that the formatting infrastructure -/// creates a new [crate::Formatter] for every [crate::write!] call, whereas this structure stays alive -/// for the whole process of formatting a root with [crate::format!]. +/// This structure is different from [`crate::Formatter`] in that the formatting infrastructure +/// creates a new [`crate::Formatter`] for every [`crate::write`!] call, whereas this structure stays alive +/// for the whole process of formatting a root with [`crate::format`!]. pub struct FormatState { context: Context, @@ -809,7 +821,7 @@ impl FormatState { pub fn new(context: Context) -> Self { Self { context, - group_id_builder: Default::default(), + group_id_builder: UniqueGroupIdBuilder::default(), } } @@ -828,7 +840,7 @@ impl FormatState { } /// Creates a new group id that is unique to this document. The passed debug name is used in the - /// [std::fmt::Debug] of the document if this is a debug build. + /// [`std::fmt::Debug`] of the document if this is a debug build. /// The name is unused for production builds and has no meaning on the equality of two group ids. pub fn group_id(&self, debug_name: &'static str) -> GroupId { self.group_id_builder.group_id(debug_name) diff --git a/crates/ruff_formatter/src/macros.rs b/crates/ruff_formatter/src/macros.rs index 4f5bcdf050..44ee89a43b 100644 --- a/crates/ruff_formatter/src/macros.rs +++ b/crates/ruff_formatter/src/macros.rs @@ -1,9 +1,9 @@ /// Constructs the parameters for other formatting macros. /// -/// This macro functions by taking a list of objects implementing [crate::Format]. It canonicalize the +/// This macro functions by taking a list of objects implementing [`crate::Format`]. It canonicalize the /// arguments into a single type. /// -/// This macro produces a value of type [crate::Arguments]. This value can be passed to +/// This macro produces a value of type [`crate::Arguments`]. This value can be passed to /// the macros within [crate]. All other formatting macros ([`format!`](crate::format!), /// [`write!`](crate::write!)) are proxied through this one. This macro avoids heap allocations. /// @@ -41,7 +41,7 @@ macro_rules! format_args { /// /// This macro accepts a 'buffer' and a list of format arguments. Each argument will be formatted /// and the result will be passed to the buffer. The writer may be any value with a `write_fmt` method; -/// generally this comes from an implementation of the [crate::Buffer] trait. +/// generally this comes from an implementation of the [`crate::Buffer`] trait. /// /// # Examples /// @@ -116,8 +116,8 @@ macro_rules! dbg_write { /// Creates the Format IR for a value. /// -/// The first argument `format!` receives is the [crate::FormatContext] that specify how elements must be formatted. -/// Additional parameters passed get formatted by using their [crate::Format] implementation. +/// The first argument `format!` receives is the [`crate::FormatContext`] that specify how elements must be formatted. +/// Additional parameters passed get formatted by using their [`crate::Format`] implementation. /// /// /// ## Examples @@ -314,13 +314,13 @@ macro_rules! format { /// ## Behavior /// This IR is similar to Prettier's `conditionalGroup`. The printer measures each variant, except the [`MostExpanded`], in [`Flat`] mode /// to find the first variant that fits and prints this variant in [`Flat`] mode. If no variant fits, then -/// the printer falls back to printing the [`MostExpanded`] variant in `[`Expanded`] mode. +/// the printer falls back to printing the [`MostExpanded`] variant in [`Expanded`] mode. /// /// The definition of *fits* differs to groups in that the printer only tests if it is possible to print /// the content up to the first non-soft line break without exceeding the configured print width. /// This definition differs from groups as that non-soft line breaks make group expand. /// -/// [crate::BestFitting] acts as a "break" boundary, meaning that it is considered to fit +/// [`crate::BestFitting`] acts as a "break" boundary, meaning that it is considered to fit /// /// /// [`Flat`]: crate::format_element::PrintMode::Flat @@ -329,6 +329,7 @@ macro_rules! format { #[macro_export] macro_rules! best_fitting { ($least_expanded:expr, $($tail:expr),+ $(,)?) => {{ + #[allow(unsafe_code)] unsafe { $crate::BestFitting::from_arguments_unchecked($crate::format_args!($least_expanded, $($tail),+)) } diff --git a/crates/ruff_formatter/src/printer/call_stack.rs b/crates/ruff_formatter/src/printer/call_stack.rs index a262f210a7..858510ae7f 100644 --- a/crates/ruff_formatter/src/printer/call_stack.rs +++ b/crates/ruff_formatter/src/printer/call_stack.rs @@ -20,10 +20,10 @@ pub(super) struct StackFrame { /// Stores arguments passed to `print_element` call, holding the state specific to printing an element. /// E.g. the `indent` depends on the token the Printer's currently processing. That's why -/// it must be stored outside of the [PrinterState] that stores the state common to all elements. +/// it must be stored outside of the [`PrinterState`] that stores the state common to all elements. /// /// The state is passed by value, which is why it's important that it isn't storing any heavy -/// data structures. Such structures should be stored on the [PrinterState] instead. +/// data structures. Such structures should be stored on the [`PrinterState`] instead. #[derive(Debug, Copy, Clone, Eq, PartialEq)] pub(super) struct PrintElementArgs { indent: Indention, @@ -39,15 +39,15 @@ impl PrintElementArgs { } } - pub(super) fn mode(&self) -> PrintMode { + pub(super) fn mode(self) -> PrintMode { self.mode } - pub(super) fn measure_mode(&self) -> MeasureMode { + pub(super) fn measure_mode(self) -> MeasureMode { self.measure_mode } - pub(super) fn indention(&self) -> Indention { + pub(super) fn indention(self) -> Indention { self.indent } @@ -92,9 +92,9 @@ impl Default for PrintElementArgs { } } -/// Call stack that stores the [PrintElementCallArgs]. +/// Call stack that stores the [`PrintElementCallArgs`]. /// -/// New [PrintElementCallArgs] are pushed onto the stack for every [`start`](Tag::is_start) [`Tag`](FormatElement::Tag) +/// New [`PrintElementCallArgs`] are pushed onto the stack for every [`start`](Tag::is_start) [`Tag`](FormatElement::Tag) /// and popped when reaching the corresponding [`end`](Tag::is_end) [`Tag`](FormatElement::Tag). pub(super) trait CallStack { type Stack: Stack + Debug; @@ -158,7 +158,7 @@ pub(super) trait CallStack { } } - /// Returns the [PrintElementArgs] for the current stack frame. + /// Returns the [`PrintElementArgs`] for the current stack frame. fn top(&self) -> PrintElementArgs { self.stack() .top() @@ -166,7 +166,7 @@ pub(super) trait CallStack { .args } - /// Returns the [TagKind] of the current stack frame or [None] if this is the root stack frame. + /// Returns the [`TagKind`] of the current stack frame or [None] if this is the root stack frame. fn top_kind(&self) -> Option { match self .stack() @@ -179,16 +179,16 @@ pub(super) trait CallStack { } } - /// Creates a new stack frame for a [FormatElement::Tag] of `kind` with `args` as the call arguments. + /// Creates a new stack frame for a [`FormatElement::Tag`] of `kind` with `args` as the call arguments. fn push(&mut self, kind: TagKind, args: PrintElementArgs) { self.stack_mut().push(StackFrame { kind: StackFrameKind::Tag(kind), args, - }) + }); } } -/// Call stack used for printing the [FormatElement]s +/// Call stack used for printing the [`FormatElement`]s #[derive(Debug, Clone)] pub(super) struct PrintCallStack(Vec); @@ -215,7 +215,7 @@ impl CallStack for PrintCallStack { /// Call stack used for measuring if some content fits on the line. /// -/// The stack is a view on top of the [PrintCallStack] because the stack frames are still necessary for printing. +/// The stack is a view on top of the [`PrintCallStack`] because the stack frames are still necessary for printing. #[must_use] pub(super) struct FitsCallStack<'print> { stack: StackedStack<'print, StackFrame>, diff --git a/crates/ruff_formatter/src/printer/mod.rs b/crates/ruff_formatter/src/printer/mod.rs index b31260147d..f65eb6fdf3 100644 --- a/crates/ruff_formatter/src/printer/mod.rs +++ b/crates/ruff_formatter/src/printer/mod.rs @@ -40,7 +40,7 @@ impl<'a> Printer<'a> { Self { source_code, options, - state: PrinterState::default(), + state: PrinterState::with_capacity(source_code.as_str().len()), } } @@ -84,6 +84,7 @@ impl<'a> Printer<'a> { queue: &mut PrintQueue<'a>, element: &'a FormatElement, ) -> PrintResult<()> { + #[allow(clippy::enum_glob_use)] use Tag::*; let args = stack.top(); @@ -94,7 +95,7 @@ impl<'a> Printer<'a> { FormatElement::DynamicText { text } => self.print_text(text, None), FormatElement::SourceCodeSlice { slice, .. } => { let text = slice.text(self.source_code); - self.print_text(text, Some(slice.range())) + self.print_text(text, Some(slice.range())); } FormatElement::Line(line_mode) => { if args.mode().is_flat() @@ -221,6 +222,8 @@ impl<'a> Printer<'a> { FormatElement::Tag(StartVerbatim(kind)) => { if let VerbatimKind::Verbatim { length } = kind { + // SAFETY: Ruff only supports formatting files <= 4GB + #[allow(clippy::cast_possible_truncation)] self.state.verbatim_markers.push(TextRange::at( TextSize::from(self.state.buffer.len() as u32), *length, @@ -291,7 +294,7 @@ impl<'a> Printer<'a> { kind: TagKind, mode: GroupMode, args: PrintElementArgs, - queue: &mut PrintQueue<'a>, + queue: &PrintQueue<'a>, stack: &mut PrintCallStack, ) -> PrintResult { let group_mode = match mode { @@ -384,7 +387,7 @@ impl<'a> Printer<'a> { if let Some(last) = self.state.source_markers.last() { if last != &marker { - self.state.source_markers.push(marker) + self.state.source_markers.push(marker); } } else { self.state.source_markers.push(marker); @@ -411,10 +414,11 @@ impl<'a> Printer<'a> { queue.push(suffix); } LineSuffixEntry::Args(args) => { - stack.push(TagKind::LineSuffix, args); const LINE_SUFFIX_END: &FormatElement = &FormatElement::Tag(Tag::EndLineSuffix); + stack.push(TagKind::LineSuffix, args); + queue.push(LINE_SUFFIX_END); } } @@ -437,7 +441,7 @@ impl<'a> Printer<'a> { self.state.measured_group_fits = true; let normal_variants = &variants[..variants.len() - 1]; - for variant in normal_variants.iter() { + for variant in normal_variants { // Test if this variant fits and if so, use it. Otherwise try the next // variant. @@ -614,7 +618,7 @@ impl<'a> Printer<'a> { } } - /// Semantic alias for [Self::print_entry] for fill items. + /// Semantic alias for [`Self::print_entry`] for fill items. fn print_fill_item( &mut self, queue: &mut PrintQueue<'a>, @@ -624,7 +628,7 @@ impl<'a> Printer<'a> { self.print_entry(queue, stack, args) } - /// Semantic alias for [Self::print_entry] for fill separators. + /// Semantic alias for [`Self::print_entry`] for fill separators. fn print_fill_separator( &mut self, queue: &mut PrintQueue<'a>, @@ -636,7 +640,7 @@ impl<'a> Printer<'a> { /// Fully print an element (print the element itself and all its descendants) /// - /// Unlike [print_element], this function ensures the entire element has + /// Unlike [`print_element`], this function ensures the entire element has /// been printed when it returns and the queue is back to its original state fn print_entry( &mut self, @@ -695,8 +699,6 @@ impl<'a> Printer<'a> { .buffer .push_str(self.options.line_ending.as_str()); - self.state.generated_line += 1; - self.state.generated_column = 0; self.state.line_width = 0; // Fit's only tests if groups up to the first line break fit. @@ -704,12 +706,13 @@ impl<'a> Printer<'a> { self.state.measured_group_fits = false; } else { self.state.buffer.push(char); - self.state.generated_column += 1; + #[allow(clippy::cast_possible_truncation)] let char_width = if char == '\t' { - self.options.tab_width as usize + u32::from(self.options.tab_width) } else { - char.width().unwrap_or(0) + // SAFETY: A u32 is sufficient to represent the width of a file <= 4GB + char.width().unwrap_or(0) as u32 }; self.state.line_width += char_width; @@ -744,9 +747,7 @@ struct PrinterState<'a> { source_position: TextSize, pending_indent: Indention, measured_group_fits: bool, - generated_line: usize, - generated_column: usize, - line_width: usize, + line_width: u32, line_suffixes: LineSuffixes<'a>, verbatim_markers: Vec, group_modes: GroupModes, @@ -756,6 +757,15 @@ struct PrinterState<'a> { fits_queue: Vec<&'a [FormatElement]>, } +impl<'a> PrinterState<'a> { + fn with_capacity(capacity: usize) -> Self { + Self { + buffer: String::with_capacity(capacity), + ..Self::default() + } + } +} + /// Tracks the mode in which groups with ids are printed. Stores the groups at `group.id()` index. /// This is based on the assumption that the group ids for a single document are dense. #[derive(Debug, Default)] @@ -796,7 +806,7 @@ enum Indention { } impl Indention { - const fn is_empty(&self) -> bool { + const fn is_empty(self) -> bool { matches!(self, Indention::Level(0)) } @@ -806,27 +816,27 @@ impl Indention { } /// Returns the indention level - fn level(&self) -> u16 { + fn level(self) -> u16 { match self { - Indention::Level(count) => *count, - Indention::Align { level: indent, .. } => *indent, + Indention::Level(count) => count, + Indention::Align { level: indent, .. } => indent, } } /// Returns the number of trailing align spaces or 0 if none - fn align(&self) -> u8 { + fn align(self) -> u8 { match self { Indention::Level(_) => 0, - Indention::Align { align, .. } => (*align).into(), + Indention::Align { align, .. } => align.into(), } } /// Increments the level by one. /// - /// The behaviour depends on the [`indent_style`][IndentStyle] if this is an [Indent::Align]: + /// The behaviour depends on the [`indent_style`][IndentStyle] if this is an [`Indent::Align`]: /// - **Tabs**: `align` is converted into an indent. This results in `level` increasing by two: once for the align, once for the level increment /// - **Spaces**: Increments the `level` by one and keeps the `align` unchanged. - /// Keeps any the current value is [Indent::Align] and increments the level by one. + /// Keeps any the current value is [`Indent::Align`] and increments the level by one. fn increment_level(self, indent_style: IndentStyle) -> Self { match self { Indention::Level(count) => Indention::Level(count + 1), @@ -843,8 +853,8 @@ impl Indention { } /// Decrements the indent by one by: - /// - Reducing the level by one if this is [Indent::Level] - /// - Removing the `align` if this is [Indent::Align] + /// - Reducing the level by one if this is [`Indent::Level`] + /// - Removing the `align` if this is [`Indent::Align`] /// /// No-op if the level is already zero. fn decrement(self) -> Self { @@ -856,7 +866,7 @@ impl Indention { /// Adds an `align` of `count` spaces to the current indention. /// - /// It increments the `level` value if the current value is [Indent::IndentAlign]. + /// It increments the `level` value if the current value is [`Indent::IndentAlign`]. fn set_align(self, count: NonZeroU8) -> Self { match self { Indention::Level(indent_count) => Indention::Align { @@ -960,9 +970,9 @@ impl<'a, 'print> FitsMeasurer<'a, 'print> { Ok(true) } - /// Tests if the content of a `Fill` item fits in [PrintMode::Flat]. + /// Tests if the content of a `Fill` item fits in [`PrintMode::Flat`]. /// - /// Returns `Err` if the top element of the queue is not a [Tag::StartEntry] + /// Returns `Err` if the top element of the queue is not a [`Tag::StartEntry`] /// or if the document has any mismatching start/end tags. fn fill_item_fits(&mut self) -> PrintResult { self.fill_entry_fits(PrintMode::Flat) @@ -970,17 +980,17 @@ impl<'a, 'print> FitsMeasurer<'a, 'print> { /// Tests if the content of a `Fill` separator fits with `mode`. /// - /// Returns `Err` if the top element of the queue is not a [Tag::StartEntry] + /// Returns `Err` if the top element of the queue is not a [`Tag::StartEntry`] /// or if the document has any mismatching start/end tags. fn fill_separator_fits(&mut self, mode: PrintMode) -> PrintResult { self.fill_entry_fits(mode) } - /// Tests if the elements between the [Tag::StartEntry] and [Tag::EndEntry] + /// Tests if the elements between the [`Tag::StartEntry`] and [`Tag::EndEntry`] /// of a fill item or separator fits with `mode`. /// - /// Returns `Err` if the queue isn't positioned at a [Tag::StartEntry] or if - /// the matching [Tag::EndEntry] is missing. + /// Returns `Err` if the queue isn't positioned at a [`Tag::StartEntry`] or if + /// the matching [`Tag::EndEntry`] is missing. fn fill_entry_fits(&mut self, mode: PrintMode) -> PrintResult { let start_entry = self.queue.top(); @@ -1002,6 +1012,7 @@ impl<'a, 'print> FitsMeasurer<'a, 'print> { /// Tests if the passed element fits on the current line or not. fn fits_element(&mut self, element: &'a FormatElement) -> PrintResult { + #[allow(clippy::enum_glob_use)] use Tag::*; let args = self.stack.top(); @@ -1098,7 +1109,7 @@ impl<'a, 'print> FitsMeasurer<'a, 'print> { } FormatElement::Tag(StartGroup(group)) => { - return self.fits_group(TagKind::Group, group.mode(), group.id(), args); + return Ok(self.fits_group(TagKind::Group, group.mode(), group.id(), args)); } FormatElement::Tag(StartConditionalGroup(group)) => { @@ -1113,10 +1124,14 @@ impl<'a, 'print> FitsMeasurer<'a, 'print> { }; if condition.mode == print_mode { - return self.fits_group(TagKind::ConditionalGroup, group.mode(), None, args); - } else { - self.stack.push(TagKind::ConditionalGroup, args); + return Ok(self.fits_group( + TagKind::ConditionalGroup, + group.mode(), + None, + args, + )); } + self.stack.push(TagKind::ConditionalGroup, args); } FormatElement::Tag(StartConditionalContent(condition)) => { @@ -1188,14 +1203,14 @@ impl<'a, 'print> FitsMeasurer<'a, 'print> { TagKind::FitsExpanded, args.with_print_mode(PrintMode::Expanded) .with_measure_mode(MeasureMode::AllLines), - ) + ); } else { if propagate_expand.get() && args.mode().is_flat() { return Ok(Fits::No); } // As usual - self.stack.push(TagKind::FitsExpanded, args) + self.stack.push(TagKind::FitsExpanded, args); } } @@ -1232,17 +1247,17 @@ impl<'a, 'print> FitsMeasurer<'a, 'print> { mode: GroupMode, id: Option, args: PrintElementArgs, - ) -> PrintResult { + ) -> Fits { if self.must_be_flat && !mode.is_flat() { - return Ok(Fits::No); + return Fits::No; } // Continue printing groups in expanded mode if measuring a `best_fitting` element where // a group expands. - let print_mode = if !mode.is_flat() { - PrintMode::Expanded - } else { + let print_mode = if mode.is_flat() { args.mode() + } else { + PrintMode::Expanded }; self.stack.push(kind, args.with_print_mode(print_mode)); @@ -1251,31 +1266,33 @@ impl<'a, 'print> FitsMeasurer<'a, 'print> { self.group_modes_mut().insert_print_mode(id, print_mode); } - Ok(Fits::Maybe) + Fits::Maybe } fn fits_text(&mut self, text: &str, args: PrintElementArgs) -> Fits { let indent = std::mem::take(&mut self.state.pending_indent); - self.state.line_width += indent.level() as usize * self.options().indent_width() as usize - + indent.align() as usize; + self.state.line_width += u32::from(indent.level()) + * u32::from(self.options().indent_width()) + + u32::from(indent.align()); for c in text.chars() { let char_width = match c { - '\t' => self.options().tab_width as usize, + '\t' => u32::from(self.options().tab_width), '\n' => { if self.must_be_flat { return Fits::No; - } else { - match args.measure_mode() { - MeasureMode::FirstLine => return Fits::Yes, - MeasureMode::AllLines => { - self.state.line_width = 0; - continue; - } + } + match args.measure_mode() { + MeasureMode::FirstLine => return Fits::Yes, + MeasureMode::AllLines => { + self.state.line_width = 0; + continue; } - }; + } } - c => c.width().unwrap_or(0), + // SAFETY: A u32 is sufficient to format files <= 4GB + #[allow(clippy::cast_possible_truncation)] + c => c.width().unwrap_or(0) as u32, }; self.state.line_width += char_width; } @@ -1357,9 +1374,10 @@ enum Fits { impl From for Fits { fn from(value: bool) -> Self { - match value { - true => Fits::Yes, - false => Fits::No, + if value { + Fits::Yes + } else { + Fits::No } } } @@ -1369,7 +1387,7 @@ impl From for Fits { struct FitsState { pending_indent: Indention, has_line_suffix: bool, - line_width: usize, + line_width: u32, } #[derive(Copy, Clone, Debug, Eq, PartialEq)] @@ -1379,7 +1397,7 @@ enum MeasureMode { /// Returns FirstLine, - /// The content only fits if non of the lines exceed the print width. Lines are terminated by either + /// The content only fits if none of the lines exceed the print width. Lines are terminated by either /// a hard line break or a soft line break in [`PrintMode::Expanded`]. AllLines, } @@ -1423,7 +1441,7 @@ mod tests { ], }); - assert_eq!(r#"["a", "b", "c", "d"]"#, result.as_code()) + assert_eq!(r#"["a", "b", "c", "d"]"#, result.as_code()); } #[test] @@ -1452,7 +1470,7 @@ mod tests { b a"#, formatted.as_code() - ) + ); } #[test] @@ -1494,13 +1512,13 @@ two lines`, "b", ]"#, result.as_code() - ) + ); } #[test] fn it_breaks_a_group_if_it_contains_a_hard_line_break() { let result = format(&group(&format_args![text("a"), block_indent(&text("b"))])); - assert_eq!("a\n b\n", result.as_code()) + assert_eq!("a\n b\n", result.as_code()); } #[test] @@ -1564,7 +1582,7 @@ two lines`, text("b"), ]); - assert_eq!("a\nb", result.as_code()) + assert_eq!("a\nb", result.as_code()); } #[test] @@ -1577,7 +1595,7 @@ two lines`, text("b"), ]); - assert_eq!("a\n\n\n\nb", result.as_code()) + assert_eq!("a\n\n\n\nb", result.as_code()); } #[test] @@ -1591,7 +1609,7 @@ two lines`, text("b"), ]); - assert_eq!("a\n\n\nb", result.as_code()) + assert_eq!("a\n\n\nb", result.as_code()); } #[test] @@ -1653,7 +1671,7 @@ two lines`, assert_eq!( printed.as_code(), "1, 2, 3,\n723493294,\n[5],\n[\n\t123456789\n]" - ) + ); } #[test] @@ -1683,7 +1701,7 @@ two lines`, &line_suffix(&format_args![space(), text("// trailing")]) ]); - assert_eq!(printed.as_code(), "[1, 2, 3]; // trailing") + assert_eq!(printed.as_code(), "[1, 2, 3]; // trailing"); } #[test] diff --git a/crates/ruff_formatter/src/printer/printer_options/mod.rs b/crates/ruff_formatter/src/printer/printer_options/mod.rs index 36b754fccc..d68f60ef2e 100644 --- a/crates/ruff_formatter/src/printer/printer_options/mod.rs +++ b/crates/ruff_formatter/src/printer/printer_options/mod.rs @@ -1,6 +1,6 @@ use crate::{FormatOptions, IndentStyle, LineWidth}; -/// Options that affect how the [crate::Printer] prints the format tokens +/// Options that affect how the [`crate::Printer`] prints the format tokens #[derive(Clone, Debug, Eq, PartialEq)] pub struct PrinterOptions { /// Width of a single tab character (does it equal 2, 4, ... spaces?) @@ -33,7 +33,7 @@ impl Default for PrintWidth { impl From for PrintWidth { fn from(width: LineWidth) -> Self { - Self(u16::from(width) as u32) + Self(u32::from(u16::from(width))) } } @@ -43,6 +43,12 @@ impl From for usize { } } +impl From for u32 { + fn from(width: PrintWidth) -> Self { + width.0 + } +} + impl<'a, O> From<&'a O> for PrinterOptions where O: FormatOptions, @@ -55,11 +61,13 @@ where } impl PrinterOptions { + #[must_use] pub fn with_print_width(mut self, width: PrintWidth) -> Self { self.print_width = width; self } + #[must_use] pub fn with_indent(mut self, style: IndentStyle) -> Self { self.indent_style = style; @@ -108,7 +116,7 @@ impl Default for PrinterOptions { PrinterOptions { tab_width: 2, print_width: PrintWidth::default(), - indent_style: Default::default(), + indent_style: IndentStyle::default(), line_ending: LineEnding::LineFeed, } } diff --git a/crates/ruff_formatter/src/printer/queue.rs b/crates/ruff_formatter/src/printer/queue.rs index 6ef645b339..93914d2b03 100644 --- a/crates/ruff_formatter/src/printer/queue.rs +++ b/crates/ruff_formatter/src/printer/queue.rs @@ -7,7 +7,7 @@ use std::fmt::Debug; use std::iter::FusedIterator; use std::marker::PhantomData; -/// Queue of [FormatElement]s. +/// Queue of [`FormatElement`]s. pub(super) trait Queue<'a> { type Stack: Stack<&'a [FormatElement]>; @@ -40,19 +40,19 @@ pub(super) trait Queue<'a> { } } - /// Returns the next element, not traversing into [FormatElement::Interned]. + /// Returns the next element, not traversing into [`FormatElement::Interned`]. fn top_with_interned(&self) -> Option<&'a FormatElement> { self.stack() .top() .map(|top_slice| &top_slice[self.next_index()]) } - /// Returns the next element, recursively resolving the first element of [FormatElement::Interned]. + /// Returns the next element, recursively resolving the first element of [`FormatElement::Interned`]. fn top(&self) -> Option<&'a FormatElement> { let mut top = self.top_with_interned(); while let Some(FormatElement::Interned(interned)) = top { - top = interned.first() + top = interned.first(); } top @@ -60,7 +60,7 @@ pub(super) trait Queue<'a> { /// Queues a single element to process before the other elements in this queue. fn push(&mut self, element: &'a FormatElement) { - self.extend_back(std::slice::from_ref(element)) + self.extend_back(std::slice::from_ref(element)); } /// Queues a slice of elements to process before the other elements in this queue. @@ -73,7 +73,7 @@ pub(super) trait Queue<'a> { let next_index = self.next_index(); let stack = self.stack_mut(); if let Some(top) = stack.pop() { - stack.push(&top[next_index..]) + stack.push(&top[next_index..]); } stack.push(slice); @@ -150,14 +150,14 @@ impl<'a> Queue<'a> for PrintQueue<'a> { } fn set_next_index(&mut self, index: usize) { - self.next_index = index + self.next_index = index; } } /// Queue for measuring if an element fits on the line. /// -/// The queue is a view on top of the [PrintQueue] because no elements should be removed -/// from the [PrintQueue] while measuring. +/// The queue is a view on top of the [`PrintQueue`] because no elements should be removed +/// from the [`PrintQueue`] while measuring. #[must_use] #[derive(Debug)] pub(super) struct FitsQueue<'a, 'print> { @@ -203,9 +203,9 @@ impl<'a, 'print> Queue<'a> for FitsQueue<'a, 'print> { } } -/// Iterator that calls [Queue::pop] until it reaches the end of the document. +/// Iterator that calls [`Queue::pop`] until it reaches the end of the document. /// -/// The iterator traverses into the content of any [FormatElement::Interned]. +/// The iterator traverses into the content of any [`FormatElement::Interned`]. pub(super) struct QueueIterator<'a, 'q, Q: Queue<'a>> { queue: &'q mut Q, lifetime: PhantomData<&'a ()>, @@ -252,32 +252,31 @@ where type Item = &'a FormatElement; fn next(&mut self) -> Option { - match self.depth { - 0 => None, - _ => { - let mut top = self.queue.pop(); + if self.depth == 0 { + None + } else { + let mut top = self.queue.pop(); - while let Some(FormatElement::Interned(interned)) = top { - self.queue.extend_back(interned); - top = self.queue.pop(); - } + while let Some(FormatElement::Interned(interned)) = top { + self.queue.extend_back(interned); + top = self.queue.pop(); + } - match top.expect("Missing end signal.") { - element @ FormatElement::Tag(tag) if tag.kind() == self.kind => { - if tag.is_start() { - self.depth += 1; - } else { - self.depth -= 1; + match top.expect("Missing end signal.") { + element @ FormatElement::Tag(tag) if tag.kind() == self.kind => { + if tag.is_start() { + self.depth += 1; + } else { + self.depth -= 1; - if self.depth == 0 { - return None; - } + if self.depth == 0 { + return None; } - - Some(element) } - element => Some(element), + + Some(element) } + element => Some(element), } } } @@ -287,7 +286,7 @@ impl<'a, Q> FusedIterator for QueueContentIterator<'a, '_, Q> where Q: Queue<'a> /// A predicate determining when to end measuring if some content fits on the line. /// -/// Called for every [`element`](FormatElement) in the [FitsQueue] when measuring if a content +/// Called for every [`element`](FormatElement) in the [`FitsQueue`] when measuring if a content /// fits on the line. The measuring of the content ends after the first element [`element`](FormatElement) for which this /// predicate returns `true` (similar to a take while iterator except that it takes while the predicate returns `false`). pub(super) trait FitsEndPredicate { @@ -303,7 +302,7 @@ impl FitsEndPredicate for AllPredicate { } } -/// Filter that takes all elements between two matching [Tag::StartEntry] and [Tag::EndEntry] tags. +/// Filter that takes all elements between two matching [`Tag::StartEntry`] and [`Tag::EndEntry`] tags. #[derive(Debug)] pub(super) enum SingleEntryPredicate { Entry { depth: usize }, diff --git a/crates/ruff_formatter/src/printer/stack.rs b/crates/ruff_formatter/src/printer/stack.rs index 1bc8da8047..4a1c4c92a2 100644 --- a/crates/ruff_formatter/src/printer/stack.rs +++ b/crates/ruff_formatter/src/printer/stack.rs @@ -19,7 +19,7 @@ impl Stack for Vec { } fn push(&mut self, value: T) { - self.push(value) + self.push(value); } fn top(&self) -> Option<&T> { diff --git a/crates/ruff_python_ast/Cargo.toml b/crates/ruff_python_ast/Cargo.toml index b85f740223..ac33034c90 100644 --- a/crates/ruff_python_ast/Cargo.toml +++ b/crates/ruff_python_ast/Cargo.toml @@ -10,8 +10,6 @@ documentation = { workspace = true } repository = { workspace = true } license = { workspace = true } - - [lib] [dependencies] diff --git a/crates/ruff_python_ast/src/all.rs b/crates/ruff_python_ast/src/all.rs index d5917661d6..3f738984b5 100644 --- a/crates/ruff_python_ast/src/all.rs +++ b/crates/ruff_python_ast/src/all.rs @@ -24,7 +24,7 @@ where fn add_to_names<'a>(elts: &'a [Expr], names: &mut Vec<&'a str>, flags: &mut DunderAllFlags) { for elt in elts { if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), + value: Constant::Str(ast::StringConstant { value, .. }), .. }) = elt { diff --git a/crates/ruff_python_ast/src/cast.rs b/crates/ruff_python_ast/src/cast.rs deleted file mode 100644 index 1b59f69b20..0000000000 --- a/crates/ruff_python_ast/src/cast.rs +++ /dev/null @@ -1,19 +0,0 @@ -use crate::{nodes, Decorator, Stmt}; - -pub fn name(stmt: &Stmt) -> &str { - match stmt { - Stmt::FunctionDef(nodes::StmtFunctionDef { name, .. }) - | Stmt::AsyncFunctionDef(nodes::StmtAsyncFunctionDef { name, .. }) => name.as_str(), - _ => panic!("Expected Stmt::FunctionDef | Stmt::AsyncFunctionDef"), - } -} - -pub fn decorator_list(stmt: &Stmt) -> &[Decorator] { - match stmt { - Stmt::FunctionDef(nodes::StmtFunctionDef { decorator_list, .. }) - | Stmt::AsyncFunctionDef(nodes::StmtAsyncFunctionDef { decorator_list, .. }) => { - decorator_list - } - _ => panic!("Expected Stmt::FunctionDef | Stmt::AsyncFunctionDef"), - } -} diff --git a/crates/ruff_python_ast/src/comparable.rs b/crates/ruff_python_ast/src/comparable.rs index 107e079128..a28e6d2190 100644 --- a/crates/ruff_python_ast/src/comparable.rs +++ b/crates/ruff_python_ast/src/comparable.rs @@ -326,8 +326,18 @@ impl<'a> From<&'a ast::Constant> for ComparableConstant<'a> { match constant { ast::Constant::None => Self::None, ast::Constant::Bool(value) => Self::Bool(value), - ast::Constant::Str(value) => Self::Str(value), - ast::Constant::Bytes(value) => Self::Bytes(value), + ast::Constant::Str(ast::StringConstant { + value, + // Compare strings based on resolved value, not representation (i.e., ignore whether + // the string was implicitly concatenated). + implicit_concatenated: _, + }) => Self::Str(value), + ast::Constant::Bytes(ast::BytesConstant { + value, + // Compare bytes based on resolved value, not representation (i.e., ignore whether + // the bytes were implicitly concatenated). + implicit_concatenated: _, + }) => Self::Bytes(value), ast::Constant::Int(value) => Self::Int(value), ast::Constant::Float(value) => Self::Float(value.to_bits()), ast::Constant::Complex { real, imag } => Self::Complex { @@ -616,7 +626,7 @@ pub struct ExprFormattedValue<'a> { } #[derive(Debug, PartialEq, Eq, Hash)] -pub struct ExprJoinedStr<'a> { +pub struct ExprFString<'a> { values: Vec>, } @@ -672,8 +682,8 @@ pub struct ExprSlice<'a> { } #[derive(Debug, PartialEq, Eq, Hash)] -pub struct ExprLineMagic<'a> { - kind: ast::MagicKind, +pub struct ExprIpyEscapeCommand<'a> { + kind: ast::IpyEscapeKind, value: &'a str, } @@ -697,7 +707,7 @@ pub enum ComparableExpr<'a> { Compare(ExprCompare<'a>), Call(ExprCall<'a>), FormattedValue(ExprFormattedValue<'a>), - JoinedStr(ExprJoinedStr<'a>), + FString(ExprFString<'a>), Constant(ExprConstant<'a>), Attribute(ExprAttribute<'a>), Subscript(ExprSubscript<'a>), @@ -706,7 +716,7 @@ pub enum ComparableExpr<'a> { List(ExprList<'a>), Tuple(ExprTuple<'a>), Slice(ExprSlice<'a>), - LineMagic(ExprLineMagic<'a>), + IpyEscapeCommand(ExprIpyEscapeCommand<'a>), } impl<'a> From<&'a Box> for Box> { @@ -865,11 +875,13 @@ impl<'a> From<&'a ast::Expr> for ComparableExpr<'a> { debug_text: debug_text.as_ref(), format_spec: format_spec.as_ref().map(Into::into), }), - ast::Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { - Self::JoinedStr(ExprJoinedStr { - values: values.iter().map(Into::into).collect(), - }) - } + ast::Expr::FString(ast::ExprFString { + values, + implicit_concatenated: _, + range: _, + }) => Self::FString(ExprFString { + values: values.iter().map(Into::into).collect(), + }), ast::Expr::Constant(ast::ExprConstant { value, kind, @@ -936,11 +948,11 @@ impl<'a> From<&'a ast::Expr> for ComparableExpr<'a> { upper: upper.as_ref().map(Into::into), step: step.as_ref().map(Into::into), }), - ast::Expr::LineMagic(ast::ExprLineMagic { + ast::Expr::IpyEscapeCommand(ast::ExprIpyEscapeCommand { kind, value, range: _, - }) => Self::LineMagic(ExprLineMagic { + }) => Self::IpyEscapeCommand(ExprIpyEscapeCommand { kind: *kind, value: value.as_str(), }), @@ -950,16 +962,7 @@ impl<'a> From<&'a ast::Expr> for ComparableExpr<'a> { #[derive(Debug, PartialEq, Eq, Hash)] pub struct StmtFunctionDef<'a> { - decorator_list: Vec>, - name: &'a str, - type_params: Option>, - parameters: ComparableParameters<'a>, - returns: Option>, - body: Vec>, -} - -#[derive(Debug, PartialEq, Eq, Hash)] -pub struct StmtAsyncFunctionDef<'a> { + is_async: bool, decorator_list: Vec>, name: &'a str, type_params: Option>, @@ -1084,14 +1087,7 @@ pub struct StmtAnnAssign<'a> { #[derive(Debug, PartialEq, Eq, Hash)] pub struct StmtFor<'a> { - target: ComparableExpr<'a>, - iter: ComparableExpr<'a>, - body: Vec>, - orelse: Vec>, -} - -#[derive(Debug, PartialEq, Eq, Hash)] -pub struct StmtAsyncFor<'a> { + is_async: bool, target: ComparableExpr<'a>, iter: ComparableExpr<'a>, body: Vec>, @@ -1114,12 +1110,7 @@ pub struct StmtIf<'a> { #[derive(Debug, PartialEq, Eq, Hash)] pub struct StmtWith<'a> { - items: Vec>, - body: Vec>, -} - -#[derive(Debug, PartialEq, Eq, Hash)] -pub struct StmtAsyncWith<'a> { + is_async: bool, items: Vec>, body: Vec>, } @@ -1142,14 +1133,7 @@ pub struct StmtTry<'a> { handlers: Vec>, orelse: Vec>, finalbody: Vec>, -} - -#[derive(Debug, PartialEq, Eq, Hash)] -pub struct StmtTryStar<'a> { - body: Vec>, - handlers: Vec>, - orelse: Vec>, - finalbody: Vec>, + is_star: bool, } #[derive(Debug, PartialEq, Eq, Hash)] @@ -1186,15 +1170,14 @@ pub struct StmtExpr<'a> { } #[derive(Debug, PartialEq, Eq, Hash)] -pub struct StmtLineMagic<'a> { - kind: ast::MagicKind, +pub struct StmtIpyEscapeCommand<'a> { + kind: ast::IpyEscapeKind, value: &'a str, } #[derive(Debug, PartialEq, Eq, Hash)] pub enum ComparableStmt<'a> { FunctionDef(StmtFunctionDef<'a>), - AsyncFunctionDef(StmtAsyncFunctionDef<'a>), ClassDef(StmtClassDef<'a>), Return(StmtReturn<'a>), Delete(StmtDelete<'a>), @@ -1202,22 +1185,19 @@ pub enum ComparableStmt<'a> { AugAssign(StmtAugAssign<'a>), AnnAssign(StmtAnnAssign<'a>), For(StmtFor<'a>), - AsyncFor(StmtAsyncFor<'a>), While(StmtWhile<'a>), If(StmtIf<'a>), With(StmtWith<'a>), - AsyncWith(StmtAsyncWith<'a>), Match(StmtMatch<'a>), Raise(StmtRaise<'a>), Try(StmtTry<'a>), - TryStar(StmtTryStar<'a>), TypeAlias(StmtTypeAlias<'a>), Assert(StmtAssert<'a>), Import(StmtImport<'a>), ImportFrom(StmtImportFrom<'a>), Global(StmtGlobal<'a>), Nonlocal(StmtNonlocal<'a>), - LineMagic(StmtLineMagic<'a>), + IpyEscapeCommand(StmtIpyEscapeCommand<'a>), Expr(StmtExpr<'a>), Pass, Break, @@ -1228,6 +1208,7 @@ impl<'a> From<&'a ast::Stmt> for ComparableStmt<'a> { fn from(stmt: &'a ast::Stmt) -> Self { match stmt { ast::Stmt::FunctionDef(ast::StmtFunctionDef { + is_async, name, parameters, body, @@ -1236,22 +1217,7 @@ impl<'a> From<&'a ast::Stmt> for ComparableStmt<'a> { type_params, range: _, }) => Self::FunctionDef(StmtFunctionDef { - name: name.as_str(), - parameters: parameters.into(), - body: body.iter().map(Into::into).collect(), - decorator_list: decorator_list.iter().map(Into::into).collect(), - returns: returns.as_ref().map(Into::into), - type_params: type_params.as_ref().map(Into::into), - }), - ast::Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - name, - parameters, - body, - decorator_list, - returns, - type_params, - range: _, - }) => Self::AsyncFunctionDef(StmtAsyncFunctionDef { + is_async: *is_async, name: name.as_str(), parameters: parameters.into(), body: body.iter().map(Into::into).collect(), @@ -1320,24 +1286,14 @@ impl<'a> From<&'a ast::Stmt> for ComparableStmt<'a> { simple: *simple, }), ast::Stmt::For(ast::StmtFor { + is_async, target, iter, body, orelse, range: _, }) => Self::For(StmtFor { - target: target.into(), - iter: iter.into(), - body: body.iter().map(Into::into).collect(), - orelse: orelse.iter().map(Into::into).collect(), - }), - ast::Stmt::AsyncFor(ast::StmtAsyncFor { - target, - iter, - body, - orelse, - range: _, - }) => Self::AsyncFor(StmtAsyncFor { + is_async: *is_async, target: target.into(), iter: iter.into(), body: body.iter().map(Into::into).collect(), @@ -1364,18 +1320,12 @@ impl<'a> From<&'a ast::Stmt> for ComparableStmt<'a> { elif_else_clauses: elif_else_clauses.iter().map(Into::into).collect(), }), ast::Stmt::With(ast::StmtWith { + is_async, items, body, range: _, }) => Self::With(StmtWith { - items: items.iter().map(Into::into).collect(), - body: body.iter().map(Into::into).collect(), - }), - ast::Stmt::AsyncWith(ast::StmtAsyncWith { - items, - body, - range: _, - }) => Self::AsyncWith(StmtAsyncWith { + is_async: *is_async, items: items.iter().map(Into::into).collect(), body: body.iter().map(Into::into).collect(), }), @@ -1400,24 +1350,14 @@ impl<'a> From<&'a ast::Stmt> for ComparableStmt<'a> { handlers, orelse, finalbody, + is_star, range: _, }) => Self::Try(StmtTry { body: body.iter().map(Into::into).collect(), handlers: handlers.iter().map(Into::into).collect(), orelse: orelse.iter().map(Into::into).collect(), finalbody: finalbody.iter().map(Into::into).collect(), - }), - ast::Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - range: _, - }) => Self::TryStar(StmtTryStar { - body: body.iter().map(Into::into).collect(), - handlers: handlers.iter().map(Into::into).collect(), - orelse: orelse.iter().map(Into::into).collect(), - finalbody: finalbody.iter().map(Into::into).collect(), + is_star: *is_star, }), ast::Stmt::Assert(ast::StmtAssert { test, @@ -1448,11 +1388,11 @@ impl<'a> From<&'a ast::Stmt> for ComparableStmt<'a> { names: names.iter().map(ast::Identifier::as_str).collect(), }) } - ast::Stmt::LineMagic(ast::StmtLineMagic { + ast::Stmt::IpyEscapeCommand(ast::StmtIpyEscapeCommand { kind, value, range: _, - }) => Self::LineMagic(StmtLineMagic { + }) => Self::IpyEscapeCommand(StmtIpyEscapeCommand { kind: *kind, value: value.as_str(), }), diff --git a/crates/ruff_python_ast/src/function.rs b/crates/ruff_python_ast/src/function.rs deleted file mode 100644 index 96737bcf86..0000000000 --- a/crates/ruff_python_ast/src/function.rs +++ /dev/null @@ -1,134 +0,0 @@ -use crate::node::AnyNodeRef; -use crate::{ - Decorator, Expr, Identifier, Parameters, Ranged, StmtAsyncFunctionDef, StmtFunctionDef, Suite, - TypeParams, -}; -use ruff_text_size::TextRange; - -/// Enum that represents any python function definition. -#[derive(Copy, Clone, PartialEq, Debug)] -pub enum AnyFunctionDefinition<'a> { - FunctionDefinition(&'a StmtFunctionDef), - AsyncFunctionDefinition(&'a StmtAsyncFunctionDef), -} - -impl<'a> AnyFunctionDefinition<'a> { - pub const fn cast_ref(reference: AnyNodeRef<'a>) -> Option { - match reference { - AnyNodeRef::StmtAsyncFunctionDef(definition) => { - Some(Self::AsyncFunctionDefinition(definition)) - } - AnyNodeRef::StmtFunctionDef(definition) => Some(Self::FunctionDefinition(definition)), - _ => None, - } - } - - /// Returns `Some` if this is a [`StmtFunctionDef`] and `None` otherwise. - pub const fn as_function_definition(self) -> Option<&'a StmtFunctionDef> { - if let Self::FunctionDefinition(definition) = self { - Some(definition) - } else { - None - } - } - - /// Returns `Some` if this is a [`StmtAsyncFunctionDef`] and `None` otherwise. - pub const fn as_async_function_definition(self) -> Option<&'a StmtAsyncFunctionDef> { - if let Self::AsyncFunctionDefinition(definition) = self { - Some(definition) - } else { - None - } - } - - /// Returns the function's name - pub const fn name(self) -> &'a Identifier { - match self { - Self::FunctionDefinition(definition) => &definition.name, - Self::AsyncFunctionDefinition(definition) => &definition.name, - } - } - - /// Returns the function arguments (parameters). - pub fn arguments(self) -> &'a Parameters { - match self { - Self::FunctionDefinition(definition) => definition.parameters.as_ref(), - Self::AsyncFunctionDefinition(definition) => definition.parameters.as_ref(), - } - } - - /// Returns the function's body - pub const fn body(self) -> &'a Suite { - match self { - Self::FunctionDefinition(definition) => &definition.body, - Self::AsyncFunctionDefinition(definition) => &definition.body, - } - } - - /// Returns the decorators attributing the function. - pub fn decorators(self) -> &'a [Decorator] { - match self { - Self::FunctionDefinition(definition) => &definition.decorator_list, - Self::AsyncFunctionDefinition(definition) => &definition.decorator_list, - } - } - - pub fn returns(self) -> Option<&'a Expr> { - match self { - Self::FunctionDefinition(definition) => definition.returns.as_deref(), - Self::AsyncFunctionDefinition(definition) => definition.returns.as_deref(), - } - } - - pub fn type_params(self) -> Option<&'a TypeParams> { - match self { - Self::FunctionDefinition(definition) => definition.type_params.as_ref(), - Self::AsyncFunctionDefinition(definition) => definition.type_params.as_ref(), - } - } - - /// Returns `true` if this is [`Self::AsyncFunctionDefinition`] - pub const fn is_async(self) -> bool { - matches!(self, Self::AsyncFunctionDefinition(_)) - } -} - -impl Ranged for AnyFunctionDefinition<'_> { - fn range(&self) -> TextRange { - match self { - AnyFunctionDefinition::FunctionDefinition(definition) => definition.range(), - AnyFunctionDefinition::AsyncFunctionDefinition(definition) => definition.range(), - } - } -} - -impl<'a> From<&'a StmtFunctionDef> for AnyFunctionDefinition<'a> { - fn from(value: &'a StmtFunctionDef) -> Self { - Self::FunctionDefinition(value) - } -} - -impl<'a> From<&'a StmtAsyncFunctionDef> for AnyFunctionDefinition<'a> { - fn from(value: &'a StmtAsyncFunctionDef) -> Self { - Self::AsyncFunctionDefinition(value) - } -} - -impl<'a> From> for AnyNodeRef<'a> { - fn from(value: AnyFunctionDefinition<'a>) -> Self { - match value { - AnyFunctionDefinition::FunctionDefinition(function_def) => { - AnyNodeRef::StmtFunctionDef(function_def) - } - AnyFunctionDefinition::AsyncFunctionDefinition(async_def) => { - AnyNodeRef::StmtAsyncFunctionDef(async_def) - } - } - } -} - -impl<'a> From<&'a AnyFunctionDefinition<'a>> for AnyNodeRef<'a> { - fn from(value: &'a AnyFunctionDefinition<'a>) -> Self { - (*value).into() - } -} diff --git a/crates/ruff_python_ast/src/helpers.rs b/crates/ruff_python_ast/src/helpers.rs index d29a68b167..ad97566880 100644 --- a/crates/ruff_python_ast/src/helpers.rs +++ b/crates/ruff_python_ast/src/helpers.rs @@ -18,17 +18,13 @@ pub const fn is_compound_statement(stmt: &Stmt) -> bool { matches!( stmt, Stmt::FunctionDef(_) - | Stmt::AsyncFunctionDef(_) | Stmt::ClassDef(_) | Stmt::While(_) | Stmt::For(_) - | Stmt::AsyncFor(_) | Stmt::Match(_) | Stmt::With(_) - | Stmt::AsyncWith(_) | Stmt::If(_) | Stmt::Try(_) - | Stmt::TryStar(_) ) } @@ -71,7 +67,7 @@ where if !matches!( left.as_ref(), Expr::Constant(_) - | Expr::JoinedStr(_) + | Expr::FString(_) | Expr::List(_) | Expr::Tuple(_) | Expr::Set(_) @@ -85,7 +81,7 @@ where if !matches!( right.as_ref(), Expr::Constant(_) - | Expr::JoinedStr(_) + | Expr::FString(_) | Expr::List(_) | Expr::Tuple(_) | Expr::Set(_) @@ -111,7 +107,7 @@ where | Expr::Subscript(_) | Expr::Yield(_) | Expr::YieldFrom(_) - | Expr::LineMagic(_) + | Expr::IpyEscapeCommand(_) ) }) } @@ -126,10 +122,8 @@ where return true; } match expr { - Expr::BoolOp(ast::ExprBoolOp { - values, range: _, .. - }) - | Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { + Expr::BoolOp(ast::ExprBoolOp { values, .. }) + | Expr::FString(ast::ExprFString { values, .. }) => { values.iter().any(|expr| any_over_expr(expr, func)) } Expr::NamedExpr(ast::ExprNamedExpr { @@ -250,7 +244,7 @@ where .is_some_and(|value| any_over_expr(value, func)) } Expr::Name(_) | Expr::Constant(_) => false, - Expr::LineMagic(_) => false, + Expr::IpyEscapeCommand(_) => false, } } @@ -321,14 +315,6 @@ where decorator_list, returns, .. - }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - parameters, - type_params, - body, - decorator_list, - returns, - .. }) => { parameters .posonlyargs @@ -439,13 +425,6 @@ where body, orelse, .. - }) - | Stmt::AsyncFor(ast::StmtAsyncFor { - target, - iter, - body, - orelse, - .. }) => { any_over_expr(target, func) || any_over_expr(iter, func) @@ -474,8 +453,7 @@ where || any_over_body(&clause.body, func) }) } - Stmt::With(ast::StmtWith { items, body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { items, body, .. }) => { + Stmt::With(ast::StmtWith { items, body, .. }) => { items.iter().any(|with_item| { any_over_expr(&with_item.context_expr, func) || with_item @@ -499,13 +477,7 @@ where handlers, orelse, finalbody, - range: _, - }) - | Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, + is_star: _, range: _, }) => { any_over_body(body, func) @@ -553,7 +525,7 @@ where Stmt::Nonlocal(_) => false, Stmt::Expr(ast::StmtExpr { value, range: _ }) => any_over_expr(value, func), Stmt::Pass(_) | Stmt::Break(_) | Stmt::Continue(_) => false, - Stmt::LineMagic(_) => false, + Stmt::IpyEscapeCommand(_) => false, } } @@ -912,7 +884,7 @@ where { fn visit_stmt(&mut self, stmt: &'b Stmt) { match stmt { - Stmt::FunctionDef(_) | Stmt::AsyncFunctionDef(_) | Stmt::ClassDef(_) => { + Stmt::FunctionDef(_) | Stmt::ClassDef(_) => { // Don't recurse. } Stmt::Return(stmt) => self.returns.push(stmt), @@ -941,11 +913,7 @@ where self.raises .push((stmt.range(), exc.as_deref(), cause.as_deref())); } - Stmt::ClassDef(_) - | Stmt::FunctionDef(_) - | Stmt::AsyncFunctionDef(_) - | Stmt::Try(_) - | Stmt::TryStar(_) => {} + Stmt::ClassDef(_) | Stmt::FunctionDef(_) | Stmt::Try(_) => {} Stmt::If(ast::StmtIf { body, elif_else_clauses, @@ -958,9 +926,7 @@ where } Stmt::While(ast::StmtWhile { body, .. }) | Stmt::With(ast::StmtWith { body, .. }) - | Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) - | Stmt::For(ast::StmtFor { body, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { body, .. }) => { + | Stmt::For(ast::StmtFor { body, .. }) => { walk_body(self, body); } Stmt::Match(ast::StmtMatch { cases, .. }) => { @@ -1008,7 +974,7 @@ pub fn in_nested_block<'a>(mut parents: impl Iterator) -> bool parents.any(|parent| { matches!( parent, - Stmt::Try(_) | Stmt::TryStar(_) | Stmt::If(_) | Stmt::With(_) | Stmt::Match(_) + Stmt::Try(_) | Stmt::If(_) | Stmt::With(_) | Stmt::Match(_) ) }) } @@ -1112,25 +1078,26 @@ impl Truthiness { Expr::Constant(ast::ExprConstant { value, .. }) => match value { Constant::Bool(value) => Some(*value), Constant::None => Some(false), - Constant::Str(string) => Some(!string.is_empty()), + Constant::Str(ast::StringConstant { value, .. }) => Some(!value.is_empty()), Constant::Bytes(bytes) => Some(!bytes.is_empty()), Constant::Int(int) => Some(!int.is_zero()), Constant::Float(float) => Some(*float != 0.0), Constant::Complex { real, imag } => Some(*real != 0.0 || *imag != 0.0), Constant::Ellipsis => Some(true), }, - Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { + Expr::FString(ast::ExprFString { values, .. }) => { if values.is_empty() { Some(false) } else if values.iter().any(|value| { - let Expr::Constant(ast::ExprConstant { - value: Constant::Str(string), + if let Expr::Constant(ast::ExprConstant { + value: Constant::Str(ast::StringConstant { value, .. }), .. }) = &value - else { - return false; - }; - !string.is_empty() + { + !value.is_empty() + } else { + false + } }) { Some(true) } else { diff --git a/crates/ruff_python_ast/src/identifier.rs b/crates/ruff_python_ast/src/identifier.rs index d5d18a9641..2ff690ebc8 100644 --- a/crates/ruff_python_ast/src/identifier.rs +++ b/crates/ruff_python_ast/src/identifier.rs @@ -20,6 +20,32 @@ pub trait Identifier { fn identifier(&self) -> TextRange; } +impl Identifier for ast::StmtFunctionDef { + /// Return the [`TextRange`] of the identifier in the given function definition. + /// + /// For example, return the range of `f` in: + /// ```python + /// def f(): + /// ... + /// ``` + fn identifier(&self) -> TextRange { + self.name.range() + } +} + +impl Identifier for ast::StmtClassDef { + /// Return the [`TextRange`] of the identifier in the given class definition. + /// + /// For example, return the range of `C` in: + /// ```python + /// class C(): + /// ... + /// ``` + fn identifier(&self) -> TextRange { + self.name.range() + } +} + impl Identifier for Stmt { /// Return the [`TextRange`] of the identifier in the given statement. /// @@ -30,9 +56,8 @@ impl Identifier for Stmt { /// ``` fn identifier(&self) -> TextRange { match self { - Stmt::ClassDef(ast::StmtClassDef { name, .. }) - | Stmt::FunctionDef(ast::StmtFunctionDef { name, .. }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { name, .. }) => name.range(), + Stmt::ClassDef(class) => class.identifier(), + Stmt::FunctionDef(function) => function.identifier(), _ => self.range(), } } @@ -85,10 +110,9 @@ pub fn except(handler: &ExceptHandler, source: &str) -> TextRange { .expect("Failed to find `except` token in `ExceptHandler`") } -/// Return the [`TextRange`] of the `else` token in a `For`, `AsyncFor`, or `While` statement. +/// Return the [`TextRange`] of the `else` token in a `For` or `While` statement. pub fn else_(stmt: &Stmt, source: &str) -> Option { let (Stmt::For(ast::StmtFor { body, orelse, .. }) - | Stmt::AsyncFor(ast::StmtAsyncFor { body, orelse, .. }) | Stmt::While(ast::StmtWhile { body, orelse, .. })) = stmt else { return None; diff --git a/crates/ruff_python_ast/src/lib.rs b/crates/ruff_python_ast/src/lib.rs index a7489fb7a1..3fb4c5f170 100644 --- a/crates/ruff_python_ast/src/lib.rs +++ b/crates/ruff_python_ast/src/lib.rs @@ -3,10 +3,8 @@ use std::path::Path; pub mod all; pub mod call_path; -pub mod cast; pub mod comparable; pub mod docstrings; -pub mod function; pub mod hashable; pub mod helpers; pub mod identifier; diff --git a/crates/ruff_python_ast/src/node.rs b/crates/ruff_python_ast/src/node.rs index 6f7f2c911f..c6a7e7d675 100644 --- a/crates/ruff_python_ast/src/node.rs +++ b/crates/ruff_python_ast/src/node.rs @@ -1,3 +1,4 @@ +use crate::visitor::preorder::PreorderVisitor; use crate::{ self as ast, Alias, Arguments, Comprehension, Decorator, ExceptHandler, Expr, Keyword, MatchCase, Mod, Parameter, ParameterWithDefault, Parameters, Pattern, Ranged, Stmt, TypeParam, @@ -17,6 +18,10 @@ pub trait AstNode: Ranged { /// Consumes `self` and returns its [`AnyNode`] representation. fn into_any_node(self) -> AnyNode; + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized; } #[derive(Clone, Debug, is_macro::Is, PartialEq)] @@ -24,7 +29,6 @@ pub enum AnyNode { ModModule(ast::ModModule), ModExpression(ast::ModExpression), StmtFunctionDef(ast::StmtFunctionDef), - StmtAsyncFunctionDef(ast::StmtAsyncFunctionDef), StmtClassDef(ast::StmtClassDef), StmtReturn(ast::StmtReturn), StmtDelete(ast::StmtDelete), @@ -33,15 +37,12 @@ pub enum AnyNode { StmtAugAssign(ast::StmtAugAssign), StmtAnnAssign(ast::StmtAnnAssign), StmtFor(ast::StmtFor), - StmtAsyncFor(ast::StmtAsyncFor), StmtWhile(ast::StmtWhile), StmtIf(ast::StmtIf), StmtWith(ast::StmtWith), - StmtAsyncWith(ast::StmtAsyncWith), StmtMatch(ast::StmtMatch), StmtRaise(ast::StmtRaise), StmtTry(ast::StmtTry), - StmtTryStar(ast::StmtTryStar), StmtAssert(ast::StmtAssert), StmtImport(ast::StmtImport), StmtImportFrom(ast::StmtImportFrom), @@ -51,7 +52,7 @@ pub enum AnyNode { StmtPass(ast::StmtPass), StmtBreak(ast::StmtBreak), StmtContinue(ast::StmtContinue), - StmtLineMagic(ast::StmtLineMagic), + StmtIpyEscapeCommand(ast::StmtIpyEscapeCommand), ExprBoolOp(ast::ExprBoolOp), ExprNamedExpr(ast::ExprNamedExpr), ExprBinOp(ast::ExprBinOp), @@ -70,7 +71,7 @@ pub enum AnyNode { ExprCompare(ast::ExprCompare), ExprCall(ast::ExprCall), ExprFormattedValue(ast::ExprFormattedValue), - ExprJoinedStr(ast::ExprJoinedStr), + ExprFString(ast::ExprFString), ExprConstant(ast::ExprConstant), ExprAttribute(ast::ExprAttribute), ExprSubscript(ast::ExprSubscript), @@ -79,7 +80,7 @@ pub enum AnyNode { ExprList(ast::ExprList), ExprTuple(ast::ExprTuple), ExprSlice(ast::ExprSlice), - ExprLineMagic(ast::ExprLineMagic), + ExprIpyEscapeCommand(ast::ExprIpyEscapeCommand), ExceptHandlerExceptHandler(ast::ExceptHandlerExceptHandler), PatternMatchValue(ast::PatternMatchValue), PatternMatchSingleton(ast::PatternMatchSingleton), @@ -110,7 +111,6 @@ impl AnyNode { pub fn statement(self) -> Option { match self { AnyNode::StmtFunctionDef(node) => Some(Stmt::FunctionDef(node)), - AnyNode::StmtAsyncFunctionDef(node) => Some(Stmt::AsyncFunctionDef(node)), AnyNode::StmtClassDef(node) => Some(Stmt::ClassDef(node)), AnyNode::StmtReturn(node) => Some(Stmt::Return(node)), AnyNode::StmtDelete(node) => Some(Stmt::Delete(node)), @@ -119,15 +119,12 @@ impl AnyNode { AnyNode::StmtAugAssign(node) => Some(Stmt::AugAssign(node)), AnyNode::StmtAnnAssign(node) => Some(Stmt::AnnAssign(node)), AnyNode::StmtFor(node) => Some(Stmt::For(node)), - AnyNode::StmtAsyncFor(node) => Some(Stmt::AsyncFor(node)), AnyNode::StmtWhile(node) => Some(Stmt::While(node)), AnyNode::StmtIf(node) => Some(Stmt::If(node)), AnyNode::StmtWith(node) => Some(Stmt::With(node)), - AnyNode::StmtAsyncWith(node) => Some(Stmt::AsyncWith(node)), AnyNode::StmtMatch(node) => Some(Stmt::Match(node)), AnyNode::StmtRaise(node) => Some(Stmt::Raise(node)), AnyNode::StmtTry(node) => Some(Stmt::Try(node)), - AnyNode::StmtTryStar(node) => Some(Stmt::TryStar(node)), AnyNode::StmtAssert(node) => Some(Stmt::Assert(node)), AnyNode::StmtImport(node) => Some(Stmt::Import(node)), AnyNode::StmtImportFrom(node) => Some(Stmt::ImportFrom(node)), @@ -137,7 +134,7 @@ impl AnyNode { AnyNode::StmtPass(node) => Some(Stmt::Pass(node)), AnyNode::StmtBreak(node) => Some(Stmt::Break(node)), AnyNode::StmtContinue(node) => Some(Stmt::Continue(node)), - AnyNode::StmtLineMagic(node) => Some(Stmt::LineMagic(node)), + AnyNode::StmtIpyEscapeCommand(node) => Some(Stmt::IpyEscapeCommand(node)), AnyNode::ModModule(_) | AnyNode::ModExpression(_) @@ -159,7 +156,7 @@ impl AnyNode { | AnyNode::ExprCompare(_) | AnyNode::ExprCall(_) | AnyNode::ExprFormattedValue(_) - | AnyNode::ExprJoinedStr(_) + | AnyNode::ExprFString(_) | AnyNode::ExprConstant(_) | AnyNode::ExprAttribute(_) | AnyNode::ExprSubscript(_) @@ -168,7 +165,7 @@ impl AnyNode { | AnyNode::ExprList(_) | AnyNode::ExprTuple(_) | AnyNode::ExprSlice(_) - | AnyNode::ExprLineMagic(_) + | AnyNode::ExprIpyEscapeCommand(_) | AnyNode::ExceptHandlerExceptHandler(_) | AnyNode::PatternMatchValue(_) | AnyNode::PatternMatchSingleton(_) @@ -216,7 +213,7 @@ impl AnyNode { AnyNode::ExprCompare(node) => Some(Expr::Compare(node)), AnyNode::ExprCall(node) => Some(Expr::Call(node)), AnyNode::ExprFormattedValue(node) => Some(Expr::FormattedValue(node)), - AnyNode::ExprJoinedStr(node) => Some(Expr::JoinedStr(node)), + AnyNode::ExprFString(node) => Some(Expr::FString(node)), AnyNode::ExprConstant(node) => Some(Expr::Constant(node)), AnyNode::ExprAttribute(node) => Some(Expr::Attribute(node)), AnyNode::ExprSubscript(node) => Some(Expr::Subscript(node)), @@ -225,12 +222,11 @@ impl AnyNode { AnyNode::ExprList(node) => Some(Expr::List(node)), AnyNode::ExprTuple(node) => Some(Expr::Tuple(node)), AnyNode::ExprSlice(node) => Some(Expr::Slice(node)), - AnyNode::ExprLineMagic(node) => Some(Expr::LineMagic(node)), + AnyNode::ExprIpyEscapeCommand(node) => Some(Expr::IpyEscapeCommand(node)), AnyNode::ModModule(_) | AnyNode::ModExpression(_) | AnyNode::StmtFunctionDef(_) - | AnyNode::StmtAsyncFunctionDef(_) | AnyNode::StmtClassDef(_) | AnyNode::StmtReturn(_) | AnyNode::StmtDelete(_) @@ -239,15 +235,12 @@ impl AnyNode { | AnyNode::StmtAugAssign(_) | AnyNode::StmtAnnAssign(_) | AnyNode::StmtFor(_) - | AnyNode::StmtAsyncFor(_) | AnyNode::StmtWhile(_) | AnyNode::StmtIf(_) | AnyNode::StmtWith(_) - | AnyNode::StmtAsyncWith(_) | AnyNode::StmtMatch(_) | AnyNode::StmtRaise(_) | AnyNode::StmtTry(_) - | AnyNode::StmtTryStar(_) | AnyNode::StmtAssert(_) | AnyNode::StmtImport(_) | AnyNode::StmtImportFrom(_) @@ -257,7 +250,7 @@ impl AnyNode { | AnyNode::StmtPass(_) | AnyNode::StmtBreak(_) | AnyNode::StmtContinue(_) - | AnyNode::StmtLineMagic(_) + | AnyNode::StmtIpyEscapeCommand(_) | AnyNode::ExceptHandlerExceptHandler(_) | AnyNode::PatternMatchValue(_) | AnyNode::PatternMatchSingleton(_) @@ -291,7 +284,6 @@ impl AnyNode { AnyNode::ModExpression(node) => Some(Mod::Expression(node)), AnyNode::StmtFunctionDef(_) - | AnyNode::StmtAsyncFunctionDef(_) | AnyNode::StmtClassDef(_) | AnyNode::StmtReturn(_) | AnyNode::StmtDelete(_) @@ -300,15 +292,12 @@ impl AnyNode { | AnyNode::StmtAugAssign(_) | AnyNode::StmtAnnAssign(_) | AnyNode::StmtFor(_) - | AnyNode::StmtAsyncFor(_) | AnyNode::StmtWhile(_) | AnyNode::StmtIf(_) | AnyNode::StmtWith(_) - | AnyNode::StmtAsyncWith(_) | AnyNode::StmtMatch(_) | AnyNode::StmtRaise(_) | AnyNode::StmtTry(_) - | AnyNode::StmtTryStar(_) | AnyNode::StmtAssert(_) | AnyNode::StmtImport(_) | AnyNode::StmtImportFrom(_) @@ -318,7 +307,7 @@ impl AnyNode { | AnyNode::StmtPass(_) | AnyNode::StmtBreak(_) | AnyNode::StmtContinue(_) - | AnyNode::StmtLineMagic(_) + | AnyNode::StmtIpyEscapeCommand(_) | AnyNode::ExprBoolOp(_) | AnyNode::ExprNamedExpr(_) | AnyNode::ExprBinOp(_) @@ -337,7 +326,7 @@ impl AnyNode { | AnyNode::ExprCompare(_) | AnyNode::ExprCall(_) | AnyNode::ExprFormattedValue(_) - | AnyNode::ExprJoinedStr(_) + | AnyNode::ExprFString(_) | AnyNode::ExprConstant(_) | AnyNode::ExprAttribute(_) | AnyNode::ExprSubscript(_) @@ -346,7 +335,7 @@ impl AnyNode { | AnyNode::ExprList(_) | AnyNode::ExprTuple(_) | AnyNode::ExprSlice(_) - | AnyNode::ExprLineMagic(_) + | AnyNode::ExprIpyEscapeCommand(_) | AnyNode::ExceptHandlerExceptHandler(_) | AnyNode::PatternMatchValue(_) | AnyNode::PatternMatchSingleton(_) @@ -388,7 +377,6 @@ impl AnyNode { AnyNode::ModModule(_) | AnyNode::ModExpression(_) | AnyNode::StmtFunctionDef(_) - | AnyNode::StmtAsyncFunctionDef(_) | AnyNode::StmtClassDef(_) | AnyNode::StmtReturn(_) | AnyNode::StmtDelete(_) @@ -397,15 +385,12 @@ impl AnyNode { | AnyNode::StmtAugAssign(_) | AnyNode::StmtAnnAssign(_) | AnyNode::StmtFor(_) - | AnyNode::StmtAsyncFor(_) | AnyNode::StmtWhile(_) | AnyNode::StmtIf(_) | AnyNode::StmtWith(_) - | AnyNode::StmtAsyncWith(_) | AnyNode::StmtMatch(_) | AnyNode::StmtRaise(_) | AnyNode::StmtTry(_) - | AnyNode::StmtTryStar(_) | AnyNode::StmtAssert(_) | AnyNode::StmtImport(_) | AnyNode::StmtImportFrom(_) @@ -415,7 +400,7 @@ impl AnyNode { | AnyNode::StmtPass(_) | AnyNode::StmtBreak(_) | AnyNode::StmtContinue(_) - | AnyNode::StmtLineMagic(_) + | AnyNode::StmtIpyEscapeCommand(_) | AnyNode::ExprBoolOp(_) | AnyNode::ExprNamedExpr(_) | AnyNode::ExprBinOp(_) @@ -434,7 +419,7 @@ impl AnyNode { | AnyNode::ExprCompare(_) | AnyNode::ExprCall(_) | AnyNode::ExprFormattedValue(_) - | AnyNode::ExprJoinedStr(_) + | AnyNode::ExprFString(_) | AnyNode::ExprConstant(_) | AnyNode::ExprAttribute(_) | AnyNode::ExprSubscript(_) @@ -443,7 +428,7 @@ impl AnyNode { | AnyNode::ExprList(_) | AnyNode::ExprTuple(_) | AnyNode::ExprSlice(_) - | AnyNode::ExprLineMagic(_) + | AnyNode::ExprIpyEscapeCommand(_) | AnyNode::ExceptHandlerExceptHandler(_) | AnyNode::Comprehension(_) | AnyNode::Arguments(_) @@ -470,7 +455,6 @@ impl AnyNode { AnyNode::ModModule(_) | AnyNode::ModExpression(_) | AnyNode::StmtFunctionDef(_) - | AnyNode::StmtAsyncFunctionDef(_) | AnyNode::StmtClassDef(_) | AnyNode::StmtReturn(_) | AnyNode::StmtDelete(_) @@ -479,15 +463,12 @@ impl AnyNode { | AnyNode::StmtAugAssign(_) | AnyNode::StmtAnnAssign(_) | AnyNode::StmtFor(_) - | AnyNode::StmtAsyncFor(_) | AnyNode::StmtWhile(_) | AnyNode::StmtIf(_) | AnyNode::StmtWith(_) - | AnyNode::StmtAsyncWith(_) | AnyNode::StmtMatch(_) | AnyNode::StmtRaise(_) | AnyNode::StmtTry(_) - | AnyNode::StmtTryStar(_) | AnyNode::StmtAssert(_) | AnyNode::StmtImport(_) | AnyNode::StmtImportFrom(_) @@ -497,7 +478,7 @@ impl AnyNode { | AnyNode::StmtPass(_) | AnyNode::StmtBreak(_) | AnyNode::StmtContinue(_) - | AnyNode::StmtLineMagic(_) + | AnyNode::StmtIpyEscapeCommand(_) | AnyNode::ExprBoolOp(_) | AnyNode::ExprNamedExpr(_) | AnyNode::ExprBinOp(_) @@ -516,7 +497,7 @@ impl AnyNode { | AnyNode::ExprCompare(_) | AnyNode::ExprCall(_) | AnyNode::ExprFormattedValue(_) - | AnyNode::ExprJoinedStr(_) + | AnyNode::ExprFString(_) | AnyNode::ExprConstant(_) | AnyNode::ExprAttribute(_) | AnyNode::ExprSubscript(_) @@ -525,7 +506,7 @@ impl AnyNode { | AnyNode::ExprList(_) | AnyNode::ExprTuple(_) | AnyNode::ExprSlice(_) - | AnyNode::ExprLineMagic(_) + | AnyNode::ExprIpyEscapeCommand(_) | AnyNode::PatternMatchValue(_) | AnyNode::PatternMatchSingleton(_) | AnyNode::PatternMatchSequence(_) @@ -577,7 +558,6 @@ impl AnyNode { Self::ModModule(node) => AnyNodeRef::ModModule(node), Self::ModExpression(node) => AnyNodeRef::ModExpression(node), Self::StmtFunctionDef(node) => AnyNodeRef::StmtFunctionDef(node), - Self::StmtAsyncFunctionDef(node) => AnyNodeRef::StmtAsyncFunctionDef(node), Self::StmtClassDef(node) => AnyNodeRef::StmtClassDef(node), Self::StmtReturn(node) => AnyNodeRef::StmtReturn(node), Self::StmtDelete(node) => AnyNodeRef::StmtDelete(node), @@ -586,15 +566,12 @@ impl AnyNode { Self::StmtAugAssign(node) => AnyNodeRef::StmtAugAssign(node), Self::StmtAnnAssign(node) => AnyNodeRef::StmtAnnAssign(node), Self::StmtFor(node) => AnyNodeRef::StmtFor(node), - Self::StmtAsyncFor(node) => AnyNodeRef::StmtAsyncFor(node), Self::StmtWhile(node) => AnyNodeRef::StmtWhile(node), Self::StmtIf(node) => AnyNodeRef::StmtIf(node), Self::StmtWith(node) => AnyNodeRef::StmtWith(node), - Self::StmtAsyncWith(node) => AnyNodeRef::StmtAsyncWith(node), Self::StmtMatch(node) => AnyNodeRef::StmtMatch(node), Self::StmtRaise(node) => AnyNodeRef::StmtRaise(node), Self::StmtTry(node) => AnyNodeRef::StmtTry(node), - Self::StmtTryStar(node) => AnyNodeRef::StmtTryStar(node), Self::StmtAssert(node) => AnyNodeRef::StmtAssert(node), Self::StmtImport(node) => AnyNodeRef::StmtImport(node), Self::StmtImportFrom(node) => AnyNodeRef::StmtImportFrom(node), @@ -604,7 +581,7 @@ impl AnyNode { Self::StmtPass(node) => AnyNodeRef::StmtPass(node), Self::StmtBreak(node) => AnyNodeRef::StmtBreak(node), Self::StmtContinue(node) => AnyNodeRef::StmtContinue(node), - Self::StmtLineMagic(node) => AnyNodeRef::StmtLineMagic(node), + Self::StmtIpyEscapeCommand(node) => AnyNodeRef::StmtIpyEscapeCommand(node), Self::ExprBoolOp(node) => AnyNodeRef::ExprBoolOp(node), Self::ExprNamedExpr(node) => AnyNodeRef::ExprNamedExpr(node), Self::ExprBinOp(node) => AnyNodeRef::ExprBinOp(node), @@ -623,7 +600,7 @@ impl AnyNode { Self::ExprCompare(node) => AnyNodeRef::ExprCompare(node), Self::ExprCall(node) => AnyNodeRef::ExprCall(node), Self::ExprFormattedValue(node) => AnyNodeRef::ExprFormattedValue(node), - Self::ExprJoinedStr(node) => AnyNodeRef::ExprJoinedStr(node), + Self::ExprFString(node) => AnyNodeRef::ExprFString(node), Self::ExprConstant(node) => AnyNodeRef::ExprConstant(node), Self::ExprAttribute(node) => AnyNodeRef::ExprAttribute(node), Self::ExprSubscript(node) => AnyNodeRef::ExprSubscript(node), @@ -632,7 +609,7 @@ impl AnyNode { Self::ExprList(node) => AnyNodeRef::ExprList(node), Self::ExprTuple(node) => AnyNodeRef::ExprTuple(node), Self::ExprSlice(node) => AnyNodeRef::ExprSlice(node), - Self::ExprLineMagic(node) => AnyNodeRef::ExprLineMagic(node), + Self::ExprIpyEscapeCommand(node) => AnyNodeRef::ExprIpyEscapeCommand(node), Self::ExceptHandlerExceptHandler(node) => AnyNodeRef::ExceptHandlerExceptHandler(node), Self::PatternMatchValue(node) => AnyNodeRef::PatternMatchValue(node), Self::PatternMatchSingleton(node) => AnyNodeRef::PatternMatchSingleton(node), @@ -693,7 +670,16 @@ impl AstNode for ast::ModModule { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ModModule { body, range: _ } = self; + visitor.visit_body(body); + } } + impl AstNode for ast::ModExpression { fn cast(kind: AnyNode) -> Option where @@ -721,6 +707,14 @@ impl AstNode for ast::ModExpression { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ModExpression { body, range: _ } = self; + visitor.visit_expr(body); + } } impl AstNode for ast::StmtFunctionDef { fn cast(kind: AnyNode) -> Option @@ -749,33 +743,35 @@ impl AstNode for ast::StmtFunctionDef { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } -} -impl AstNode for ast::StmtAsyncFunctionDef { - fn cast(kind: AnyNode) -> Option + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) where - Self: Sized, + V: PreorderVisitor<'a> + ?Sized, { - if let AnyNode::StmtAsyncFunctionDef(node) = kind { - Some(node) - } else { - None + let ast::StmtFunctionDef { + parameters, + body, + decorator_list, + returns, + type_params, + .. + } = self; + + for decorator in decorator_list { + visitor.visit_decorator(decorator); } - } - fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { - if let AnyNodeRef::StmtAsyncFunctionDef(node) = kind { - Some(node) - } else { - None + if let Some(type_params) = type_params { + visitor.visit_type_params(type_params); } - } - fn as_any_node_ref(&self) -> AnyNodeRef { - AnyNodeRef::from(self) - } + visitor.visit_parameters(parameters); - fn into_any_node(self) -> AnyNode { - AnyNode::from(self) + for expr in returns { + visitor.visit_annotation(expr); + } + + visitor.visit_body(body); } } impl AstNode for ast::StmtClassDef { @@ -805,6 +801,33 @@ impl AstNode for ast::StmtClassDef { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtClassDef { + arguments, + body, + decorator_list, + type_params, + .. + } = self; + + for decorator in decorator_list { + visitor.visit_decorator(decorator); + } + + if let Some(type_params) = type_params { + visitor.visit_type_params(type_params); + } + + if let Some(arguments) = arguments { + visitor.visit_arguments(arguments); + } + + visitor.visit_body(body); + } } impl AstNode for ast::StmtReturn { fn cast(kind: AnyNode) -> Option @@ -833,6 +856,16 @@ impl AstNode for ast::StmtReturn { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtReturn { value, range: _ } = self; + if let Some(expr) = value { + visitor.visit_expr(expr); + } + } } impl AstNode for ast::StmtDelete { fn cast(kind: AnyNode) -> Option @@ -861,6 +894,16 @@ impl AstNode for ast::StmtDelete { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtDelete { targets, range: _ } = self; + for expr in targets { + visitor.visit_expr(expr); + } + } } impl AstNode for ast::StmtTypeAlias { fn cast(kind: AnyNode) -> Option @@ -889,6 +932,24 @@ impl AstNode for ast::StmtTypeAlias { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtTypeAlias { + range: _, + name, + type_params, + value, + } = self; + + visitor.visit_expr(name); + if let Some(type_params) = type_params { + visitor.visit_type_params(type_params); + } + visitor.visit_expr(value); + } } impl AstNode for ast::StmtAssign { fn cast(kind: AnyNode) -> Option @@ -917,6 +978,23 @@ impl AstNode for ast::StmtAssign { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtAssign { + targets, + value, + range: _, + } = self; + + for expr in targets { + visitor.visit_expr(expr); + } + + visitor.visit_expr(value); + } } impl AstNode for ast::StmtAugAssign { fn cast(kind: AnyNode) -> Option @@ -945,6 +1023,22 @@ impl AstNode for ast::StmtAugAssign { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtAugAssign { + target, + op, + value, + range: _, + } = self; + + visitor.visit_expr(target); + visitor.visit_operator(op); + visitor.visit_expr(value); + } } impl AstNode for ast::StmtAnnAssign { fn cast(kind: AnyNode) -> Option @@ -973,6 +1067,25 @@ impl AstNode for ast::StmtAnnAssign { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtAnnAssign { + target, + annotation, + value, + range: _, + simple: _, + } = self; + + visitor.visit_expr(target); + visitor.visit_annotation(annotation); + if let Some(expr) = value { + visitor.visit_expr(expr); + } + } } impl AstNode for ast::StmtFor { fn cast(kind: AnyNode) -> Option @@ -1001,33 +1114,23 @@ impl AstNode for ast::StmtFor { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } -} -impl AstNode for ast::StmtAsyncFor { - fn cast(kind: AnyNode) -> Option + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) where - Self: Sized, + V: PreorderVisitor<'a> + ?Sized, { - if let AnyNode::StmtAsyncFor(node) = kind { - Some(node) - } else { - None - } - } + let ast::StmtFor { + target, + iter, + body, + orelse, + .. + } = self; - fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { - if let AnyNodeRef::StmtAsyncFor(node) = kind { - Some(node) - } else { - None - } - } - - fn as_any_node_ref(&self) -> AnyNodeRef { - AnyNodeRef::from(self) - } - - fn into_any_node(self) -> AnyNode { - AnyNode::from(self) + visitor.visit_expr(target); + visitor.visit_expr(iter); + visitor.visit_body(body); + visitor.visit_body(orelse); } } impl AstNode for ast::StmtWhile { @@ -1057,6 +1160,22 @@ impl AstNode for ast::StmtWhile { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtWhile { + test, + body, + orelse, + range: _, + } = self; + + visitor.visit_expr(test); + visitor.visit_body(body); + visitor.visit_body(orelse); + } } impl AstNode for ast::StmtIf { fn cast(kind: AnyNode) -> Option @@ -1085,6 +1204,24 @@ impl AstNode for ast::StmtIf { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtIf { + test, + body, + elif_else_clauses, + range: _, + } = self; + + visitor.visit_expr(test); + visitor.visit_body(body); + for clause in elif_else_clauses { + visitor.visit_elif_else_clause(clause); + } + } } impl AstNode for ast::ElifElseClause { fn cast(kind: AnyNode) -> Option @@ -1113,6 +1250,21 @@ impl AstNode for ast::ElifElseClause { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ElifElseClause { + range: _, + test, + body, + } = self; + if let Some(test) = test { + visitor.visit_expr(test); + } + visitor.visit_body(body); + } } impl AstNode for ast::StmtWith { fn cast(kind: AnyNode) -> Option @@ -1141,33 +1293,22 @@ impl AstNode for ast::StmtWith { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } -} -impl AstNode for ast::StmtAsyncWith { - fn cast(kind: AnyNode) -> Option + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) where - Self: Sized, + V: PreorderVisitor<'a> + ?Sized, { - if let AnyNode::StmtAsyncWith(node) = kind { - Some(node) - } else { - None + let ast::StmtWith { + items, + body, + is_async: _, + range: _, + } = self; + + for with_item in items { + visitor.visit_with_item(with_item); } - } - - fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { - if let AnyNodeRef::StmtAsyncWith(node) = kind { - Some(node) - } else { - None - } - } - - fn as_any_node_ref(&self) -> AnyNodeRef { - AnyNodeRef::from(self) - } - - fn into_any_node(self) -> AnyNode { - AnyNode::from(self) + visitor.visit_body(body); } } impl AstNode for ast::StmtMatch { @@ -1197,6 +1338,22 @@ impl AstNode for ast::StmtMatch { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtMatch { + subject, + cases, + range: _, + } = self; + + visitor.visit_expr(subject); + for match_case in cases { + visitor.visit_match_case(match_case); + } + } } impl AstNode for ast::StmtRaise { fn cast(kind: AnyNode) -> Option @@ -1225,6 +1382,24 @@ impl AstNode for ast::StmtRaise { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtRaise { + exc, + cause, + range: _, + } = self; + + if let Some(expr) = exc { + visitor.visit_expr(expr); + }; + if let Some(expr) = cause { + visitor.visit_expr(expr); + }; + } } impl AstNode for ast::StmtTry { fn cast(kind: AnyNode) -> Option @@ -1253,33 +1428,26 @@ impl AstNode for ast::StmtTry { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } -} -impl AstNode for ast::StmtTryStar { - fn cast(kind: AnyNode) -> Option + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) where - Self: Sized, + V: PreorderVisitor<'a> + ?Sized, { - if let AnyNode::StmtTryStar(node) = kind { - Some(node) - } else { - None + let ast::StmtTry { + body, + handlers, + orelse, + finalbody, + is_star: _, + range: _, + } = self; + + visitor.visit_body(body); + for except_handler in handlers { + visitor.visit_except_handler(except_handler); } - } - - fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { - if let AnyNodeRef::StmtTryStar(node) = kind { - Some(node) - } else { - None - } - } - - fn as_any_node_ref(&self) -> AnyNodeRef { - AnyNodeRef::from(self) - } - - fn into_any_node(self) -> AnyNode { - AnyNode::from(self) + visitor.visit_body(orelse); + visitor.visit_body(finalbody); } } impl AstNode for ast::StmtAssert { @@ -1309,6 +1477,21 @@ impl AstNode for ast::StmtAssert { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtAssert { + test, + msg, + range: _, + } = self; + visitor.visit_expr(test); + if let Some(expr) = msg { + visitor.visit_expr(expr); + } + } } impl AstNode for ast::StmtImport { fn cast(kind: AnyNode) -> Option @@ -1337,6 +1520,17 @@ impl AstNode for ast::StmtImport { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtImport { names, range: _ } = self; + + for alias in names { + visitor.visit_alias(alias); + } + } } impl AstNode for ast::StmtImportFrom { fn cast(kind: AnyNode) -> Option @@ -1365,6 +1559,22 @@ impl AstNode for ast::StmtImportFrom { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtImportFrom { + range: _, + module: _, + names, + level: _, + } = self; + + for alias in names { + visitor.visit_alias(alias); + } + } } impl AstNode for ast::StmtGlobal { fn cast(kind: AnyNode) -> Option @@ -1393,6 +1603,13 @@ impl AstNode for ast::StmtGlobal { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + } } impl AstNode for ast::StmtNonlocal { fn cast(kind: AnyNode) -> Option @@ -1421,6 +1638,13 @@ impl AstNode for ast::StmtNonlocal { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + } } impl AstNode for ast::StmtExpr { fn cast(kind: AnyNode) -> Option @@ -1449,6 +1673,15 @@ impl AstNode for ast::StmtExpr { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::StmtExpr { value, range: _ } = self; + + visitor.visit_expr(value); + } } impl AstNode for ast::StmtPass { fn cast(kind: AnyNode) -> Option @@ -1477,6 +1710,13 @@ impl AstNode for ast::StmtPass { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + } } impl AstNode for ast::StmtBreak { fn cast(kind: AnyNode) -> Option @@ -1505,6 +1745,13 @@ impl AstNode for ast::StmtBreak { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + } } impl AstNode for ast::StmtContinue { fn cast(kind: AnyNode) -> Option @@ -1533,13 +1780,20 @@ impl AstNode for ast::StmtContinue { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + } } -impl AstNode for ast::StmtLineMagic { +impl AstNode for ast::StmtIpyEscapeCommand { fn cast(kind: AnyNode) -> Option where Self: Sized, { - if let AnyNode::StmtLineMagic(node) = kind { + if let AnyNode::StmtIpyEscapeCommand(node) = kind { Some(node) } else { None @@ -1547,7 +1801,7 @@ impl AstNode for ast::StmtLineMagic { } fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { - if let AnyNodeRef::StmtLineMagic(node) = kind { + if let AnyNodeRef::StmtIpyEscapeCommand(node) = kind { Some(node) } else { None @@ -1561,6 +1815,13 @@ impl AstNode for ast::StmtLineMagic { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + } } impl AstNode for ast::ExprBoolOp { fn cast(kind: AnyNode) -> Option @@ -1589,6 +1850,29 @@ impl AstNode for ast::ExprBoolOp { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprBoolOp { + op, + values, + range: _, + } = self; + match values.as_slice() { + [left, rest @ ..] => { + visitor.visit_expr(left); + visitor.visit_bool_op(op); + for expr in rest { + visitor.visit_expr(expr); + } + } + [] => { + visitor.visit_bool_op(op); + } + } + } } impl AstNode for ast::ExprNamedExpr { fn cast(kind: AnyNode) -> Option @@ -1617,6 +1901,19 @@ impl AstNode for ast::ExprNamedExpr { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprNamedExpr { + target, + value, + range: _, + } = self; + visitor.visit_expr(target); + visitor.visit_expr(value); + } } impl AstNode for ast::ExprBinOp { fn cast(kind: AnyNode) -> Option @@ -1645,6 +1942,21 @@ impl AstNode for ast::ExprBinOp { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprBinOp { + left, + op, + right, + range: _, + } = self; + visitor.visit_expr(left); + visitor.visit_operator(op); + visitor.visit_expr(right); + } } impl AstNode for ast::ExprUnaryOp { fn cast(kind: AnyNode) -> Option @@ -1673,6 +1985,20 @@ impl AstNode for ast::ExprUnaryOp { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprUnaryOp { + op, + operand, + range: _, + } = self; + + visitor.visit_unary_op(op); + visitor.visit_expr(operand); + } } impl AstNode for ast::ExprLambda { fn cast(kind: AnyNode) -> Option @@ -1701,6 +2027,20 @@ impl AstNode for ast::ExprLambda { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprLambda { + parameters, + body, + range: _, + } = self; + + visitor.visit_parameters(parameters); + visitor.visit_expr(body); + } } impl AstNode for ast::ExprIfExp { fn cast(kind: AnyNode) -> Option @@ -1729,6 +2069,23 @@ impl AstNode for ast::ExprIfExp { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprIfExp { + test, + body, + orelse, + range: _, + } = self; + + // `body if test else orelse` + visitor.visit_expr(body); + visitor.visit_expr(test); + visitor.visit_expr(orelse); + } } impl AstNode for ast::ExprDict { fn cast(kind: AnyNode) -> Option @@ -1757,6 +2114,24 @@ impl AstNode for ast::ExprDict { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprDict { + keys, + values, + range: _, + } = self; + + for (key, value) in keys.iter().zip(values) { + if let Some(key) = key { + visitor.visit_expr(key); + } + visitor.visit_expr(value); + } + } } impl AstNode for ast::ExprSet { fn cast(kind: AnyNode) -> Option @@ -1785,6 +2160,17 @@ impl AstNode for ast::ExprSet { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprSet { elts, range: _ } = self; + + for expr in elts { + visitor.visit_expr(expr); + } + } } impl AstNode for ast::ExprListComp { fn cast(kind: AnyNode) -> Option @@ -1813,6 +2199,22 @@ impl AstNode for ast::ExprListComp { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprListComp { + elt, + generators, + range: _, + } = self; + + visitor.visit_expr(elt); + for comprehension in generators { + visitor.visit_comprehension(comprehension); + } + } } impl AstNode for ast::ExprSetComp { fn cast(kind: AnyNode) -> Option @@ -1841,6 +2243,22 @@ impl AstNode for ast::ExprSetComp { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprSetComp { + elt, + generators, + range: _, + } = self; + + visitor.visit_expr(elt); + for comprehension in generators { + visitor.visit_comprehension(comprehension); + } + } } impl AstNode for ast::ExprDictComp { fn cast(kind: AnyNode) -> Option @@ -1869,6 +2287,25 @@ impl AstNode for ast::ExprDictComp { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprDictComp { + key, + value, + generators, + range: _, + } = self; + + visitor.visit_expr(key); + visitor.visit_expr(value); + + for comprehension in generators { + visitor.visit_comprehension(comprehension); + } + } } impl AstNode for ast::ExprGeneratorExp { fn cast(kind: AnyNode) -> Option @@ -1897,6 +2334,21 @@ impl AstNode for ast::ExprGeneratorExp { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprGeneratorExp { + elt, + generators, + range: _, + } = self; + visitor.visit_expr(elt); + for comprehension in generators { + visitor.visit_comprehension(comprehension); + } + } } impl AstNode for ast::ExprAwait { fn cast(kind: AnyNode) -> Option @@ -1925,6 +2377,14 @@ impl AstNode for ast::ExprAwait { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprAwait { value, range: _ } = self; + visitor.visit_expr(value); + } } impl AstNode for ast::ExprYield { fn cast(kind: AnyNode) -> Option @@ -1953,6 +2413,16 @@ impl AstNode for ast::ExprYield { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprYield { value, range: _ } = self; + if let Some(expr) = value { + visitor.visit_expr(expr); + } + } } impl AstNode for ast::ExprYieldFrom { fn cast(kind: AnyNode) -> Option @@ -1981,6 +2451,14 @@ impl AstNode for ast::ExprYieldFrom { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprYieldFrom { value, range: _ } = self; + visitor.visit_expr(value); + } } impl AstNode for ast::ExprCompare { fn cast(kind: AnyNode) -> Option @@ -2009,6 +2487,25 @@ impl AstNode for ast::ExprCompare { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprCompare { + left, + ops, + comparators, + range: _, + } = self; + + visitor.visit_expr(left); + + for (op, comparator) in ops.iter().zip(comparators) { + visitor.visit_cmp_op(op); + visitor.visit_expr(comparator); + } + } } impl AstNode for ast::ExprCall { fn cast(kind: AnyNode) -> Option @@ -2037,6 +2534,19 @@ impl AstNode for ast::ExprCall { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprCall { + func, + arguments, + range: _, + } = self; + visitor.visit_expr(func); + visitor.visit_arguments(arguments); + } } impl AstNode for ast::ExprFormattedValue { fn cast(kind: AnyNode) -> Option @@ -2065,13 +2575,27 @@ impl AstNode for ast::ExprFormattedValue { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprFormattedValue { + value, format_spec, .. + } = self; + visitor.visit_expr(value); + + if let Some(expr) = format_spec { + visitor.visit_format_spec(expr); + } + } } -impl AstNode for ast::ExprJoinedStr { +impl AstNode for ast::ExprFString { fn cast(kind: AnyNode) -> Option where Self: Sized, { - if let AnyNode::ExprJoinedStr(node) = kind { + if let AnyNode::ExprFString(node) = kind { Some(node) } else { None @@ -2079,7 +2603,7 @@ impl AstNode for ast::ExprJoinedStr { } fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { - if let AnyNodeRef::ExprJoinedStr(node) = kind { + if let AnyNodeRef::ExprFString(node) = kind { Some(node) } else { None @@ -2093,6 +2617,21 @@ impl AstNode for ast::ExprJoinedStr { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprFString { + values, + implicit_concatenated: _, + range: _, + } = self; + + for expr in values { + visitor.visit_expr(expr); + } + } } impl AstNode for ast::ExprConstant { fn cast(kind: AnyNode) -> Option @@ -2121,6 +2660,18 @@ impl AstNode for ast::ExprConstant { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprConstant { + value, + range: _, + kind: _, + } = self; + visitor.visit_constant(value); + } } impl AstNode for ast::ExprAttribute { fn cast(kind: AnyNode) -> Option @@ -2149,6 +2700,20 @@ impl AstNode for ast::ExprAttribute { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprAttribute { + value, + attr: _, + ctx: _, + range: _, + } = self; + + visitor.visit_expr(value); + } } impl AstNode for ast::ExprSubscript { fn cast(kind: AnyNode) -> Option @@ -2177,6 +2742,20 @@ impl AstNode for ast::ExprSubscript { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprSubscript { + value, + slice, + ctx: _, + range: _, + } = self; + visitor.visit_expr(value); + visitor.visit_expr(slice); + } } impl AstNode for ast::ExprStarred { fn cast(kind: AnyNode) -> Option @@ -2205,6 +2784,19 @@ impl AstNode for ast::ExprStarred { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprStarred { + value, + ctx: _, + range: _, + } = self; + + visitor.visit_expr(value); + } } impl AstNode for ast::ExprName { fn cast(kind: AnyNode) -> Option @@ -2233,6 +2825,18 @@ impl AstNode for ast::ExprName { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprName { + id: _, + ctx: _, + range: _, + } = self; + } } impl AstNode for ast::ExprList { fn cast(kind: AnyNode) -> Option @@ -2261,6 +2865,21 @@ impl AstNode for ast::ExprList { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprList { + elts, + ctx: _, + range: _, + } = self; + + for expr in elts { + visitor.visit_expr(expr); + } + } } impl AstNode for ast::ExprTuple { fn cast(kind: AnyNode) -> Option @@ -2289,6 +2908,21 @@ impl AstNode for ast::ExprTuple { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprTuple { + elts, + ctx: _, + range: _, + } = self; + + for expr in elts { + visitor.visit_expr(expr); + } + } } impl AstNode for ast::ExprSlice { fn cast(kind: AnyNode) -> Option @@ -2317,13 +2951,34 @@ impl AstNode for ast::ExprSlice { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprSlice { + lower, + upper, + step, + range: _, + } = self; + + if let Some(expr) = lower { + visitor.visit_expr(expr); + } + if let Some(expr) = upper { + visitor.visit_expr(expr); + } + if let Some(expr) = step { + visitor.visit_expr(expr); + } + } } -impl AstNode for ast::ExprLineMagic { +impl AstNode for ast::ExprIpyEscapeCommand { fn cast(kind: AnyNode) -> Option where Self: Sized, { - if let AnyNode::ExprLineMagic(node) = kind { + if let AnyNode::ExprIpyEscapeCommand(node) = kind { Some(node) } else { None @@ -2331,7 +2986,7 @@ impl AstNode for ast::ExprLineMagic { } fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { - if let AnyNodeRef::ExprLineMagic(node) = kind { + if let AnyNodeRef::ExprIpyEscapeCommand(node) = kind { Some(node) } else { None @@ -2345,6 +3000,18 @@ impl AstNode for ast::ExprLineMagic { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExprIpyEscapeCommand { + range: _, + kind: _, + value: _, + } = self; + } } impl AstNode for ast::ExceptHandlerExceptHandler { fn cast(kind: AnyNode) -> Option @@ -2373,6 +3040,22 @@ impl AstNode for ast::ExceptHandlerExceptHandler { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ExceptHandlerExceptHandler { + range: _, + type_, + name: _, + body, + } = self; + if let Some(expr) = type_ { + visitor.visit_expr(expr); + } + visitor.visit_body(body); + } } impl AstNode for ast::PatternMatchValue { fn cast(kind: AnyNode) -> Option @@ -2401,6 +3084,14 @@ impl AstNode for ast::PatternMatchValue { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::PatternMatchValue { value, range: _ } = self; + visitor.visit_expr(value); + } } impl AstNode for ast::PatternMatchSingleton { fn cast(kind: AnyNode) -> Option @@ -2429,6 +3120,14 @@ impl AstNode for ast::PatternMatchSingleton { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::PatternMatchSingleton { value, range: _ } = self; + visitor.visit_constant(value); + } } impl AstNode for ast::PatternMatchSequence { fn cast(kind: AnyNode) -> Option @@ -2457,6 +3156,16 @@ impl AstNode for ast::PatternMatchSequence { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::PatternMatchSequence { patterns, range: _ } = self; + for pattern in patterns { + visitor.visit_pattern(pattern); + } + } } impl AstNode for ast::PatternMatchMapping { fn cast(kind: AnyNode) -> Option @@ -2485,6 +3194,22 @@ impl AstNode for ast::PatternMatchMapping { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::PatternMatchMapping { + keys, + patterns, + range: _, + rest: _, + } = self; + for (key, pattern) in keys.iter().zip(patterns) { + visitor.visit_expr(key); + visitor.visit_pattern(pattern); + } + } } impl AstNode for ast::PatternMatchClass { fn cast(kind: AnyNode) -> Option @@ -2513,6 +3238,27 @@ impl AstNode for ast::PatternMatchClass { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::PatternMatchClass { + cls, + patterns, + kwd_attrs: _, + kwd_patterns, + range: _, + } = self; + visitor.visit_expr(cls); + for pattern in patterns { + visitor.visit_pattern(pattern); + } + + for pattern in kwd_patterns { + visitor.visit_pattern(pattern); + } + } } impl AstNode for ast::PatternMatchStar { fn cast(kind: AnyNode) -> Option @@ -2541,6 +3287,14 @@ impl AstNode for ast::PatternMatchStar { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::PatternMatchStar { range: _, name: _ } = self; + } } impl AstNode for ast::PatternMatchAs { fn cast(kind: AnyNode) -> Option @@ -2569,6 +3323,20 @@ impl AstNode for ast::PatternMatchAs { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::PatternMatchAs { + pattern, + range: _, + name: _, + } = self; + if let Some(pattern) = pattern { + visitor.visit_pattern(pattern); + } + } } impl AstNode for ast::PatternMatchOr { fn cast(kind: AnyNode) -> Option @@ -2597,6 +3365,16 @@ impl AstNode for ast::PatternMatchOr { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::PatternMatchOr { patterns, range: _ } = self; + for pattern in patterns { + visitor.visit_pattern(pattern); + } + } } impl AstNode for Comprehension { @@ -2626,6 +3404,25 @@ impl AstNode for Comprehension { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::Comprehension { + range: _, + target, + iter, + ifs, + is_async: _, + } = self; + visitor.visit_expr(target); + visitor.visit_expr(iter); + + for expr in ifs { + visitor.visit_expr(expr); + } + } } impl AstNode for Arguments { fn cast(kind: AnyNode) -> Option @@ -2654,6 +3451,25 @@ impl AstNode for Arguments { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::Arguments { + range: _, + args, + keywords, + } = self; + + for arg in args { + visitor.visit_expr(arg); + } + + for keyword in keywords { + visitor.visit_keyword(keyword); + } + } } impl AstNode for Parameters { fn cast(kind: AnyNode) -> Option @@ -2682,6 +3498,35 @@ impl AstNode for Parameters { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::Parameters { + range: _, + posonlyargs, + args, + vararg, + kwonlyargs, + kwarg, + } = self; + for arg in posonlyargs.iter().chain(args) { + visitor.visit_parameter_with_default(arg); + } + + if let Some(arg) = vararg { + visitor.visit_parameter(arg); + } + + for arg in kwonlyargs { + visitor.visit_parameter_with_default(arg); + } + + if let Some(arg) = kwarg { + visitor.visit_parameter(arg); + } + } } impl AstNode for Parameter { fn cast(kind: AnyNode) -> Option @@ -2710,6 +3555,21 @@ impl AstNode for Parameter { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::Parameter { + range: _, + name: _, + annotation, + } = self; + + if let Some(expr) = annotation { + visitor.visit_annotation(expr); + } + } } impl AstNode for ParameterWithDefault { fn cast(kind: AnyNode) -> Option @@ -2738,6 +3598,21 @@ impl AstNode for ParameterWithDefault { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::ParameterWithDefault { + range: _, + parameter, + default, + } = self; + visitor.visit_parameter(parameter); + if let Some(expr) = default { + visitor.visit_expr(expr); + } + } } impl AstNode for Keyword { fn cast(kind: AnyNode) -> Option @@ -2766,6 +3641,19 @@ impl AstNode for Keyword { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::Keyword { + range: _, + arg: _, + value, + } = self; + + visitor.visit_expr(value); + } } impl AstNode for Alias { fn cast(kind: AnyNode) -> Option @@ -2794,6 +3682,18 @@ impl AstNode for Alias { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::Alias { + range: _, + name: _, + asname: _, + } = self; + } } impl AstNode for WithItem { fn cast(kind: AnyNode) -> Option @@ -2822,6 +3722,23 @@ impl AstNode for WithItem { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::WithItem { + range: _, + context_expr, + optional_vars, + } = self; + + visitor.visit_expr(context_expr); + + if let Some(expr) = optional_vars { + visitor.visit_expr(expr); + } + } } impl AstNode for MatchCase { fn cast(kind: AnyNode) -> Option @@ -2850,6 +3767,24 @@ impl AstNode for MatchCase { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::MatchCase { + range: _, + pattern, + guard, + body, + } = self; + + visitor.visit_pattern(pattern); + if let Some(expr) = guard { + visitor.visit_expr(expr); + } + visitor.visit_body(body); + } } impl AstNode for Decorator { @@ -2879,6 +3814,18 @@ impl AstNode for Decorator { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::Decorator { + range: _, + expression, + } = self; + + visitor.visit_expr(expression); + } } impl AstNode for ast::TypeParams { fn cast(kind: AnyNode) -> Option @@ -2907,6 +3854,20 @@ impl AstNode for ast::TypeParams { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::TypeParams { + range: _, + type_params, + } = self; + + for type_param in type_params { + visitor.visit_type_param(type_param); + } + } } impl AstNode for ast::TypeParamTypeVar { fn cast(kind: AnyNode) -> Option @@ -2935,6 +3896,21 @@ impl AstNode for ast::TypeParamTypeVar { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::TypeParamTypeVar { + bound, + name: _, + range: _, + } = self; + + if let Some(expr) = bound { + visitor.visit_expr(expr); + } + } } impl AstNode for ast::TypeParamTypeVarTuple { fn cast(kind: AnyNode) -> Option @@ -2963,6 +3939,14 @@ impl AstNode for ast::TypeParamTypeVarTuple { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::TypeParamTypeVarTuple { range: _, name: _ } = self; + } } impl AstNode for ast::TypeParamParamSpec { fn cast(kind: AnyNode) -> Option @@ -2991,12 +3975,19 @@ impl AstNode for ast::TypeParamParamSpec { fn into_any_node(self) -> AnyNode { AnyNode::from(self) } + + #[inline] + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + let ast::TypeParamParamSpec { range: _, name: _ } = self; + } } impl From for AnyNode { fn from(stmt: Stmt) -> Self { match stmt { Stmt::FunctionDef(node) => AnyNode::StmtFunctionDef(node), - Stmt::AsyncFunctionDef(node) => AnyNode::StmtAsyncFunctionDef(node), Stmt::ClassDef(node) => AnyNode::StmtClassDef(node), Stmt::Return(node) => AnyNode::StmtReturn(node), Stmt::Delete(node) => AnyNode::StmtDelete(node), @@ -3005,15 +3996,12 @@ impl From for AnyNode { Stmt::AugAssign(node) => AnyNode::StmtAugAssign(node), Stmt::AnnAssign(node) => AnyNode::StmtAnnAssign(node), Stmt::For(node) => AnyNode::StmtFor(node), - Stmt::AsyncFor(node) => AnyNode::StmtAsyncFor(node), Stmt::While(node) => AnyNode::StmtWhile(node), Stmt::If(node) => AnyNode::StmtIf(node), Stmt::With(node) => AnyNode::StmtWith(node), - Stmt::AsyncWith(node) => AnyNode::StmtAsyncWith(node), Stmt::Match(node) => AnyNode::StmtMatch(node), Stmt::Raise(node) => AnyNode::StmtRaise(node), Stmt::Try(node) => AnyNode::StmtTry(node), - Stmt::TryStar(node) => AnyNode::StmtTryStar(node), Stmt::Assert(node) => AnyNode::StmtAssert(node), Stmt::Import(node) => AnyNode::StmtImport(node), Stmt::ImportFrom(node) => AnyNode::StmtImportFrom(node), @@ -3023,7 +4011,7 @@ impl From for AnyNode { Stmt::Pass(node) => AnyNode::StmtPass(node), Stmt::Break(node) => AnyNode::StmtBreak(node), Stmt::Continue(node) => AnyNode::StmtContinue(node), - Stmt::LineMagic(node) => AnyNode::StmtLineMagic(node), + Stmt::IpyEscapeCommand(node) => AnyNode::StmtIpyEscapeCommand(node), } } } @@ -3049,7 +4037,7 @@ impl From for AnyNode { Expr::Compare(node) => AnyNode::ExprCompare(node), Expr::Call(node) => AnyNode::ExprCall(node), Expr::FormattedValue(node) => AnyNode::ExprFormattedValue(node), - Expr::JoinedStr(node) => AnyNode::ExprJoinedStr(node), + Expr::FString(node) => AnyNode::ExprFString(node), Expr::Constant(node) => AnyNode::ExprConstant(node), Expr::Attribute(node) => AnyNode::ExprAttribute(node), Expr::Subscript(node) => AnyNode::ExprSubscript(node), @@ -3058,7 +4046,7 @@ impl From for AnyNode { Expr::List(node) => AnyNode::ExprList(node), Expr::Tuple(node) => AnyNode::ExprTuple(node), Expr::Slice(node) => AnyNode::ExprSlice(node), - Expr::LineMagic(node) => AnyNode::ExprLineMagic(node), + Expr::IpyEscapeCommand(node) => AnyNode::ExprIpyEscapeCommand(node), } } } @@ -3113,12 +4101,6 @@ impl From for AnyNode { } } -impl From for AnyNode { - fn from(node: ast::StmtAsyncFunctionDef) -> Self { - AnyNode::StmtAsyncFunctionDef(node) - } -} - impl From for AnyNode { fn from(node: ast::StmtClassDef) -> Self { AnyNode::StmtClassDef(node) @@ -3167,12 +4149,6 @@ impl From for AnyNode { } } -impl From for AnyNode { - fn from(node: ast::StmtAsyncFor) -> Self { - AnyNode::StmtAsyncFor(node) - } -} - impl From for AnyNode { fn from(node: ast::StmtWhile) -> Self { AnyNode::StmtWhile(node) @@ -3197,12 +4173,6 @@ impl From for AnyNode { } } -impl From for AnyNode { - fn from(node: ast::StmtAsyncWith) -> Self { - AnyNode::StmtAsyncWith(node) - } -} - impl From for AnyNode { fn from(node: ast::StmtMatch) -> Self { AnyNode::StmtMatch(node) @@ -3221,12 +4191,6 @@ impl From for AnyNode { } } -impl From for AnyNode { - fn from(node: ast::StmtTryStar) -> Self { - AnyNode::StmtTryStar(node) - } -} - impl From for AnyNode { fn from(node: ast::StmtAssert) -> Self { AnyNode::StmtAssert(node) @@ -3281,9 +4245,9 @@ impl From for AnyNode { } } -impl From for AnyNode { - fn from(node: ast::StmtLineMagic) -> Self { - AnyNode::StmtLineMagic(node) +impl From for AnyNode { + fn from(node: ast::StmtIpyEscapeCommand) -> Self { + AnyNode::StmtIpyEscapeCommand(node) } } @@ -3395,9 +4359,9 @@ impl From for AnyNode { } } -impl From for AnyNode { - fn from(node: ast::ExprJoinedStr) -> Self { - AnyNode::ExprJoinedStr(node) +impl From for AnyNode { + fn from(node: ast::ExprFString) -> Self { + AnyNode::ExprFString(node) } } @@ -3449,9 +4413,9 @@ impl From for AnyNode { } } -impl From for AnyNode { - fn from(node: ast::ExprLineMagic) -> Self { - AnyNode::ExprLineMagic(node) +impl From for AnyNode { + fn from(node: ast::ExprIpyEscapeCommand) -> Self { + AnyNode::ExprIpyEscapeCommand(node) } } @@ -3588,7 +4552,6 @@ impl Ranged for AnyNode { AnyNode::ModModule(node) => node.range(), AnyNode::ModExpression(node) => node.range(), AnyNode::StmtFunctionDef(node) => node.range(), - AnyNode::StmtAsyncFunctionDef(node) => node.range(), AnyNode::StmtClassDef(node) => node.range(), AnyNode::StmtReturn(node) => node.range(), AnyNode::StmtDelete(node) => node.range(), @@ -3597,15 +4560,12 @@ impl Ranged for AnyNode { AnyNode::StmtAugAssign(node) => node.range(), AnyNode::StmtAnnAssign(node) => node.range(), AnyNode::StmtFor(node) => node.range(), - AnyNode::StmtAsyncFor(node) => node.range(), AnyNode::StmtWhile(node) => node.range(), AnyNode::StmtIf(node) => node.range(), AnyNode::StmtWith(node) => node.range(), - AnyNode::StmtAsyncWith(node) => node.range(), AnyNode::StmtMatch(node) => node.range(), AnyNode::StmtRaise(node) => node.range(), AnyNode::StmtTry(node) => node.range(), - AnyNode::StmtTryStar(node) => node.range(), AnyNode::StmtAssert(node) => node.range(), AnyNode::StmtImport(node) => node.range(), AnyNode::StmtImportFrom(node) => node.range(), @@ -3615,7 +4575,7 @@ impl Ranged for AnyNode { AnyNode::StmtPass(node) => node.range(), AnyNode::StmtBreak(node) => node.range(), AnyNode::StmtContinue(node) => node.range(), - AnyNode::StmtLineMagic(node) => node.range(), + AnyNode::StmtIpyEscapeCommand(node) => node.range(), AnyNode::ExprBoolOp(node) => node.range(), AnyNode::ExprNamedExpr(node) => node.range(), AnyNode::ExprBinOp(node) => node.range(), @@ -3634,7 +4594,7 @@ impl Ranged for AnyNode { AnyNode::ExprCompare(node) => node.range(), AnyNode::ExprCall(node) => node.range(), AnyNode::ExprFormattedValue(node) => node.range(), - AnyNode::ExprJoinedStr(node) => node.range(), + AnyNode::ExprFString(node) => node.range(), AnyNode::ExprConstant(node) => node.range(), AnyNode::ExprAttribute(node) => node.range(), AnyNode::ExprSubscript(node) => node.range(), @@ -3643,7 +4603,7 @@ impl Ranged for AnyNode { AnyNode::ExprList(node) => node.range(), AnyNode::ExprTuple(node) => node.range(), AnyNode::ExprSlice(node) => node.range(), - AnyNode::ExprLineMagic(node) => node.range(), + AnyNode::ExprIpyEscapeCommand(node) => node.range(), AnyNode::ExceptHandlerExceptHandler(node) => node.range(), AnyNode::PatternMatchValue(node) => node.range(), AnyNode::PatternMatchSingleton(node) => node.range(), @@ -3677,7 +4637,6 @@ pub enum AnyNodeRef<'a> { ModModule(&'a ast::ModModule), ModExpression(&'a ast::ModExpression), StmtFunctionDef(&'a ast::StmtFunctionDef), - StmtAsyncFunctionDef(&'a ast::StmtAsyncFunctionDef), StmtClassDef(&'a ast::StmtClassDef), StmtReturn(&'a ast::StmtReturn), StmtDelete(&'a ast::StmtDelete), @@ -3686,15 +4645,12 @@ pub enum AnyNodeRef<'a> { StmtAugAssign(&'a ast::StmtAugAssign), StmtAnnAssign(&'a ast::StmtAnnAssign), StmtFor(&'a ast::StmtFor), - StmtAsyncFor(&'a ast::StmtAsyncFor), StmtWhile(&'a ast::StmtWhile), StmtIf(&'a ast::StmtIf), StmtWith(&'a ast::StmtWith), - StmtAsyncWith(&'a ast::StmtAsyncWith), StmtMatch(&'a ast::StmtMatch), StmtRaise(&'a ast::StmtRaise), StmtTry(&'a ast::StmtTry), - StmtTryStar(&'a ast::StmtTryStar), StmtAssert(&'a ast::StmtAssert), StmtImport(&'a ast::StmtImport), StmtImportFrom(&'a ast::StmtImportFrom), @@ -3704,7 +4660,7 @@ pub enum AnyNodeRef<'a> { StmtPass(&'a ast::StmtPass), StmtBreak(&'a ast::StmtBreak), StmtContinue(&'a ast::StmtContinue), - StmtLineMagic(&'a ast::StmtLineMagic), + StmtIpyEscapeCommand(&'a ast::StmtIpyEscapeCommand), ExprBoolOp(&'a ast::ExprBoolOp), ExprNamedExpr(&'a ast::ExprNamedExpr), ExprBinOp(&'a ast::ExprBinOp), @@ -3723,7 +4679,7 @@ pub enum AnyNodeRef<'a> { ExprCompare(&'a ast::ExprCompare), ExprCall(&'a ast::ExprCall), ExprFormattedValue(&'a ast::ExprFormattedValue), - ExprJoinedStr(&'a ast::ExprJoinedStr), + ExprFString(&'a ast::ExprFString), ExprConstant(&'a ast::ExprConstant), ExprAttribute(&'a ast::ExprAttribute), ExprSubscript(&'a ast::ExprSubscript), @@ -3732,7 +4688,7 @@ pub enum AnyNodeRef<'a> { ExprList(&'a ast::ExprList), ExprTuple(&'a ast::ExprTuple), ExprSlice(&'a ast::ExprSlice), - ExprLineMagic(&'a ast::ExprLineMagic), + ExprIpyEscapeCommand(&'a ast::ExprIpyEscapeCommand), ExceptHandlerExceptHandler(&'a ast::ExceptHandlerExceptHandler), PatternMatchValue(&'a ast::PatternMatchValue), PatternMatchSingleton(&'a ast::PatternMatchSingleton), @@ -3765,7 +4721,6 @@ impl AnyNodeRef<'_> { AnyNodeRef::ModModule(node) => NonNull::from(*node).cast(), AnyNodeRef::ModExpression(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtFunctionDef(node) => NonNull::from(*node).cast(), - AnyNodeRef::StmtAsyncFunctionDef(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtClassDef(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtReturn(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtDelete(node) => NonNull::from(*node).cast(), @@ -3774,15 +4729,12 @@ impl AnyNodeRef<'_> { AnyNodeRef::StmtAugAssign(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtAnnAssign(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtFor(node) => NonNull::from(*node).cast(), - AnyNodeRef::StmtAsyncFor(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtWhile(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtIf(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtWith(node) => NonNull::from(*node).cast(), - AnyNodeRef::StmtAsyncWith(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtMatch(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtRaise(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtTry(node) => NonNull::from(*node).cast(), - AnyNodeRef::StmtTryStar(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtAssert(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtImport(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtImportFrom(node) => NonNull::from(*node).cast(), @@ -3792,7 +4744,7 @@ impl AnyNodeRef<'_> { AnyNodeRef::StmtPass(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtBreak(node) => NonNull::from(*node).cast(), AnyNodeRef::StmtContinue(node) => NonNull::from(*node).cast(), - AnyNodeRef::StmtLineMagic(node) => NonNull::from(*node).cast(), + AnyNodeRef::StmtIpyEscapeCommand(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprBoolOp(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprNamedExpr(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprBinOp(node) => NonNull::from(*node).cast(), @@ -3811,7 +4763,7 @@ impl AnyNodeRef<'_> { AnyNodeRef::ExprCompare(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprCall(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprFormattedValue(node) => NonNull::from(*node).cast(), - AnyNodeRef::ExprJoinedStr(node) => NonNull::from(*node).cast(), + AnyNodeRef::ExprFString(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprConstant(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprAttribute(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprSubscript(node) => NonNull::from(*node).cast(), @@ -3820,7 +4772,7 @@ impl AnyNodeRef<'_> { AnyNodeRef::ExprList(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprTuple(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprSlice(node) => NonNull::from(*node).cast(), - AnyNodeRef::ExprLineMagic(node) => NonNull::from(*node).cast(), + AnyNodeRef::ExprIpyEscapeCommand(node) => NonNull::from(*node).cast(), AnyNodeRef::ExceptHandlerExceptHandler(node) => NonNull::from(*node).cast(), AnyNodeRef::PatternMatchValue(node) => NonNull::from(*node).cast(), AnyNodeRef::PatternMatchSingleton(node) => NonNull::from(*node).cast(), @@ -3859,7 +4811,6 @@ impl AnyNodeRef<'_> { AnyNodeRef::ModModule(_) => NodeKind::ModModule, AnyNodeRef::ModExpression(_) => NodeKind::ModExpression, AnyNodeRef::StmtFunctionDef(_) => NodeKind::StmtFunctionDef, - AnyNodeRef::StmtAsyncFunctionDef(_) => NodeKind::StmtAsyncFunctionDef, AnyNodeRef::StmtClassDef(_) => NodeKind::StmtClassDef, AnyNodeRef::StmtReturn(_) => NodeKind::StmtReturn, AnyNodeRef::StmtDelete(_) => NodeKind::StmtDelete, @@ -3868,15 +4819,12 @@ impl AnyNodeRef<'_> { AnyNodeRef::StmtAugAssign(_) => NodeKind::StmtAugAssign, AnyNodeRef::StmtAnnAssign(_) => NodeKind::StmtAnnAssign, AnyNodeRef::StmtFor(_) => NodeKind::StmtFor, - AnyNodeRef::StmtAsyncFor(_) => NodeKind::StmtAsyncFor, AnyNodeRef::StmtWhile(_) => NodeKind::StmtWhile, AnyNodeRef::StmtIf(_) => NodeKind::StmtIf, AnyNodeRef::StmtWith(_) => NodeKind::StmtWith, - AnyNodeRef::StmtAsyncWith(_) => NodeKind::StmtAsyncWith, AnyNodeRef::StmtMatch(_) => NodeKind::StmtMatch, AnyNodeRef::StmtRaise(_) => NodeKind::StmtRaise, AnyNodeRef::StmtTry(_) => NodeKind::StmtTry, - AnyNodeRef::StmtTryStar(_) => NodeKind::StmtTryStar, AnyNodeRef::StmtAssert(_) => NodeKind::StmtAssert, AnyNodeRef::StmtImport(_) => NodeKind::StmtImport, AnyNodeRef::StmtImportFrom(_) => NodeKind::StmtImportFrom, @@ -3886,7 +4834,7 @@ impl AnyNodeRef<'_> { AnyNodeRef::StmtPass(_) => NodeKind::StmtPass, AnyNodeRef::StmtBreak(_) => NodeKind::StmtBreak, AnyNodeRef::StmtContinue(_) => NodeKind::StmtContinue, - AnyNodeRef::StmtLineMagic(_) => NodeKind::StmtLineMagic, + AnyNodeRef::StmtIpyEscapeCommand(_) => NodeKind::StmtIpyEscapeCommand, AnyNodeRef::ExprBoolOp(_) => NodeKind::ExprBoolOp, AnyNodeRef::ExprNamedExpr(_) => NodeKind::ExprNamedExpr, AnyNodeRef::ExprBinOp(_) => NodeKind::ExprBinOp, @@ -3905,7 +4853,7 @@ impl AnyNodeRef<'_> { AnyNodeRef::ExprCompare(_) => NodeKind::ExprCompare, AnyNodeRef::ExprCall(_) => NodeKind::ExprCall, AnyNodeRef::ExprFormattedValue(_) => NodeKind::ExprFormattedValue, - AnyNodeRef::ExprJoinedStr(_) => NodeKind::ExprJoinedStr, + AnyNodeRef::ExprFString(_) => NodeKind::ExprFString, AnyNodeRef::ExprConstant(_) => NodeKind::ExprConstant, AnyNodeRef::ExprAttribute(_) => NodeKind::ExprAttribute, AnyNodeRef::ExprSubscript(_) => NodeKind::ExprSubscript, @@ -3914,7 +4862,7 @@ impl AnyNodeRef<'_> { AnyNodeRef::ExprList(_) => NodeKind::ExprList, AnyNodeRef::ExprTuple(_) => NodeKind::ExprTuple, AnyNodeRef::ExprSlice(_) => NodeKind::ExprSlice, - AnyNodeRef::ExprLineMagic(_) => NodeKind::ExprLineMagic, + AnyNodeRef::ExprIpyEscapeCommand(_) => NodeKind::ExprIpyEscapeCommand, AnyNodeRef::ExceptHandlerExceptHandler(_) => NodeKind::ExceptHandlerExceptHandler, AnyNodeRef::PatternMatchValue(_) => NodeKind::PatternMatchValue, AnyNodeRef::PatternMatchSingleton(_) => NodeKind::PatternMatchSingleton, @@ -3945,7 +4893,6 @@ impl AnyNodeRef<'_> { pub const fn is_statement(self) -> bool { match self { AnyNodeRef::StmtFunctionDef(_) - | AnyNodeRef::StmtAsyncFunctionDef(_) | AnyNodeRef::StmtClassDef(_) | AnyNodeRef::StmtReturn(_) | AnyNodeRef::StmtDelete(_) @@ -3954,15 +4901,12 @@ impl AnyNodeRef<'_> { | AnyNodeRef::StmtAugAssign(_) | AnyNodeRef::StmtAnnAssign(_) | AnyNodeRef::StmtFor(_) - | AnyNodeRef::StmtAsyncFor(_) | AnyNodeRef::StmtWhile(_) | AnyNodeRef::StmtIf(_) | AnyNodeRef::StmtWith(_) - | AnyNodeRef::StmtAsyncWith(_) | AnyNodeRef::StmtMatch(_) | AnyNodeRef::StmtRaise(_) | AnyNodeRef::StmtTry(_) - | AnyNodeRef::StmtTryStar(_) | AnyNodeRef::StmtAssert(_) | AnyNodeRef::StmtImport(_) | AnyNodeRef::StmtImportFrom(_) @@ -3972,7 +4916,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::StmtPass(_) | AnyNodeRef::StmtBreak(_) | AnyNodeRef::StmtContinue(_) - | AnyNodeRef::StmtLineMagic(_) => true, + | AnyNodeRef::StmtIpyEscapeCommand(_) => true, AnyNodeRef::ModModule(_) | AnyNodeRef::ModExpression(_) @@ -3994,7 +4938,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::ExprCompare(_) | AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprFormattedValue(_) - | AnyNodeRef::ExprJoinedStr(_) + | AnyNodeRef::ExprFString(_) | AnyNodeRef::ExprConstant(_) | AnyNodeRef::ExprAttribute(_) | AnyNodeRef::ExprSubscript(_) @@ -4003,7 +4947,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::ExprList(_) | AnyNodeRef::ExprTuple(_) | AnyNodeRef::ExprSlice(_) - | AnyNodeRef::ExprLineMagic(_) + | AnyNodeRef::ExprIpyEscapeCommand(_) | AnyNodeRef::ExceptHandlerExceptHandler(_) | AnyNodeRef::PatternMatchValue(_) | AnyNodeRef::PatternMatchSingleton(_) @@ -4051,7 +4995,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::ExprCompare(_) | AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprFormattedValue(_) - | AnyNodeRef::ExprJoinedStr(_) + | AnyNodeRef::ExprFString(_) | AnyNodeRef::ExprConstant(_) | AnyNodeRef::ExprAttribute(_) | AnyNodeRef::ExprSubscript(_) @@ -4060,12 +5004,11 @@ impl AnyNodeRef<'_> { | AnyNodeRef::ExprList(_) | AnyNodeRef::ExprTuple(_) | AnyNodeRef::ExprSlice(_) - | AnyNodeRef::ExprLineMagic(_) => true, + | AnyNodeRef::ExprIpyEscapeCommand(_) => true, AnyNodeRef::ModModule(_) | AnyNodeRef::ModExpression(_) | AnyNodeRef::StmtFunctionDef(_) - | AnyNodeRef::StmtAsyncFunctionDef(_) | AnyNodeRef::StmtClassDef(_) | AnyNodeRef::StmtReturn(_) | AnyNodeRef::StmtDelete(_) @@ -4074,15 +5017,12 @@ impl AnyNodeRef<'_> { | AnyNodeRef::StmtAugAssign(_) | AnyNodeRef::StmtAnnAssign(_) | AnyNodeRef::StmtFor(_) - | AnyNodeRef::StmtAsyncFor(_) | AnyNodeRef::StmtWhile(_) | AnyNodeRef::StmtIf(_) | AnyNodeRef::StmtWith(_) - | AnyNodeRef::StmtAsyncWith(_) | AnyNodeRef::StmtMatch(_) | AnyNodeRef::StmtRaise(_) | AnyNodeRef::StmtTry(_) - | AnyNodeRef::StmtTryStar(_) | AnyNodeRef::StmtAssert(_) | AnyNodeRef::StmtImport(_) | AnyNodeRef::StmtImportFrom(_) @@ -4092,7 +5032,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::StmtPass(_) | AnyNodeRef::StmtBreak(_) | AnyNodeRef::StmtContinue(_) - | AnyNodeRef::StmtLineMagic(_) + | AnyNodeRef::StmtIpyEscapeCommand(_) | AnyNodeRef::ExceptHandlerExceptHandler(_) | AnyNodeRef::PatternMatchValue(_) | AnyNodeRef::PatternMatchSingleton(_) @@ -4125,7 +5065,6 @@ impl AnyNodeRef<'_> { AnyNodeRef::ModModule(_) | AnyNodeRef::ModExpression(_) => true, AnyNodeRef::StmtFunctionDef(_) - | AnyNodeRef::StmtAsyncFunctionDef(_) | AnyNodeRef::StmtClassDef(_) | AnyNodeRef::StmtReturn(_) | AnyNodeRef::StmtDelete(_) @@ -4134,15 +5073,12 @@ impl AnyNodeRef<'_> { | AnyNodeRef::StmtAugAssign(_) | AnyNodeRef::StmtAnnAssign(_) | AnyNodeRef::StmtFor(_) - | AnyNodeRef::StmtAsyncFor(_) | AnyNodeRef::StmtWhile(_) | AnyNodeRef::StmtIf(_) | AnyNodeRef::StmtWith(_) - | AnyNodeRef::StmtAsyncWith(_) | AnyNodeRef::StmtMatch(_) | AnyNodeRef::StmtRaise(_) | AnyNodeRef::StmtTry(_) - | AnyNodeRef::StmtTryStar(_) | AnyNodeRef::StmtAssert(_) | AnyNodeRef::StmtImport(_) | AnyNodeRef::StmtImportFrom(_) @@ -4152,7 +5088,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::StmtPass(_) | AnyNodeRef::StmtBreak(_) | AnyNodeRef::StmtContinue(_) - | AnyNodeRef::StmtLineMagic(_) + | AnyNodeRef::StmtIpyEscapeCommand(_) | AnyNodeRef::ExprBoolOp(_) | AnyNodeRef::ExprNamedExpr(_) | AnyNodeRef::ExprBinOp(_) @@ -4171,7 +5107,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::ExprCompare(_) | AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprFormattedValue(_) - | AnyNodeRef::ExprJoinedStr(_) + | AnyNodeRef::ExprFString(_) | AnyNodeRef::ExprConstant(_) | AnyNodeRef::ExprAttribute(_) | AnyNodeRef::ExprSubscript(_) @@ -4180,7 +5116,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::ExprList(_) | AnyNodeRef::ExprTuple(_) | AnyNodeRef::ExprSlice(_) - | AnyNodeRef::ExprLineMagic(_) + | AnyNodeRef::ExprIpyEscapeCommand(_) | AnyNodeRef::ExceptHandlerExceptHandler(_) | AnyNodeRef::PatternMatchValue(_) | AnyNodeRef::PatternMatchSingleton(_) @@ -4222,7 +5158,6 @@ impl AnyNodeRef<'_> { AnyNodeRef::ModModule(_) | AnyNodeRef::ModExpression(_) | AnyNodeRef::StmtFunctionDef(_) - | AnyNodeRef::StmtAsyncFunctionDef(_) | AnyNodeRef::StmtClassDef(_) | AnyNodeRef::StmtReturn(_) | AnyNodeRef::StmtDelete(_) @@ -4231,15 +5166,12 @@ impl AnyNodeRef<'_> { | AnyNodeRef::StmtAugAssign(_) | AnyNodeRef::StmtAnnAssign(_) | AnyNodeRef::StmtFor(_) - | AnyNodeRef::StmtAsyncFor(_) | AnyNodeRef::StmtWhile(_) | AnyNodeRef::StmtIf(_) | AnyNodeRef::StmtWith(_) - | AnyNodeRef::StmtAsyncWith(_) | AnyNodeRef::StmtMatch(_) | AnyNodeRef::StmtRaise(_) | AnyNodeRef::StmtTry(_) - | AnyNodeRef::StmtTryStar(_) | AnyNodeRef::StmtAssert(_) | AnyNodeRef::StmtImport(_) | AnyNodeRef::StmtImportFrom(_) @@ -4249,7 +5181,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::StmtPass(_) | AnyNodeRef::StmtBreak(_) | AnyNodeRef::StmtContinue(_) - | AnyNodeRef::StmtLineMagic(_) + | AnyNodeRef::StmtIpyEscapeCommand(_) | AnyNodeRef::ExprBoolOp(_) | AnyNodeRef::ExprNamedExpr(_) | AnyNodeRef::ExprBinOp(_) @@ -4268,7 +5200,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::ExprCompare(_) | AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprFormattedValue(_) - | AnyNodeRef::ExprJoinedStr(_) + | AnyNodeRef::ExprFString(_) | AnyNodeRef::ExprConstant(_) | AnyNodeRef::ExprAttribute(_) | AnyNodeRef::ExprSubscript(_) @@ -4277,7 +5209,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::ExprList(_) | AnyNodeRef::ExprTuple(_) | AnyNodeRef::ExprSlice(_) - | AnyNodeRef::ExprLineMagic(_) + | AnyNodeRef::ExprIpyEscapeCommand(_) | AnyNodeRef::ExceptHandlerExceptHandler(_) | AnyNodeRef::Comprehension(_) | AnyNodeRef::Arguments(_) @@ -4304,7 +5236,6 @@ impl AnyNodeRef<'_> { AnyNodeRef::ModModule(_) | AnyNodeRef::ModExpression(_) | AnyNodeRef::StmtFunctionDef(_) - | AnyNodeRef::StmtAsyncFunctionDef(_) | AnyNodeRef::StmtClassDef(_) | AnyNodeRef::StmtReturn(_) | AnyNodeRef::StmtDelete(_) @@ -4313,15 +5244,12 @@ impl AnyNodeRef<'_> { | AnyNodeRef::StmtAugAssign(_) | AnyNodeRef::StmtAnnAssign(_) | AnyNodeRef::StmtFor(_) - | AnyNodeRef::StmtAsyncFor(_) | AnyNodeRef::StmtWhile(_) | AnyNodeRef::StmtIf(_) | AnyNodeRef::StmtWith(_) - | AnyNodeRef::StmtAsyncWith(_) | AnyNodeRef::StmtMatch(_) | AnyNodeRef::StmtRaise(_) | AnyNodeRef::StmtTry(_) - | AnyNodeRef::StmtTryStar(_) | AnyNodeRef::StmtAssert(_) | AnyNodeRef::StmtImport(_) | AnyNodeRef::StmtImportFrom(_) @@ -4331,7 +5259,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::StmtPass(_) | AnyNodeRef::StmtBreak(_) | AnyNodeRef::StmtContinue(_) - | AnyNodeRef::StmtLineMagic(_) + | AnyNodeRef::StmtIpyEscapeCommand(_) | AnyNodeRef::ExprBoolOp(_) | AnyNodeRef::ExprNamedExpr(_) | AnyNodeRef::ExprBinOp(_) @@ -4350,7 +5278,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::ExprCompare(_) | AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprFormattedValue(_) - | AnyNodeRef::ExprJoinedStr(_) + | AnyNodeRef::ExprFString(_) | AnyNodeRef::ExprConstant(_) | AnyNodeRef::ExprAttribute(_) | AnyNodeRef::ExprSubscript(_) @@ -4359,7 +5287,7 @@ impl AnyNodeRef<'_> { | AnyNodeRef::ExprList(_) | AnyNodeRef::ExprTuple(_) | AnyNodeRef::ExprSlice(_) - | AnyNodeRef::ExprLineMagic(_) + | AnyNodeRef::ExprIpyEscapeCommand(_) | AnyNodeRef::PatternMatchValue(_) | AnyNodeRef::PatternMatchSingleton(_) | AnyNodeRef::PatternMatchSequence(_) @@ -4391,16 +5319,12 @@ impl AnyNodeRef<'_> { self, AnyNodeRef::StmtIf(_) | AnyNodeRef::StmtFor(_) - | AnyNodeRef::StmtAsyncFor(_) | AnyNodeRef::StmtWhile(_) | AnyNodeRef::StmtWith(_) - | AnyNodeRef::StmtAsyncWith(_) | AnyNodeRef::StmtMatch(_) | AnyNodeRef::StmtFunctionDef(_) - | AnyNodeRef::StmtAsyncFunctionDef(_) | AnyNodeRef::StmtClassDef(_) | AnyNodeRef::StmtTry(_) - | AnyNodeRef::StmtTryStar(_) | AnyNodeRef::ExceptHandlerExceptHandler(_) | AnyNodeRef::ElifElseClause(_) ) @@ -4415,6 +5339,93 @@ impl AnyNodeRef<'_> { AnyNodeRef::ExceptHandlerExceptHandler(_) | AnyNodeRef::ElifElseClause(_) ) } + + pub fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + match self { + AnyNodeRef::ModModule(node) => node.visit_preorder(visitor), + AnyNodeRef::ModExpression(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtFunctionDef(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtClassDef(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtReturn(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtDelete(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtTypeAlias(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtAssign(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtAugAssign(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtAnnAssign(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtFor(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtWhile(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtIf(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtWith(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtMatch(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtRaise(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtTry(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtAssert(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtImport(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtImportFrom(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtGlobal(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtNonlocal(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtExpr(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtPass(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtBreak(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtContinue(node) => node.visit_preorder(visitor), + AnyNodeRef::StmtIpyEscapeCommand(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprBoolOp(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprNamedExpr(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprBinOp(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprUnaryOp(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprLambda(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprIfExp(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprDict(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprSet(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprListComp(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprSetComp(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprDictComp(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprGeneratorExp(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprAwait(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprYield(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprYieldFrom(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprCompare(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprCall(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprFormattedValue(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprFString(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprConstant(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprAttribute(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprSubscript(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprStarred(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprName(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprList(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprTuple(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprSlice(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprIpyEscapeCommand(node) => node.visit_preorder(visitor), + AnyNodeRef::ExceptHandlerExceptHandler(node) => node.visit_preorder(visitor), + AnyNodeRef::PatternMatchValue(node) => node.visit_preorder(visitor), + AnyNodeRef::PatternMatchSingleton(node) => node.visit_preorder(visitor), + AnyNodeRef::PatternMatchSequence(node) => node.visit_preorder(visitor), + AnyNodeRef::PatternMatchMapping(node) => node.visit_preorder(visitor), + AnyNodeRef::PatternMatchClass(node) => node.visit_preorder(visitor), + AnyNodeRef::PatternMatchStar(node) => node.visit_preorder(visitor), + AnyNodeRef::PatternMatchAs(node) => node.visit_preorder(visitor), + AnyNodeRef::PatternMatchOr(node) => node.visit_preorder(visitor), + AnyNodeRef::Comprehension(node) => node.visit_preorder(visitor), + AnyNodeRef::Arguments(node) => node.visit_preorder(visitor), + AnyNodeRef::Parameters(node) => node.visit_preorder(visitor), + AnyNodeRef::Parameter(node) => node.visit_preorder(visitor), + AnyNodeRef::ParameterWithDefault(node) => node.visit_preorder(visitor), + AnyNodeRef::Keyword(node) => node.visit_preorder(visitor), + AnyNodeRef::Alias(node) => node.visit_preorder(visitor), + AnyNodeRef::WithItem(node) => node.visit_preorder(visitor), + AnyNodeRef::MatchCase(node) => node.visit_preorder(visitor), + AnyNodeRef::Decorator(node) => node.visit_preorder(visitor), + AnyNodeRef::TypeParams(node) => node.visit_preorder(visitor), + AnyNodeRef::TypeParamTypeVar(node) => node.visit_preorder(visitor), + AnyNodeRef::TypeParamTypeVarTuple(node) => node.visit_preorder(visitor), + AnyNodeRef::TypeParamParamSpec(node) => node.visit_preorder(visitor), + AnyNodeRef::ElifElseClause(node) => node.visit_preorder(visitor), + } + } } impl<'a> From<&'a ast::ModModule> for AnyNodeRef<'a> { @@ -4435,12 +5446,6 @@ impl<'a> From<&'a ast::StmtFunctionDef> for AnyNodeRef<'a> { } } -impl<'a> From<&'a ast::StmtAsyncFunctionDef> for AnyNodeRef<'a> { - fn from(node: &'a ast::StmtAsyncFunctionDef) -> Self { - AnyNodeRef::StmtAsyncFunctionDef(node) - } -} - impl<'a> From<&'a ast::StmtClassDef> for AnyNodeRef<'a> { fn from(node: &'a ast::StmtClassDef) -> Self { AnyNodeRef::StmtClassDef(node) @@ -4489,12 +5494,6 @@ impl<'a> From<&'a ast::StmtFor> for AnyNodeRef<'a> { } } -impl<'a> From<&'a ast::StmtAsyncFor> for AnyNodeRef<'a> { - fn from(node: &'a ast::StmtAsyncFor) -> Self { - AnyNodeRef::StmtAsyncFor(node) - } -} - impl<'a> From<&'a ast::StmtWhile> for AnyNodeRef<'a> { fn from(node: &'a ast::StmtWhile) -> Self { AnyNodeRef::StmtWhile(node) @@ -4519,12 +5518,6 @@ impl<'a> From<&'a ast::StmtWith> for AnyNodeRef<'a> { } } -impl<'a> From<&'a ast::StmtAsyncWith> for AnyNodeRef<'a> { - fn from(node: &'a ast::StmtAsyncWith) -> Self { - AnyNodeRef::StmtAsyncWith(node) - } -} - impl<'a> From<&'a ast::StmtMatch> for AnyNodeRef<'a> { fn from(node: &'a ast::StmtMatch) -> Self { AnyNodeRef::StmtMatch(node) @@ -4543,12 +5536,6 @@ impl<'a> From<&'a ast::StmtTry> for AnyNodeRef<'a> { } } -impl<'a> From<&'a ast::StmtTryStar> for AnyNodeRef<'a> { - fn from(node: &'a ast::StmtTryStar) -> Self { - AnyNodeRef::StmtTryStar(node) - } -} - impl<'a> From<&'a ast::StmtAssert> for AnyNodeRef<'a> { fn from(node: &'a ast::StmtAssert) -> Self { AnyNodeRef::StmtAssert(node) @@ -4603,9 +5590,9 @@ impl<'a> From<&'a ast::StmtContinue> for AnyNodeRef<'a> { } } -impl<'a> From<&'a ast::StmtLineMagic> for AnyNodeRef<'a> { - fn from(node: &'a ast::StmtLineMagic) -> Self { - AnyNodeRef::StmtLineMagic(node) +impl<'a> From<&'a ast::StmtIpyEscapeCommand> for AnyNodeRef<'a> { + fn from(node: &'a ast::StmtIpyEscapeCommand) -> Self { + AnyNodeRef::StmtIpyEscapeCommand(node) } } @@ -4717,9 +5704,9 @@ impl<'a> From<&'a ast::ExprFormattedValue> for AnyNodeRef<'a> { } } -impl<'a> From<&'a ast::ExprJoinedStr> for AnyNodeRef<'a> { - fn from(node: &'a ast::ExprJoinedStr) -> Self { - AnyNodeRef::ExprJoinedStr(node) +impl<'a> From<&'a ast::ExprFString> for AnyNodeRef<'a> { + fn from(node: &'a ast::ExprFString) -> Self { + AnyNodeRef::ExprFString(node) } } @@ -4771,9 +5758,9 @@ impl<'a> From<&'a ast::ExprSlice> for AnyNodeRef<'a> { } } -impl<'a> From<&'a ast::ExprLineMagic> for AnyNodeRef<'a> { - fn from(node: &'a ast::ExprLineMagic) -> Self { - AnyNodeRef::ExprLineMagic(node) +impl<'a> From<&'a ast::ExprIpyEscapeCommand> for AnyNodeRef<'a> { + fn from(node: &'a ast::ExprIpyEscapeCommand) -> Self { + AnyNodeRef::ExprIpyEscapeCommand(node) } } @@ -4864,7 +5851,6 @@ impl<'a> From<&'a Stmt> for AnyNodeRef<'a> { fn from(stmt: &'a Stmt) -> Self { match stmt { Stmt::FunctionDef(node) => AnyNodeRef::StmtFunctionDef(node), - Stmt::AsyncFunctionDef(node) => AnyNodeRef::StmtAsyncFunctionDef(node), Stmt::ClassDef(node) => AnyNodeRef::StmtClassDef(node), Stmt::Return(node) => AnyNodeRef::StmtReturn(node), Stmt::Delete(node) => AnyNodeRef::StmtDelete(node), @@ -4873,15 +5859,12 @@ impl<'a> From<&'a Stmt> for AnyNodeRef<'a> { Stmt::AugAssign(node) => AnyNodeRef::StmtAugAssign(node), Stmt::AnnAssign(node) => AnyNodeRef::StmtAnnAssign(node), Stmt::For(node) => AnyNodeRef::StmtFor(node), - Stmt::AsyncFor(node) => AnyNodeRef::StmtAsyncFor(node), Stmt::While(node) => AnyNodeRef::StmtWhile(node), Stmt::If(node) => AnyNodeRef::StmtIf(node), Stmt::With(node) => AnyNodeRef::StmtWith(node), - Stmt::AsyncWith(node) => AnyNodeRef::StmtAsyncWith(node), Stmt::Match(node) => AnyNodeRef::StmtMatch(node), Stmt::Raise(node) => AnyNodeRef::StmtRaise(node), Stmt::Try(node) => AnyNodeRef::StmtTry(node), - Stmt::TryStar(node) => AnyNodeRef::StmtTryStar(node), Stmt::Assert(node) => AnyNodeRef::StmtAssert(node), Stmt::Import(node) => AnyNodeRef::StmtImport(node), Stmt::ImportFrom(node) => AnyNodeRef::StmtImportFrom(node), @@ -4891,7 +5874,7 @@ impl<'a> From<&'a Stmt> for AnyNodeRef<'a> { Stmt::Pass(node) => AnyNodeRef::StmtPass(node), Stmt::Break(node) => AnyNodeRef::StmtBreak(node), Stmt::Continue(node) => AnyNodeRef::StmtContinue(node), - Stmt::LineMagic(node) => AnyNodeRef::StmtLineMagic(node), + Stmt::IpyEscapeCommand(node) => AnyNodeRef::StmtIpyEscapeCommand(node), } } } @@ -4917,7 +5900,7 @@ impl<'a> From<&'a Expr> for AnyNodeRef<'a> { Expr::Compare(node) => AnyNodeRef::ExprCompare(node), Expr::Call(node) => AnyNodeRef::ExprCall(node), Expr::FormattedValue(node) => AnyNodeRef::ExprFormattedValue(node), - Expr::JoinedStr(node) => AnyNodeRef::ExprJoinedStr(node), + Expr::FString(node) => AnyNodeRef::ExprFString(node), Expr::Constant(node) => AnyNodeRef::ExprConstant(node), Expr::Attribute(node) => AnyNodeRef::ExprAttribute(node), Expr::Subscript(node) => AnyNodeRef::ExprSubscript(node), @@ -4926,7 +5909,7 @@ impl<'a> From<&'a Expr> for AnyNodeRef<'a> { Expr::List(node) => AnyNodeRef::ExprList(node), Expr::Tuple(node) => AnyNodeRef::ExprTuple(node), Expr::Slice(node) => AnyNodeRef::ExprSlice(node), - Expr::LineMagic(node) => AnyNodeRef::ExprLineMagic(node), + Expr::IpyEscapeCommand(node) => AnyNodeRef::ExprIpyEscapeCommand(node), } } } @@ -5027,7 +6010,6 @@ impl Ranged for AnyNodeRef<'_> { AnyNodeRef::ModModule(node) => node.range(), AnyNodeRef::ModExpression(node) => node.range(), AnyNodeRef::StmtFunctionDef(node) => node.range(), - AnyNodeRef::StmtAsyncFunctionDef(node) => node.range(), AnyNodeRef::StmtClassDef(node) => node.range(), AnyNodeRef::StmtReturn(node) => node.range(), AnyNodeRef::StmtDelete(node) => node.range(), @@ -5036,15 +6018,12 @@ impl Ranged for AnyNodeRef<'_> { AnyNodeRef::StmtAugAssign(node) => node.range(), AnyNodeRef::StmtAnnAssign(node) => node.range(), AnyNodeRef::StmtFor(node) => node.range(), - AnyNodeRef::StmtAsyncFor(node) => node.range(), AnyNodeRef::StmtWhile(node) => node.range(), AnyNodeRef::StmtIf(node) => node.range(), AnyNodeRef::StmtWith(node) => node.range(), - AnyNodeRef::StmtAsyncWith(node) => node.range(), AnyNodeRef::StmtMatch(node) => node.range(), AnyNodeRef::StmtRaise(node) => node.range(), AnyNodeRef::StmtTry(node) => node.range(), - AnyNodeRef::StmtTryStar(node) => node.range(), AnyNodeRef::StmtAssert(node) => node.range(), AnyNodeRef::StmtImport(node) => node.range(), AnyNodeRef::StmtImportFrom(node) => node.range(), @@ -5054,7 +6033,7 @@ impl Ranged for AnyNodeRef<'_> { AnyNodeRef::StmtPass(node) => node.range(), AnyNodeRef::StmtBreak(node) => node.range(), AnyNodeRef::StmtContinue(node) => node.range(), - AnyNodeRef::StmtLineMagic(node) => node.range(), + AnyNodeRef::StmtIpyEscapeCommand(node) => node.range(), AnyNodeRef::ExprBoolOp(node) => node.range(), AnyNodeRef::ExprNamedExpr(node) => node.range(), AnyNodeRef::ExprBinOp(node) => node.range(), @@ -5073,7 +6052,7 @@ impl Ranged for AnyNodeRef<'_> { AnyNodeRef::ExprCompare(node) => node.range(), AnyNodeRef::ExprCall(node) => node.range(), AnyNodeRef::ExprFormattedValue(node) => node.range(), - AnyNodeRef::ExprJoinedStr(node) => node.range(), + AnyNodeRef::ExprFString(node) => node.range(), AnyNodeRef::ExprConstant(node) => node.range(), AnyNodeRef::ExprAttribute(node) => node.range(), AnyNodeRef::ExprSubscript(node) => node.range(), @@ -5082,7 +6061,7 @@ impl Ranged for AnyNodeRef<'_> { AnyNodeRef::ExprList(node) => node.range(), AnyNodeRef::ExprTuple(node) => node.range(), AnyNodeRef::ExprSlice(node) => node.range(), - AnyNodeRef::ExprLineMagic(node) => node.range(), + AnyNodeRef::ExprIpyEscapeCommand(node) => node.range(), AnyNodeRef::ExceptHandlerExceptHandler(node) => node.range(), AnyNodeRef::PatternMatchValue(node) => node.range(), AnyNodeRef::PatternMatchSingleton(node) => node.range(), @@ -5118,7 +6097,6 @@ pub enum NodeKind { ModExpression, ModFunctionType, StmtFunctionDef, - StmtAsyncFunctionDef, StmtClassDef, StmtReturn, StmtDelete, @@ -5127,21 +6105,18 @@ pub enum NodeKind { StmtAugAssign, StmtAnnAssign, StmtFor, - StmtAsyncFor, StmtWhile, StmtIf, StmtWith, - StmtAsyncWith, StmtMatch, StmtRaise, StmtTry, - StmtTryStar, StmtAssert, StmtImport, StmtImportFrom, StmtGlobal, StmtNonlocal, - StmtLineMagic, + StmtIpyEscapeCommand, StmtExpr, StmtPass, StmtBreak, @@ -5164,7 +6139,7 @@ pub enum NodeKind { ExprCompare, ExprCall, ExprFormattedValue, - ExprJoinedStr, + ExprFString, ExprConstant, ExprAttribute, ExprSubscript, @@ -5173,7 +6148,7 @@ pub enum NodeKind { ExprList, ExprTuple, ExprSlice, - ExprLineMagic, + ExprIpyEscapeCommand, ExceptHandlerExceptHandler, PatternMatchValue, PatternMatchSingleton, diff --git a/crates/ruff_python_ast/src/nodes.rs b/crates/ruff_python_ast/src/nodes.rs index 7ed613913f..af9d150f54 100644 --- a/crates/ruff_python_ast/src/nodes.rs +++ b/crates/ruff_python_ast/src/nodes.rs @@ -45,8 +45,6 @@ impl From for Mod { pub enum Stmt { #[is(name = "function_def_stmt")] FunctionDef(StmtFunctionDef), - #[is(name = "async_function_def_stmt")] - AsyncFunctionDef(StmtAsyncFunctionDef), #[is(name = "class_def_stmt")] ClassDef(StmtClassDef), #[is(name = "return_stmt")] @@ -63,24 +61,18 @@ pub enum Stmt { TypeAlias(StmtTypeAlias), #[is(name = "for_stmt")] For(StmtFor), - #[is(name = "async_for_stmt")] - AsyncFor(StmtAsyncFor), #[is(name = "while_stmt")] While(StmtWhile), #[is(name = "if_stmt")] If(StmtIf), #[is(name = "with_stmt")] With(StmtWith), - #[is(name = "async_with_stmt")] - AsyncWith(StmtAsyncWith), #[is(name = "match_stmt")] Match(StmtMatch), #[is(name = "raise_stmt")] Raise(StmtRaise), #[is(name = "try_stmt")] Try(StmtTry), - #[is(name = "try_star_stmt")] - TryStar(StmtTryStar), #[is(name = "assert_stmt")] Assert(StmtAssert), #[is(name = "import_stmt")] @@ -101,27 +93,32 @@ pub enum Stmt { Continue(StmtContinue), // Jupyter notebook specific - #[is(name = "line_magic_stmt")] - LineMagic(StmtLineMagic), + #[is(name = "ipy_escape_command_stmt")] + IpyEscapeCommand(StmtIpyEscapeCommand), } #[derive(Clone, Debug, PartialEq)] -pub struct StmtLineMagic { +pub struct StmtIpyEscapeCommand { pub range: TextRange, - pub kind: MagicKind, + pub kind: IpyEscapeKind, pub value: String, } -impl From for Stmt { - fn from(payload: StmtLineMagic) -> Self { - Stmt::LineMagic(payload) +impl From for Stmt { + fn from(payload: StmtIpyEscapeCommand) -> Self { + Stmt::IpyEscapeCommand(payload) } } -/// See also [FunctionDef](https://docs.python.org/3/library/ast.html#ast.FunctionDef) +/// See also [FunctionDef](https://docs.python.org/3/library/ast.html#ast.FunctionDef) and +/// [AsyncFunctionDef](https://docs.python.org/3/library/ast.html#ast.AsyncFunctionDef). +/// +/// This type differs from the original Python AST, as it collapses the +/// synchronous and asynchronous variants into a single type. #[derive(Clone, Debug, PartialEq)] pub struct StmtFunctionDef { pub range: TextRange, + pub is_async: bool, pub decorator_list: Vec, pub name: Identifier, pub type_params: Option, @@ -136,24 +133,6 @@ impl From for Stmt { } } -/// See also [AsyncFunctionDef](https://docs.python.org/3/library/ast.html#ast.AsyncFunctionDef) -#[derive(Clone, Debug, PartialEq)] -pub struct StmtAsyncFunctionDef { - pub range: TextRange, - pub decorator_list: Vec, - pub name: Identifier, - pub type_params: Option, - pub parameters: Box, - pub returns: Option>, - pub body: Vec, -} - -impl From for Stmt { - fn from(payload: StmtAsyncFunctionDef) -> Self { - Stmt::AsyncFunctionDef(payload) - } -} - /// See also [ClassDef](https://docs.python.org/3/library/ast.html#ast.ClassDef) #[derive(Clone, Debug, PartialEq)] pub struct StmtClassDef { @@ -275,10 +254,15 @@ impl From for Stmt { } } -/// See also [For](https://docs.python.org/3/library/ast.html#ast.For) +/// See also [For](https://docs.python.org/3/library/ast.html#ast.For) and +/// [AsyncFor](https://docs.python.org/3/library/ast.html#ast.AsyncFor). +/// +/// This type differs from the original Python AST, as it collapses the +/// synchronous and asynchronous variants into a single type. #[derive(Clone, Debug, PartialEq)] pub struct StmtFor { pub range: TextRange, + pub is_async: bool, pub target: Box, pub iter: Box, pub body: Vec, @@ -291,23 +275,8 @@ impl From for Stmt { } } -/// See also [AsyncFor](https://docs.python.org/3/library/ast.html#ast.AsyncFor) -#[derive(Clone, Debug, PartialEq)] -pub struct StmtAsyncFor { - pub range: TextRange, - pub target: Box, - pub iter: Box, - pub body: Vec, - pub orelse: Vec, -} - -impl From for Stmt { - fn from(payload: StmtAsyncFor) -> Self { - Stmt::AsyncFor(payload) - } -} - -/// See also [While](https://docs.python.org/3/library/ast.html#ast.While) +/// See also [While](https://docs.python.org/3/library/ast.html#ast.While) and +/// [AsyncWhile](https://docs.python.org/3/library/ast.html#ast.AsyncWhile). #[derive(Clone, Debug, PartialEq)] pub struct StmtWhile { pub range: TextRange, @@ -344,10 +313,15 @@ pub struct ElifElseClause { pub body: Vec, } -/// See also [With](https://docs.python.org/3/library/ast.html#ast.With) +/// See also [With](https://docs.python.org/3/library/ast.html#ast.With) and +/// [AsyncWith](https://docs.python.org/3/library/ast.html#ast.AsyncWith). +/// +/// This type differs from the original Python AST, as it collapses the +/// synchronous and asynchronous variants into a single type. #[derive(Clone, Debug, PartialEq)] pub struct StmtWith { pub range: TextRange, + pub is_async: bool, pub items: Vec, pub body: Vec, } @@ -358,20 +332,6 @@ impl From for Stmt { } } -/// See also [AsyncWith](https://docs.python.org/3/library/ast.html#ast.AsyncWith) -#[derive(Clone, Debug, PartialEq)] -pub struct StmtAsyncWith { - pub range: TextRange, - pub items: Vec, - pub body: Vec, -} - -impl From for Stmt { - fn from(payload: StmtAsyncWith) -> Self { - Stmt::AsyncWith(payload) - } -} - /// See also [Match](https://docs.python.org/3/library/ast.html#ast.Match) #[derive(Clone, Debug, PartialEq)] pub struct StmtMatch { @@ -400,7 +360,8 @@ impl From for Stmt { } } -/// See also [Try](https://docs.python.org/3/library/ast.html#ast.Try) +/// See also [Try](https://docs.python.org/3/library/ast.html#ast.Try) and +/// [TryStar](https://docs.python.org/3/library/ast.html#ast.TryStar) #[derive(Clone, Debug, PartialEq)] pub struct StmtTry { pub range: TextRange, @@ -408,6 +369,7 @@ pub struct StmtTry { pub handlers: Vec, pub orelse: Vec, pub finalbody: Vec, + pub is_star: bool, } impl From for Stmt { @@ -416,22 +378,6 @@ impl From for Stmt { } } -/// See also [TryStar](https://docs.python.org/3/library/ast.html#ast.TryStar) -#[derive(Clone, Debug, PartialEq)] -pub struct StmtTryStar { - pub range: TextRange, - pub body: Vec, - pub handlers: Vec, - pub orelse: Vec, - pub finalbody: Vec, -} - -impl From for Stmt { - fn from(payload: StmtTryStar) -> Self { - Stmt::TryStar(payload) - } -} - /// See also [Assert](https://docs.python.org/3/library/ast.html#ast.Assert) #[derive(Clone, Debug, PartialEq)] pub struct StmtAssert { @@ -588,8 +534,8 @@ pub enum Expr { Call(ExprCall), #[is(name = "formatted_value_expr")] FormattedValue(ExprFormattedValue), - #[is(name = "joined_str_expr")] - JoinedStr(ExprJoinedStr), + #[is(name = "f_string_expr")] + FString(ExprFString), #[is(name = "constant_expr")] Constant(ExprConstant), #[is(name = "attribute_expr")] @@ -608,20 +554,20 @@ pub enum Expr { Slice(ExprSlice), // Jupyter notebook specific - #[is(name = "line_magic_expr")] - LineMagic(ExprLineMagic), + #[is(name = "ipy_escape_command_expr")] + IpyEscapeCommand(ExprIpyEscapeCommand), } #[derive(Clone, Debug, PartialEq)] -pub struct ExprLineMagic { +pub struct ExprIpyEscapeCommand { pub range: TextRange, - pub kind: MagicKind, + pub kind: IpyEscapeKind, pub value: String, } -impl From for Expr { - fn from(payload: ExprLineMagic) -> Self { - Expr::LineMagic(payload) +impl From for Expr { + fn from(payload: ExprIpyEscapeCommand) -> Self { + Expr::IpyEscapeCommand(payload) } } @@ -916,14 +862,16 @@ pub struct DebugText { /// See also [JoinedStr](https://docs.python.org/3/library/ast.html#ast.JoinedStr) #[derive(Clone, Debug, PartialEq)] -pub struct ExprJoinedStr { +pub struct ExprFString { pub range: TextRange, pub values: Vec, + /// Whether the f-string contains multiple string tokens that were implicitly concatenated. + pub implicit_concatenated: bool, } -impl From for Expr { - fn from(payload: ExprJoinedStr) -> Self { - Expr::JoinedStr(payload) +impl From for Expr { + fn from(payload: ExprFString) -> Self { + Expr::FString(payload) } } @@ -2164,23 +2112,21 @@ impl Arguments { }) } + /// Return the positional argument at the given index, or `None` if no such argument exists. + pub fn find_positional(&self, position: usize) -> Option<&Expr> { + self.args + .iter() + .take_while(|expr| !expr.is_starred_expr()) + .nth(position) + } + /// Return the argument with the given name or at the given position, or `None` if no such /// argument exists. Used to retrieve arguments that can be provided _either_ as keyword or /// positional arguments. pub fn find_argument(&self, name: &str, position: usize) -> Option<&Expr> { - self.keywords - .iter() - .find(|keyword| { - let Keyword { arg, .. } = keyword; - arg.as_ref().is_some_and(|arg| arg == name) - }) + self.find_keyword(name) .map(|keyword| &keyword.value) - .or_else(|| { - self.args - .iter() - .take_while(|expr| !expr.is_starred_expr()) - .nth(position) - }) + .or_else(|| self.find_positional(position)) } } @@ -2291,91 +2237,105 @@ impl Parameters { } } -/// The kind of magic command as defined in [IPython Syntax] in the IPython codebase. +/// The kind of escape command as defined in [IPython Syntax] in the IPython codebase. /// /// [IPython Syntax]: https://github.com/ipython/ipython/blob/635815e8f1ded5b764d66cacc80bbe25e9e2587f/IPython/core/inputtransformer2.py#L335-L343 #[derive(PartialEq, Eq, Debug, Clone, Hash, Copy)] -pub enum MagicKind { - /// Send line to underlying system shell. +pub enum IpyEscapeKind { + /// Send line to underlying system shell (`!`). Shell, - /// Send line to system shell and capture output. + /// Send line to system shell and capture output (`!!`). ShCap, - /// Show help on object. + /// Show help on object (`?`). Help, - /// Show help on object, with extra verbosity. + /// Show help on object, with extra verbosity (`??`). Help2, - /// Call magic function. + /// Call magic function (`%`). Magic, - /// Call cell magic function. + /// Call cell magic function (`%%`). Magic2, /// Call first argument with rest of line as arguments after splitting on whitespace - /// and quote each as string. + /// and quote each as string (`,`). Quote, - /// Call first argument with rest of line as an argument quoted as a single string. + /// Call first argument with rest of line as an argument quoted as a single string (`;`). Quote2, - /// Call first argument with rest of line as arguments. + /// Call first argument with rest of line as arguments (`/`). Paren, } -impl TryFrom for MagicKind { +impl TryFrom for IpyEscapeKind { type Error = String; fn try_from(ch: char) -> Result { match ch { - '!' => Ok(MagicKind::Shell), - '?' => Ok(MagicKind::Help), - '%' => Ok(MagicKind::Magic), - ',' => Ok(MagicKind::Quote), - ';' => Ok(MagicKind::Quote2), - '/' => Ok(MagicKind::Paren), + '!' => Ok(IpyEscapeKind::Shell), + '?' => Ok(IpyEscapeKind::Help), + '%' => Ok(IpyEscapeKind::Magic), + ',' => Ok(IpyEscapeKind::Quote), + ';' => Ok(IpyEscapeKind::Quote2), + '/' => Ok(IpyEscapeKind::Paren), _ => Err(format!("Unexpected magic escape: {ch}")), } } } -impl TryFrom<[char; 2]> for MagicKind { +impl TryFrom<[char; 2]> for IpyEscapeKind { type Error = String; fn try_from(ch: [char; 2]) -> Result { match ch { - ['!', '!'] => Ok(MagicKind::ShCap), - ['?', '?'] => Ok(MagicKind::Help2), - ['%', '%'] => Ok(MagicKind::Magic2), + ['!', '!'] => Ok(IpyEscapeKind::ShCap), + ['?', '?'] => Ok(IpyEscapeKind::Help2), + ['%', '%'] => Ok(IpyEscapeKind::Magic2), [c1, c2] => Err(format!("Unexpected magic escape: {c1}{c2}")), } } } -impl fmt::Display for MagicKind { +impl fmt::Display for IpyEscapeKind { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - MagicKind::Shell => f.write_str("!"), - MagicKind::ShCap => f.write_str("!!"), - MagicKind::Help => f.write_str("?"), - MagicKind::Help2 => f.write_str("??"), - MagicKind::Magic => f.write_str("%"), - MagicKind::Magic2 => f.write_str("%%"), - MagicKind::Quote => f.write_str(","), - MagicKind::Quote2 => f.write_str(";"), - MagicKind::Paren => f.write_str("/"), - } + f.write_str(self.as_str()) } } -impl MagicKind { - /// Returns the length of the magic command prefix. +impl IpyEscapeKind { + /// Returns the length of the escape kind token. pub fn prefix_len(self) -> TextSize { let len = match self { - MagicKind::Shell - | MagicKind::Magic - | MagicKind::Help - | MagicKind::Quote - | MagicKind::Quote2 - | MagicKind::Paren => 1, - MagicKind::ShCap | MagicKind::Magic2 | MagicKind::Help2 => 2, + IpyEscapeKind::Shell + | IpyEscapeKind::Magic + | IpyEscapeKind::Help + | IpyEscapeKind::Quote + | IpyEscapeKind::Quote2 + | IpyEscapeKind::Paren => 1, + IpyEscapeKind::ShCap | IpyEscapeKind::Magic2 | IpyEscapeKind::Help2 => 2, }; len.into() } + + /// Returns `true` if the escape kind is help i.e., `?` or `??`. + pub const fn is_help(self) -> bool { + matches!(self, IpyEscapeKind::Help | IpyEscapeKind::Help2) + } + + /// Returns `true` if the escape kind is magic i.e., `%` or `%%`. + pub const fn is_magic(self) -> bool { + matches!(self, IpyEscapeKind::Magic | IpyEscapeKind::Magic2) + } + + pub fn as_str(self) -> &'static str { + match self { + IpyEscapeKind::Shell => "!", + IpyEscapeKind::ShCap => "!!", + IpyEscapeKind::Help => "?", + IpyEscapeKind::Help2 => "??", + IpyEscapeKind::Magic => "%", + IpyEscapeKind::Magic2 => "%%", + IpyEscapeKind::Quote => ",", + IpyEscapeKind::Quote2 => ";", + IpyEscapeKind::Paren => "/", + } + } } #[derive(Clone, Debug, PartialEq, Eq, Hash)] @@ -2489,8 +2449,8 @@ impl std::cmp::PartialEq for Int { pub enum Constant { None, Bool(bool), - Str(String), - Bytes(Vec), + Str(StringConstant), + Bytes(BytesConstant), Int(BigInt), Float(f64), Complex { real: f64, imag: f64 }, @@ -2498,38 +2458,68 @@ pub enum Constant { } impl Constant { - pub fn is_true(self) -> bool { - self.bool().is_some_and(|b| b) - } - pub fn is_false(self) -> bool { - self.bool().is_some_and(|b| !b) - } - pub fn complex(self) -> Option<(f64, f64)> { + /// Returns `true` if the constant is a string or bytes constant that contains multiple, + /// implicitly concatenated string tokens. + pub fn is_implicit_concatenated(&self) -> bool { match self { - Constant::Complex { real, imag } => Some((real, imag)), - _ => None, + Constant::Str(value) => value.implicit_concatenated, + Constant::Bytes(value) => value.implicit_concatenated, + _ => false, } } } -impl From for Constant { - fn from(s: String) -> Constant { - Self::Str(s) +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct StringConstant { + /// The string value as resolved by the parser (i.e., without quotes, or escape sequences, or + /// implicit concatenations). + pub value: String, + /// Whether the string contains multiple string tokens that were implicitly concatenated. + pub implicit_concatenated: bool, +} + +impl Deref for StringConstant { + type Target = str; + fn deref(&self) -> &Self::Target { + self.value.as_str() } } + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct BytesConstant { + /// The bytes value as resolved by the parser (i.e., without quotes, or escape sequences, or + /// implicit concatenations). + pub value: Vec, + /// Whether the string contains multiple string tokens that were implicitly concatenated. + pub implicit_concatenated: bool, +} + +impl Deref for BytesConstant { + type Target = [u8]; + fn deref(&self) -> &Self::Target { + self.value.as_slice() + } +} + impl From> for Constant { - fn from(b: Vec) -> Constant { - Self::Bytes(b) + fn from(value: Vec) -> Constant { + Self::Bytes(BytesConstant { + value, + implicit_concatenated: false, + }) + } +} +impl From for Constant { + fn from(value: String) -> Constant { + Self::Str(StringConstant { + value, + implicit_concatenated: false, + }) } } impl From for Constant { - fn from(b: bool) -> Constant { - Self::Bool(b) - } -} -impl From for Constant { - fn from(i: BigInt) -> Constant { - Self::Int(i) + fn from(value: bool) -> Constant { + Self::Bool(value) } } @@ -2585,11 +2575,6 @@ impl Ranged for crate::nodes::StmtFunctionDef { self.range } } -impl Ranged for crate::nodes::StmtAsyncFunctionDef { - fn range(&self) -> TextRange { - self.range - } -} impl Ranged for crate::nodes::StmtClassDef { fn range(&self) -> TextRange { self.range @@ -2630,11 +2615,6 @@ impl Ranged for crate::nodes::StmtFor { self.range } } -impl Ranged for crate::nodes::StmtAsyncFor { - fn range(&self) -> TextRange { - self.range - } -} impl Ranged for crate::nodes::StmtWhile { fn range(&self) -> TextRange { self.range @@ -2655,11 +2635,6 @@ impl Ranged for crate::nodes::StmtWith { self.range } } -impl Ranged for crate::nodes::StmtAsyncWith { - fn range(&self) -> TextRange { - self.range - } -} impl Ranged for crate::nodes::StmtMatch { fn range(&self) -> TextRange { self.range @@ -2675,11 +2650,6 @@ impl Ranged for crate::nodes::StmtTry { self.range } } -impl Ranged for crate::nodes::StmtTryStar { - fn range(&self) -> TextRange { - self.range - } -} impl Ranged for crate::nodes::StmtAssert { fn range(&self) -> TextRange { self.range @@ -2725,7 +2695,7 @@ impl Ranged for crate::nodes::StmtContinue { self.range } } -impl Ranged for StmtLineMagic { +impl Ranged for StmtIpyEscapeCommand { fn range(&self) -> TextRange { self.range } @@ -2734,7 +2704,6 @@ impl Ranged for crate::Stmt { fn range(&self) -> TextRange { match self { Self::FunctionDef(node) => node.range(), - Self::AsyncFunctionDef(node) => node.range(), Self::ClassDef(node) => node.range(), Self::Return(node) => node.range(), Self::Delete(node) => node.range(), @@ -2743,15 +2712,12 @@ impl Ranged for crate::Stmt { Self::AugAssign(node) => node.range(), Self::AnnAssign(node) => node.range(), Self::For(node) => node.range(), - Self::AsyncFor(node) => node.range(), Self::While(node) => node.range(), Self::If(node) => node.range(), Self::With(node) => node.range(), - Self::AsyncWith(node) => node.range(), Self::Match(node) => node.range(), Self::Raise(node) => node.range(), Self::Try(node) => node.range(), - Self::TryStar(node) => node.range(), Self::Assert(node) => node.range(), Self::Import(node) => node.range(), Self::ImportFrom(node) => node.range(), @@ -2761,7 +2727,7 @@ impl Ranged for crate::Stmt { Self::Pass(node) => node.range(), Self::Break(node) => node.range(), Self::Continue(node) => node.range(), - Stmt::LineMagic(node) => node.range(), + Stmt::IpyEscapeCommand(node) => node.range(), } } } @@ -2856,7 +2822,7 @@ impl Ranged for crate::nodes::ExprFormattedValue { self.range } } -impl Ranged for crate::nodes::ExprJoinedStr { +impl Ranged for crate::nodes::ExprFString { fn range(&self) -> TextRange { self.range } @@ -2901,7 +2867,7 @@ impl Ranged for crate::nodes::ExprSlice { self.range } } -impl Ranged for ExprLineMagic { +impl Ranged for ExprIpyEscapeCommand { fn range(&self) -> TextRange { self.range } @@ -2927,7 +2893,7 @@ impl Ranged for crate::Expr { Self::Compare(node) => node.range(), Self::Call(node) => node.range(), Self::FormattedValue(node) => node.range(), - Self::JoinedStr(node) => node.range(), + Self::FString(node) => node.range(), Self::Constant(node) => node.range(), Self::Attribute(node) => node.range(), Self::Subscript(node) => node.range(), @@ -2936,7 +2902,7 @@ impl Ranged for crate::Expr { Self::List(node) => node.range(), Self::Tuple(node) => node.range(), Self::Slice(node) => node.range(), - Expr::LineMagic(node) => node.range(), + Expr::IpyEscapeCommand(node) => node.range(), } } } @@ -3096,12 +3062,11 @@ mod size_assertions { use static_assertions::assert_eq_size; assert_eq_size!(Stmt, [u8; 144]); - assert_eq_size!(StmtFunctionDef, [u8; 136]); - assert_eq_size!(StmtAsyncFunctionDef, [u8; 136]); + assert_eq_size!(StmtFunctionDef, [u8; 144]); assert_eq_size!(StmtClassDef, [u8; 104]); - assert_eq_size!(StmtTry, [u8; 104]); + assert_eq_size!(StmtTry, [u8; 112]); assert_eq_size!(Expr, [u8; 80]); - assert_eq_size!(Constant, [u8; 32]); + assert_eq_size!(Constant, [u8; 40]); assert_eq_size!(Pattern, [u8; 96]); assert_eq_size!(Mod, [u8; 32]); } diff --git a/crates/ruff_python_ast/src/relocate.rs b/crates/ruff_python_ast/src/relocate.rs index 2ba2f82006..122cdbc259 100644 --- a/crates/ruff_python_ast/src/relocate.rs +++ b/crates/ruff_python_ast/src/relocate.rs @@ -140,7 +140,7 @@ pub fn relocate_expr(expr: &mut Expr, location: TextRange) { relocate_expr(expr, location); } } - Expr::JoinedStr(nodes::ExprJoinedStr { values, range }) => { + Expr::FString(nodes::ExprFString { values, range, .. }) => { *range = location; for expr in values { relocate_expr(expr, location); @@ -199,7 +199,7 @@ pub fn relocate_expr(expr: &mut Expr, location: TextRange) { relocate_expr(expr, location); } } - Expr::LineMagic(nodes::ExprLineMagic { range, .. }) => { + Expr::IpyEscapeCommand(nodes::ExprIpyEscapeCommand { range, .. }) => { *range = location; } } diff --git a/crates/ruff_python_ast/src/statement_visitor.rs b/crates/ruff_python_ast/src/statement_visitor.rs index c061e0beb8..7ab3ebe06c 100644 --- a/crates/ruff_python_ast/src/statement_visitor.rs +++ b/crates/ruff_python_ast/src/statement_visitor.rs @@ -32,9 +32,6 @@ pub fn walk_stmt<'a, V: StatementVisitor<'a> + ?Sized>(visitor: &mut V, stmt: &' Stmt::FunctionDef(ast::StmtFunctionDef { body, .. }) => { visitor.visit_body(body); } - Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { body, .. }) => { - visitor.visit_body(body); - } Stmt::For(ast::StmtFor { body, orelse, .. }) => { visitor.visit_body(body); visitor.visit_body(orelse); @@ -42,10 +39,6 @@ pub fn walk_stmt<'a, V: StatementVisitor<'a> + ?Sized>(visitor: &mut V, stmt: &' Stmt::ClassDef(ast::StmtClassDef { body, .. }) => { visitor.visit_body(body); } - Stmt::AsyncFor(ast::StmtAsyncFor { body, orelse, .. }) => { - visitor.visit_body(body); - visitor.visit_body(orelse); - } Stmt::While(ast::StmtWhile { body, orelse, .. }) => { visitor.visit_body(body); visitor.visit_body(orelse); @@ -63,9 +56,6 @@ pub fn walk_stmt<'a, V: StatementVisitor<'a> + ?Sized>(visitor: &mut V, stmt: &' Stmt::With(ast::StmtWith { body, .. }) => { visitor.visit_body(body); } - Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) => { - visitor.visit_body(body); - } Stmt::Match(ast::StmtMatch { cases, .. }) => { for match_case in cases { visitor.visit_match_case(match_case); @@ -76,21 +66,7 @@ pub fn walk_stmt<'a, V: StatementVisitor<'a> + ?Sized>(visitor: &mut V, stmt: &' handlers, orelse, finalbody, - range: _, - }) => { - visitor.visit_body(body); - for except_handler in handlers { - visitor.visit_except_handler(except_handler); - } - visitor.visit_body(orelse); - visitor.visit_body(finalbody); - } - Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - range: _, + .. }) => { visitor.visit_body(body); for except_handler in handlers { diff --git a/crates/ruff_python_ast/src/str.rs b/crates/ruff_python_ast/src/str.rs index 5421641c21..8ddff85958 100644 --- a/crates/ruff_python_ast/src/str.rs +++ b/crates/ruff_python_ast/src/str.rs @@ -184,68 +184,8 @@ pub fn is_triple_quote(content: &str) -> bool { TRIPLE_QUOTE_STR_PREFIXES.contains(&content) || TRIPLE_QUOTE_BYTE_PREFIXES.contains(&content) } -/// Return `true` if the string expression is an implicit concatenation. -/// -/// ## Examples -/// -/// ```rust -/// use ruff_python_ast::str::is_implicit_concatenation; -/// -/// assert!(is_implicit_concatenation(r#"'abc' 'def'"#)); -/// assert!(!is_implicit_concatenation(r#"'abcdef'"#)); -/// ``` -pub fn is_implicit_concatenation(content: &str) -> bool { - let Some(leading_quote_str) = leading_quote(content) else { - return false; - }; - let Some(trailing_quote_str) = trailing_quote(content) else { - return false; - }; - - // If the trailing quote doesn't match the _expected_ trailing quote, then the string is - // implicitly concatenated. - // - // For example, given: - // ```python - // u"""abc""" 'def' - // ``` - // - // The leading quote would be `u"""`, and the trailing quote would be `'`, but the _expected_ - // trailing quote would be `"""`. Since `'` does not equal `"""`, we'd return `true`. - if trailing_quote_str != trailing_quote(leading_quote_str).unwrap() { - return true; - } - - // Search for any trailing quotes _before_ the end of the string. - let mut rest = &content[leading_quote_str.len()..content.len() - trailing_quote_str.len()]; - while let Some(index) = rest.find(trailing_quote_str) { - let mut chars = rest[..index].chars().rev(); - - if let Some('\\') = chars.next() { - if chars.next() == Some('\\') { - // Either `\\'` or `\\\'` need to test one more character - - // If the quote is preceded by `//` then it is not escaped, instead the backslash is escaped. - if chars.next() != Some('\\') { - return true; - } - } - } else { - // If the quote is _not_ escaped, then it's implicitly concatenated. - return true; - } - rest = &rest[index + trailing_quote_str.len()..]; - } - - // Otherwise, we know the string ends with the expected trailing quote, so it's not implicitly - // concatenated. - false -} - #[cfg(test)] mod tests { - use crate::str::is_implicit_concatenation; - use super::{ SINGLE_QUOTE_BYTE_PREFIXES, SINGLE_QUOTE_STR_PREFIXES, TRIPLE_QUOTE_BYTE_PREFIXES, TRIPLE_QUOTE_STR_PREFIXES, @@ -270,39 +210,4 @@ mod tests { } } } - - #[test] - fn implicit_concatenation() { - // Positive cases. - assert!(is_implicit_concatenation(r#""abc" "def""#)); - assert!(is_implicit_concatenation(r#""abc" 'def'"#)); - assert!(is_implicit_concatenation(r#""""abc""" "def""#)); - assert!(is_implicit_concatenation(r#"'''abc''' 'def'"#)); - assert!(is_implicit_concatenation(r#""""abc""" 'def'"#)); - assert!(is_implicit_concatenation(r#"'''abc''' "def""#)); - assert!(is_implicit_concatenation(r#""""abc""""def""#)); - assert!(is_implicit_concatenation(r#"'''abc''''def'"#)); - assert!(is_implicit_concatenation(r#""""abc"""'def'"#)); - assert!(is_implicit_concatenation(r#"'''abc'''"def""#)); - - // Negative cases. - assert!(!is_implicit_concatenation(r#""abc""#)); - assert!(!is_implicit_concatenation(r#"'abc'"#)); - assert!(!is_implicit_concatenation(r#""""abc""""#)); - assert!(!is_implicit_concatenation(r#"'''abc'''"#)); - assert!(!is_implicit_concatenation(r#""""ab"c""""#)); - assert!(!is_implicit_concatenation(r#"'''ab'c'''"#)); - assert!(!is_implicit_concatenation(r#""""ab'c""""#)); - assert!(!is_implicit_concatenation(r#"'''ab"c'''"#)); - assert!(!is_implicit_concatenation(r#""""ab'''c""""#)); - assert!(!is_implicit_concatenation(r#"'''ab"""c'''"#)); - - // Positive cases with escaped quotes. - assert!(is_implicit_concatenation(r#""abc\\""def""#)); - assert!(is_implicit_concatenation(r#""abc\\""def""#)); - - // Negative cases with escaped quotes. - assert!(!is_implicit_concatenation(r#""abc\"def""#)); - assert!(!is_implicit_concatenation(r#"'\\\' ""'"#)); - } } diff --git a/crates/ruff_python_ast/src/traversal.rs b/crates/ruff_python_ast/src/traversal.rs index 95f88d13c9..d89e29484b 100644 --- a/crates/ruff_python_ast/src/traversal.rs +++ b/crates/ruff_python_ast/src/traversal.rs @@ -5,7 +5,6 @@ use crate::{self as ast, ExceptHandler, Stmt, Suite}; pub fn suite<'a>(stmt: &'a Stmt, parent: &'a Stmt) -> Option<&'a Suite> { match parent { Stmt::FunctionDef(ast::StmtFunctionDef { body, .. }) => Some(body), - Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { body, .. }) => Some(body), Stmt::ClassDef(ast::StmtClassDef { body, .. }) => Some(body), Stmt::For(ast::StmtFor { body, orelse, .. }) => { if body.contains(stmt) { @@ -16,15 +15,6 @@ pub fn suite<'a>(stmt: &'a Stmt, parent: &'a Stmt) -> Option<&'a Suite> { None } } - Stmt::AsyncFor(ast::StmtAsyncFor { body, orelse, .. }) => { - if body.contains(stmt) { - Some(body) - } else if orelse.contains(stmt) { - Some(orelse) - } else { - None - } - } Stmt::While(ast::StmtWhile { body, orelse, .. }) => { if body.contains(stmt) { Some(body) @@ -49,7 +39,6 @@ pub fn suite<'a>(stmt: &'a Stmt, parent: &'a Stmt) -> Option<&'a Suite> { } } Stmt::With(ast::StmtWith { body, .. }) => Some(body), - Stmt::AsyncWith(ast::StmtAsyncWith { body, .. }) => Some(body), Stmt::Match(ast::StmtMatch { cases, .. }) => cases .iter() .map(|case| &case.body) @@ -75,27 +64,6 @@ pub fn suite<'a>(stmt: &'a Stmt, parent: &'a Stmt) -> Option<&'a Suite> { .find(|body| body.contains(stmt)) } } - Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - .. - }) => { - if body.contains(stmt) { - Some(body) - } else if orelse.contains(stmt) { - Some(orelse) - } else if finalbody.contains(stmt) { - Some(finalbody) - } else { - handlers - .iter() - .filter_map(ExceptHandler::as_except_handler) - .map(|handler| &handler.body) - .find(|body| body.contains(stmt)) - } - } _ => None, } } diff --git a/crates/ruff_python_ast/src/types.rs b/crates/ruff_python_ast/src/types.rs index 5243f94b42..32732ed6cb 100644 --- a/crates/ruff_python_ast/src/types.rs +++ b/crates/ruff_python_ast/src/types.rs @@ -1,5 +1,3 @@ -use std::ops::Deref; - use crate::{Expr, Stmt}; #[derive(Clone)] @@ -7,78 +5,3 @@ pub enum Node<'a> { Stmt(&'a Stmt), Expr(&'a Expr), } - -#[derive(Debug)] -pub struct RefEquality<'a, T>(pub &'a T); - -impl<'a, T> RefEquality<'a, T> { - // More specific implementation that keeps the `'a` lifetime. - // It's otherwise the same as [`AsRef::as_ref`] - #[allow(clippy::should_implement_trait)] - pub fn as_ref(&self) -> &'a T { - self.0 - } -} - -impl<'a, T> AsRef for RefEquality<'a, T> { - fn as_ref(&self) -> &T { - self.0 - } -} - -impl<'a, T> Clone for RefEquality<'a, T> { - fn clone(&self) -> Self { - *self - } -} - -impl<'a, T> Copy for RefEquality<'a, T> {} - -impl<'a, T> std::hash::Hash for RefEquality<'a, T> { - fn hash(&self, state: &mut H) - where - H: std::hash::Hasher, - { - (self.0 as *const T).hash(state); - } -} - -impl<'a, 'b, T> PartialEq> for RefEquality<'a, T> { - fn eq(&self, other: &RefEquality<'b, T>) -> bool { - std::ptr::eq(self.0, other.0) - } -} - -impl<'a, T> Eq for RefEquality<'a, T> {} - -impl<'a, T> Deref for RefEquality<'a, T> { - type Target = T; - - fn deref(&self) -> &T { - self.0 - } -} - -impl<'a> From<&RefEquality<'a, Stmt>> for &'a Stmt { - fn from(r: &RefEquality<'a, Stmt>) -> Self { - r.0 - } -} - -impl<'a> From<&RefEquality<'a, Expr>> for &'a Expr { - fn from(r: &RefEquality<'a, Expr>) -> Self { - r.0 - } -} - -impl<'a> From> for &'a Stmt { - fn from(r: RefEquality<'a, Stmt>) -> Self { - r.0 - } -} - -impl<'a> From> for &'a Expr { - fn from(r: RefEquality<'a, Expr>) -> Self { - r.0 - } -} diff --git a/crates/ruff_python_ast/src/visitor.rs b/crates/ruff_python_ast/src/visitor.rs index b3aac478bb..db9b856eb6 100644 --- a/crates/ruff_python_ast/src/visitor.rs +++ b/crates/ruff_python_ast/src/visitor.rs @@ -128,26 +128,6 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) { } visitor.visit_body(body); } - Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - parameters, - body, - decorator_list, - returns, - type_params, - .. - }) => { - for decorator in decorator_list { - visitor.visit_decorator(decorator); - } - if let Some(type_params) = type_params { - visitor.visit_type_params(type_params); - } - visitor.visit_parameters(parameters); - for expr in returns { - visitor.visit_annotation(expr); - } - visitor.visit_body(body); - } Stmt::ClassDef(ast::StmtClassDef { arguments, body, @@ -228,18 +208,6 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) { visitor.visit_body(body); visitor.visit_body(orelse); } - Stmt::AsyncFor(ast::StmtAsyncFor { - target, - iter, - body, - orelse, - .. - }) => { - visitor.visit_expr(iter); - visitor.visit_expr(target); - visitor.visit_body(body); - visitor.visit_body(orelse); - } Stmt::While(ast::StmtWhile { test, body, @@ -271,12 +239,6 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) { } visitor.visit_body(body); } - Stmt::AsyncWith(ast::StmtAsyncWith { items, body, .. }) => { - for with_item in items { - visitor.visit_with_item(with_item); - } - visitor.visit_body(body); - } Stmt::Match(ast::StmtMatch { subject, cases, @@ -304,20 +266,7 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) { handlers, orelse, finalbody, - range: _, - }) => { - visitor.visit_body(body); - for except_handler in handlers { - visitor.visit_except_handler(except_handler); - } - visitor.visit_body(orelse); - visitor.visit_body(finalbody); - } - Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, + is_star: _, range: _, }) => { visitor.visit_body(body); @@ -350,7 +299,7 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) { Stmt::Global(_) => {} Stmt::Nonlocal(_) => {} Stmt::Expr(ast::StmtExpr { value, range: _ }) => visitor.visit_expr(value), - Stmt::Pass(_) | Stmt::Break(_) | Stmt::Continue(_) | Stmt::LineMagic(_) => {} + Stmt::Pass(_) | Stmt::Break(_) | Stmt::Continue(_) | Stmt::IpyEscapeCommand(_) => {} } } @@ -514,7 +463,7 @@ pub fn walk_expr<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, expr: &'a Expr) { visitor.visit_format_spec(expr); } } - Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { + Expr::FString(ast::ExprFString { values, .. }) => { for expr in values { visitor.visit_expr(expr); } @@ -581,7 +530,7 @@ pub fn walk_expr<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, expr: &'a Expr) { visitor.visit_expr(expr); } } - Expr::LineMagic(_) => {} + Expr::IpyEscapeCommand(_) => {} } } @@ -753,23 +702,19 @@ pub fn walk_pattern<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, pattern: &'a P } #[allow(unused_variables)] -pub fn walk_expr_context<'a, V: Visitor<'a> + ?Sized>( - visitor: &mut V, - expr_context: &'a ExprContext, -) { -} +pub fn walk_expr_context<'a, V: Visitor<'a> + ?Sized>(visitor: &V, expr_context: &'a ExprContext) {} #[allow(unused_variables)] -pub fn walk_bool_op<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, bool_op: &'a BoolOp) {} +pub fn walk_bool_op<'a, V: Visitor<'a> + ?Sized>(visitor: &V, bool_op: &'a BoolOp) {} #[allow(unused_variables)] -pub fn walk_operator<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, operator: &'a Operator) {} +pub fn walk_operator<'a, V: Visitor<'a> + ?Sized>(visitor: &V, operator: &'a Operator) {} #[allow(unused_variables)] -pub fn walk_unary_op<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, unary_op: &'a UnaryOp) {} +pub fn walk_unary_op<'a, V: Visitor<'a> + ?Sized>(visitor: &V, unary_op: &'a UnaryOp) {} #[allow(unused_variables)] -pub fn walk_cmp_op<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, cmp_op: &'a CmpOp) {} +pub fn walk_cmp_op<'a, V: Visitor<'a> + ?Sized>(visitor: &V, cmp_op: &'a CmpOp) {} #[allow(unused_variables)] -pub fn walk_alias<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, alias: &'a Alias) {} +pub fn walk_alias<'a, V: Visitor<'a> + ?Sized>(visitor: &V, alias: &'a Alias) {} diff --git a/crates/ruff_python_ast/src/visitor/preorder.rs b/crates/ruff_python_ast/src/visitor/preorder.rs index 84a9e0535a..dc171765b5 100644 --- a/crates/ruff_python_ast/src/visitor/preorder.rs +++ b/crates/ruff_python_ast/src/visitor/preorder.rs @@ -1,70 +1,94 @@ +use crate::node::{AnyNodeRef, AstNode}; use crate::{ - self as ast, Alias, Arguments, BoolOp, CmpOp, Comprehension, Constant, Decorator, - ElifElseClause, ExceptHandler, Expr, Keyword, MatchCase, Mod, Operator, Parameter, - ParameterWithDefault, Parameters, Pattern, Stmt, TypeParam, TypeParamTypeVar, TypeParams, - UnaryOp, WithItem, + Alias, Arguments, BoolOp, CmpOp, Comprehension, Constant, Decorator, ElifElseClause, + ExceptHandler, Expr, Keyword, MatchCase, Mod, Operator, Parameter, ParameterWithDefault, + Parameters, Pattern, Stmt, TypeParam, TypeParams, UnaryOp, WithItem, }; /// Visitor that traverses all nodes recursively in pre-order. pub trait PreorderVisitor<'a> { + #[inline] + fn enter_node(&mut self, _node: AnyNodeRef<'a>) -> TraversalSignal { + TraversalSignal::Traverse + } + + #[inline(always)] + fn leave_node(&mut self, _node: AnyNodeRef<'a>) {} + + #[inline] fn visit_mod(&mut self, module: &'a Mod) { walk_module(self, module); } + #[inline] fn visit_stmt(&mut self, stmt: &'a Stmt) { walk_stmt(self, stmt); } + #[inline] fn visit_annotation(&mut self, expr: &'a Expr) { walk_annotation(self, expr); } + #[inline] fn visit_expr(&mut self, expr: &'a Expr) { walk_expr(self, expr); } + #[inline] fn visit_decorator(&mut self, decorator: &'a Decorator) { walk_decorator(self, decorator); } + #[inline] fn visit_constant(&mut self, _constant: &'a Constant) {} + #[inline] fn visit_bool_op(&mut self, bool_op: &'a BoolOp) { walk_bool_op(self, bool_op); } + #[inline] fn visit_operator(&mut self, operator: &'a Operator) { walk_operator(self, operator); } + #[inline] fn visit_unary_op(&mut self, unary_op: &'a UnaryOp) { walk_unary_op(self, unary_op); } + #[inline] fn visit_cmp_op(&mut self, cmp_op: &'a CmpOp) { walk_cmp_op(self, cmp_op); } + #[inline] fn visit_comprehension(&mut self, comprehension: &'a Comprehension) { walk_comprehension(self, comprehension); } + #[inline] fn visit_except_handler(&mut self, except_handler: &'a ExceptHandler) { walk_except_handler(self, except_handler); } + #[inline] fn visit_format_spec(&mut self, format_spec: &'a Expr) { walk_format_spec(self, format_spec); } + #[inline] fn visit_arguments(&mut self, arguments: &'a Arguments) { walk_arguments(self, arguments); } + #[inline] fn visit_parameters(&mut self, parameters: &'a Parameters) { walk_parameters(self, parameters); } + #[inline] fn visit_parameter(&mut self, arg: &'a Parameter) { walk_parameter(self, arg); } @@ -73,38 +97,47 @@ pub trait PreorderVisitor<'a> { walk_parameter_with_default(self, parameter_with_default); } + #[inline] fn visit_keyword(&mut self, keyword: &'a Keyword) { walk_keyword(self, keyword); } + #[inline] fn visit_alias(&mut self, alias: &'a Alias) { walk_alias(self, alias); } + #[inline] fn visit_with_item(&mut self, with_item: &'a WithItem) { walk_with_item(self, with_item); } + #[inline] fn visit_type_params(&mut self, type_params: &'a TypeParams) { walk_type_params(self, type_params); } + #[inline] fn visit_type_param(&mut self, type_param: &'a TypeParam) { walk_type_param(self, type_param); } + #[inline] fn visit_match_case(&mut self, match_case: &'a MatchCase) { walk_match_case(self, match_case); } + #[inline] fn visit_pattern(&mut self, pattern: &'a Pattern) { walk_pattern(self, pattern); } + #[inline] fn visit_body(&mut self, body: &'a [Stmt]) { walk_body(self, body); } + #[inline] fn visit_elif_else_clause(&mut self, elif_else_clause: &'a ElifElseClause) { walk_elif_else_clause(self, elif_else_clause); } @@ -114,12 +147,15 @@ pub fn walk_module<'a, V>(visitor: &mut V, module: &'a Mod) where V: PreorderVisitor<'a> + ?Sized, { - match module { - Mod::Module(ast::ModModule { body, range: _ }) => { - visitor.visit_body(body); + let node = AnyNodeRef::from(module); + if visitor.enter_node(node).is_traverse() { + match module { + Mod::Module(module) => module.visit_preorder(visitor), + Mod::Expression(module) => module.visit_preorder(visitor), } - Mod::Expression(ast::ModExpression { body, range: _ }) => visitor.visit_expr(body), } + + visitor.leave_node(node); } pub fn walk_body<'a, V>(visitor: &mut V, body: &'a [Stmt]) @@ -135,632 +171,198 @@ pub fn walk_stmt<'a, V>(visitor: &mut V, stmt: &'a Stmt) where V: PreorderVisitor<'a> + ?Sized, { - match stmt { - Stmt::Expr(ast::StmtExpr { value, range: _ }) => visitor.visit_expr(value), + let node = AnyNodeRef::from(stmt); - Stmt::FunctionDef(ast::StmtFunctionDef { - parameters, - body, - decorator_list, - returns, - type_params, - .. - }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - parameters, - body, - decorator_list, - returns, - type_params, - .. - }) => { - for decorator in decorator_list { - visitor.visit_decorator(decorator); - } - - if let Some(type_params) = type_params { - visitor.visit_type_params(type_params); - } - - visitor.visit_parameters(parameters); - - for expr in returns { - visitor.visit_annotation(expr); - } - - visitor.visit_body(body); + if visitor.enter_node(node).is_traverse() { + match stmt { + Stmt::Expr(stmt) => stmt.visit_preorder(visitor), + Stmt::FunctionDef(stmt) => stmt.visit_preorder(visitor), + Stmt::ClassDef(stmt) => stmt.visit_preorder(visitor), + Stmt::Return(stmt) => stmt.visit_preorder(visitor), + Stmt::Delete(stmt) => stmt.visit_preorder(visitor), + Stmt::TypeAlias(stmt) => stmt.visit_preorder(visitor), + Stmt::Assign(stmt) => stmt.visit_preorder(visitor), + Stmt::AugAssign(stmt) => stmt.visit_preorder(visitor), + Stmt::AnnAssign(stmt) => stmt.visit_preorder(visitor), + Stmt::For(stmt) => stmt.visit_preorder(visitor), + Stmt::While(stmt) => stmt.visit_preorder(visitor), + Stmt::If(stmt) => stmt.visit_preorder(visitor), + Stmt::With(stmt) => stmt.visit_preorder(visitor), + Stmt::Match(stmt) => stmt.visit_preorder(visitor), + Stmt::Raise(stmt) => stmt.visit_preorder(visitor), + Stmt::Try(stmt) => stmt.visit_preorder(visitor), + Stmt::Assert(stmt) => stmt.visit_preorder(visitor), + Stmt::Import(stmt) => stmt.visit_preorder(visitor), + Stmt::ImportFrom(stmt) => stmt.visit_preorder(visitor), + Stmt::Pass(stmt) => stmt.visit_preorder(visitor), + Stmt::Break(stmt) => stmt.visit_preorder(visitor), + Stmt::Continue(stmt) => stmt.visit_preorder(visitor), + Stmt::Global(stmt) => stmt.visit_preorder(visitor), + Stmt::Nonlocal(stmt) => stmt.visit_preorder(visitor), + Stmt::IpyEscapeCommand(stmt) => stmt.visit_preorder(visitor), } + } - Stmt::ClassDef(ast::StmtClassDef { - arguments, - body, - decorator_list, - type_params, - .. - }) => { - for decorator in decorator_list { - visitor.visit_decorator(decorator); - } + visitor.leave_node(node); +} - if let Some(type_params) = type_params { - visitor.visit_type_params(type_params); - } +#[derive(Copy, Clone, Eq, PartialEq, Debug)] +pub enum TraversalSignal { + Traverse, + Skip, +} - if let Some(arguments) = arguments { - visitor.visit_arguments(arguments); - } - - visitor.visit_body(body); - } - - Stmt::Return(ast::StmtReturn { value, range: _ }) => { - if let Some(expr) = value { - visitor.visit_expr(expr); - } - } - - Stmt::Delete(ast::StmtDelete { targets, range: _ }) => { - for expr in targets { - visitor.visit_expr(expr); - } - } - - Stmt::TypeAlias(ast::StmtTypeAlias { - range: _, - name, - type_params, - value, - }) => { - visitor.visit_expr(name); - if let Some(type_params) = type_params { - visitor.visit_type_params(type_params); - } - visitor.visit_expr(value); - } - - Stmt::Assign(ast::StmtAssign { - targets, - value, - range: _, - }) => { - for expr in targets { - visitor.visit_expr(expr); - } - - visitor.visit_expr(value); - } - - Stmt::AugAssign(ast::StmtAugAssign { - target, - op, - value, - range: _, - }) => { - visitor.visit_expr(target); - visitor.visit_operator(op); - visitor.visit_expr(value); - } - - Stmt::AnnAssign(ast::StmtAnnAssign { - target, - annotation, - value, - range: _, - simple: _, - }) => { - visitor.visit_expr(target); - visitor.visit_annotation(annotation); - if let Some(expr) = value { - visitor.visit_expr(expr); - } - } - - Stmt::For(ast::StmtFor { - target, - iter, - body, - orelse, - .. - }) - | Stmt::AsyncFor(ast::StmtAsyncFor { - target, - iter, - body, - orelse, - .. - }) => { - visitor.visit_expr(target); - visitor.visit_expr(iter); - visitor.visit_body(body); - visitor.visit_body(orelse); - } - - Stmt::While(ast::StmtWhile { - test, - body, - orelse, - range: _, - }) => { - visitor.visit_expr(test); - visitor.visit_body(body); - visitor.visit_body(orelse); - } - - Stmt::If(ast::StmtIf { - test, - body, - elif_else_clauses, - range: _, - }) => { - visitor.visit_expr(test); - visitor.visit_body(body); - for clause in elif_else_clauses { - visitor.visit_elif_else_clause(clause); - } - } - - Stmt::With(ast::StmtWith { - items, - body, - range: _, - }) - | Stmt::AsyncWith(ast::StmtAsyncWith { - items, - body, - range: _, - }) => { - for with_item in items { - visitor.visit_with_item(with_item); - } - visitor.visit_body(body); - } - - Stmt::Match(ast::StmtMatch { - subject, - cases, - range: _, - }) => { - visitor.visit_expr(subject); - for match_case in cases { - visitor.visit_match_case(match_case); - } - } - - Stmt::Raise(ast::StmtRaise { - exc, - cause, - range: _, - }) => { - if let Some(expr) = exc { - visitor.visit_expr(expr); - }; - if let Some(expr) = cause { - visitor.visit_expr(expr); - }; - } - - Stmt::Try(ast::StmtTry { - body, - handlers, - orelse, - finalbody, - range: _, - }) - | Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - range: _, - }) => { - visitor.visit_body(body); - for except_handler in handlers { - visitor.visit_except_handler(except_handler); - } - visitor.visit_body(orelse); - visitor.visit_body(finalbody); - } - - Stmt::Assert(ast::StmtAssert { - test, - msg, - range: _, - }) => { - visitor.visit_expr(test); - if let Some(expr) = msg { - visitor.visit_expr(expr); - } - } - - Stmt::Import(ast::StmtImport { names, range: _ }) => { - for alias in names { - visitor.visit_alias(alias); - } - } - - Stmt::ImportFrom(ast::StmtImportFrom { - range: _, - module: _, - names, - level: _, - }) => { - for alias in names { - visitor.visit_alias(alias); - } - } - - Stmt::Pass(_) - | Stmt::Break(_) - | Stmt::Continue(_) - | Stmt::Global(_) - | Stmt::Nonlocal(_) - | Stmt::LineMagic(_) => {} +impl TraversalSignal { + const fn is_traverse(self) -> bool { + matches!(self, TraversalSignal::Traverse) } } pub fn walk_annotation<'a, V: PreorderVisitor<'a> + ?Sized>(visitor: &mut V, expr: &'a Expr) { - visitor.visit_expr(expr); + let node = AnyNodeRef::from(expr); + if visitor.enter_node(node).is_traverse() { + visitor.visit_expr(expr); + } + + visitor.leave_node(node); } pub fn walk_decorator<'a, V>(visitor: &mut V, decorator: &'a Decorator) where V: PreorderVisitor<'a> + ?Sized, { - visitor.visit_expr(&decorator.expression); + let node = AnyNodeRef::from(decorator); + if visitor.enter_node(node).is_traverse() { + decorator.visit_preorder(visitor); + } + + visitor.leave_node(node); } pub fn walk_expr<'a, V>(visitor: &mut V, expr: &'a Expr) where V: PreorderVisitor<'a> + ?Sized, { - match expr { - Expr::BoolOp(ast::ExprBoolOp { - op, - values, - range: _, - }) => match values.as_slice() { - [left, rest @ ..] => { - visitor.visit_expr(left); - visitor.visit_bool_op(op); - for expr in rest { - visitor.visit_expr(expr); - } - } - [] => { - visitor.visit_bool_op(op); - } - }, - - Expr::NamedExpr(ast::ExprNamedExpr { - target, - value, - range: _, - }) => { - visitor.visit_expr(target); - visitor.visit_expr(value); + let node = AnyNodeRef::from(expr); + if visitor.enter_node(node).is_traverse() { + match expr { + Expr::BoolOp(expr) => expr.visit_preorder(visitor), + Expr::NamedExpr(expr) => expr.visit_preorder(visitor), + Expr::BinOp(expr) => expr.visit_preorder(visitor), + Expr::UnaryOp(expr) => expr.visit_preorder(visitor), + Expr::Lambda(expr) => expr.visit_preorder(visitor), + Expr::IfExp(expr) => expr.visit_preorder(visitor), + Expr::Dict(expr) => expr.visit_preorder(visitor), + Expr::Set(expr) => expr.visit_preorder(visitor), + Expr::ListComp(expr) => expr.visit_preorder(visitor), + Expr::SetComp(expr) => expr.visit_preorder(visitor), + Expr::DictComp(expr) => expr.visit_preorder(visitor), + Expr::GeneratorExp(expr) => expr.visit_preorder(visitor), + Expr::Await(expr) => expr.visit_preorder(visitor), + Expr::Yield(expr) => expr.visit_preorder(visitor), + Expr::YieldFrom(expr) => expr.visit_preorder(visitor), + Expr::Compare(expr) => expr.visit_preorder(visitor), + Expr::Call(expr) => expr.visit_preorder(visitor), + Expr::FormattedValue(expr) => expr.visit_preorder(visitor), + Expr::FString(expr) => expr.visit_preorder(visitor), + Expr::Constant(expr) => expr.visit_preorder(visitor), + Expr::Attribute(expr) => expr.visit_preorder(visitor), + Expr::Subscript(expr) => expr.visit_preorder(visitor), + Expr::Starred(expr) => expr.visit_preorder(visitor), + Expr::Name(expr) => expr.visit_preorder(visitor), + Expr::List(expr) => expr.visit_preorder(visitor), + Expr::Tuple(expr) => expr.visit_preorder(visitor), + Expr::Slice(expr) => expr.visit_preorder(visitor), + Expr::IpyEscapeCommand(expr) => expr.visit_preorder(visitor), } - - Expr::BinOp(ast::ExprBinOp { - left, - op, - right, - range: _, - }) => { - visitor.visit_expr(left); - visitor.visit_operator(op); - visitor.visit_expr(right); - } - - Expr::UnaryOp(ast::ExprUnaryOp { - op, - operand, - range: _, - }) => { - visitor.visit_unary_op(op); - visitor.visit_expr(operand); - } - - Expr::Lambda(ast::ExprLambda { - parameters, - body, - range: _, - }) => { - visitor.visit_parameters(parameters); - visitor.visit_expr(body); - } - - Expr::IfExp(ast::ExprIfExp { - test, - body, - orelse, - range: _, - }) => { - // `body if test else orelse` - visitor.visit_expr(body); - visitor.visit_expr(test); - visitor.visit_expr(orelse); - } - - Expr::Dict(ast::ExprDict { - keys, - values, - range: _, - }) => { - for (key, value) in keys.iter().zip(values) { - if let Some(key) = key { - visitor.visit_expr(key); - } - visitor.visit_expr(value); - } - } - - Expr::Set(ast::ExprSet { elts, range: _ }) => { - for expr in elts { - visitor.visit_expr(expr); - } - } - - Expr::ListComp(ast::ExprListComp { - elt, - generators, - range: _, - }) => { - visitor.visit_expr(elt); - for comprehension in generators { - visitor.visit_comprehension(comprehension); - } - } - - Expr::SetComp(ast::ExprSetComp { - elt, - generators, - range: _, - }) => { - visitor.visit_expr(elt); - for comprehension in generators { - visitor.visit_comprehension(comprehension); - } - } - - Expr::DictComp(ast::ExprDictComp { - key, - value, - generators, - range: _, - }) => { - visitor.visit_expr(key); - visitor.visit_expr(value); - - for comprehension in generators { - visitor.visit_comprehension(comprehension); - } - } - - Expr::GeneratorExp(ast::ExprGeneratorExp { - elt, - generators, - range: _, - }) => { - visitor.visit_expr(elt); - for comprehension in generators { - visitor.visit_comprehension(comprehension); - } - } - - Expr::Await(ast::ExprAwait { value, range: _ }) - | Expr::YieldFrom(ast::ExprYieldFrom { value, range: _ }) => visitor.visit_expr(value), - - Expr::Yield(ast::ExprYield { value, range: _ }) => { - if let Some(expr) = value { - visitor.visit_expr(expr); - } - } - - Expr::Compare(ast::ExprCompare { - left, - ops, - comparators, - range: _, - }) => { - visitor.visit_expr(left); - - for (op, comparator) in ops.iter().zip(comparators) { - visitor.visit_cmp_op(op); - visitor.visit_expr(comparator); - } - } - - Expr::Call(ast::ExprCall { - func, - arguments, - range: _, - }) => { - visitor.visit_expr(func); - visitor.visit_arguments(arguments); - } - - Expr::FormattedValue(ast::ExprFormattedValue { - value, format_spec, .. - }) => { - visitor.visit_expr(value); - - if let Some(expr) = format_spec { - visitor.visit_format_spec(expr); - } - } - - Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { - for expr in values { - visitor.visit_expr(expr); - } - } - - Expr::Constant(ast::ExprConstant { - value, - range: _, - kind: _, - }) => visitor.visit_constant(value), - - Expr::Attribute(ast::ExprAttribute { - value, - attr: _, - ctx: _, - range: _, - }) => { - visitor.visit_expr(value); - } - - Expr::Subscript(ast::ExprSubscript { - value, - slice, - ctx: _, - range: _, - }) => { - visitor.visit_expr(value); - visitor.visit_expr(slice); - } - Expr::Starred(ast::ExprStarred { - value, - ctx: _, - range: _, - }) => { - visitor.visit_expr(value); - } - - Expr::Name(ast::ExprName { - id: _, - ctx: _, - range: _, - }) => {} - - Expr::List(ast::ExprList { - elts, - ctx: _, - range: _, - }) => { - for expr in elts { - visitor.visit_expr(expr); - } - } - Expr::Tuple(ast::ExprTuple { - elts, - ctx: _, - range: _, - }) => { - for expr in elts { - visitor.visit_expr(expr); - } - } - - Expr::Slice(ast::ExprSlice { - lower, - upper, - step, - range: _, - }) => { - if let Some(expr) = lower { - visitor.visit_expr(expr); - } - if let Some(expr) = upper { - visitor.visit_expr(expr); - } - if let Some(expr) = step { - visitor.visit_expr(expr); - } - } - Expr::LineMagic(_) => (), } + + visitor.leave_node(node); } pub fn walk_comprehension<'a, V>(visitor: &mut V, comprehension: &'a Comprehension) where V: PreorderVisitor<'a> + ?Sized, { - visitor.visit_expr(&comprehension.target); - visitor.visit_expr(&comprehension.iter); - - for expr in &comprehension.ifs { - visitor.visit_expr(expr); + let node = AnyNodeRef::from(comprehension); + if visitor.enter_node(node).is_traverse() { + comprehension.visit_preorder(visitor); } + + visitor.leave_node(node); } pub fn walk_elif_else_clause<'a, V>(visitor: &mut V, elif_else_clause: &'a ElifElseClause) where V: PreorderVisitor<'a> + ?Sized, { - if let Some(test) = &elif_else_clause.test { - visitor.visit_expr(test); + let node = AnyNodeRef::from(elif_else_clause); + if visitor.enter_node(node).is_traverse() { + elif_else_clause.visit_preorder(visitor); } - visitor.visit_body(&elif_else_clause.body); + + visitor.leave_node(node); } pub fn walk_except_handler<'a, V>(visitor: &mut V, except_handler: &'a ExceptHandler) where V: PreorderVisitor<'a> + ?Sized, { - match except_handler { - ExceptHandler::ExceptHandler(ast::ExceptHandlerExceptHandler { - range: _, - type_, - name: _, - body, - }) => { - if let Some(expr) = type_ { - visitor.visit_expr(expr); - } - visitor.visit_body(body); + let node = AnyNodeRef::from(except_handler); + if visitor.enter_node(node).is_traverse() { + match except_handler { + ExceptHandler::ExceptHandler(except_handler) => except_handler.visit_preorder(visitor), } } + visitor.leave_node(node); } pub fn walk_format_spec<'a, V: PreorderVisitor<'a> + ?Sized>( visitor: &mut V, format_spec: &'a Expr, ) { - visitor.visit_expr(format_spec); + let node = AnyNodeRef::from(format_spec); + if visitor.enter_node(node).is_traverse() { + visitor.visit_expr(format_spec); + } + + visitor.leave_node(node); } pub fn walk_arguments<'a, V>(visitor: &mut V, arguments: &'a Arguments) where V: PreorderVisitor<'a> + ?Sized, { - for arg in &arguments.args { - visitor.visit_expr(arg); + let node = AnyNodeRef::from(arguments); + if visitor.enter_node(node).is_traverse() { + arguments.visit_preorder(visitor); } - for keyword in &arguments.keywords { - visitor.visit_keyword(keyword); - } + visitor.leave_node(node); } pub fn walk_parameters<'a, V>(visitor: &mut V, parameters: &'a Parameters) where V: PreorderVisitor<'a> + ?Sized, { - for arg in parameters.posonlyargs.iter().chain(¶meters.args) { - visitor.visit_parameter_with_default(arg); + let node = AnyNodeRef::from(parameters); + if visitor.enter_node(node).is_traverse() { + parameters.visit_preorder(visitor); } - if let Some(arg) = ¶meters.vararg { - visitor.visit_parameter(arg); - } - - for arg in ¶meters.kwonlyargs { - visitor.visit_parameter_with_default(arg); - } - - if let Some(arg) = ¶meters.kwarg { - visitor.visit_parameter(arg); - } + visitor.leave_node(node); } pub fn walk_parameter<'a, V>(visitor: &mut V, parameter: &'a Parameter) where V: PreorderVisitor<'a> + ?Sized, { - if let Some(expr) = ¶meter.annotation { - visitor.visit_annotation(expr); + let node = AnyNodeRef::from(parameter); + + if visitor.enter_node(node).is_traverse() { + parameter.visit_preorder(visitor); } + visitor.leave_node(node); } pub fn walk_parameter_with_default<'a, V>( @@ -769,10 +371,12 @@ pub fn walk_parameter_with_default<'a, V>( ) where V: PreorderVisitor<'a> + ?Sized, { - visitor.visit_parameter(¶meter_with_default.parameter); - if let Some(expr) = ¶meter_with_default.default { - visitor.visit_expr(expr); + let node = AnyNodeRef::from(parameter_with_default); + if visitor.enter_node(node).is_traverse() { + parameter_with_default.visit_preorder(visitor); } + + visitor.leave_node(node); } #[inline] @@ -780,124 +384,80 @@ pub fn walk_keyword<'a, V>(visitor: &mut V, keyword: &'a Keyword) where V: PreorderVisitor<'a> + ?Sized, { - visitor.visit_expr(&keyword.value); + let node = AnyNodeRef::from(keyword); + + if visitor.enter_node(node).is_traverse() { + keyword.visit_preorder(visitor); + } + visitor.leave_node(node); } pub fn walk_with_item<'a, V>(visitor: &mut V, with_item: &'a WithItem) where V: PreorderVisitor<'a> + ?Sized, { - visitor.visit_expr(&with_item.context_expr); - - if let Some(expr) = &with_item.optional_vars { - visitor.visit_expr(expr); + let node = AnyNodeRef::from(with_item); + if visitor.enter_node(node).is_traverse() { + with_item.visit_preorder(visitor); } + visitor.leave_node(node); } pub fn walk_type_params<'a, V>(visitor: &mut V, type_params: &'a TypeParams) where V: PreorderVisitor<'a> + ?Sized, { - for type_param in &type_params.type_params { - visitor.visit_type_param(type_param); + let node = AnyNodeRef::from(type_params); + if visitor.enter_node(node).is_traverse() { + type_params.visit_preorder(visitor); } + visitor.leave_node(node); } pub fn walk_type_param<'a, V>(visitor: &mut V, type_param: &'a TypeParam) where V: PreorderVisitor<'a> + ?Sized, { - match type_param { - TypeParam::TypeVar(TypeParamTypeVar { - bound, - name: _, - range: _, - }) => { - if let Some(expr) = bound { - visitor.visit_expr(expr); - } + let node = AnyNodeRef::from(type_param); + if visitor.enter_node(node).is_traverse() { + match type_param { + TypeParam::TypeVar(type_param) => type_param.visit_preorder(visitor), + TypeParam::TypeVarTuple(type_param) => type_param.visit_preorder(visitor), + TypeParam::ParamSpec(type_param) => type_param.visit_preorder(visitor), } - TypeParam::TypeVarTuple(_) | TypeParam::ParamSpec(_) => {} } + visitor.leave_node(node); } pub fn walk_match_case<'a, V>(visitor: &mut V, match_case: &'a MatchCase) where V: PreorderVisitor<'a> + ?Sized, { - visitor.visit_pattern(&match_case.pattern); - if let Some(expr) = &match_case.guard { - visitor.visit_expr(expr); + let node = AnyNodeRef::from(match_case); + if visitor.enter_node(node).is_traverse() { + match_case.visit_preorder(visitor); } - visitor.visit_body(&match_case.body); + visitor.leave_node(node); } pub fn walk_pattern<'a, V>(visitor: &mut V, pattern: &'a Pattern) where V: PreorderVisitor<'a> + ?Sized, { - match pattern { - Pattern::MatchValue(ast::PatternMatchValue { value, range: _ }) => { - visitor.visit_expr(value); - } - - Pattern::MatchSingleton(ast::PatternMatchSingleton { value, range: _ }) => { - visitor.visit_constant(value); - } - - Pattern::MatchSequence(ast::PatternMatchSequence { patterns, range: _ }) => { - for pattern in patterns { - visitor.visit_pattern(pattern); - } - } - - Pattern::MatchMapping(ast::PatternMatchMapping { - keys, - patterns, - range: _, - rest: _, - }) => { - for (key, pattern) in keys.iter().zip(patterns) { - visitor.visit_expr(key); - visitor.visit_pattern(pattern); - } - } - - Pattern::MatchClass(ast::PatternMatchClass { - cls, - patterns, - kwd_attrs: _, - kwd_patterns, - range: _, - }) => { - visitor.visit_expr(cls); - for pattern in patterns { - visitor.visit_pattern(pattern); - } - - for pattern in kwd_patterns { - visitor.visit_pattern(pattern); - } - } - - Pattern::MatchStar(_) => {} - - Pattern::MatchAs(ast::PatternMatchAs { - pattern, - range: _, - name: _, - }) => { - if let Some(pattern) = pattern { - visitor.visit_pattern(pattern); - } - } - - Pattern::MatchOr(ast::PatternMatchOr { patterns, range: _ }) => { - for pattern in patterns { - visitor.visit_pattern(pattern); - } + let node = AnyNodeRef::from(pattern); + if visitor.enter_node(node).is_traverse() { + match pattern { + Pattern::MatchValue(pattern) => pattern.visit_preorder(visitor), + Pattern::MatchSingleton(pattern) => pattern.visit_preorder(visitor), + Pattern::MatchSequence(pattern) => pattern.visit_preorder(visitor), + Pattern::MatchMapping(pattern) => pattern.visit_preorder(visitor), + Pattern::MatchClass(pattern) => pattern.visit_preorder(visitor), + Pattern::MatchStar(pattern) => pattern.visit_preorder(visitor), + Pattern::MatchAs(pattern) => pattern.visit_preorder(visitor), + Pattern::MatchOr(pattern) => pattern.visit_preorder(visitor), } } + visitor.leave_node(node); } pub fn walk_bool_op<'a, V>(_visitor: &mut V, _bool_op: &'a BoolOp) @@ -928,8 +488,13 @@ where } #[inline] -pub fn walk_alias<'a, V>(_visitor: &mut V, _alias: &'a Alias) +pub fn walk_alias<'a, V>(visitor: &mut V, alias: &'a Alias) where V: PreorderVisitor<'a> + ?Sized, { + let node = AnyNodeRef::from(alias); + if visitor.enter_node(node).is_traverse() { + alias.visit_preorder(visitor); + } + visitor.leave_node(node); } diff --git a/crates/ruff_python_codegen/src/generator.rs b/crates/ruff_python_codegen/src/generator.rs index b502abad65..d20d8afa4c 100644 --- a/crates/ruff_python_codegen/src/generator.rs +++ b/crates/ruff_python_codegen/src/generator.rs @@ -23,7 +23,6 @@ mod precedence { pub(crate) const YIELD_FROM: u8 = 7; pub(crate) const IF: u8 = 9; pub(crate) const FOR: u8 = 9; - pub(crate) const ASYNC_FOR: u8 = 9; pub(crate) const WHILE: u8 = 9; pub(crate) const RETURN: u8 = 11; pub(crate) const SLICE: u8 = 13; @@ -204,6 +203,7 @@ impl<'a> Generator<'a> { match ast { Stmt::FunctionDef(ast::StmtFunctionDef { + is_async, name, parameters, body, @@ -220,6 +220,9 @@ impl<'a> Generator<'a> { }); } statement!({ + if *is_async { + self.p("async "); + } self.p("def "); self.p_id(name); if let Some(type_params) = type_params { @@ -239,42 +242,6 @@ impl<'a> Generator<'a> { self.newlines(2); } } - Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - name, - parameters, - body, - returns, - decorator_list, - type_params, - .. - }) => { - self.newlines(if self.indent_depth == 0 { 2 } else { 1 }); - for decorator in decorator_list { - statement!({ - self.p("@"); - self.unparse_expr(&decorator.expression, precedence::MAX); - }); - } - statement!({ - self.p("async def "); - self.p_id(name); - if let Some(type_params) = type_params { - self.unparse_type_params(type_params); - } - self.p("("); - self.unparse_parameters(parameters); - self.p(")"); - if let Some(returns) = returns { - self.p(" -> "); - self.unparse_expr(returns, precedence::MAX); - } - self.p(":"); - }); - self.body(body); - if self.indent_depth == 0 { - self.newlines(2); - } - } Stmt::ClassDef(ast::StmtClassDef { name, arguments, @@ -400,6 +367,7 @@ impl<'a> Generator<'a> { }); } Stmt::For(ast::StmtFor { + is_async, target, iter, body, @@ -407,6 +375,9 @@ impl<'a> Generator<'a> { .. }) => { statement!({ + if *is_async { + self.p("async "); + } self.p("for "); self.unparse_expr(target, precedence::FOR); self.p(" in "); @@ -421,28 +392,6 @@ impl<'a> Generator<'a> { self.body(orelse); } } - Stmt::AsyncFor(ast::StmtAsyncFor { - target, - iter, - body, - orelse, - .. - }) => { - statement!({ - self.p("async for "); - self.unparse_expr(target, precedence::ASYNC_FOR); - self.p(" in "); - self.unparse_expr(iter, precedence::MAX); - self.p(":"); - }); - self.body(body); - if !orelse.is_empty() { - statement!({ - self.p("else:"); - }); - self.body(orelse); - } - } Stmt::While(ast::StmtWhile { test, body, @@ -490,21 +439,17 @@ impl<'a> Generator<'a> { self.body(&clause.body); } } - Stmt::With(ast::StmtWith { items, body, .. }) => { + Stmt::With(ast::StmtWith { + is_async, + items, + body, + .. + }) => { statement!({ - self.p("with "); - let mut first = true; - for item in items { - self.p_delim(&mut first, ", "); - self.unparse_with_item(item); + if *is_async { + self.p("async "); } - self.p(":"); - }); - self.body(body); - } - Stmt::AsyncWith(ast::StmtAsyncWith { items, body, .. }) => { - statement!({ - self.p("async with "); + self.p("with "); let mut first = true; for item in items { self.p_delim(&mut first, ", "); @@ -568,6 +513,7 @@ impl<'a> Generator<'a> { handlers, orelse, finalbody, + is_star, range: _, }) => { statement!({ @@ -577,38 +523,7 @@ impl<'a> Generator<'a> { for handler in handlers { statement!({ - self.unparse_except_handler(handler, false); - }); - } - - if !orelse.is_empty() { - statement!({ - self.p("else:"); - }); - self.body(orelse); - } - if !finalbody.is_empty() { - statement!({ - self.p("finally:"); - }); - self.body(finalbody); - } - } - Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - range: _, - }) => { - statement!({ - self.p("try:"); - }); - self.body(body); - - for handler in handlers { - statement!({ - self.unparse_except_handler(handler, true); + self.unparse_except_handler(handler, *is_star); }); } @@ -711,7 +626,7 @@ impl<'a> Generator<'a> { self.p("continue"); }); } - Stmt::LineMagic(ast::StmtLineMagic { kind, value, .. }) => { + Stmt::IpyEscapeCommand(ast::StmtIpyEscapeCommand { kind, value, .. }) => { statement!({ self.p(&format!("{kind}{value}")); }); @@ -1159,8 +1074,8 @@ impl<'a> Generator<'a> { *conversion, format_spec.as_deref(), ), - Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { - self.unparse_joinedstr(values, false); + Expr::FString(ast::ExprFString { values, .. }) => { + self.unparse_f_string(values, false); } Expr::Constant(ast::ExprConstant { value, @@ -1239,7 +1154,7 @@ impl<'a> Generator<'a> { self.unparse_expr(step, precedence::SLICE); } } - Expr::LineMagic(ast::ExprLineMagic { kind, value, .. }) => { + Expr::IpyEscapeCommand(ast::ExprIpyEscapeCommand { kind, value, .. }) => { self.p(&format!("{kind}{value}")); } } @@ -1252,8 +1167,8 @@ impl<'a> Generator<'a> { Constant::Bytes(b) => { self.p_bytes_repr(b); } - Constant::Str(s) => { - self.p_str_repr(s); + Constant::Str(ast::StringConstant { value, .. }) => { + self.p_str_repr(value); } Constant::None => self.p("None"), Constant::Bool(b) => self.p(if *b { "True" } else { "False" }), @@ -1344,9 +1259,9 @@ impl<'a> Generator<'a> { } } - fn unparse_fstring_body(&mut self, values: &[Expr], is_spec: bool) { + fn unparse_f_string_body(&mut self, values: &[Expr], is_spec: bool) { for value in values { - self.unparse_fstring_elem(value, is_spec); + self.unparse_f_string_elem(value, is_spec); } } @@ -1385,23 +1300,23 @@ impl<'a> Generator<'a> { if let Some(spec) = spec { self.p(":"); - self.unparse_fstring_elem(spec, true); + self.unparse_f_string_elem(spec, true); } self.p("}"); } - fn unparse_fstring_elem(&mut self, expr: &Expr, is_spec: bool) { + fn unparse_f_string_elem(&mut self, expr: &Expr, is_spec: bool) { match expr { Expr::Constant(ast::ExprConstant { value, .. }) => { - if let Constant::Str(s) = value { - self.unparse_fstring_str(s); + if let Constant::Str(ast::StringConstant { value, .. }) = value { + self.unparse_f_string_literal(value); } else { unreachable!() } } - Expr::JoinedStr(ast::ExprJoinedStr { values, range: _ }) => { - self.unparse_joinedstr(values, is_spec); + Expr::FString(ast::ExprFString { values, .. }) => { + self.unparse_f_string(values, is_spec); } Expr::FormattedValue(ast::ExprFormattedValue { value, @@ -1419,14 +1334,14 @@ impl<'a> Generator<'a> { } } - fn unparse_fstring_str(&mut self, s: &str) { + fn unparse_f_string_literal(&mut self, s: &str) { let s = s.replace('{', "{{").replace('}', "}}"); self.p(&s); } - fn unparse_joinedstr(&mut self, values: &[Expr], is_spec: bool) { + fn unparse_f_string(&mut self, values: &[Expr], is_spec: bool) { if is_spec { - self.unparse_fstring_body(values, is_spec); + self.unparse_f_string_body(values, is_spec); } else { self.p("f"); let mut generator = Generator::new( @@ -1437,7 +1352,7 @@ impl<'a> Generator<'a> { }, self.line_ending, ); - generator.unparse_fstring_body(values, is_spec); + generator.unparse_f_string_body(values, is_spec); let body = &generator.buffer; self.p_str_repr(body); } diff --git a/crates/ruff_python_formatter/Cargo.toml b/crates/ruff_python_formatter/Cargo.toml index b57a90faed..637276bab1 100644 --- a/crates/ruff_python_formatter/Cargo.toml +++ b/crates/ruff_python_formatter/Cargo.toml @@ -30,6 +30,7 @@ rustc-hash = { workspace = true } serde = { workspace = true, optional = true } smallvec = { workspace = true } thiserror = { workspace = true } +unicode-width = { workspace = true } [dev-dependencies] ruff_formatter = { path = "../ruff_formatter", features = ["serde"] } diff --git a/crates/ruff_python_formatter/resources/test/fixtures/black/miscellaneous/force_py36.py b/crates/ruff_python_formatter/resources/test/fixtures/black/miscellaneous/force_py36.py index 106e97214d..4a8abc946e 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/black/miscellaneous/force_py36.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/black/miscellaneous/force_py36.py @@ -1,3 +1,3 @@ # The input source must not contain any Py36-specific syntax (e.g. argument type # annotations, trailing comma after *rest) or this test becomes invalid. -def long_function_name(argument_one, argument_two, argument_three, argument_four, argument_five, argument_six, *rest): ... +def long_function_name(argument_one, argument_two, argument_three, argument_four, argument_five, argument_six, *rest): pass diff --git a/crates/ruff_python_formatter/resources/test/fixtures/black/miscellaneous/force_py36.py.expect b/crates/ruff_python_formatter/resources/test/fixtures/black/miscellaneous/force_py36.py.expect index bb26932707..f63094e472 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/black/miscellaneous/force_py36.py.expect +++ b/crates/ruff_python_formatter/resources/test/fixtures/black/miscellaneous/force_py36.py.expect @@ -9,4 +9,4 @@ def long_function_name( argument_six, *rest, ): - ... + pass diff --git a/crates/ruff_python_formatter/resources/test/fixtures/black/py_311/pep_646.py b/crates/ruff_python_formatter/resources/test/fixtures/black/py_311/pep_646.py new file mode 100644 index 0000000000..e843ecf39d --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/black/py_311/pep_646.py @@ -0,0 +1,194 @@ +A[*b] +A[*b] = 1 +A +del A[*b] +A +A[*b, *b] +A[*b, *b] = 1 +A +del A[*b, *b] +A +A[b, *b] +A[b, *b] = 1 +A +del A[b, *b] +A +A[*b, b] +A[*b, b] = 1 +A +del A[*b, b] +A +A[b, b, *b] +A[b, b, *b] = 1 +A +del A[b, b, *b] +A +A[*b, b, b] +A[*b, b, b] = 1 +A +del A[*b, b, b] +A +A[b, *b, b] +A[b, *b, b] = 1 +A +del A[b, *b, b] +A +A[b, b, *b, b] +A[b, b, *b, b] = 1 +A +del A[b, b, *b, b] +A +A[b, *b, b, b] +A[b, *b, b, b] = 1 +A +del A[b, *b, b, b] +A +A[A[b, *b, b]] +A[A[b, *b, b]] = 1 +A +del A[A[b, *b, b]] +A +A[*A[b, *b, b]] +A[*A[b, *b, b]] = 1 +A +del A[*A[b, *b, b]] +A +A[b, ...] +A[b, ...] = 1 +A +del A[b, ...] +A +A[*A[b, ...]] +A[*A[b, ...]] = 1 +A +del A[*A[b, ...]] +A +l = [1, 2, 3] +A[*l] +A[*l] = 1 +A +del A[*l] +A +A[*l, 4] +A[*l, 4] = 1 +A +del A[*l, 4] +A +A[0, *l] +A[0, *l] = 1 +A +del A[0, *l] +A +A[1:2, *l] +A[1:2, *l] = 1 +A +del A[1:2, *l] +A +repr(A[1:2, *l]) == repr(A[1:2, 1, 2, 3]) +t = (1, 2, 3) +A[*t] +A[*t] = 1 +A +del A[*t] +A +A[*t, 4] +A[*t, 4] = 1 +A +del A[*t, 4] +A +A[0, *t] +A[0, *t] = 1 +A +del A[0, *t] +A +A[1:2, *t] +A[1:2, *t] = 1 +A +del A[1:2, *t] +A +repr(A[1:2, *t]) == repr(A[1:2, 1, 2, 3]) + + +def returns_list(): + return [1, 2, 3] + + +A[returns_list()] +A[returns_list()] = 1 +A +del A[returns_list()] +A +A[returns_list(), 4] +A[returns_list(), 4] = 1 +A +del A[returns_list(), 4] +A +A[*returns_list()] +A[*returns_list()] = 1 +A +del A[*returns_list()] +A +A[*returns_list(), 4] +A[*returns_list(), 4] = 1 +A +del A[*returns_list(), 4] +A +A[0, *returns_list()] +A[0, *returns_list()] = 1 +A +del A[0, *returns_list()] +A +A[*returns_list(), *returns_list()] +A[*returns_list(), *returns_list()] = 1 +A +del A[*returns_list(), *returns_list()] +A +A[1:2, *b] +A[*b, 1:2] +A[1:2, *b, 1:2] +A[*b, 1:2, *b] +A[1:, *b] +A[*b, 1:] +A[1:, *b, 1:] +A[*b, 1:, *b] +A[:1, *b] +A[*b, :1] +A[:1, *b, :1] +A[*b, :1, *b] +A[:, *b] +A[*b, :] +A[:, *b, :] +A[*b, :, *b] +A[a * b()] +A[a * b(), *c, *d(), e * f(g * h)] +A[a * b(), :] +A[a * b(), *c, *d(), e * f(g * h) :] +A[[b] * len(c), :] + + +def f1(*args: *b): + pass + + +f1.__annotations__ + + +def f2(*args: *b, arg1): + pass + + +f2.__annotations__ + + +def f3(*args: *b, arg1: int): + pass + + +f3.__annotations__ + + +def f4(*args: *b, arg1: int = 2): + pass + + +f4.__annotations__ diff --git a/crates/ruff_python_formatter/resources/test/fixtures/black/py_311/pep_646.py.expect b/crates/ruff_python_formatter/resources/test/fixtures/black/py_311/pep_646.py.expect new file mode 100644 index 0000000000..e843ecf39d --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/black/py_311/pep_646.py.expect @@ -0,0 +1,194 @@ +A[*b] +A[*b] = 1 +A +del A[*b] +A +A[*b, *b] +A[*b, *b] = 1 +A +del A[*b, *b] +A +A[b, *b] +A[b, *b] = 1 +A +del A[b, *b] +A +A[*b, b] +A[*b, b] = 1 +A +del A[*b, b] +A +A[b, b, *b] +A[b, b, *b] = 1 +A +del A[b, b, *b] +A +A[*b, b, b] +A[*b, b, b] = 1 +A +del A[*b, b, b] +A +A[b, *b, b] +A[b, *b, b] = 1 +A +del A[b, *b, b] +A +A[b, b, *b, b] +A[b, b, *b, b] = 1 +A +del A[b, b, *b, b] +A +A[b, *b, b, b] +A[b, *b, b, b] = 1 +A +del A[b, *b, b, b] +A +A[A[b, *b, b]] +A[A[b, *b, b]] = 1 +A +del A[A[b, *b, b]] +A +A[*A[b, *b, b]] +A[*A[b, *b, b]] = 1 +A +del A[*A[b, *b, b]] +A +A[b, ...] +A[b, ...] = 1 +A +del A[b, ...] +A +A[*A[b, ...]] +A[*A[b, ...]] = 1 +A +del A[*A[b, ...]] +A +l = [1, 2, 3] +A[*l] +A[*l] = 1 +A +del A[*l] +A +A[*l, 4] +A[*l, 4] = 1 +A +del A[*l, 4] +A +A[0, *l] +A[0, *l] = 1 +A +del A[0, *l] +A +A[1:2, *l] +A[1:2, *l] = 1 +A +del A[1:2, *l] +A +repr(A[1:2, *l]) == repr(A[1:2, 1, 2, 3]) +t = (1, 2, 3) +A[*t] +A[*t] = 1 +A +del A[*t] +A +A[*t, 4] +A[*t, 4] = 1 +A +del A[*t, 4] +A +A[0, *t] +A[0, *t] = 1 +A +del A[0, *t] +A +A[1:2, *t] +A[1:2, *t] = 1 +A +del A[1:2, *t] +A +repr(A[1:2, *t]) == repr(A[1:2, 1, 2, 3]) + + +def returns_list(): + return [1, 2, 3] + + +A[returns_list()] +A[returns_list()] = 1 +A +del A[returns_list()] +A +A[returns_list(), 4] +A[returns_list(), 4] = 1 +A +del A[returns_list(), 4] +A +A[*returns_list()] +A[*returns_list()] = 1 +A +del A[*returns_list()] +A +A[*returns_list(), 4] +A[*returns_list(), 4] = 1 +A +del A[*returns_list(), 4] +A +A[0, *returns_list()] +A[0, *returns_list()] = 1 +A +del A[0, *returns_list()] +A +A[*returns_list(), *returns_list()] +A[*returns_list(), *returns_list()] = 1 +A +del A[*returns_list(), *returns_list()] +A +A[1:2, *b] +A[*b, 1:2] +A[1:2, *b, 1:2] +A[*b, 1:2, *b] +A[1:, *b] +A[*b, 1:] +A[1:, *b, 1:] +A[*b, 1:, *b] +A[:1, *b] +A[*b, :1] +A[:1, *b, :1] +A[*b, :1, *b] +A[:, *b] +A[*b, :] +A[:, *b, :] +A[*b, :, *b] +A[a * b()] +A[a * b(), *c, *d(), e * f(g * h)] +A[a * b(), :] +A[a * b(), *c, *d(), e * f(g * h) :] +A[[b] * len(c), :] + + +def f1(*args: *b): + pass + + +f1.__annotations__ + + +def f2(*args: *b, arg1): + pass + + +f2.__annotations__ + + +def f3(*args: *b, arg1: int): + pass + + +f3.__annotations__ + + +def f4(*args: *b, arg1: int = 2): + pass + + +f4.__annotations__ diff --git a/crates/ruff_python_formatter/resources/test/fixtures/black/py_38/pep_572_remove_parens.py b/crates/ruff_python_formatter/resources/test/fixtures/black/py_38/pep_572_remove_parens.py new file mode 100644 index 0000000000..df005e488e --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/black/py_38/pep_572_remove_parens.py @@ -0,0 +1,69 @@ +if (foo := 0): + pass + +if (foo := 1): + pass + +if (y := 5 + 5): + pass + +y = (x := 0) + +y += (x := 0) + +(y := 5 + 5) + +test: int = (test2 := 2) + +a, b = (test := (1, 2)) + +# see also https://github.com/psf/black/issues/2139 +assert (foo := 42 - 12) + +foo(x=(y := f(x))) + + +def foo(answer=(p := 42)): + ... + + +def foo2(answer: (p := 42) = 5): + ... + + +lambda: (x := 1) + +a[(x := 12)] +a[:(x := 13)] + +# we don't touch expressions in f-strings but if we do one day, don't break 'em +f'{(x:=10)}' + + +def a(): + return (x := 3) + await (b := 1) + yield (a := 2) + raise (c := 3) + +def this_is_so_dumb() -> (please := no): + pass + +async def await_the_walrus(): + with (x := y): + pass + + with (x := y) as z, (a := b) as c: + pass + + with (x := await y): + pass + + with (x := await a, y := await b): + pass + + with ((x := await a, y := await b)): + pass + + with (x := await a), (y := await b): + pass diff --git a/crates/ruff_python_formatter/resources/test/fixtures/black/py_38/pep_572_remove_parens.py.expect b/crates/ruff_python_formatter/resources/test/fixtures/black/py_38/pep_572_remove_parens.py.expect new file mode 100644 index 0000000000..37a6a85087 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/black/py_38/pep_572_remove_parens.py.expect @@ -0,0 +1,71 @@ +if foo := 0: + pass + +if foo := 1: + pass + +if y := 5 + 5: + pass + +y = (x := 0) + +y += (x := 0) + +(y := 5 + 5) + +test: int = (test2 := 2) + +a, b = (test := (1, 2)) + +# see also https://github.com/psf/black/issues/2139 +assert (foo := 42 - 12) + +foo(x=(y := f(x))) + + +def foo(answer=(p := 42)): + ... + + +def foo2(answer: (p := 42) = 5): + ... + + +lambda: (x := 1) + +a[(x := 12)] +a[:(x := 13)] + +# we don't touch expressions in f-strings but if we do one day, don't break 'em +f"{(x:=10)}" + + +def a(): + return (x := 3) + await (b := 1) + yield (a := 2) + raise (c := 3) + + +def this_is_so_dumb() -> (please := no): + pass + + +async def await_the_walrus(): + with (x := y): + pass + + with (x := y) as z, (a := b) as c: + pass + + with (x := await y): + pass + + with (x := await a, y := await b): + pass + + with (x := await a, y := await b): + pass + + with (x := await a), (y := await b): + pass diff --git a/crates/ruff_python_formatter/resources/test/fixtures/import_black_tests.py b/crates/ruff_python_formatter/resources/test/fixtures/import_black_tests.py index 17c99b1185..ad45c01784 100755 --- a/crates/ruff_python_formatter/resources/test/fixtures/import_black_tests.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/import_black_tests.py @@ -43,6 +43,7 @@ def import_fixture(fixture: Path, fixture_set: str): # The name of the folders in the `data` for which the tests should be imported FIXTURE_SETS = [ + "fast", "py_36", "py_37", "py_38", @@ -58,9 +59,6 @@ FIXTURE_SETS = [ # Tests that ruff doesn't fully support yet and, therefore, should not be imported IGNORE_LIST = [ - "pep_572_remove_parens.py", # Reformatting bugs - "pep_646.py", # Rust Python parser bug - # Contain syntax errors "async_as_identifier.py", "invalid_header.py", diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/.editorconfig b/crates/ruff_python_formatter/resources/test/fixtures/ruff/.editorconfig new file mode 100644 index 0000000000..ddc5dc593f --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/.editorconfig @@ -0,0 +1,3 @@ +[mixed_space_and_tab.py] +generated_code = true +ij_formatter_enabled = false \ No newline at end of file diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/docstring.options.json b/crates/ruff_python_formatter/resources/test/fixtures/ruff/docstring.options.json new file mode 100644 index 0000000000..4a3e3c6dd7 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/docstring.options.json @@ -0,0 +1,15 @@ +[ + { + "indent_style": { + "Space": 4 + } + }, + { + "indent_style": { + "Space": 2 + } + }, + { + "indent_style": "Tab" + } +] diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/docstring.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/docstring.py new file mode 100644 index 0000000000..60c655f686 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/docstring.py @@ -0,0 +1,102 @@ +def single_line_backslashes1(): + """ content\ """ + return + + +def single_line_backslashes2(): + """ content\\ """ + return + + +def single_line_backslashes3(): + """ content\\\ """ + return + + +def multiline_backslashes1(): + """This is a docstring with + some lines of text\ """ + return + + +def multiline_backslashes2(): + """This is a docstring with + some lines of text\\ """ + return + + +def multiline_backslashes3(): + """This is a docstring with + some lines of text\\\ """ + return + + +def multiple_negatively_indented_docstring_lines(): + """a + b + c + d + e + """ + + +def overindentend_docstring(): + """a + over-indented + """ + + +def comment_before_docstring(): + # don't lose this function comment ... + """Does nothing. + + But it has comments + """ # ... neither lose this function comment + + +class CommentBeforeDocstring(): + # don't lose this class comment ... + """Empty class. + + But it has comments + """ # ... neither lose this class comment + + +class IndentMeSome: + def doc_string_without_linebreak_after_colon(self): """ This is somewhat strange + a + b + We format this a is the docstring had started properly indented on the next + line if the target indentation. This may we incorrect since source and target + indentation can be incorrect, but this is also an edge case. + """ + + +class IgnoreImplicitlyConcatenatedStrings: + """""" "" + + +def docstring_that_ends_with_quote_and_a_line_break1(): + """ + he said "the news of my death have been greatly exaggerated" + """ + + +def docstring_that_ends_with_quote_and_a_line_break2(): + """he said "the news of my death have been greatly exaggerated" + """ + + +def docstring_that_ends_with_quote_and_a_line_break3(): + """he said "the news of my death have been greatly exaggerated" + + """ + + +class TabbedIndent: + def tabbed_indent(self): + """check for correct tabbed formatting + ^^^^^^^^^^ + Normal indented line + - autor + """ diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/binary.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/binary.py index 30cf4c4465..572518635e 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/binary.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/binary.py @@ -211,3 +211,14 @@ for user_id in set(target_user_ids) - {u.user_id for u in updates}: log(self.price / self.strike) + (self.risk_free - self.div_cont + 0.5 * (self.sigma**2)) * self.exp_time ) / self.sigmaT + +# Stability with end-of-line comments between empty tuples and bin op +x = () - (# +) +x = ( + () + - () # +) +x = ( + () - () # +) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/boolean_operation.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/boolean_operation.py index f976491cd1..16391cdf50 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/boolean_operation.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/boolean_operation.py @@ -62,3 +62,35 @@ if ( and [dddddddddddddd, eeeeeeeeee, fffffffffffffff] ): pass + +# Regression test for https://github.com/astral-sh/ruff/issues/6068 +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) or numpy and isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) and numpy or isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) or xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy and isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) and xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy or isinstance(ccccccccccc, dddddd) +): + pass + + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) or (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy) and isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) and (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy) or isinstance(ccccccccccc, dddddd) +): + pass diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/call.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/call.py index a158a2ec4d..6569ec3571 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/call.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/call.py @@ -111,3 +111,56 @@ f ( 1 # abc ) + +threshold_date = datetime.datetime.now() - datetime.timedelta( # comment + days=threshold_days_threshold_days +) + +# Parenthesized and opening-parenthesis comments +func( + (x for x in y) +) + +func( # outer comment + (x for x in y) +) + +func( + ( # inner comment + x for x in y + ) +) + +func( + ( + # inner comment + x for x in y + ) +) + +func( # outer comment + ( # inner comment + 1 + ) +) + +func( + # outer comment + ( # inner comment + x for x in y + ) +) + + +func( + ( # inner comment + [] + ) +) + +func( + # outer comment + ( # inner comment + [] + ) +) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/compare.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/compare.py index 906d5710aa..88b6da20bd 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/compare.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/compare.py @@ -59,3 +59,55 @@ return 1 == 2 and ( >= c ) ] + +def f(): + return ( + unicodedata.normalize("NFKC", s1).casefold() + == unicodedata.normalize("NFKC", s2).casefold() + ) + +# Call expressions with trailing attributes. + +ct_match = ( + aaaaaaaaaaact_id == self.get_content_type(obj=rel_obj, using=instance._state.db).id +) + +ct_match = ( + {aaaaaaaaaaaaaaaa} == self.get_content_type(obj=rel_obj, using=instance._state.db).id +) + +ct_match = ( + (aaaaaaaaaaaaaaaa) == self.get_content_type(obj=rel_obj, using=instance._state.db).id +) + +ct_match = aaaaaaaaaaact_id == self.get_content_type( + obj=rel_obj, using=instance._state.db +) + +# Call expressions with trailing subscripts. + +ct_match = ( + aaaaaaaaaaact_id == self.get_content_type(obj=rel_obj, using=instance._state.db)[id] +) + +ct_match = ( + {aaaaaaaaaaaaaaaa} == self.get_content_type(obj=rel_obj, using=instance._state.db)[id] +) + +ct_match = ( + (aaaaaaaaaaaaaaaa) == self.get_content_type(obj=rel_obj, using=instance._state.db)[id] +) + +# Subscripts expressions with trailing attributes. + +ct_match = ( + aaaaaaaaaaact_id == self.get_content_type[obj, rel_obj, using, instance._state.db].id +) + +ct_match = ( + {aaaaaaaaaaaaaaaa} == self.get_content_type[obj, rel_obj, using, instance._state.db].id +) + +ct_match = ( + (aaaaaaaaaaaaaaaa) == self.get_content_type[obj, rel_obj, using, instance._state.db].id +) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/fstring.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/fstring.py new file mode 100644 index 0000000000..a60efa1cdd --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/fstring.py @@ -0,0 +1,35 @@ +( + f'{one}' + f'{two}' +) + + +rf"Not-so-tricky \"quote" + +# Regression test for fstrings dropping comments +result_f = ( + 'Traceback (most recent call last):\n' + f' File "{__file__}", line {lineno_f+5}, in _check_recursive_traceback_display\n' + ' f()\n' + f' File "{__file__}", line {lineno_f+1}, in f\n' + ' f()\n' + f' File "{__file__}", line {lineno_f+1}, in f\n' + ' f()\n' + f' File "{__file__}", line {lineno_f+1}, in f\n' + ' f()\n' + # XXX: The following line changes depending on whether the tests + # are run through the interactive interpreter or with -m + # It also varies depending on the platform (stack size) + # Fortunately, we don't care about exactness here, so we use regex + r' \[Previous line repeated (\d+) more times\]' '\n' + 'RecursionError: maximum recursion depth exceeded\n' +) + + +# Regression for fstring dropping comments that were accidentally attached to +# an expression inside a formatted value +( + f'{1}' + # comment + '' +) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/joined_string.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/joined_string.py deleted file mode 100644 index 8b6af32d0b..0000000000 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/joined_string.py +++ /dev/null @@ -1,7 +0,0 @@ -( - f'{one}' - f'{two}' -) - - -rf"Not-so-tricky \"quote" diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/lambda.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/lambda.py index 42634acb47..5234ce79a0 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/lambda.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/lambda.py @@ -91,3 +91,5 @@ lambda *args, b, **kwds,: 0 lambda *, b, **kwds,: 0 lambda a, *args, b, **kwds,: 0 lambda a, *, b, **kwds,: 0 +lambda a, /: a +lambda a, /, c: a diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/list.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/list.py index 4478fc6e22..432885abd2 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/list.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/list.py @@ -44,3 +44,9 @@ c1 = [ # trailing open bracket [ # end-of-line comment 1 ] + +[ # inner comment + first, + second, + third +] # outer comment diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/named_expr.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/named_expr.py index 15ac1c7577..58522f5ad9 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/named_expr.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/named_expr.py @@ -36,3 +36,18 @@ except (e := Exception): (x := 1) (x := 1) + (y := 2) + +with (x := 1): + pass + + +def f(): + yield (x := 1) + + +def f(): + yield from (x := 1) + + +async def f(): + await (x := 1) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/split_empty_brackets.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/split_empty_brackets.py new file mode 100644 index 0000000000..309d0cdfd5 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/split_empty_brackets.py @@ -0,0 +1,90 @@ +# Expressions with empty parentheses. +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold() + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold(1) + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold(0) + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold(1) +) + +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold(1) + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold(1) +) + +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold( + # foo + ) + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold( + # foo + ) +) + +ct_match = ( + [].unicodedata.normalize("NFKC", s1).casefold() + == [].unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + [].unicodedata.normalize("NFKC", s1).casefold() + == [1].unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + [1].unicodedata.normalize("NFKC", s1).casefold() + == [].unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + [1].unicodedata.normalize("NFKC", s1).casefold() + == [1].unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + {}.unicodedata.normalize("NFKC", s1).casefold() + == {}.unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + {}.unicodedata.normalize("NFKC", s1).casefold() + == {1}.unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + {1}.unicodedata.normalize("NFKC", s1).casefold() + == {}.unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + {1}.unicodedata.normalize("NFKC", s1).casefold() + == {1}.unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + ([]).unicodedata.normalize("NFKC", s1).casefold() + == ([]).unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +return await self.http_client.fetch( + f"http://127.0.0.1:{self.port}{path}", method=method, **kwargs, +) + +return await self.http_client().fetch( + f"http://127.0.0.1:{self.port}{path}", method=method, **kwargs, +) + +return await self().http_client().fetch( + f"http://127.0.0.1:{self.port}{path}", method=method, **kwargs, +) + +response = await sync_to_async( + lambda: self.django_handler.get_response(request), thread_sensitive=True +)() diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/starred.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/starred.py index 437b011b71..cdbcf4c942 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/starred.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/starred.py @@ -13,3 +13,21 @@ call( [What, i, this, s, very, long, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa] ) # trailing value comment ) + +call( + x, + # Leading starred comment + * # Trailing star comment + [ + # Leading value comment + [What, i, this, s, very, long, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa] + ] # trailing value comment +) + +call( + x, + * # Trailing star comment + ( # Leading value comment + y + ) +) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/tuple.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/tuple.py index 13859fb27d..9c6c5a6d5b 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/tuple.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/tuple.py @@ -3,6 +3,8 @@ a1 = 1, 2 a2 = (1, 2) a3 = (1, 2), 3 a4 = ((1, 2), 3) +a5 = (1), (2) +a6 = ((1), (2)) # Wrapping parentheses checks b1 = (("Michael", "Ende"), ("Der", "satanarchäolügenialkohöllische", "Wunschpunsch"), ("Beelzebub", "Irrwitzer"), ("Tyrannja", "Vamperl"),) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/yield.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/yield.py index 592cebdaa1..2c5e07c6f7 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/yield.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/yield.py @@ -57,3 +57,11 @@ def foo(): yield from (yield l) + ( + yield + #comment 1 + * # comment 2 + # comment 3 + test, # comment 4 + 1 + ) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/comments.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/comments.py new file mode 100644 index 0000000000..ede6493669 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/comments.py @@ -0,0 +1,28 @@ +pass + +# fmt: off + # A comment that falls into the verbatim range +a + b # a trailing comment + +# in between comments + +# function comment +def test(): + pass + + # under indent + + def nested(): + ... + + # trailing comment that falls into the verbatim range + # trailing outer comment + # fmt: on + +a + b + +def test(): + pass + # fmt: off + # a trailing comment + diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/empty_file.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/empty_file.py new file mode 100644 index 0000000000..c61bb37fe0 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/empty_file.py @@ -0,0 +1,5 @@ +# fmt: off + + # this does not work because there are no statements + +# fmt: on diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/fmt_off_docstring.options.json b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/fmt_off_docstring.options.json new file mode 100644 index 0000000000..e662f72879 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/fmt_off_docstring.options.json @@ -0,0 +1,8 @@ +[ + { + "indent_style": { "Space": 4 } + }, + { + "indent_style": { "Space": 2 } + } +] diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/fmt_off_docstring.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/fmt_off_docstring.py new file mode 100644 index 0000000000..c387829010 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/fmt_off_docstring.py @@ -0,0 +1,19 @@ +def test(): + # fmt: off + """ This docstring does not + get formatted + """ + + # fmt: on + + but + this + does + +def test(): + # fmt: off + # just for fun + # fmt: on + # leading comment + """ This docstring gets formatted + """ # trailing comment + + and_this + gets + formatted + too diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/form_feed.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/form_feed.py new file mode 100644 index 0000000000..e5efe750eb --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/form_feed.py @@ -0,0 +1,7 @@ +# fmt: off +# DB layer (form feed at the start of the next line) + +# fmt: on + +def test(): + pass diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/indent.options.json b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/indent.options.json new file mode 100644 index 0000000000..8f229d10a5 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/indent.options.json @@ -0,0 +1,11 @@ +[ + { + "indent_style": { "Space": 4 } + }, + { + "indent_style": { "Space": 1 } + }, + { + "indent_style": "Tab" + } +] diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/indent.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/indent.py new file mode 100644 index 0000000000..c0cb6c1849 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/indent.py @@ -0,0 +1,55 @@ +def test(): + # fmt: off + a_very_small_indent + ( +not_fixed + ) + + if True: + pass + more + # fmt: on + + formatted + + def test(): + a_small_indent + # fmt: off +# fix under-indented comments + (or_the_inner_expression + +expressions + ) + + if True: + pass + # fmt: on + + +# fmt: off +def test(): + pass + + # It is necessary to indent comments because the following fmt: on comment because it otherwise becomes a trailing comment + # of the `test` function if the "proper" indentation is larger than 2 spaces. + # fmt: on + +disabled + formatting; + +# fmt: on + +formatted; + +def test(): + pass + # fmt: off + """A multiline strings + that should not get formatted""" + + "A single quoted multiline \ + string" + + disabled + formatting; + +# fmt: on + +formatted; diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/last_statement.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/last_statement.py new file mode 100644 index 0000000000..1fa2cee40a --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/last_statement.py @@ -0,0 +1,10 @@ +def test(): + # fmt: off + + a + b + + + + # suppressed comments + +a + b # formatted diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/mixed_space_and_tab.options.json b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/mixed_space_and_tab.options.json new file mode 100644 index 0000000000..e40788162c --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/mixed_space_and_tab.options.json @@ -0,0 +1,11 @@ +[ + { + "indent_style": { "Space": 4 } + }, + { + "indent_style": { "Space": 2 } + }, + { + "indent_style": "Tab" + } +] diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/mixed_space_and_tab.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/mixed_space_and_tab.py new file mode 100644 index 0000000000..0cf93824c1 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/mixed_space_and_tab.py @@ -0,0 +1,15 @@ +def test(): + # fmt: off + a_very_small_indent + ( +not_fixed + ) + + if True: +# Fun tab, space, tab, space. Followed by space, tab, tab, space + pass + more + else: + other + # fmt: on + diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/no_fmt_on.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/no_fmt_on.py new file mode 100644 index 0000000000..d2955856e3 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/no_fmt_on.py @@ -0,0 +1,9 @@ +def test(): + # fmt: off + not formatted + + if unformatted + a: + pass + +# Get's formatted again +a + b diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/off_on_off_on.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/off_on_off_on.py new file mode 100644 index 0000000000..7bc6ca8b46 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/off_on_off_on.py @@ -0,0 +1,71 @@ +# Tricky sequences of fmt off and on + +# Formatted +a + b + +# fmt: off + # not formatted 1 +# fmt: on +a + b + # formatted + + +# fmt: off + # not formatted 1 +# fmt: on + # not formatted 2 +# fmt: off +a + b +# fmt: on + + +# fmt: off + # not formatted 1 +# fmt: on + # formatted 1 +# fmt: off + # not formatted 2 +a + b +# fmt: on + # formatted +b + c + + +# fmt: off +a + b + + # not formatted +# fmt: on + # formatted +a + b + + +# fmt: off +a + b + + # not formatted 1 +# fmt: on + # formatted +# fmt: off + # not formatted 2 +a + b + + +# fmt: off +a + b + + # not formatted 1 +# fmt: on + # formatted + +# leading +a + b +# fmt: off + + # leading unformatted +def test (): + pass + + # fmt: on + +a + b diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/simple.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/simple.py new file mode 100644 index 0000000000..dfe64b1c2e --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/simple.py @@ -0,0 +1,9 @@ +# Get's formatted +a + b + +# fmt: off +a + [1, 2, 3, 4, 5 ] +# fmt: on + +# Get's formatted again +a + b diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/trailing_comments.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/trailing_comments.py new file mode 100644 index 0000000000..4ddb4ad8a6 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/trailing_comments.py @@ -0,0 +1,40 @@ +a = 10 +# fmt: off + +# more format + +def test(): ... + + +# fmt: on + +b = 20 +# Sequence of trailing comments that toggle between format on and off. The sequence ends with a `fmt: on`, so that the function gets formatted. +# formatted 1 +# fmt: off + # not formatted +# fmt: on + # formatted comment +# fmt: off + # not formatted 2 +# fmt: on + + # formatted +def test2 (): + ... + +a = 10 + +# Sequence of trailing comments that toggles between format on and off. The sequence ends with a `fmt: off`, so that the function is not formatted. + # formatted 1 +# fmt: off + # not formatted +# fmt: on + # formattd +# fmt: off + + # not formatted +def test3 (): + ... + +# fmt: on diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/yapf.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/yapf.py new file mode 100644 index 0000000000..741ca7213a --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/yapf.py @@ -0,0 +1,17 @@ +# Get's formatted +a + b + +# yapf: disable +a + [1, 2, 3, 4, 5 ] +# yapf: enable + +# Get's formatted again +a + b + + +# yapf: disable +a + [1, 2, 3, 4, 5 ] +# fmt: on + +# Get's formatted again +a + b diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/call_chains.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/call_chains.py similarity index 94% rename from crates/ruff_python_formatter/resources/test/fixtures/ruff/call_chains.py rename to crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/call_chains.py index 67b702c705..c5d806e27e 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/call_chains.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/call_chains.py @@ -154,4 +154,10 @@ zero( five, ) +max_message_id = ( + Message.objects.filter(recipient=recipient).order_by("id").reverse()[0].id +) +max_message_id = ( + Message.objects.filter(recipient=recipient).order_by("id").reverse()[0].id() +) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/nested.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/nested.py new file mode 100644 index 0000000000..dbe1a487e9 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/nested.py @@ -0,0 +1,53 @@ +a1 = f( # 1 + g( # 2 + ) +) +a2 = f( # 1 + g( # 2 + x + ) +) +a3 = f( + ( + # + () + ) +) + + +call( + a, + b, + [ # Empty because of + ] +) + +a = a + b + c + d + ( # Hello + e + f + g +) + +a = int( # type: ignore + int( # type: ignore + int( # type: ignore + 6 + ) + ) +) + +# Stability and correctness checks +b1 = () - ( # +) +() - ( # +) +b2 = () - f( # +) +() - f( # +) +b3 = ( + # + () +) +( + # + () +) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/opening_parentheses_comment_empty.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/opening_parentheses_comment_empty.py new file mode 100644 index 0000000000..68c76585bb --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/opening_parentheses_comment_empty.py @@ -0,0 +1,86 @@ +# Opening parentheses end-of-line comment without a value in the parentheses + +( # a 1 +) +a2 = ( # a 2 +) +a3 = f( # a 3 +) +a4 = ( # a 4 +) = a4 +a5: List( # a 5 +) = 5 + +raise ( # b 1a +) +raise b1b from ( # b 1b +) +raise ( # b 1c +) from b1c +del ( # b 2 +) +assert ( # b 3 +), ( #b 4 +) + +def g(): + """Statements that are only allowed in function bodies""" + return ( # c 1 + ) + yield ( # c 2 + ) +async def h(): + """Statements that are only allowed in async function bodies""" + await ( # c 3 + ) + +with ( # d 1 +): pass +match ( # d 2 +): + case d2: + pass +match d3: + case ( # d 3 + ): + pass +while ( # d 4 +): + pass +if ( # d 5 +): + pass +elif ( # d 6 +): + pass +for ( # d 7 +) in ( # d 8 +): + pass +try: + pass +except ( # d 9 +): + pass + + +def e1( # e 1 +): pass + + +def e2() -> ( # e 2 +): pass + + +class E3( # e 3 +): pass + + +f1 = [ # f 1 +] +[ # f 2 +] +f3 = { # f3 +} +{ # f 4 +} diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/opening_parentheses_comment_value.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/opening_parentheses_comment_value.py new file mode 100644 index 0000000000..2774504d6a --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/opening_parentheses_comment_value.py @@ -0,0 +1,150 @@ +# Opening parentheses end-of-line comment with value in the parentheses + +( # a 1 +x) +a2 = ( # a 2 +x) +a3 = f( # a 3 +x) +a4 = ( # a 4 +x) = a4 +a5: List( # a 5 +x) = 5 + +raise ( # b 1a +x) +raise b1b from ( # b 1b +x) +raise ( # b 1c +x) from b1c +del ( # b 2 +x) +assert ( # b 3 +x), ( #b 4 +x) + +def g(): + """Statements that are only allowed in function bodies""" + return ( # c 1 + x) + yield ( # c 2 + x) +async def h(): + """Statements that are only allowed in async function bodies""" + await ( # c 3 + x) + +with ( # d 1 +x): pass +match ( # d 2 +x): + case d2: + pass +match d3: + case ( # d 3 + x): + pass +while ( # d 4 +x): + pass +if ( # d 5 +x): + pass +elif ( # d 6 +y): + pass +for ( # d 7 +x) in ( # d 8 +y): + pass +try: + pass +except ( # d 9 + x +): + pass + + +def e1( # e 1 +x): pass + + +def e2() -> ( # e 2 +x): pass + + +def e3() -> ( + # e 2 +x): pass + + +def e4() -> ( + x +# e 4 +): pass + + +def e5() -> ( # e 5 + ( # e 5 + x + ) +): pass + + +def e6() -> ( + ( + # e 6 + x + ) +): pass + + +def e7() -> ( + ( + x + # e 7 + ) +): pass + + +def e8() -> ( + ( + x + ) + # e 8 +): pass + + +class E9( # e 9 +x): pass + + +f1 = [ # f 1 +x] +[ # f 2 +x] +f3 = { # f3 +x} +{ # f 4 +x} + + + +# Non-empty parentheses: These are not allowed without a value +def f1[ # f1 + T +](): pass +f2 = ( # f2 + i for i in range(10) +) +f3 = [ # f3 + i for i in range(10) +] +f4 = { # f4 + i for i in range(10) +} +f5 = { # f5 + i: i**2 for i in range(10) +} + + diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/assign.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/assign.py index a0317eac9a..8ccd5b008d 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/assign.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/assign.py @@ -13,6 +13,44 @@ aa = [ bakjdshflkjahdslkfjlasfdahjlfds ] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] +aa = [ + +] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = [ + # foo +] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = ([ +]) = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + aaaa = ( # trailing # comment bbbbb) = cccccccccccccccc = 3 + +x = ( # comment + [ # comment + a, + b, + c, + ] +) = 1 + + +x = ( + # comment + [ + a, + b, + c, + ] +) = 1 + + +x = ( + [ # comment + a, + b, + c, + ] +) = 1 diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/delete.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/delete.py index c8ca7da9d7..a86c65dde8 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/delete.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/delete.py @@ -73,3 +73,7 @@ del ( del ( # dangling end of line comment ) + +del ( # dangling end of line comment + # dangling own line comment +) # trailing statement comment diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/for.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/for.py index 3a96b5390f..c1e96d6d79 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/for.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/for.py @@ -32,3 +32,13 @@ for (x, y) in (z, w): # type comment for x in (): # type: int ... + +# Tuple parentheses for iterable. +for x in 1, 2, 3: + pass + +for x in (1, 2, 3): + pass + +for x in 1, 2, 3,: + pass diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/function.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/function.py index 95573170b1..e5a32ad888 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/function.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/function.py @@ -295,3 +295,84 @@ def f(*args, b, **kwds, ): pass def f(*, b, **kwds, ): pass def f(a, *args, b, **kwds, ): pass def f(a, *, b, **kwds, ): pass + +# Handle comments on open parenthesis. +def f( + # first + # second +): + ... + + +def f( # first + # second +): # third + ... + + +def f( # first +): # second + ... + + +def f( + a, + /, + # first + b + # second +): + ... + + +def f( # first + *, + # second + b + # third +): + ... + + +def f( # first + # second + *, + # third + b + # fourth +): + ... + + +def f( # first + a, + # second +): # third + ... + + +def f( # first + a +): # second + ... + + +def f( # first + a + # second +): # third + ... + + +def f( # first + a, + / # second + , + # third +): + ... + +# Walrus operator in return type. +def this_is_unusual() -> (please := no): ... + +def this_is_unusual(x) -> (please := no): ... diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/if.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/if.py index 266b2da8a7..61e3bc130b 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/if.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/if.py @@ -103,3 +103,15 @@ else: if True: print("a") # 1 elif True: print("b") # 2 else: print("c") # 3 + +# Regression test for https://github.com/astral-sh/ruff/issues/5337 +if parent_body: + if current_body: + child_in_body() + last_child_in_current_body() # may or may not have children on its own +# a + # b + # c + # d + # e + #f diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/match.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/match.py new file mode 100644 index 0000000000..48e84e98e3 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/match.py @@ -0,0 +1,143 @@ +# leading match comment +match foo: # dangling match comment + case "bar": + pass + + +# leading match comment +match ( # leading expr comment + # another leading expr comment + foo # trailing expr comment + # another trailing expr comment +): # dangling match comment + case "bar": + pass + + +# leading match comment +match ( # hello + foo # trailing expr comment + , # another +): # dangling match comment + case "bar": + pass + + +match [ # comment + first, + second, + third +]: # another comment + case ["a", "b", "c"]: + pass + +match ( # comment + "a b c" +).split(): # another comment + case ["a", "b", "c"]: + pass + + +match ( # comment + # let's go + yield foo +): # another comment + case ["a", "b", "c"]: + pass + + +match aaaaaaaaahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh: # comment + case "sshhhhhhhh": + pass + + +def foo(): + match inside_func: # comment + case "bar": + pass + + +match newlines: + + # case 1 leading comment + + + case "top level case comment with newlines": # case dangling comment + # pass leading comment + pass + # pass trailing comment + + + # case 2 leading comment + + + + case "case comment with newlines" if foo == 2: # second + pass + + case "one", "newline" if (foo := 1): # third + pass + + + case "two newlines": + pass + + + + case "three newlines": + pass + case _: + pass + + +match long_lines: + case "this is a long line for if condition" if aaaaaaaaahhhhhhhh == 1 and bbbbbbaaaaaaaaaaa == 2: # comment + pass + + case "this is a long line for if condition with parentheses" if (aaaaaaaaahhhhhhhh == 1 and bbbbbbaaaaaaaaaaa == 2): # comment + pass + + case "named expressions aren't special" if foo := 1: + pass + + case "named expressions aren't that special" if (foo := 1): + pass + + case "but with already broken long lines" if ( + aaaaaaahhhhhhhhhhh == 1 and + bbbbbbbbaaaaaahhhh == 2 + ): # another comment + pass + + +match pattern_comments: + case ( + only_trailing # trailing 1 + # trailing 2 +# trailing 3 + ): + pass + + +match pattern_comments: + case ( # leading + only_leading + ): + pass + + +match pattern_comments: + case ( + # leading + leading_and_trailing # trailing 1 + # trailing 2 +# trailing 3 + ): + pass + + +match pattern_comments: + case ( + no_comments + ): + pass diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/return_annotation.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/return_annotation.py new file mode 100644 index 0000000000..f7b043d477 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/return_annotation.py @@ -0,0 +1,182 @@ +# Handle comments on empty tuple return types. +def zrevrangebylex(self, name: _Key, max: _Value, min: _Value, start: int | None = None, num: int | None = None) -> ( # type: ignore[override] +): ... + +def zrevrangebylex(self, name: _Key, max: _Value, min: _Value, start: int | None = None, num: int | None = None) -> ( # type: ignore[override] + # comment +): ... + +def zrevrangebylex(self, name: _Key, max: _Value, min: _Value, start: int | None = None, num: int | None = None) -> ( # type: ignore[override] + 1 +): ... + +def zrevrangebylex(self, name: _Key, max: _Value, min: _Value, start: int | None = None, num: int | None = None) -> ( # type: ignore[override] + 1, 2 +): ... + +def zrevrangebylex(self, name: _Key, max: _Value, min: _Value, start: int | None = None, num: int | None = None) -> ( # type: ignore[override] + (1, 2) +): ... + +def handleMatch( # type: ignore[override] # https://github.com/python/mypy/issues/10197 + self, m: Match[str], data: str +) -> Union[Tuple[None, None, None], Tuple[Element, int, int]]: + ... + +def double(a: int # Hello +) -> (int): + return 2 * a + +def double(a: int) -> ( # Hello + int +): + return 2*a + +def double(a: int) -> ( # Hello +): + return 2*a + +# Breaking over parameters and return types. (Black adds a trailing comma when the +# function arguments break here with a single argument; we do not.) +def f(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + +def f(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, a) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + +def f(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) -> a: + ... + +def f(a) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + +def f[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]() -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + +def f[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]() -> a: + ... + +def f[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa](aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + +def f[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa](aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) -> a: + ... + +# Breaking return type annotations. Black adds parentheses if the parameters are +# empty; otherwise, it leverages the expressions own parentheses if possible. +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] +): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +]: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] +): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +]: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> ( + Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] +): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(*args) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +]: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( # foo +) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + # bar +) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + x) -> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + x) -> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> (X + Y + foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> (X + Y + foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> (X and Y and foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> (X and Y and foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> (X | Y | foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> (X | Y | foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + X | Y | foooooooooooooooooooooooooooooooooooo() # comment +): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> ( + X | Y | foooooooooooooooooooooooooooooooooooo() # comment +): + ... + + +def double() -> first_item and foo.bar.baz().bop(1,): + return 2 * a + + +# Dangling comments on return annotations. +def double(a: int) -> ( + int # Hello +): + return 2*a + +def double(a: int) -> ( + foo.bar # Hello +): + return 2*a + +def double(a: int) -> ( + [int] # Hello +): + return 2*a + +def double(a: int) -> ( + int | list[int] # Hello +): + pass + +def double(a: int) -> ( + int | list[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int] # Hello +): + pass diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/top_level.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/top_level.py new file mode 100644 index 0000000000..85210a209e --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/top_level.py @@ -0,0 +1,39 @@ +class A: + def __init__(self): + pass + +class B: + def __init__(self): + pass + +def foo(): + pass + +class Del(expr_context): ... +class Load(expr_context): ... + +# Some comment. +class Other(expr_context): ... +class Store(expr_context): ... +class Foo(Bar): ... + +class Baz(Qux): + def __init__(self): + pass + +class Quux(Qux): + def __init__(self): + pass + +# Some comment. +class Quuz(Qux): + def __init__(self): + pass + +def bar(): ... +def baz(): ... +def quux(): + """Some docstring.""" + +def quuz(): + """Some docstring.""" diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/top_level.pyi b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/top_level.pyi new file mode 100644 index 0000000000..4c5a03d386 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/top_level.pyi @@ -0,0 +1,78 @@ +class A: + def __init__(self): + pass + + +class B: + def __init__(self): + pass + + +def foo(): + pass + + +class Del(expr_context): + ... + + +class Load(expr_context): + ... + + +# Some comment. +class Other(expr_context): + ... + + +class Store(expr_context): + ... + + +class Foo(Bar): + ... + + +class Baz(Qux): + def __init__(self): + pass + + +class Quux(Qux): + def __init__(self): + pass + + +# Some comment. +class Quuz(Qux): + def __init__(self): + pass + + +def bar(): + ... + + +def baz(): + ... + + +def quux(): + """Some docstring.""" + + +def quuz(): + """Some docstring.""" + +def a(): + ... + +class Test: + ... + +class Test2(A): + ... + +def b(): ... +# comment +def c(): ... diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/with.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/with.py index 76a8a49950..fb213a6c21 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/with.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/with.py @@ -108,7 +108,6 @@ with ( ): ... - with [ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbb", @@ -116,3 +115,46 @@ with [ dddddddddddddddddddddddddddddddd, ] as example1, aaaaaaaaaaaaaaaaaaaaaaaaaa * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb * cccccccccccccccccccccccccccc + ddddddddddddddddd as example2, CtxManager222222222222222() as example2: ... + +# Comments on open parentheses +with ( # comment + CtxManager1() as example1, + CtxManager2() as example2, + CtxManager3() as example3, +): + ... + +with ( # outer comment + ( # inner comment + CtxManager1() + ) as example1, + CtxManager2() as example2, + CtxManager3() as example3, +): + ... + +with ( # outer comment + CtxManager() +) as example: + ... + +with ( # outer comment + CtxManager() +) as example, ( # inner comment + CtxManager2() +) as example2: + ... + +with ( # outer comment + CtxManager1(), + CtxManager2(), +) as example: + ... + +with ( # outer comment + ( # inner comment + CtxManager1() + ), + CtxManager2(), +) as example: + ... diff --git a/crates/ruff_python_formatter/src/builders.rs b/crates/ruff_python_formatter/src/builders.rs index 8acf770044..943b06efd8 100644 --- a/crates/ruff_python_formatter/src/builders.rs +++ b/crates/ruff_python_formatter/src/builders.rs @@ -3,7 +3,6 @@ use ruff_python_ast::Ranged; use ruff_python_trivia::{SimpleToken, SimpleTokenKind, SimpleTokenizer}; use ruff_text_size::{TextRange, TextSize}; -use crate::comments::{dangling_comments, trailing_comments, SourceComment}; use crate::context::{NodeLevel, WithNodeLevel}; use crate::prelude::*; use crate::MagicTrailingComma; @@ -93,11 +92,23 @@ impl Entries { } } +#[derive(Debug, Copy, Clone, PartialEq, Eq, Default)] +pub(crate) enum TrailingComma { + /// Add a trailing comma if the group breaks and there's more than one element (or if the last + /// element has a trailing comma and the magical trailing comma option is enabled). + #[default] + MoreThanOne, + /// Add a trailing comma if the group breaks (or if the last element has a trailing comma and + /// the magical trailing comma option is enabled). + OneOrMore, +} + pub(crate) struct JoinCommaSeparatedBuilder<'fmt, 'ast, 'buf> { result: FormatResult<()>, fmt: &'fmt mut PyFormatter<'ast, 'buf>, entries: Entries, sequence_end: TextSize, + trailing_comma: TrailingComma, } impl<'fmt, 'ast, 'buf> JoinCommaSeparatedBuilder<'fmt, 'ast, 'buf> { @@ -107,9 +118,19 @@ impl<'fmt, 'ast, 'buf> JoinCommaSeparatedBuilder<'fmt, 'ast, 'buf> { result: Ok(()), entries: Entries::None, sequence_end, + trailing_comma: TrailingComma::default(), } } + /// Set the trailing comma behavior for the builder. Trailing commas will only be inserted if + /// the group breaks, and will _always_ be inserted if the last element has a trailing comma + /// (and the magical trailing comma option is enabled). However, this setting dictates whether + /// trailing commas are inserted for single element groups. + pub(crate) fn with_trailing_comma(mut self, trailing_comma: TrailingComma) -> Self { + self.trailing_comma = trailing_comma; + self + } + pub(crate) fn entry( &mut self, node: &T, @@ -195,8 +216,11 @@ impl<'fmt, 'ast, 'buf> JoinCommaSeparatedBuilder<'fmt, 'ast, 'buf> { }; // If there is a single entry, only keep the magic trailing comma, don't add it if - // it wasn't there. If there is more than one entry, always add it. - if magic_trailing_comma || self.entries.is_more_than_one() { + // it wasn't there -- unless the trailing comma behavior is set to one-or-more. + if magic_trailing_comma + || self.trailing_comma == TrailingComma::OneOrMore + || self.entries.is_more_than_one() + { if_group_breaks(&text(",")).fmt(self.fmt)?; } @@ -209,54 +233,3 @@ impl<'fmt, 'ast, 'buf> JoinCommaSeparatedBuilder<'fmt, 'ast, 'buf> { }) } } - -/// Format comments inside empty parentheses, brackets or curly braces. -/// -/// Empty `()`, `[]` and `{}` are special because there can be dangling comments, and they can be in -/// two positions: -/// ```python -/// x = [ # end-of-line -/// # own line -/// ] -/// ``` -/// These comments are dangling because they can't be assigned to any element inside as they would -/// in all other cases. -pub(crate) fn empty_parenthesized_with_dangling_comments( - opening: StaticText, - comments: &[SourceComment], - closing: StaticText, -) -> EmptyWithDanglingComments { - EmptyWithDanglingComments { - opening, - comments, - closing, - } -} - -pub(crate) struct EmptyWithDanglingComments<'a> { - opening: StaticText, - comments: &'a [SourceComment], - closing: StaticText, -} - -impl<'ast> Format> for EmptyWithDanglingComments<'_> { - fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { - let end_of_line_split = self - .comments - .partition_point(|comment| comment.line_position().is_end_of_line()); - debug_assert!(self.comments[end_of_line_split..] - .iter() - .all(|comment| comment.line_position().is_own_line())); - write!( - f, - [group(&format_args![ - self.opening, - // end-of-line comments - trailing_comments(&self.comments[..end_of_line_split]), - // own line comments, which need to be indented - soft_block_indent(&dangling_comments(&self.comments[end_of_line_split..])), - self.closing - ])] - ) - } -} diff --git a/crates/ruff_python_formatter/src/comments/format.rs b/crates/ruff_python_formatter/src/comments/format.rs index 3ac6cb68c8..fdcf4c5d81 100644 --- a/crates/ruff_python_formatter/src/comments/format.rs +++ b/crates/ruff_python_formatter/src/comments/format.rs @@ -227,15 +227,65 @@ impl Format> for FormatDanglingComments<'_> { } } +/// Formats the dangling comments within a parenthesized expression, for example: +/// ```python +/// [ # comment +/// 1, +/// 2, +/// 3, +/// ] +/// ``` +pub(crate) fn dangling_open_parenthesis_comments( + comments: &[SourceComment], +) -> FormatDanglingOpenParenthesisComments { + FormatDanglingOpenParenthesisComments { comments } +} + +pub(crate) struct FormatDanglingOpenParenthesisComments<'a> { + comments: &'a [SourceComment], +} + +impl Format> for FormatDanglingOpenParenthesisComments<'_> { + fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { + let mut comments = self + .comments + .iter() + .filter(|comment| comment.is_unformatted()); + + if let Some(comment) = comments.next() { + debug_assert!( + comment.line_position().is_end_of_line(), + "Expected dangling comment to be at the end of the line" + ); + + write!( + f, + [ + line_suffix(&format_args![space(), space(), format_comment(comment)]), + expand_parent() + ] + )?; + comment.mark_formatted(); + + debug_assert!( + comments.next().is_none(), + "Expected at most one dangling comment" + ); + } + + Ok(()) + } +} + /// Formats the content of the passed comment. /// /// * Adds a whitespace between `#` and the comment text except if the first character is a `#`, `:`, `'`, or `!` /// * Replaces non breaking whitespaces with regular whitespaces except if in front of a `types:` comment -const fn format_comment(comment: &SourceComment) -> FormatComment { +pub(crate) const fn format_comment(comment: &SourceComment) -> FormatComment { FormatComment { comment } } -struct FormatComment<'a> { +pub(crate) struct FormatComment<'a> { comment: &'a SourceComment, } @@ -293,12 +343,12 @@ impl Format> for FormatComment<'_> { // Top level: Up to two empty lines // parenthesized: A single empty line // other: Up to a single empty line -const fn empty_lines(lines: u32) -> FormatEmptyLines { +pub(crate) const fn empty_lines(lines: u32) -> FormatEmptyLines { FormatEmptyLines { lines } } #[derive(Copy, Clone, Debug)] -struct FormatEmptyLines { +pub(crate) struct FormatEmptyLines { lines: u32, } diff --git a/crates/ruff_python_formatter/src/comments/map.rs b/crates/ruff_python_formatter/src/comments/map.rs index 9bef831903..7ef01dc736 100644 --- a/crates/ruff_python_formatter/src/comments/map.rs +++ b/crates/ruff_python_formatter/src/comments/map.rs @@ -244,15 +244,29 @@ impl MultiMap { } /// Returns `true` if `key` has any *leading*, *dangling*, or *trailing* parts. + #[allow(unused)] pub(super) fn has(&self, key: &K) -> bool { self.index.get(key).is_some() } - /// Returns an iterator over the *leading*, *dangling*, and *trailing* parts of `key`. - pub(super) fn parts(&self, key: &K) -> PartsIterator { + /// Returns the *leading*, *dangling*, and *trailing* parts of `key`. + pub(super) fn leading_dangling_trailing(&self, key: &K) -> LeadingDanglingTrailing { match self.index.get(key) { - None => PartsIterator::Slice([].iter()), - Some(entry) => PartsIterator::from_entry(entry, self), + None => LeadingDanglingTrailing { + leading: &[], + dangling: &[], + trailing: &[], + }, + Some(Entry::InOrder(entry)) => LeadingDanglingTrailing { + leading: &self.parts[entry.leading_range()], + dangling: &self.parts[entry.dangling_range()], + trailing: &self.parts[entry.trailing_range()], + }, + Some(Entry::OutOfOrder(entry)) => LeadingDanglingTrailing { + leading: &self.out_of_order_parts[entry.leading_index()], + dangling: &self.out_of_order_parts[entry.dangling_index()], + trailing: &self.out_of_order_parts[entry.trailing_index()], + }, } } @@ -261,7 +275,7 @@ impl MultiMap { pub(super) fn all_parts(&self) -> impl Iterator { self.index .values() - .flat_map(|entry| PartsIterator::from_entry(entry, self)) + .flat_map(|entry| LeadingDanglingTrailing::from_entry(entry, self)) } } @@ -280,41 +294,30 @@ where let mut builder = f.debug_map(); for (key, entry) in &self.index { - builder.entry(&key, &DebugEntry { entry, map: self }); + builder.entry(&key, &LeadingDanglingTrailing::from_entry(entry, self)); } builder.finish() } } -/// Iterates over all *leading*, *dangling*, and *trailing* parts of a key. -pub(super) enum PartsIterator<'a, V> { - /// The slice into the [CommentsMap::parts] [Vec] if this is an in-order entry or the *trailing* parts - /// of an out-of-order entry. - Slice(std::slice::Iter<'a, V>), - - /// Iterator over the *leading* parts of an out-of-order entry. Returns the *dangling* parts, and then the - /// *trailing* parts once the *leading* iterator is fully consumed. - Leading { - leading: std::slice::Iter<'a, V>, - dangling: &'a [V], - trailing: &'a [V], - }, - - /// Iterator over the *dangling* parts of an out-of-order entry. Returns the *trailing* parts - /// once the *leading* iterator is fully consumed. - Dangling { - dangling: std::slice::Iter<'a, V>, - trailing: &'a [V], - }, +#[derive(Clone)] +pub(crate) struct LeadingDanglingTrailing<'a, T> { + pub(crate) leading: &'a [T], + pub(crate) dangling: &'a [T], + pub(crate) trailing: &'a [T], } -impl<'a, V> PartsIterator<'a, V> { - fn from_entry(entry: &Entry, map: &'a MultiMap) -> Self { +impl<'a, T> LeadingDanglingTrailing<'a, T> { + fn from_entry(entry: &Entry, map: &'a MultiMap) -> Self { match entry { - Entry::InOrder(entry) => PartsIterator::Slice(map.parts[entry.range()].iter()), - Entry::OutOfOrder(entry) => PartsIterator::Leading { - leading: map.out_of_order_parts[entry.leading_index()].iter(), + Entry::InOrder(entry) => LeadingDanglingTrailing { + leading: &map.parts[entry.leading_range()], + dangling: &map.parts[entry.dangling_range()], + trailing: &map.parts[entry.trailing_range()], + }, + Entry::OutOfOrder(entry) => LeadingDanglingTrailing { + leading: &map.out_of_order_parts[entry.leading_index()], dangling: &map.out_of_order_parts[entry.dangling_index()], trailing: &map.out_of_order_parts[entry.trailing_index()], }, @@ -322,203 +325,35 @@ impl<'a, V> PartsIterator<'a, V> { } } -impl<'a, V> Iterator for PartsIterator<'a, V> { - type Item = &'a V; +impl<'a, T> IntoIterator for LeadingDanglingTrailing<'a, T> { + type Item = &'a T; + type IntoIter = std::iter::Chain< + std::iter::Chain, std::slice::Iter<'a, T>>, + std::slice::Iter<'a, T>, + >; - fn next(&mut self) -> Option { - match self { - PartsIterator::Slice(inner) => inner.next(), - - PartsIterator::Leading { - leading, - dangling, - trailing, - } => match leading.next() { - Some(next) => Some(next), - None if !dangling.is_empty() => { - let mut dangling_iterator = dangling.iter(); - let next = dangling_iterator.next().unwrap(); - *self = PartsIterator::Dangling { - dangling: dangling_iterator, - trailing, - }; - Some(next) - } - None => { - let mut trailing_iterator = trailing.iter(); - let next = trailing_iterator.next(); - *self = PartsIterator::Slice(trailing_iterator); - next - } - }, - - PartsIterator::Dangling { dangling, trailing } => dangling.next().or_else(|| { - let mut trailing_iterator = trailing.iter(); - let next = trailing_iterator.next(); - *self = PartsIterator::Slice(trailing_iterator); - next - }), - } - } - - fn fold(self, init: B, f: F) -> B - where - F: FnMut(B, Self::Item) -> B, - { - match self { - PartsIterator::Slice(slice) => slice.fold(init, f), - PartsIterator::Leading { - leading, - dangling, - trailing, - } => leading - .chain(dangling.iter()) - .chain(trailing.iter()) - .fold(init, f), - PartsIterator::Dangling { dangling, trailing } => { - dangling.chain(trailing.iter()).fold(init, f) - } - } - } - - fn all(&mut self, f: F) -> bool - where - F: FnMut(Self::Item) -> bool, - { - match self { - PartsIterator::Slice(slice) => slice.all(f), - PartsIterator::Leading { - leading, - dangling, - trailing, - } => leading.chain(dangling.iter()).chain(trailing.iter()).all(f), - PartsIterator::Dangling { dangling, trailing } => { - dangling.chain(trailing.iter()).all(f) - } - } - } - - fn any(&mut self, f: F) -> bool - where - F: FnMut(Self::Item) -> bool, - { - match self { - PartsIterator::Slice(slice) => slice.any(f), - PartsIterator::Leading { - leading, - dangling, - trailing, - } => leading.chain(dangling.iter()).chain(trailing.iter()).any(f), - PartsIterator::Dangling { dangling, trailing } => { - dangling.chain(trailing.iter()).any(f) - } - } - } - - fn find

(&mut self, predicate: P) -> Option - where - P: FnMut(&Self::Item) -> bool, - { - match self { - PartsIterator::Slice(slice) => slice.find(predicate), - PartsIterator::Leading { - leading, - dangling, - trailing, - } => leading - .chain(dangling.iter()) - .chain(trailing.iter()) - .find(predicate), - PartsIterator::Dangling { dangling, trailing } => { - dangling.chain(trailing.iter()).find(predicate) - } - } - } - - fn find_map(&mut self, f: F) -> Option - where - F: FnMut(Self::Item) -> Option, - { - match self { - PartsIterator::Slice(slice) => slice.find_map(f), - PartsIterator::Leading { - leading, - dangling, - trailing, - } => leading - .chain(dangling.iter()) - .chain(trailing.iter()) - .find_map(f), - PartsIterator::Dangling { dangling, trailing } => { - dangling.chain(trailing.iter()).find_map(f) - } - } - } - - fn position

(&mut self, predicate: P) -> Option - where - P: FnMut(Self::Item) -> bool, - { - match self { - PartsIterator::Slice(slice) => slice.position(predicate), - PartsIterator::Leading { - leading, - dangling, - trailing, - } => leading - .chain(dangling.iter()) - .chain(trailing.iter()) - .position(predicate), - PartsIterator::Dangling { dangling, trailing } => { - dangling.chain(trailing.iter()).position(predicate) - } - } - } - - fn size_hint(&self) -> (usize, Option) { - match self { - PartsIterator::Slice(slice) => slice.size_hint(), - PartsIterator::Leading { - leading, - dangling, - trailing, - } => { - let len = leading.len() + dangling.len() + trailing.len(); - - (len, Some(len)) - } - PartsIterator::Dangling { dangling, trailing } => { - let len = dangling.len() + trailing.len(); - (len, Some(len)) - } - } - } - - fn count(self) -> usize { - self.size_hint().0 - } - - fn last(self) -> Option { - match self { - PartsIterator::Slice(slice) => slice.last(), - PartsIterator::Leading { - leading, - dangling, - trailing, - } => trailing - .last() - .or_else(|| dangling.last()) - .or_else(|| leading.last()), - PartsIterator::Dangling { dangling, trailing } => { - trailing.last().or_else(|| dangling.last()) - } - } + fn into_iter(self) -> Self::IntoIter { + self.leading + .iter() + .chain(self.dangling) + .chain(self.trailing) } } -impl ExactSizeIterator for PartsIterator<'_, V> {} +impl<'a, T> Debug for LeadingDanglingTrailing<'a, T> +where + T: Debug, +{ + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + let mut list = f.debug_list(); -impl FusedIterator for PartsIterator<'_, V> {} + list.entries(self.leading.iter().map(DebugValue::Leading)); + list.entries(self.dangling.iter().map(DebugValue::Dangling)); + list.entries(self.trailing.iter().map(DebugValue::Trailing)); + + list.finish() + } +} #[derive(Clone, Debug)] enum Entry { @@ -526,48 +361,6 @@ enum Entry { OutOfOrder(OutOfOrderEntry), } -struct DebugEntry<'a, K, V> { - entry: &'a Entry, - map: &'a MultiMap, -} - -impl Debug for DebugEntry<'_, K, V> -where - K: Debug, - V: Debug, -{ - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - let leading = match self.entry { - Entry::OutOfOrder(entry) => { - self.map.out_of_order_parts[entry.leading_index()].as_slice() - } - Entry::InOrder(entry) => &self.map.parts[entry.leading_range()], - }; - - let dangling = match self.entry { - Entry::OutOfOrder(entry) => { - self.map.out_of_order_parts[entry.dangling_index()].as_slice() - } - Entry::InOrder(entry) => &self.map.parts[entry.dangling_range()], - }; - - let trailing = match self.entry { - Entry::OutOfOrder(entry) => { - self.map.out_of_order_parts[entry.trailing_index()].as_slice() - } - Entry::InOrder(entry) => &self.map.parts[entry.trailing_range()], - }; - - let mut list = f.debug_list(); - - list.entries(leading.iter().map(DebugValue::Leading)); - list.entries(dangling.iter().map(DebugValue::Dangling)); - list.entries(trailing.iter().map(DebugValue::Trailing)); - - list.finish() - } -} - enum DebugValue<'a, V> { Leading(&'a V), Dangling(&'a V), @@ -810,7 +603,10 @@ mod tests { assert!(map.has(&"a")); assert_eq!( - map.parts(&"a").copied().collect::>(), + map.leading_dangling_trailing(&"a") + .into_iter() + .copied() + .collect::>(), vec![1, 2, 3, 4] ); } @@ -831,7 +627,13 @@ mod tests { assert!(map.has(&"a")); - assert_eq!(map.parts(&"a").copied().collect::>(), vec![1, 2, 3]); + assert_eq!( + map.leading_dangling_trailing(&"a") + .into_iter() + .copied() + .collect::>(), + vec![1, 2, 3] + ); } #[test] @@ -849,7 +651,13 @@ mod tests { assert!(map.has(&"a")); - assert_eq!(map.parts(&"a").copied().collect::>(), vec![1, 2]); + assert_eq!( + map.leading_dangling_trailing(&"a") + .into_iter() + .copied() + .collect::>(), + vec![1, 2] + ); } #[test] @@ -865,7 +673,10 @@ mod tests { assert!(!map.has(&"a")); assert_eq!( - map.parts(&"a").copied().collect::>(), + map.leading_dangling_trailing(&"a") + .into_iter() + .copied() + .collect::>(), Vec::::new() ); } @@ -886,22 +697,46 @@ mod tests { assert_eq!(map.leading(&"a"), &[1]); assert_eq!(map.dangling(&"a"), &EMPTY); assert_eq!(map.trailing(&"a"), &EMPTY); - assert_eq!(map.parts(&"a").copied().collect::>(), vec![1]); + assert_eq!( + map.leading_dangling_trailing(&"a") + .into_iter() + .copied() + .collect::>(), + vec![1] + ); assert_eq!(map.leading(&"b"), &EMPTY); assert_eq!(map.dangling(&"b"), &[2]); assert_eq!(map.trailing(&"b"), &EMPTY); - assert_eq!(map.parts(&"b").copied().collect::>(), vec![2]); + assert_eq!( + map.leading_dangling_trailing(&"b") + .into_iter() + .copied() + .collect::>(), + vec![2] + ); assert_eq!(map.leading(&"c"), &EMPTY); assert_eq!(map.dangling(&"c"), &EMPTY); assert_eq!(map.trailing(&"c"), &[3]); - assert_eq!(map.parts(&"c").copied().collect::>(), vec![3]); + assert_eq!( + map.leading_dangling_trailing(&"c") + .into_iter() + .copied() + .collect::>(), + vec![3] + ); assert_eq!(map.leading(&"d"), &[4]); assert_eq!(map.dangling(&"d"), &[5]); assert_eq!(map.trailing(&"d"), &[6]); - assert_eq!(map.parts(&"d").copied().collect::>(), vec![4, 5, 6]); + assert_eq!( + map.leading_dangling_trailing(&"d") + .into_iter() + .copied() + .collect::>(), + vec![4, 5, 6] + ); } #[test] @@ -918,7 +753,10 @@ mod tests { assert_eq!(map.trailing(&"a"), [4]); assert_eq!( - map.parts(&"a").copied().collect::>(), + map.leading_dangling_trailing(&"a") + .into_iter() + .copied() + .collect::>(), vec![2, 1, 3, 4] ); @@ -939,7 +777,10 @@ mod tests { assert_eq!(map.trailing(&"a"), [1, 4]); assert_eq!( - map.parts(&"a").copied().collect::>(), + map.leading_dangling_trailing(&"a") + .into_iter() + .copied() + .collect::>(), vec![2, 3, 1, 4] ); @@ -958,7 +799,13 @@ mod tests { assert_eq!(map.dangling(&"a"), &[2]); assert_eq!(map.trailing(&"a"), &[1, 3]); - assert_eq!(map.parts(&"a").copied().collect::>(), vec![2, 1, 3]); + assert_eq!( + map.leading_dangling_trailing(&"a") + .into_iter() + .copied() + .collect::>(), + vec![2, 1, 3] + ); assert!(map.has(&"a")); } diff --git a/crates/ruff_python_formatter/src/comments/mod.rs b/crates/ruff_python_formatter/src/comments/mod.rs index 9cfb280e3d..38d38fdf07 100644 --- a/crates/ruff_python_formatter/src/comments/mod.rs +++ b/crates/ruff_python_formatter/src/comments/mod.rs @@ -95,20 +95,23 @@ use std::rc::Rc; use ruff_python_ast::{Mod, Ranged}; pub(crate) use format::{ - dangling_comments, dangling_node_comments, leading_alternate_branch_comments, leading_comments, - leading_node_comments, trailing_comments, trailing_node_comments, + dangling_comments, dangling_node_comments, dangling_open_parenthesis_comments, + leading_alternate_branch_comments, leading_comments, leading_node_comments, trailing_comments, + trailing_node_comments, }; use ruff_formatter::{SourceCode, SourceCodeSlice}; use ruff_python_ast::node::AnyNodeRef; +use ruff_python_ast::visitor::preorder::{PreorderVisitor, TraversalSignal}; use ruff_python_index::CommentRanges; +use ruff_python_trivia::PythonWhitespace; use crate::comments::debug::{DebugComment, DebugComments}; -use crate::comments::map::MultiMap; +use crate::comments::map::{LeadingDanglingTrailing, MultiMap}; use crate::comments::node_key::NodeRefEqualityKey; use crate::comments::visitor::CommentsVisitor; mod debug; -mod format; +pub(crate) mod format; mod map; mod node_key; mod placement; @@ -148,6 +151,11 @@ impl SourceComment { self.formatted.set(true); } + /// Marks the comment as not-formatted + pub(crate) fn mark_unformatted(&self) { + self.formatted.set(false); + } + /// If the comment has already been formatted pub(crate) fn is_formatted(&self) -> bool { self.formatted.get() @@ -161,6 +169,50 @@ impl SourceComment { pub(crate) fn debug<'a>(&'a self, source_code: SourceCode<'a>) -> DebugComment<'a> { DebugComment::new(self, source_code) } + + pub(crate) fn suppression_kind(&self, source: &str) -> Option { + let text = self.slice.text(SourceCode::new(source)); + let trimmed = text.strip_prefix('#').unwrap_or(text).trim_whitespace(); + + if let Some(command) = trimmed.strip_prefix("fmt:") { + match command.trim_whitespace_start() { + "off" => Some(SuppressionKind::Off), + "on" => Some(SuppressionKind::On), + "skip" => Some(SuppressionKind::Skip), + _ => None, + } + } else if let Some(command) = trimmed.strip_prefix("yapf:") { + match command.trim_whitespace_start() { + "disable" => Some(SuppressionKind::Off), + "enable" => Some(SuppressionKind::On), + _ => None, + } + } else { + None + } + } + + /// Returns true if this comment is a `fmt: off` or `yapf: disable` own line suppression comment. + pub(crate) fn is_suppression_off_comment(&self, source: &str) -> bool { + self.line_position.is_own_line() + && matches!(self.suppression_kind(source), Some(SuppressionKind::Off)) + } + + /// Returns true if this comment is a `fmt: on` or `yapf: enable` own line suppression comment. + pub(crate) fn is_suppression_on_comment(&self, source: &str) -> bool { + self.line_position.is_own_line() + && matches!(self.suppression_kind(source), Some(SuppressionKind::On)) + } +} + +#[derive(Copy, Clone, Eq, PartialEq, Debug)] +pub(crate) enum SuppressionKind { + /// A `fmt: off` or `yapf: disable` comment + Off, + /// A `fmt: on` or `yapf: enable` comment + On, + /// A `fmt: skip` comment + Skip, } impl Ranged for SourceComment { @@ -244,8 +296,6 @@ pub(crate) struct Comments<'a> { data: Rc>, } -#[allow(unused)] -// TODO(micha): Remove after using the new comments infrastructure in the formatter. impl<'a> Comments<'a> { fn new(comments: CommentsMap<'a>) -> Self { Self { @@ -268,16 +318,6 @@ impl<'a> Comments<'a> { Self::new(map) } - #[inline] - pub(crate) fn has_comments(&self, node: T) -> bool - where - T: Into>, - { - self.data - .comments - .has(&NodeRefEqualityKey::from_ref(node.into())) - } - /// Returns `true` if the given `node` has any [leading comments](self#leading-comments). #[inline] pub(crate) fn has_leading_comments(&self, node: T) -> bool @@ -348,6 +388,7 @@ impl<'a> Comments<'a> { } /// Returns an iterator over the [leading](self#leading-comments) and [trailing comments](self#trailing-comments) of `node`. + #[allow(unused)] pub(crate) fn leading_trailing_comments( &self, node: T, @@ -365,13 +406,31 @@ impl<'a> Comments<'a> { pub(crate) fn leading_dangling_trailing_comments( &self, node: T, - ) -> impl Iterator + ) -> LeadingDanglingTrailingComments where T: Into>, { self.data .comments - .parts(&NodeRefEqualityKey::from_ref(node.into())) + .leading_dangling_trailing(&NodeRefEqualityKey::from_ref(node.into())) + } + + /// Returns any comments on the open parenthesis of a `node`. + /// + /// For example, `# comment` in: + /// ```python + /// ( # comment + /// foo.bar + /// ) + /// ``` + #[inline] + pub(crate) fn open_parenthesis_comment(&self, node: T) -> Option<&SourceComment> + where + T: Into>, + { + self.leading_comments(node) + .first() + .filter(|comment| comment.line_position.is_end_of_line()) } #[inline(always)] @@ -400,17 +459,49 @@ impl<'a> Comments<'a> { ); } + #[inline(always)] + #[cfg(not(debug_assertions))] + pub(crate) fn mark_verbatim_node_comments_formatted(&self, _node: AnyNodeRef) {} + + /// Marks the comments of a node printed in verbatim (suppressed) as formatted. + /// + /// Marks the dangling comments and the comments of all descendants as formatted. + /// The leading and trailing comments are not marked as formatted because they are formatted + /// normally if `node` is the first or last node of a suppression range. + #[cfg(debug_assertions)] + pub(crate) fn mark_verbatim_node_comments_formatted(&self, node: AnyNodeRef) { + for dangling in self.dangling_comments(node) { + dangling.mark_formatted(); + } + + node.visit_preorder(&mut MarkVerbatimCommentsAsFormattedVisitor(self)); + } + /// Returns an object that implements [Debug] for nicely printing the [`Comments`]. pub(crate) fn debug(&'a self, source_code: SourceCode<'a>) -> DebugComments<'a> { DebugComments::new(&self.data.comments, source_code) } } +pub(crate) type LeadingDanglingTrailingComments<'a> = LeadingDanglingTrailing<'a, SourceComment>; + #[derive(Debug, Default)] struct CommentsData<'a> { comments: CommentsMap<'a>, } +struct MarkVerbatimCommentsAsFormattedVisitor<'a>(&'a Comments<'a>); + +impl<'a> PreorderVisitor<'a> for MarkVerbatimCommentsAsFormattedVisitor<'a> { + fn enter_node(&mut self, node: AnyNodeRef<'a>) -> TraversalSignal { + for comment in self.0.leading_dangling_trailing_comments(node) { + comment.mark_formatted(); + } + + TraversalSignal::Traverse + } +} + #[cfg(test)] mod tests { use insta::assert_debug_snapshot; @@ -568,8 +659,13 @@ def test(x, y): def other(y, z): if y == z: pass - # Trailing `if` comment - # Trailing `other` function comment + # Trailing `pass` comment + # Trailing `if` statement comment + +class Test: + def func(): + pass + # Trailing `func` function comment test(10, 20) "#; diff --git a/crates/ruff_python_formatter/src/comments/placement.rs b/crates/ruff_python_formatter/src/comments/placement.rs index 865c770b19..b36c40c9f4 100644 --- a/crates/ruff_python_formatter/src/comments/placement.rs +++ b/crates/ruff_python_formatter/src/comments/placement.rs @@ -3,16 +3,15 @@ use std::cmp::Ordering; use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::whitespace::indentation; use ruff_python_ast::{self as ast, Comprehension, Expr, MatchCase, Parameters, Ranged}; -use ruff_python_trivia::{ - indentation_at_offset, PythonWhitespace, SimpleToken, SimpleTokenKind, SimpleTokenizer, -}; -use ruff_source_file::{Locator, UniversalNewlines}; -use ruff_text_size::TextRange; +use ruff_python_trivia::{indentation_at_offset, SimpleToken, SimpleTokenKind, SimpleTokenizer}; +use ruff_source_file::Locator; +use ruff_text_size::{TextLen, TextRange}; use crate::comments::visitor::{CommentPlacement, DecoratedComment}; use crate::expression::expr_slice::{assign_comment_in_slice, ExprSliceCommentSection}; +use crate::expression::expr_tuple::is_tuple_parenthesized; use crate::other::parameters::{ - assign_argument_separator_comment_placement, find_argument_separators, + assign_argument_separator_comment_placement, find_parameter_separators, }; /// Manually attach comments to nodes that the default placement gets wrong. @@ -20,18 +19,152 @@ pub(super) fn place_comment<'a>( comment: DecoratedComment<'a>, locator: &Locator, ) -> CommentPlacement<'a> { - // Handle comments before and after bodies such as the different branches of an if statement. - let comment = if comment.line_position().is_own_line() { - handle_own_line_comment_around_body(comment, locator) - } else { - handle_end_of_line_comment_around_body(comment, locator) + handle_parenthesized_comment(comment, locator) + .or_else(|comment| handle_end_of_line_comment_around_body(comment, locator)) + .or_else(|comment| handle_own_line_comment_around_body(comment, locator)) + .or_else(|comment| handle_enclosed_comment(comment, locator)) +} + +/// Handle parenthesized comments. A parenthesized comment is a comment that appears within a +/// parenthesis, but not within the range of the expression enclosed by the parenthesis. +/// For example, the comment here is a parenthesized comment: +/// ```python +/// if ( +/// # comment +/// True +/// ): +/// ... +/// ``` +/// The parentheses enclose `True`, but the range of `True`doesn't include the `# comment`. +/// +/// Default handling can get parenthesized comments wrong in a number of ways. For example, the +/// comment here is marked (by default) as a trailing comment of `x`, when it should be a leading +/// comment of `y`: +/// ```python +/// assert ( +/// x +/// ), ( # comment +/// y +/// ) +/// ``` +/// +/// Similarly, this is marked as a leading comment of `y`, when it should be a trailing comment of +/// `x`: +/// ```python +/// if ( +/// x +/// # comment +/// ): +/// y +/// ``` +/// +/// As a generalized solution, if a comment has a preceding node and a following node, we search for +/// opening and closing parentheses between the two nodes. If we find a closing parenthesis between +/// the preceding node and the comment, then the comment is a trailing comment of the preceding +/// node. If we find an opening parenthesis between the comment and the following node, then the +/// comment is a leading comment of the following node. +fn handle_parenthesized_comment<'a>( + comment: DecoratedComment<'a>, + locator: &Locator, +) -> CommentPlacement<'a> { + let Some(preceding) = comment.preceding_node() else { + return CommentPlacement::Default(comment); }; - // Change comment placement depending on the node type. These can be seen as node-specific - // fixups. - comment.or_else(|comment| match comment.enclosing_node() { + let Some(following) = comment.following_node() else { + return CommentPlacement::Default(comment); + }; + + // TODO(charlie): Assert that there are no bogus tokens in these ranges. There are a few cases + // where we _can_ hit bogus tokens, but the parentheses need to come before them. For example: + // ```python + // try: + // some_call() + // except ( + // UnformattedError + // # trailing comment + // ) as err: + // handle_exception() + // ``` + // Here, we lex from the end of `UnformattedError` to the start of `handle_exception()`, which + // means we hit an "other" token at `err`. We know the parentheses must precede the `err`, but + // this could be fixed by including `as err` in the node range. + // + // Another example: + // ```python + // @deco + // # comment + // def decorated(): + // pass + // ``` + // Here, we lex from the end of `deco` to the start of the arguments of `decorated`. We hit an + // "other" token at `decorated`, but any parentheses must precede that. + // + // For now, we _can_ assert, but to do so, we stop lexing when we hit a token that precedes an + // identifier. + if comment.line_position().is_end_of_line() { + let tokenizer = SimpleTokenizer::new( + locator.contents(), + TextRange::new(preceding.end(), comment.start()), + ); + if tokenizer + .skip_trivia() + .take_while(|token| { + !matches!( + token.kind, + SimpleTokenKind::As | SimpleTokenKind::Def | SimpleTokenKind::Class + ) + }) + .any(|token| { + debug_assert!( + !matches!(token.kind, SimpleTokenKind::Bogus), + "Unexpected token between nodes: `{:?}`", + locator.slice(TextRange::new(preceding.end(), comment.start()),) + ); + + token.kind() == SimpleTokenKind::LParen + }) + { + return CommentPlacement::leading(following, comment); + } + } else { + let tokenizer = SimpleTokenizer::new( + locator.contents(), + TextRange::new(comment.end(), following.start()), + ); + if tokenizer + .skip_trivia() + .take_while(|token| { + !matches!( + token.kind, + SimpleTokenKind::As | SimpleTokenKind::Def | SimpleTokenKind::Class + ) + }) + .any(|token| { + debug_assert!( + !matches!(token.kind, SimpleTokenKind::Bogus), + "Unexpected token between nodes: `{:?}`", + locator.slice(TextRange::new(comment.end(), following.start())) + ); + token.kind() == SimpleTokenKind::RParen + }) + { + return CommentPlacement::trailing(preceding, comment); + } + } + + CommentPlacement::Default(comment) +} + +/// Handle a comment that is enclosed by a node. +fn handle_enclosed_comment<'a>( + comment: DecoratedComment<'a>, + locator: &Locator, +) -> CommentPlacement<'a> { + match comment.enclosing_node() { AnyNodeRef::Parameters(arguments) => { handle_parameters_separator_comment(comment, arguments, locator) + .or_else(|comment| handle_bracketed_end_of_line_comment(comment, locator)) } AnyNodeRef::Arguments(_) | AnyNodeRef::TypeParams(_) => { handle_bracketed_end_of_line_comment(comment, locator) @@ -53,7 +186,7 @@ pub(super) fn place_comment<'a>( AnyNodeRef::ExprIfExp(expr_if) => handle_expr_if_comment(comment, expr_if, locator), AnyNodeRef::ExprSlice(expr_slice) => handle_slice_comments(comment, expr_slice, locator), AnyNodeRef::ExprStarred(starred) => { - handle_trailing_expression_starred_star_end_of_line_comment(comment, starred) + handle_trailing_expression_starred_star_end_of_line_comment(comment, starred, locator) } AnyNodeRef::ExprSubscript(expr_subscript) => { if let Expr::Slice(expr_slice) = expr_subscript.slice.as_ref() { @@ -62,33 +195,45 @@ pub(super) fn place_comment<'a>( CommentPlacement::Default(comment) } } - AnyNodeRef::MatchCase(match_case) => handle_match_comment(comment, match_case, locator), AnyNodeRef::ModModule(_) => { handle_module_level_own_line_comment_before_class_or_function_comment(comment, locator) } AnyNodeRef::WithItem(_) => handle_with_item_comment(comment, locator), - AnyNodeRef::StmtFunctionDef(_) | AnyNodeRef::StmtAsyncFunctionDef(_) => { - handle_leading_function_with_decorators_comment(comment) - } + AnyNodeRef::StmtFunctionDef(_) => handle_leading_function_with_decorators_comment(comment), AnyNodeRef::StmtClassDef(class_def) => { handle_leading_class_with_decorators_comment(comment, class_def) } AnyNodeRef::StmtImportFrom(import_from) => handle_import_from_comment(comment, import_from), + AnyNodeRef::StmtWith(with_) => handle_with_comment(comment, with_), + AnyNodeRef::ExprConstant(_) => { + if let Some(AnyNodeRef::ExprFString(fstring)) = comment.enclosing_parent() { + CommentPlacement::dangling(fstring, comment) + } else { + CommentPlacement::Default(comment) + } + } + AnyNodeRef::ExprFString(fstring) => CommentPlacement::dangling(fstring, comment), AnyNodeRef::ExprList(_) | AnyNodeRef::ExprSet(_) | AnyNodeRef::ExprGeneratorExp(_) | AnyNodeRef::ExprListComp(_) | AnyNodeRef::ExprSetComp(_) - | AnyNodeRef::ExprDictComp(_) - | AnyNodeRef::ExprTuple(_) => handle_bracketed_end_of_line_comment(comment, locator), + | AnyNodeRef::ExprDictComp(_) => handle_bracketed_end_of_line_comment(comment, locator), + AnyNodeRef::ExprTuple(tuple) if is_tuple_parenthesized(tuple, locator.contents()) => { + handle_bracketed_end_of_line_comment(comment, locator) + } _ => CommentPlacement::Default(comment), - }) + } } fn handle_end_of_line_comment_around_body<'a>( comment: DecoratedComment<'a>, locator: &Locator, ) -> CommentPlacement<'a> { + if comment.line_position().is_own_line() { + return CommentPlacement::Default(comment); + } + // Handle comments before the first statement in a body // ```python // for x in range(10): # in the main body ... @@ -178,7 +323,6 @@ fn handle_end_of_line_comment_around_body<'a>( fn is_first_statement_in_body(statement: AnyNodeRef, has_body: AnyNodeRef) -> bool { match has_body { AnyNodeRef::StmtFor(ast::StmtFor { body, orelse, .. }) - | AnyNodeRef::StmtAsyncFor(ast::StmtAsyncFor { body, orelse, .. }) | AnyNodeRef::StmtWhile(ast::StmtWhile { body, orelse, .. }) => { are_same_optional(statement, body.first()) || are_same_optional(statement, orelse.first()) @@ -189,12 +333,6 @@ fn is_first_statement_in_body(statement: AnyNodeRef, has_body: AnyNodeRef) -> bo orelse, finalbody, .. - }) - | AnyNodeRef::StmtTryStar(ast::StmtTryStar { - body, - orelse, - finalbody, - .. }) => { are_same_optional(statement, body.first()) || are_same_optional(statement, orelse.first()) @@ -207,12 +345,16 @@ fn is_first_statement_in_body(statement: AnyNodeRef, has_body: AnyNodeRef) -> bo | AnyNodeRef::ExceptHandlerExceptHandler(ast::ExceptHandlerExceptHandler { body, .. }) + | AnyNodeRef::MatchCase(ast::MatchCase { body, .. }) | AnyNodeRef::StmtFunctionDef(ast::StmtFunctionDef { body, .. }) - | AnyNodeRef::StmtAsyncFunctionDef(ast::StmtAsyncFunctionDef { body, .. }) | AnyNodeRef::StmtClassDef(ast::StmtClassDef { body, .. }) => { are_same_optional(statement, body.first()) } + AnyNodeRef::StmtMatch(ast::StmtMatch { cases, .. }) => { + are_same_optional(statement, cases.first()) + } + _ => false, } } @@ -240,7 +382,9 @@ fn handle_own_line_comment_around_body<'a>( comment: DecoratedComment<'a>, locator: &Locator, ) -> CommentPlacement<'a> { - debug_assert!(comment.line_position().is_own_line()); + if comment.line_position().is_end_of_line() { + return CommentPlacement::Default(comment); + } // If the following is the first child in an alternative body, this must be the last child in // the previous one @@ -269,18 +413,11 @@ fn handle_own_line_comment_around_body<'a>( } // Check if we're between bodies and should attach to the following body. - handle_own_line_comment_between_branches(comment, preceding, locator) - .or_else(|comment| { - // Otherwise, there's no following branch or the indentation is too deep, so attach to the - // recursively last statement in the preceding body with the matching indentation. - handle_own_line_comment_after_branch(comment, preceding, locator) - }) - .or_else(|comment| { - // If the following node is the first in its body, and there's a non-trivia token between the - // comment and the following node (like a parenthesis), then it means the comment is trailing - // the preceding node, not leading the following one. - handle_own_line_comment_in_clause(comment, preceding, locator) - }) + handle_own_line_comment_between_branches(comment, preceding, locator).or_else(|comment| { + // Otherwise, there's no following branch or the indentation is too deep, so attach to the + // recursively last statement in the preceding body with the matching indentation. + handle_own_line_comment_after_branch(comment, preceding, locator) + }) } /// Handles own line comments between two branches of a node. @@ -380,135 +517,6 @@ fn handle_own_line_comment_between_branches<'a>( } } -/// Handles own-line comments at the end of a clause, immediately preceding a body: -/// ```python -/// if ( -/// True -/// # This should be a trailing comment of `True` and not a leading comment of `pass` -/// ): -/// pass -/// ``` -fn handle_own_line_comment_in_clause<'a>( - comment: DecoratedComment<'a>, - preceding: AnyNodeRef<'a>, - locator: &Locator, -) -> CommentPlacement<'a> { - if let Some(following) = comment.following_node() { - if is_first_statement_in_body(following, comment.enclosing_node()) - && SimpleTokenizer::new( - locator.contents(), - TextRange::new(comment.end(), following.start()), - ) - .skip_trivia() - .next() - .is_some() - { - return CommentPlacement::trailing(preceding, comment); - } - } - - CommentPlacement::Default(comment) -} - -/// Handles leading comments in front of a match case or a trailing comment of the `match` statement. -/// ```python -/// match pt: -/// # Leading `case(x, y)` comment -/// case (x, y): -/// return Point3d(x, y, 0) -/// # Leading `case (x, y, z)` comment -/// case _: -/// ``` -fn handle_match_comment<'a>( - comment: DecoratedComment<'a>, - match_case: &'a MatchCase, - locator: &Locator, -) -> CommentPlacement<'a> { - // Must be an own line comment after the last statement in a match case - if comment.line_position().is_end_of_line() || comment.following_node().is_some() { - return CommentPlacement::Default(comment); - } - - // And its parent match statement. - let Some(match_stmt) = comment.enclosing_parent().and_then(AnyNodeRef::stmt_match) else { - return CommentPlacement::Default(comment); - }; - - // Get the next sibling (sibling traversal would be really nice) - let current_case_index = match_stmt - .cases - .iter() - .position(|case| case == match_case) - .expect("Expected case to belong to parent match statement."); - - let next_case = match_stmt.cases.get(current_case_index + 1); - - let comment_indentation = indentation_at_offset(comment.slice().range().start(), locator) - .unwrap_or_default() - .len(); - let match_case_indentation = indentation(locator, match_case).unwrap().len(); - - if let Some(next_case) = next_case { - // The comment's indentation is less or equal to the `case` indention and there's a following - // `case` arm. - // ```python - // match pt: - // case (x, y): - // return Point3d(x, y, 0) - // # Leading `case (x, y, z)` comment - // case _: - // pass - // ``` - // Attach the `comment` as leading comment to the next case. - if comment_indentation <= match_case_indentation { - CommentPlacement::leading(next_case, comment) - } else { - // Otherwise, delegate to `handle_trailing_body_comment` - // ```python - // match pt: - // case (x, y): - // return Point3d(x, y, 0) - // # Trailing case body comment - // case _: - // pass - // ``` - CommentPlacement::Default(comment) - } - } else { - // Comment after the last statement in a match case... - let match_stmt_indentation = indentation(locator, match_stmt).unwrap_or_default().len(); - - if comment_indentation <= match_case_indentation - && comment_indentation > match_stmt_indentation - { - // The comment's indent matches the `case` indent (or is larger than the `match`'s indent). - // ```python - // match pt: - // case (x, y): - // return Point3d(x, y, 0) - // case _: - // pass - // # Trailing match comment - // ``` - // This is a trailing comment of the last case. - CommentPlacement::trailing(match_case, comment) - } else { - // Delegate to `handle_trailing_body_comment` because it's either a trailing indent - // for the last statement in the `case` body or a comment for the parent of the `match` - // - // ```python - // match pt: - // case (x, y): - // return Point3d(x, y, 0) - // case _: - // pass - // # trailing case comment - // ``` - CommentPlacement::Default(comment) - } - } -} - /// Determine where to attach an own line comment after a branch depending on its indentation fn handle_own_line_comment_after_branch<'a>( comment: DecoratedComment<'a>, @@ -541,12 +549,11 @@ fn handle_own_line_comment_after_branch<'a>( return CommentPlacement::Default(comment); } - let mut parent_body = None; - let mut current_body = Some(preceding_node); - let mut last_child_in_current_body = last_child; + let mut parent = None; + let mut last_child_in_parent = last_child; loop { - let child_indentation = indentation(locator, &last_child_in_current_body) + let child_indentation = indentation(locator, &last_child_in_parent) .unwrap_or_default() .len(); @@ -555,15 +562,16 @@ fn handle_own_line_comment_after_branch<'a>( // if parent_body: // if current_body: // child_in_body() - // last_child_in_current_body # may or may not have children on its own + // last_child_in_current_body # may or may not have children on its own // # less: Comment belongs to the parent block. - // # less + // # less: Comment belongs to the parent block. // # equal: The comment belongs to this block. - // # greater - // # greater: The comment belongs to the inner block. + // # greater (but less in the next iteration) + // # greater: The comment belongs to the inner block. + // ``` match comment_indentation.cmp(&child_indentation) { Ordering::Less => { - return if let Some(parent_block) = parent_body { + return if let Some(parent_block) = parent { // Comment belongs to the parent block. CommentPlacement::trailing(parent_block, comment) } else { @@ -578,14 +586,13 @@ fn handle_own_line_comment_after_branch<'a>( } Ordering::Equal => { // The comment belongs to this block. - return CommentPlacement::trailing(last_child_in_current_body, comment); + return CommentPlacement::trailing(last_child_in_parent, comment); } Ordering::Greater => { - if let Some(nested_child) = last_child_in_body(last_child_in_current_body) { + if let Some(nested_child) = last_child_in_body(last_child_in_parent) { // The comment belongs to the inner block. - parent_body = current_body; - current_body = Some(last_child_in_current_body); - last_child_in_current_body = nested_child; + parent = Some(last_child_in_parent); + last_child_in_parent = nested_child; } else { // The comment is overindented, we assign it to the most indented child we have. // ```python @@ -593,7 +600,7 @@ fn handle_own_line_comment_after_branch<'a>( // pass // # comment // ``` - return CommentPlacement::trailing(last_child_in_current_body, comment); + return CommentPlacement::trailing(last_child_in_parent, comment); } } } @@ -609,7 +616,7 @@ fn handle_parameters_separator_comment<'a>( parameters: &Parameters, locator: &Locator, ) -> CommentPlacement<'a> { - let (slash, star) = find_argument_separators(locator.contents(), parameters); + let (slash, star) = find_parameter_separators(locator.contents(), parameters); let comment_range = comment.slice().range(); let placement = assign_argument_separator_comment_placement( slash.as_ref(), @@ -773,9 +780,7 @@ fn handle_module_level_own_line_comment_before_class_or_function_comment<'a>( // ... where the following is a function or class statement. if !matches!( following, - AnyNodeRef::StmtAsyncFunctionDef(_) - | AnyNodeRef::StmtFunctionDef(_) - | AnyNodeRef::StmtClassDef(_) + AnyNodeRef::StmtFunctionDef(_) | AnyNodeRef::StmtClassDef(_) ) { return CommentPlacement::Default(comment); } @@ -949,39 +954,11 @@ fn handle_dict_unpacking_comment<'a>( // if the remaining tokens from the previous node are exactly `**`, // re-assign the comment to the one that follows the stars - let mut count = 0u32; - - // we start from the preceding node but we skip its token - if let Some(token) = tokens.next() { - // The Keyword case - if token.kind == SimpleTokenKind::Star { - count += 1; - } else { - // The dict case - debug_assert!( - matches!( - token, - SimpleToken { - kind: SimpleTokenKind::LBrace - | SimpleTokenKind::Comma - | SimpleTokenKind::Colon, - .. - } - ), - "{token:?}", - ); - } + if tokens.any(|token| token.kind == SimpleTokenKind::DoubleStar) { + CommentPlacement::trailing(following, comment) + } else { + CommentPlacement::Default(comment) } - - for token in tokens { - debug_assert!(token.kind == SimpleTokenKind::Star, "Expected star token"); - count += 1; - } - if count == 2 { - return CommentPlacement::trailing(following, comment); - } - - CommentPlacement::Default(comment) } /// Own line comments coming after the node are always dangling comments @@ -1086,35 +1063,37 @@ fn handle_expr_if_comment<'a>( CommentPlacement::Default(comment) } -/// Moving +/// Handles trailing comments on between the `*` of a starred expression and the +/// expression itself. For example, attaches the first two comments here as leading +/// comments on the enclosing node, and the third to the `True` node. /// ``` python /// call( -/// # Leading starred comment -/// * # Trailing star comment -/// [] -/// ) -/// ``` -/// to -/// ``` python -/// call( -/// # Leading starred comment -/// # Trailing star comment -/// * [] +/// * # dangling end-of-line comment +/// # dangling own line comment +/// ( # leading comment on the expression +/// True +/// ) /// ) /// ``` fn handle_trailing_expression_starred_star_end_of_line_comment<'a>( comment: DecoratedComment<'a>, starred: &'a ast::ExprStarred, + locator: &Locator, ) -> CommentPlacement<'a> { - if comment.line_position().is_own_line() { - return CommentPlacement::Default(comment); + if comment.following_node().is_some() { + let tokenizer = SimpleTokenizer::new( + locator.contents(), + TextRange::new(starred.start(), comment.start()), + ); + if !tokenizer + .skip_trivia() + .any(|token| token.kind() == SimpleTokenKind::LParen) + { + return CommentPlacement::leading(starred, comment); + } } - if comment.following_node().is_none() { - return CommentPlacement::Default(comment); - } - - CommentPlacement::leading(starred, comment) + CommentPlacement::Default(comment) } /// Handles trailing own line comments before the `as` keyword of a with item and @@ -1208,14 +1187,20 @@ fn handle_bracketed_end_of_line_comment<'a>( locator.contents(), TextRange::new(comment.enclosing_node().start(), comment.start()), ) - .skip_trivia() - .skip_while(|t| { - matches!( - t.kind(), - SimpleTokenKind::LParen | SimpleTokenKind::LBrace | SimpleTokenKind::LBracket - ) - }); + .skip_trivia(); + // Skip the opening parenthesis. + let Some(paren) = lexer.next() else { + return CommentPlacement::Default(comment); + }; + debug_assert!(matches!( + paren.kind(), + SimpleTokenKind::LParen | SimpleTokenKind::LBrace | SimpleTokenKind::LBracket + )); + + // If there are no additional tokens between the open parenthesis and the comment, then + // it should be attached as a dangling comment on the brackets, rather than a leading + // comment on the first argument. if lexer.next().is_none() { return CommentPlacement::dangling(comment.enclosing_node(), comment); } @@ -1224,7 +1209,7 @@ fn handle_bracketed_end_of_line_comment<'a>( CommentPlacement::Default(comment) } -/// Attach an enclosed end-of-line comment to a [`StmtImportFrom`]. +/// Attach an enclosed end-of-line comment to a [`ast::StmtImportFrom`]. /// /// For example, given: /// ```python @@ -1233,8 +1218,8 @@ fn handle_bracketed_end_of_line_comment<'a>( /// ) /// ``` /// -/// The comment will be attached to the `StmtImportFrom` node as a dangling comment, to ensure -/// that it remains on the same line as the `StmtImportFrom` itself. +/// The comment will be attached to the [`ast::StmtImportFrom`] node as a dangling comment, to +/// ensure that it remains on the same line as the [`ast::StmtImportFrom`] itself. fn handle_import_from_comment<'a>( comment: DecoratedComment<'a>, import_from: &'a ast::StmtImportFrom, @@ -1269,6 +1254,35 @@ fn handle_import_from_comment<'a>( } } +/// Attach an enclosed end-of-line comment to a [`ast::StmtWith`]. +/// +/// For example, given: +/// ```python +/// with ( # foo +/// CtxManager1() as example1, +/// CtxManager2() as example2, +/// CtxManager3() as example3, +/// ): +/// ... +/// ``` +/// +/// The comment will be attached to the [`ast::StmtWith`] node as a dangling comment, to ensure +/// that it remains on the same line as the [`ast::StmtWith`] itself. +fn handle_with_comment<'a>( + comment: DecoratedComment<'a>, + with_statement: &'a ast::StmtWith, +) -> CommentPlacement<'a> { + if comment.line_position().is_end_of_line() + && with_statement.items.first().is_some_and(|with_item| { + with_statement.start() < comment.start() && comment.start() < with_item.start() + }) + { + CommentPlacement::dangling(comment.enclosing_node(), comment) + } else { + CommentPlacement::Default(comment) + } +} + // Handle comments inside comprehensions, e.g. // // ```python @@ -1404,14 +1418,12 @@ where right.is_some_and(|right| left.ptr_eq(right.into())) } -/// The last child of the last branch, if the node hs multiple branches. +/// The last child of the last branch, if the node has multiple branches. fn last_child_in_body(node: AnyNodeRef) -> Option { let body = match node { AnyNodeRef::StmtFunctionDef(ast::StmtFunctionDef { body, .. }) - | AnyNodeRef::StmtAsyncFunctionDef(ast::StmtAsyncFunctionDef { body, .. }) | AnyNodeRef::StmtClassDef(ast::StmtClassDef { body, .. }) | AnyNodeRef::StmtWith(ast::StmtWith { body, .. }) - | AnyNodeRef::StmtAsyncWith(ast::StmtAsyncWith { body, .. }) | AnyNodeRef::MatchCase(MatchCase { body, .. }) | AnyNodeRef::ExceptHandlerExceptHandler(ast::ExceptHandlerExceptHandler { body, .. @@ -1424,7 +1436,6 @@ fn last_child_in_body(node: AnyNodeRef) -> Option { }) => elif_else_clauses.last().map_or(body, |clause| &clause.body), AnyNodeRef::StmtFor(ast::StmtFor { body, orelse, .. }) - | AnyNodeRef::StmtAsyncFor(ast::StmtAsyncFor { body, orelse, .. }) | AnyNodeRef::StmtWhile(ast::StmtWhile { body, orelse, .. }) => { if orelse.is_empty() { body @@ -1443,13 +1454,6 @@ fn last_child_in_body(node: AnyNodeRef) -> Option { orelse, finalbody, .. - }) - | AnyNodeRef::StmtTryStar(ast::StmtTryStar { - body, - handlers, - orelse, - finalbody, - .. }) => { if finalbody.is_empty() { if orelse.is_empty() { @@ -1477,7 +1481,6 @@ fn last_child_in_body(node: AnyNodeRef) -> Option { fn is_first_statement_in_alternate_body(statement: AnyNodeRef, has_body: AnyNodeRef) -> bool { match has_body { AnyNodeRef::StmtFor(ast::StmtFor { orelse, .. }) - | AnyNodeRef::StmtAsyncFor(ast::StmtAsyncFor { orelse, .. }) | AnyNodeRef::StmtWhile(ast::StmtWhile { orelse, .. }) => { are_same_optional(statement, orelse.first()) } @@ -1487,12 +1490,6 @@ fn is_first_statement_in_alternate_body(statement: AnyNodeRef, has_body: AnyNode orelse, finalbody, .. - }) - | AnyNodeRef::StmtTryStar(ast::StmtTryStar { - handlers, - orelse, - finalbody, - .. }) => { are_same_optional(statement, handlers.first()) || are_same_optional(statement, orelse.first()) @@ -1506,21 +1503,32 @@ fn is_first_statement_in_alternate_body(statement: AnyNodeRef, has_body: AnyNode } } -/// Counts the number of newlines in `contents`. -fn max_empty_lines(contents: &str) -> usize { - let mut empty_lines = 0; - let mut max_empty_lines = 0; +/// Counts the number of empty lines in `contents`. +fn max_empty_lines(contents: &str) -> u32 { + let mut newlines = 0u32; + let mut max_new_lines = 0; - for line in contents.universal_newlines().skip(1) { - if line.trim_whitespace().is_empty() { - empty_lines += 1; - } else { - max_empty_lines = max_empty_lines.max(empty_lines); - empty_lines = 0; + for token in SimpleTokenizer::new(contents, TextRange::up_to(contents.text_len())) { + match token.kind() { + SimpleTokenKind::Newline => { + newlines += 1; + } + + SimpleTokenKind::Whitespace => {} + + SimpleTokenKind::Comment => { + max_new_lines = newlines.max(max_new_lines); + newlines = 0; + } + + _ => { + max_new_lines = newlines.max(max_new_lines); + break; + } } } - max_empty_lines + max_new_lines.saturating_sub(1) } #[cfg(test)] @@ -1555,9 +1563,7 @@ mod tests { ); assert_eq!( - max_empty_lines( - "# trailing comment\n\n# own line comment\n\n\n# an other own line comment\n# block" - ), + max_empty_lines("# trailing comment\n\n# own line comment\n\n\n# an other own line comment\n# block"), 2 ); diff --git a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__parenthesized_expression.snap b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__parenthesized_expression.snap index e9dbfbf221..0c49034c20 100644 --- a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__parenthesized_expression.snap +++ b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__parenthesized_expression.snap @@ -4,19 +4,19 @@ expression: comments.debug(test_case.source_code) --- { Node { - kind: ExprName, - range: 1..2, - source: `a`, + kind: ExprBinOp, + range: 30..57, + source: `10 + # More comments⏎`, }: { - "leading": [], - "dangling": [], - "trailing": [ + "leading": [ SourceComment { text: "# Trailing comment", position: EndOfLine, formatted: false, }, ], + "dangling": [], + "trailing": [], }, Node { kind: ExprConstant, diff --git a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__trailing_function_comment.snap b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__trailing_function_comment.snap index 005e4fcf8d..9dd6d289d4 100644 --- a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__trailing_function_comment.snap +++ b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__trailing_function_comment.snap @@ -34,15 +34,15 @@ expression: comments.debug(test_case.source_code) ], }, Node { - kind: StmtFunctionDef, - range: 193..237, - source: `def other(y, z):⏎`, + kind: StmtIf, + range: 214..237, + source: `if y == z:⏎`, }: { "leading": [], "dangling": [], "trailing": [ SourceComment { - text: "# Trailing `other` function comment", + text: "# Trailing `if` statement comment", position: OwnLine, formatted: false, }, @@ -57,7 +57,22 @@ expression: comments.debug(test_case.source_code) "dangling": [], "trailing": [ SourceComment { - text: "# Trailing `if` comment", + text: "# Trailing `pass` comment", + position: OwnLine, + formatted: false, + }, + ], + }, + Node { + kind: StmtFunctionDef, + range: 333..357, + source: `def func():⏎`, + }: { + "leading": [], + "dangling": [], + "trailing": [ + SourceComment { + text: "# Trailing `func` function comment", position: OwnLine, formatted: false, }, diff --git a/crates/ruff_python_formatter/src/comments/visitor.rs b/crates/ruff_python_formatter/src/comments/visitor.rs index 9e60c5833d..f779820a35 100644 --- a/crates/ruff_python_formatter/src/comments/visitor.rs +++ b/crates/ruff_python_formatter/src/comments/visitor.rs @@ -1,10 +1,6 @@ use std::iter::Peekable; -use ruff_python_ast::{ - Alias, Arguments, Comprehension, Decorator, ElifElseClause, ExceptHandler, Expr, Keyword, - MatchCase, Mod, Parameter, ParameterWithDefault, Parameters, Pattern, Ranged, Stmt, TypeParam, - TypeParams, WithItem, -}; +use ruff_python_ast::{Mod, Ranged, Stmt}; use ruff_text_size::{TextRange, TextSize}; use ruff_formatter::{SourceCode, SourceCodeSlice}; @@ -48,14 +44,22 @@ impl<'a> CommentsVisitor<'a> { self.finish() } - fn start_node(&mut self, node: N) -> TraversalSignal - where - N: Into>, - { - self.start_node_impl(node.into()) + // Try to skip the subtree if + // * there are no comments + // * if the next comment comes after this node (meaning, this nodes subtree contains no comments) + fn can_skip(&mut self, node_end: TextSize) -> bool { + self.comment_ranges + .peek() + .map_or(true, |next_comment| next_comment.start() >= node_end) } - fn start_node_impl(&mut self, node: AnyNodeRef<'a>) -> TraversalSignal { + fn finish(self) -> CommentsMap<'a> { + self.builder.finish() + } +} + +impl<'ast> PreorderVisitor<'ast> for CommentsVisitor<'ast> { + fn enter_node(&mut self, node: AnyNodeRef<'ast>) -> TraversalSignal { let node_range = node.range(); let enclosing_node = self.parents.last().copied().unwrap_or(node); @@ -96,23 +100,7 @@ impl<'a> CommentsVisitor<'a> { } } - // Try to skip the subtree if - // * there are no comments - // * if the next comment comes after this node (meaning, this nodes subtree contains no comments) - fn can_skip(&mut self, node_end: TextSize) -> bool { - self.comment_ranges - .peek() - .map_or(true, |next_comment| next_comment.start() >= node_end) - } - - fn finish_node(&mut self, node: N) - where - N: Into>, - { - self.finish_node_impl(node.into()); - } - - fn finish_node_impl(&mut self, node: AnyNodeRef<'a>) { + fn leave_node(&mut self, node: AnyNodeRef<'ast>) { // We are leaving this node, pop it from the parent stack. self.parents.pop(); @@ -130,8 +118,8 @@ impl<'a> CommentsVisitor<'a> { let comment = DecoratedComment { enclosing: node, - preceding: self.preceding_node, parent: self.parents.last().copied(), + preceding: self.preceding_node, following: None, line_position: text_position(*comment_range, self.source_code), slice: self.source_code.slice(*comment_range), @@ -148,19 +136,6 @@ impl<'a> CommentsVisitor<'a> { self.preceding_node = Some(node); } - fn finish(self) -> CommentsMap<'a> { - self.builder.finish() - } -} - -impl<'ast> PreorderVisitor<'ast> for CommentsVisitor<'ast> { - fn visit_mod(&mut self, module: &'ast Mod) { - if self.start_node(module).is_traverse() { - walk_module(self, module); - } - self.finish_node(module); - } - fn visit_body(&mut self, body: &'ast [Stmt]) { match body { [] => { @@ -180,140 +155,6 @@ impl<'ast> PreorderVisitor<'ast> for CommentsVisitor<'ast> { } } } - - fn visit_stmt(&mut self, stmt: &'ast Stmt) { - if self.start_node(stmt).is_traverse() { - walk_stmt(self, stmt); - } - self.finish_node(stmt); - } - - fn visit_annotation(&mut self, expr: &'ast Expr) { - if self.start_node(expr).is_traverse() { - walk_expr(self, expr); - } - self.finish_node(expr); - } - - fn visit_decorator(&mut self, decorator: &'ast Decorator) { - if self.start_node(decorator).is_traverse() { - walk_decorator(self, decorator); - } - self.finish_node(decorator); - } - - fn visit_expr(&mut self, expr: &'ast Expr) { - if self.start_node(expr).is_traverse() { - walk_expr(self, expr); - } - self.finish_node(expr); - } - - fn visit_comprehension(&mut self, comprehension: &'ast Comprehension) { - if self.start_node(comprehension).is_traverse() { - walk_comprehension(self, comprehension); - } - self.finish_node(comprehension); - } - - fn visit_except_handler(&mut self, except_handler: &'ast ExceptHandler) { - if self.start_node(except_handler).is_traverse() { - walk_except_handler(self, except_handler); - } - self.finish_node(except_handler); - } - - fn visit_format_spec(&mut self, format_spec: &'ast Expr) { - if self.start_node(format_spec).is_traverse() { - walk_expr(self, format_spec); - } - self.finish_node(format_spec); - } - - fn visit_arguments(&mut self, arguments: &'ast Arguments) { - if self.start_node(arguments).is_traverse() { - walk_arguments(self, arguments); - } - self.finish_node(arguments); - } - - fn visit_parameters(&mut self, parameters: &'ast Parameters) { - if self.start_node(parameters).is_traverse() { - walk_parameters(self, parameters); - } - self.finish_node(parameters); - } - - fn visit_parameter(&mut self, arg: &'ast Parameter) { - if self.start_node(arg).is_traverse() { - walk_parameter(self, arg); - } - self.finish_node(arg); - } - - fn visit_parameter_with_default(&mut self, parameter_with_default: &'ast ParameterWithDefault) { - if self.start_node(parameter_with_default).is_traverse() { - walk_parameter_with_default(self, parameter_with_default); - } - self.finish_node(parameter_with_default); - } - - fn visit_keyword(&mut self, keyword: &'ast Keyword) { - if self.start_node(keyword).is_traverse() { - walk_keyword(self, keyword); - } - self.finish_node(keyword); - } - - fn visit_alias(&mut self, alias: &'ast Alias) { - if self.start_node(alias).is_traverse() { - walk_alias(self, alias); - } - self.finish_node(alias); - } - - fn visit_with_item(&mut self, with_item: &'ast WithItem) { - if self.start_node(with_item).is_traverse() { - walk_with_item(self, with_item); - } - - self.finish_node(with_item); - } - - fn visit_match_case(&mut self, match_case: &'ast MatchCase) { - if self.start_node(match_case).is_traverse() { - walk_match_case(self, match_case); - } - self.finish_node(match_case); - } - - fn visit_pattern(&mut self, pattern: &'ast Pattern) { - if self.start_node(pattern).is_traverse() { - walk_pattern(self, pattern); - } - self.finish_node(pattern); - } - - fn visit_elif_else_clause(&mut self, elif_else_clause: &'ast ElifElseClause) { - if self.start_node(elif_else_clause).is_traverse() { - walk_elif_else_clause(self, elif_else_clause); - } - self.finish_node(elif_else_clause); - } - - fn visit_type_params(&mut self, type_params: &'ast TypeParams) { - if self.start_node(type_params).is_traverse() { - walk_type_params(self, type_params); - } - self.finish_node(type_params); - } - - fn visit_type_param(&mut self, type_param: &'ast TypeParam) { - if self.start_node(type_param).is_traverse() { - walk_type_param(self, type_param); - } - self.finish_node(type_param); - } } fn text_position(comment_range: TextRange, source_code: SourceCode) -> CommentLinePosition { @@ -671,18 +512,6 @@ impl<'a> CommentPlacement<'a> { } } -#[derive(Copy, Clone, Eq, PartialEq, Debug)] -enum TraversalSignal { - Traverse, - Skip, -} - -impl TraversalSignal { - const fn is_traverse(self) -> bool { - matches!(self, TraversalSignal::Traverse) - } -} - #[derive(Clone, Debug, Default)] struct CommentsBuilder<'a> { comments: CommentsMap<'a>, diff --git a/crates/ruff_python_formatter/src/context.rs b/crates/ruff_python_formatter/src/context.rs index 23a3530a24..01caed9e68 100644 --- a/crates/ruff_python_formatter/src/context.rs +++ b/crates/ruff_python_formatter/src/context.rs @@ -1,9 +1,9 @@ use crate::comments::Comments; use crate::PyFormatOptions; -use ruff_formatter::prelude::*; -use ruff_formatter::{Arguments, Buffer, FormatContext, GroupId, SourceCode}; +use ruff_formatter::{Buffer, FormatContext, GroupId, SourceCode}; use ruff_source_file::Locator; use std::fmt::{Debug, Formatter}; +use std::ops::{Deref, DerefMut}; #[derive(Clone)] pub struct PyFormatContext<'a> { @@ -96,6 +96,7 @@ impl NodeLevel { } } +/// Change the [`NodeLevel`] of the formatter for the lifetime of this struct pub(crate) struct WithNodeLevel<'ast, 'buf, B> where B: Buffer>, @@ -119,16 +120,25 @@ where saved_level, } } +} - #[inline] - pub(crate) fn write_fmt(&mut self, arguments: Arguments) -> FormatResult<()> { - self.buffer.write_fmt(arguments) +impl<'ast, 'buf, B> Deref for WithNodeLevel<'ast, 'buf, B> +where + B: Buffer>, +{ + type Target = B; + + fn deref(&self) -> &Self::Target { + self.buffer } +} - #[allow(unused)] - #[inline] - pub(crate) fn write_element(&mut self, element: FormatElement) -> FormatResult<()> { - self.buffer.write_element(element) +impl<'ast, 'buf, B> DerefMut for WithNodeLevel<'ast, 'buf, B> +where + B: Buffer>, +{ + fn deref_mut(&mut self) -> &mut Self::Target { + self.buffer } } diff --git a/crates/ruff_python_formatter/src/expression/expr_attribute.rs b/crates/ruff_python_formatter/src/expression/expr_attribute.rs index f734a5fc5b..a0a66494a1 100644 --- a/crates/ruff_python_formatter/src/expression/expr_attribute.rs +++ b/crates/ruff_python_formatter/src/expression/expr_attribute.rs @@ -2,7 +2,7 @@ use ruff_formatter::{write, FormatRuleWithOptions}; use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::{Constant, Expr, ExprAttribute, ExprConstant}; -use crate::comments::{leading_comments, trailing_comments}; +use crate::comments::{leading_comments, trailing_comments, SourceComment}; use crate::expression::parentheses::{ is_expression_parenthesized, NeedsParentheses, OptionalParentheses, Parentheses, }; @@ -35,111 +35,122 @@ impl FormatNodeRule for FormatExprAttribute { let call_chain_layout = self.call_chain_layout.apply_in_node(item, f); - let needs_parentheses = matches!( - value.as_ref(), - Expr::Constant(ExprConstant { - value: Constant::Int(_) | Constant::Float(_), - .. - }) - ); + let format_inner = format_with(|f: &mut PyFormatter| { + let needs_parentheses = matches!( + value.as_ref(), + Expr::Constant(ExprConstant { + value: Constant::Int(_) | Constant::Float(_), + .. + }) + ); - let comments = f.context().comments().clone(); - let dangling_comments = comments.dangling_comments(item); - let leading_attribute_comments_start = - dangling_comments.partition_point(|comment| comment.line_position().is_end_of_line()); - let (trailing_dot_comments, leading_attribute_comments) = - dangling_comments.split_at(leading_attribute_comments_start); + let comments = f.context().comments().clone(); + let dangling_comments = comments.dangling_comments(item); + let leading_attribute_comments_start = dangling_comments + .partition_point(|comment| comment.line_position().is_end_of_line()); + let (trailing_dot_comments, leading_attribute_comments) = + dangling_comments.split_at(leading_attribute_comments_start); - if needs_parentheses { - value.format().with_options(Parentheses::Always).fmt(f)?; - } else if call_chain_layout == CallChainLayout::Fluent { - match value.as_ref() { - Expr::Attribute(expr) => { - expr.format().with_options(call_chain_layout).fmt(f)?; - } - Expr::Call(expr) => { - expr.format().with_options(call_chain_layout).fmt(f)?; - if call_chain_layout == CallChainLayout::Fluent { - // Format the dot on its own line - soft_line_break().fmt(f)?; - } - } - Expr::Subscript(expr) => { - expr.format().with_options(call_chain_layout).fmt(f)?; - if call_chain_layout == CallChainLayout::Fluent { - // Format the dot on its own line - soft_line_break().fmt(f)?; - } - } - _ => { - // This matches [`CallChainLayout::from_expression`] - if is_expression_parenthesized(value.as_ref().into(), f.context().source()) { - value.format().with_options(Parentheses::Always).fmt(f)?; - // Format the dot on its own line - soft_line_break().fmt(f)?; - } else { - value.format().fmt(f)?; + if needs_parentheses { + value.format().with_options(Parentheses::Always).fmt(f)?; + } else if call_chain_layout == CallChainLayout::Fluent { + match value.as_ref() { + Expr::Attribute(expr) => { + expr.format().with_options(call_chain_layout).fmt(f)?; + } + Expr::Call(expr) => { + expr.format().with_options(call_chain_layout).fmt(f)?; + if call_chain_layout == CallChainLayout::Fluent { + // Format the dot on its own line + soft_line_break().fmt(f)?; + } + } + Expr::Subscript(expr) => { + expr.format().with_options(call_chain_layout).fmt(f)?; + if call_chain_layout == CallChainLayout::Fluent { + // Format the dot on its own line + soft_line_break().fmt(f)?; + } + } + _ => { + // This matches [`CallChainLayout::from_expression`] + if is_expression_parenthesized(value.as_ref().into(), f.context().source()) + { + value.format().with_options(Parentheses::Always).fmt(f)?; + // Format the dot on its own line + soft_line_break().fmt(f)?; + } else { + value.format().fmt(f)?; + } } } + } else { + value.format().fmt(f)?; } - } else { - value.format().fmt(f)?; - } - if comments.has_trailing_own_line_comments(value.as_ref()) { - hard_line_break().fmt(f)?; - } + if comments.has_trailing_own_line_comments(value.as_ref()) { + hard_line_break().fmt(f)?; + } - if call_chain_layout == CallChainLayout::Fluent { - // Fluent style has line breaks before the dot - // ```python - // blogs3 = ( - // Blog.objects.filter( - // entry__headline__contains="Lennon", - // ) - // .filter( - // entry__pub_date__year=2008, - // ) - // .filter( - // entry__pub_date__year=2008, - // ) - // ) - // ``` - write!( - f, - [ - (!leading_attribute_comments.is_empty()).then_some(hard_line_break()), - leading_comments(leading_attribute_comments), - text("."), - trailing_comments(trailing_dot_comments), - attr.format() - ] - ) + if call_chain_layout == CallChainLayout::Fluent { + // Fluent style has line breaks before the dot + // ```python + // blogs3 = ( + // Blog.objects.filter( + // entry__headline__contains="Lennon", + // ) + // .filter( + // entry__pub_date__year=2008, + // ) + // .filter( + // entry__pub_date__year=2008, + // ) + // ) + // ``` + write!( + f, + [ + (!leading_attribute_comments.is_empty()).then_some(hard_line_break()), + leading_comments(leading_attribute_comments), + text("."), + trailing_comments(trailing_dot_comments), + attr.format() + ] + ) + } else { + // Regular style + // ```python + // blogs2 = Blog.objects.filter( + // entry__headline__contains="Lennon", + // ).filter( + // entry__pub_date__year=2008, + // ) + // ``` + write!( + f, + [ + text("."), + trailing_comments(trailing_dot_comments), + (!leading_attribute_comments.is_empty()).then_some(hard_line_break()), + leading_comments(leading_attribute_comments), + attr.format() + ] + ) + } + }); + + let is_call_chain_root = self.call_chain_layout == CallChainLayout::Default + && call_chain_layout == CallChainLayout::Fluent; + if is_call_chain_root { + write!(f, [group(&format_inner)]) } else { - // Regular style - // ```python - // blogs2 = Blog.objects.filter( - // entry__headline__contains="Lennon", - // ).filter( - // entry__pub_date__year=2008, - // ) - // ``` - write!( - f, - [ - text("."), - trailing_comments(trailing_dot_comments), - (!leading_attribute_comments.is_empty()).then_some(hard_line_break()), - leading_comments(leading_attribute_comments), - attr.format() - ] - ) + write!(f, [format_inner]) } } fn fmt_dangling_comments( &self, - _node: &ExprAttribute, + _dangling_comments: &[SourceComment], _f: &mut PyFormatter, ) -> FormatResult<()> { // handle in `fmt_fields` diff --git a/crates/ruff_python_formatter/src/expression/expr_bin_op.rs b/crates/ruff_python_formatter/src/expression/expr_bin_op.rs index adddc88663..26071e293d 100644 --- a/crates/ruff_python_formatter/src/expression/expr_bin_op.rs +++ b/crates/ruff_python_formatter/src/expression/expr_bin_op.rs @@ -1,15 +1,15 @@ use std::iter; use ruff_python_ast::{ - Constant, Expr, ExprAttribute, ExprBinOp, ExprConstant, ExprUnaryOp, Operator, UnaryOp, + Constant, Expr, ExprAttribute, ExprBinOp, ExprConstant, ExprUnaryOp, Operator, StringConstant, + UnaryOp, }; use smallvec::SmallVec; use ruff_formatter::{format_args, write, FormatOwnedWithRule, FormatRefWithRule}; use ruff_python_ast::node::{AnyNodeRef, AstNode}; -use ruff_python_ast::str::is_implicit_concatenation; -use crate::comments::{trailing_comments, trailing_node_comments}; +use crate::comments::{trailing_comments, trailing_node_comments, SourceComment}; use crate::expression::expr_constant::ExprConstantLayout; use crate::expression::parentheses::{ in_parentheses_only_group, in_parentheses_only_soft_line_break, @@ -147,7 +147,11 @@ impl FormatNodeRule for FormatExprBinOp { } } - fn fmt_dangling_comments(&self, _node: &ExprBinOp, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled inside of `fmt_fields` Ok(()) } @@ -157,8 +161,11 @@ impl FormatExprBinOp { fn layout<'a>(bin_op: &'a ExprBinOp, context: &PyFormatContext) -> BinOpLayout<'a> { if let Some( constant @ ExprConstant { - value: Constant::Str(_), - range, + value: + Constant::Str(StringConstant { + implicit_concatenated: true, + .. + }), .. }, ) = bin_op.left.as_constant_expr() @@ -169,7 +176,6 @@ impl FormatExprBinOp { && context.node_level().is_parenthesized() && !comments.has_dangling_comments(constant) && !comments.has_dangling_comments(bin_op) - && is_implicit_concatenation(&context.source()[*range]) { BinOpLayout::LeftString(constant) } else { diff --git a/crates/ruff_python_formatter/src/expression/expr_bool_op.rs b/crates/ruff_python_formatter/src/expression/expr_bool_op.rs index e57953371b..9449c6662a 100644 --- a/crates/ruff_python_formatter/src/expression/expr_bool_op.rs +++ b/crates/ruff_python_formatter/src/expression/expr_bool_op.rs @@ -1,22 +1,31 @@ use crate::comments::leading_comments; use crate::expression::parentheses::{ in_parentheses_only_group, in_parentheses_only_soft_line_break_or_space, NeedsParentheses, - OptionalParentheses, Parentheses, + OptionalParentheses, }; use crate::prelude::*; use ruff_formatter::{write, FormatOwnedWithRule, FormatRefWithRule, FormatRuleWithOptions}; -use ruff_python_ast::node::AnyNodeRef; -use ruff_python_ast::{BoolOp, ExprBoolOp}; +use ruff_python_ast::node::{AnyNodeRef, AstNode}; +use ruff_python_ast::{BoolOp, Expr, ExprBoolOp}; + +use super::parentheses::is_expression_parenthesized; #[derive(Default)] pub struct FormatExprBoolOp { - parentheses: Option, + layout: BoolOpLayout, +} + +#[derive(Default, Copy, Clone)] +pub enum BoolOpLayout { + #[default] + Default, + Chained, } impl FormatRuleWithOptions> for FormatExprBoolOp { - type Options = Option; + type Options = BoolOpLayout; fn with_options(mut self, options: Self::Options) -> Self { - self.parentheses = options; + self.layout = options; self } } @@ -37,7 +46,7 @@ impl FormatNodeRule for FormatExprBoolOp { return Ok(()); }; - write!(f, [in_parentheses_only_group(&first.format())])?; + FormatValue { value: first }.fmt(f)?; for value in values { let leading_value_comments = comments.leading_comments(value); @@ -51,20 +60,20 @@ impl FormatNodeRule for FormatExprBoolOp { )?; } - write!( - f, - [ - op.format(), - space(), - in_parentheses_only_group(&value.format()) - ] - )?; + write!(f, [op.format(), space(),])?; + + FormatValue { value }.fmt(f)?; } Ok(()) }); - in_parentheses_only_group(&inner).fmt(f) + if matches!(self.layout, BoolOpLayout::Chained) { + // Chained boolean operations should not be given a new group + inner.fmt(f) + } else { + in_parentheses_only_group(&inner).fmt(f) + } } } @@ -78,6 +87,27 @@ impl NeedsParentheses for ExprBoolOp { } } +struct FormatValue<'a> { + value: &'a Expr, +} + +impl Format> for FormatValue<'_> { + fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { + match self.value { + Expr::BoolOp(bool_op) + if !is_expression_parenthesized( + bool_op.as_any_node_ref(), + f.context().source(), + ) => + { + // Mark chained boolean operations e.g. `x and y or z` and avoid creating a new group + write!(f, [bool_op.format().with_options(BoolOpLayout::Chained)]) + } + _ => write!(f, [in_parentheses_only_group(&self.value.format())]), + } + } +} + #[derive(Copy, Clone)] pub struct FormatBoolOp; diff --git a/crates/ruff_python_formatter/src/expression/expr_compare.rs b/crates/ruff_python_formatter/src/expression/expr_compare.rs index c01014ef80..9e7bf38978 100644 --- a/crates/ruff_python_formatter/src/expression/expr_compare.rs +++ b/crates/ruff_python_formatter/src/expression/expr_compare.rs @@ -1,27 +1,16 @@ -use crate::comments::leading_comments; +use crate::comments::{leading_comments, SourceComment}; use crate::expression::parentheses::{ in_parentheses_only_group, in_parentheses_only_soft_line_break_or_space, NeedsParentheses, - OptionalParentheses, Parentheses, + OptionalParentheses, }; use crate::prelude::*; use crate::FormatNodeRule; -use ruff_formatter::{write, FormatOwnedWithRule, FormatRefWithRule, FormatRuleWithOptions}; +use ruff_formatter::{write, FormatOwnedWithRule, FormatRefWithRule}; use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::{CmpOp, ExprCompare}; #[derive(Default)] -pub struct FormatExprCompare { - parentheses: Option, -} - -impl FormatRuleWithOptions> for FormatExprCompare { - type Options = Option; - - fn with_options(mut self, options: Self::Options) -> Self { - self.parentheses = options; - self - } -} +pub struct FormatExprCompare; impl FormatNodeRule for FormatExprCompare { fn fmt_fields(&self, item: &ExprCompare, f: &mut PyFormatter) -> FormatResult<()> { @@ -69,6 +58,15 @@ impl FormatNodeRule for FormatExprCompare { in_parentheses_only_group(&inner).fmt(f) } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + // Node can not have dangling comments + Ok(()) + } } impl NeedsParentheses for ExprCompare { diff --git a/crates/ruff_python_formatter/src/expression/expr_constant.rs b/crates/ruff_python_formatter/src/expression/expr_constant.rs index 59f06ebb68..64cfb8cd4c 100644 --- a/crates/ruff_python_formatter/src/expression/expr_constant.rs +++ b/crates/ruff_python_formatter/src/expression/expr_constant.rs @@ -1,9 +1,8 @@ -use ruff_python_ast::{Constant, ExprConstant, Ranged}; -use ruff_text_size::{TextLen, TextRange}; - +use crate::comments::SourceComment; use ruff_formatter::FormatRuleWithOptions; use ruff_python_ast::node::AnyNodeRef; -use ruff_python_ast::str::is_implicit_concatenation; +use ruff_python_ast::{Constant, ExprConstant, Ranged}; +use ruff_text_size::{TextLen, TextRange}; use crate::expression::number::{FormatComplex, FormatFloat, FormatInt}; use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; @@ -67,7 +66,7 @@ impl FormatNodeRule for FormatExprConstant { fn fmt_dangling_comments( &self, - _node: &ExprConstant, + _dangling_comments: &[SourceComment], _f: &mut PyFormatter, ) -> FormatResult<()> { Ok(()) @@ -80,10 +79,9 @@ impl NeedsParentheses for ExprConstant { _parent: AnyNodeRef, context: &PyFormatContext, ) -> OptionalParentheses { - if self.value.is_str() || self.value.is_bytes() { - let contents = context.locator().slice(self.range()); + if self.value.is_implicit_concatenated() { // Don't wrap triple quoted strings - if is_multiline_string(self, context.source()) || !is_implicit_concatenation(contents) { + if is_multiline_string(self, context.source()) { OptionalParentheses::Never } else { OptionalParentheses::Multiline diff --git a/crates/ruff_python_formatter/src/expression/expr_dict.rs b/crates/ruff_python_formatter/src/expression/expr_dict.rs index f55c02dd20..659354cddd 100644 --- a/crates/ruff_python_formatter/src/expression/expr_dict.rs +++ b/crates/ruff_python_formatter/src/expression/expr_dict.rs @@ -4,10 +4,9 @@ use ruff_python_ast::Ranged; use ruff_python_ast::{Expr, ExprDict}; use ruff_text_size::TextRange; -use crate::builders::empty_parenthesized_with_dangling_comments; -use crate::comments::leading_comments; +use crate::comments::{leading_comments, SourceComment}; use crate::expression::parentheses::{ - parenthesized_with_dangling_comments, NeedsParentheses, OptionalParentheses, + empty_parenthesized, parenthesized, NeedsParentheses, OptionalParentheses, }; use crate::prelude::*; use crate::FormatNodeRule; @@ -71,8 +70,7 @@ impl FormatNodeRule for FormatExprDict { let dangling = comments.dangling_comments(item); if values.is_empty() { - return empty_parenthesized_with_dangling_comments(text("{"), dangling, text("}")) - .fmt(f); + return empty_parenthesized("{", dangling, "}").fmt(f); } let format_pairs = format_with(|f| { @@ -86,10 +84,16 @@ impl FormatNodeRule for FormatExprDict { joiner.finish() }); - parenthesized_with_dangling_comments("{", dangling, &format_pairs, "}").fmt(f) + parenthesized("{", &format_pairs, "}") + .with_dangling_comments(dangling) + .fmt(f) } - fn fmt_dangling_comments(&self, _node: &ExprDict, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled by `fmt_fields` Ok(()) } diff --git a/crates/ruff_python_formatter/src/expression/expr_dict_comp.rs b/crates/ruff_python_formatter/src/expression/expr_dict_comp.rs index a89565018d..e16d2e1900 100644 --- a/crates/ruff_python_formatter/src/expression/expr_dict_comp.rs +++ b/crates/ruff_python_formatter/src/expression/expr_dict_comp.rs @@ -6,9 +6,7 @@ use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::ExprDictComp; use crate::context::PyFormatContext; -use crate::expression::parentheses::{ - parenthesized_with_dangling_comments, NeedsParentheses, OptionalParentheses, -}; +use crate::expression::parentheses::{parenthesized, NeedsParentheses, OptionalParentheses}; use crate::AsFormat; use crate::{FormatNodeRule, FormattedIterExt, PyFormatter}; @@ -35,9 +33,8 @@ impl FormatNodeRule for FormatExprDictComp { write!( f, - [parenthesized_with_dangling_comments( + [parenthesized( "{", - dangling, &group(&format_args!( group(&key.format()), text(":"), @@ -47,7 +44,8 @@ impl FormatNodeRule for FormatExprDictComp { &joined )), "}" - )] + ) + .with_dangling_comments(dangling)] ) } } diff --git a/crates/ruff_python_formatter/src/expression/expr_joined_str.rs b/crates/ruff_python_formatter/src/expression/expr_f_string.rs similarity index 61% rename from crates/ruff_python_formatter/src/expression/expr_joined_str.rs rename to crates/ruff_python_formatter/src/expression/expr_f_string.rs index e857ea0b30..0c0165dd3f 100644 --- a/crates/ruff_python_formatter/src/expression/expr_joined_str.rs +++ b/crates/ruff_python_formatter/src/expression/expr_f_string.rs @@ -5,18 +5,18 @@ use crate::prelude::*; use crate::{FormatNodeRule, PyFormatter}; use ruff_formatter::FormatResult; use ruff_python_ast::node::AnyNodeRef; -use ruff_python_ast::ExprJoinedStr; +use ruff_python_ast::ExprFString; #[derive(Default)] -pub struct FormatExprJoinedStr; +pub struct FormatExprFString; -impl FormatNodeRule for FormatExprJoinedStr { - fn fmt_fields(&self, item: &ExprJoinedStr, f: &mut PyFormatter) -> FormatResult<()> { - FormatString::new(&AnyString::JoinedStr(item)).fmt(f) +impl FormatNodeRule for FormatExprFString { + fn fmt_fields(&self, item: &ExprFString, f: &mut PyFormatter) -> FormatResult<()> { + FormatString::new(&AnyString::FString(item)).fmt(f) } } -impl NeedsParentheses for ExprJoinedStr { +impl NeedsParentheses for ExprFString { fn needs_parentheses( &self, _parent: AnyNodeRef, diff --git a/crates/ruff_python_formatter/src/expression/expr_formatted_value.rs b/crates/ruff_python_formatter/src/expression/expr_formatted_value.rs index 34b7fb1f65..12c1a8e0e5 100644 --- a/crates/ruff_python_formatter/src/expression/expr_formatted_value.rs +++ b/crates/ruff_python_formatter/src/expression/expr_formatted_value.rs @@ -1,7 +1,7 @@ use crate::context::PyFormatContext; use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; -use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; -use ruff_formatter::{write, Buffer, FormatResult}; +use crate::{FormatNodeRule, PyFormatter}; +use ruff_formatter::FormatResult; use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::ExprFormattedValue; @@ -9,8 +9,8 @@ use ruff_python_ast::ExprFormattedValue; pub struct FormatExprFormattedValue; impl FormatNodeRule for FormatExprFormattedValue { - fn fmt_fields(&self, item: &ExprFormattedValue, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [not_yet_implemented(item)]) + fn fmt_fields(&self, _item: &ExprFormattedValue, _f: &mut PyFormatter) -> FormatResult<()> { + unreachable!("Handled inside of `FormatExprFString"); } } diff --git a/crates/ruff_python_formatter/src/expression/expr_generator_exp.rs b/crates/ruff_python_formatter/src/expression/expr_generator_exp.rs index e9c967e95b..771e0d650c 100644 --- a/crates/ruff_python_formatter/src/expression/expr_generator_exp.rs +++ b/crates/ruff_python_formatter/src/expression/expr_generator_exp.rs @@ -2,10 +2,9 @@ use ruff_formatter::{format_args, write, Buffer, FormatResult, FormatRuleWithOpt use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::ExprGeneratorExp; -use crate::comments::leading_comments; +use crate::comments::SourceComment; use crate::context::PyFormatContext; -use crate::expression::parentheses::parenthesized_with_dangling_comments; -use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; +use crate::expression::parentheses::{parenthesized, NeedsParentheses, OptionalParentheses}; use crate::prelude::*; use crate::AsFormat; use crate::{FormatNodeRule, PyFormatter}; @@ -15,10 +14,11 @@ pub enum GeneratorExpParentheses { #[default] Default, - // skip parens if the generator exp is the only argument to a function, e.g. - // ```python - // all(x for y in z)` - // ``` + /// Skip parens if the generator is the only argument to a function and doesn't contain any + /// dangling comments. For example: + /// ```python + /// all(x for y in z)` + /// ``` StripIfOnlyFunctionArg, } @@ -53,36 +53,33 @@ impl FormatNodeRule for FormatExprGeneratorExp { let comments = f.context().comments().clone(); let dangling = comments.dangling_comments(item); - if self.parentheses == GeneratorExpParentheses::StripIfOnlyFunctionArg { + if self.parentheses == GeneratorExpParentheses::StripIfOnlyFunctionArg + && dangling.is_empty() + { write!( f, - [ - leading_comments(dangling), - group(&elt.format()), - soft_line_break_or_space(), - &joined - ] + [group(&elt.format()), soft_line_break_or_space(), &joined] ) } else { write!( f, - [parenthesized_with_dangling_comments( + [parenthesized( "(", - dangling, &group(&format_args!( group(&elt.format()), soft_line_break_or_space(), &joined )), ")" - )] + ) + .with_dangling_comments(dangling)] ) } } fn fmt_dangling_comments( &self, - _node: &ExprGeneratorExp, + _dangling_comments: &[SourceComment], _f: &mut PyFormatter, ) -> FormatResult<()> { // Handled as part of `fmt_fields` diff --git a/crates/ruff_python_formatter/src/expression/expr_ipy_escape_command.rs b/crates/ruff_python_formatter/src/expression/expr_ipy_escape_command.rs new file mode 100644 index 0000000000..00afaee756 --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_ipy_escape_command.rs @@ -0,0 +1,11 @@ +use crate::prelude::*; +use ruff_python_ast::{ExprIpyEscapeCommand, Ranged}; + +#[derive(Default)] +pub struct FormatExprIpyEscapeCommand; + +impl FormatNodeRule for FormatExprIpyEscapeCommand { + fn fmt_fields(&self, item: &ExprIpyEscapeCommand, f: &mut PyFormatter) -> FormatResult<()> { + source_text_slice(item.range(), ContainsNewlines::No).fmt(f) + } +} diff --git a/crates/ruff_python_formatter/src/expression/expr_lambda.rs b/crates/ruff_python_formatter/src/expression/expr_lambda.rs index 1b3aa4bdef..d663084f39 100644 --- a/crates/ruff_python_formatter/src/expression/expr_lambda.rs +++ b/crates/ruff_python_formatter/src/expression/expr_lambda.rs @@ -1,4 +1,4 @@ -use crate::comments::dangling_node_comments; +use crate::comments::{dangling_node_comments, SourceComment}; use crate::context::PyFormatContext; use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; use crate::other::parameters::ParametersParentheses; @@ -22,7 +22,10 @@ impl FormatNodeRule for FormatExprLambda { write!(f, [text("lambda")])?; - if !parameters.args.is_empty() || parameters.vararg.is_some() || parameters.kwarg.is_some() + if !parameters.args.is_empty() + || !parameters.posonlyargs.is_empty() + || parameters.vararg.is_some() + || parameters.kwarg.is_some() { write!( f, @@ -52,7 +55,11 @@ impl FormatNodeRule for FormatExprLambda { ) } - fn fmt_dangling_comments(&self, _node: &ExprLambda, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Override. Dangling comments are handled in `fmt_fields`. Ok(()) } diff --git a/crates/ruff_python_formatter/src/expression/expr_line_magic.rs b/crates/ruff_python_formatter/src/expression/expr_line_magic.rs deleted file mode 100644 index 5d1d93d565..0000000000 --- a/crates/ruff_python_formatter/src/expression/expr_line_magic.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::{verbatim_text, FormatNodeRule, PyFormatter}; -use ruff_formatter::{write, Buffer, FormatResult}; -use ruff_python_ast::ExprLineMagic; - -#[derive(Default)] -pub struct FormatExprLineMagic; - -impl FormatNodeRule for FormatExprLineMagic { - fn fmt_fields(&self, item: &ExprLineMagic, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [verbatim_text(item)]) - } -} diff --git a/crates/ruff_python_formatter/src/expression/expr_list.rs b/crates/ruff_python_formatter/src/expression/expr_list.rs index 73482f3814..1b5a93b7c4 100644 --- a/crates/ruff_python_formatter/src/expression/expr_list.rs +++ b/crates/ruff_python_formatter/src/expression/expr_list.rs @@ -1,10 +1,10 @@ -use ruff_formatter::prelude::{format_with, text}; +use crate::comments::SourceComment; +use ruff_formatter::prelude::format_with; use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::{ExprList, Ranged}; -use crate::builders::empty_parenthesized_with_dangling_comments; use crate::expression::parentheses::{ - parenthesized_with_dangling_comments, NeedsParentheses, OptionalParentheses, + empty_parenthesized, parenthesized, NeedsParentheses, OptionalParentheses, }; use crate::prelude::*; use crate::FormatNodeRule; @@ -24,8 +24,7 @@ impl FormatNodeRule for FormatExprList { let dangling = comments.dangling_comments(item); if elts.is_empty() { - return empty_parenthesized_with_dangling_comments(text("["), dangling, text("]")) - .fmt(f); + return empty_parenthesized("[", dangling, "]").fmt(f); } let items = format_with(|f| { @@ -34,10 +33,16 @@ impl FormatNodeRule for FormatExprList { .finish() }); - parenthesized_with_dangling_comments("[", dangling, &items, "]").fmt(f) + parenthesized("[", &items, "]") + .with_dangling_comments(dangling) + .fmt(f) } - fn fmt_dangling_comments(&self, _node: &ExprList, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled as part of `fmt_fields` Ok(()) } diff --git a/crates/ruff_python_formatter/src/expression/expr_list_comp.rs b/crates/ruff_python_formatter/src/expression/expr_list_comp.rs index bc557bb581..54db366d12 100644 --- a/crates/ruff_python_formatter/src/expression/expr_list_comp.rs +++ b/crates/ruff_python_formatter/src/expression/expr_list_comp.rs @@ -2,10 +2,9 @@ use ruff_formatter::{format_args, write, FormatResult}; use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::ExprListComp; +use crate::comments::SourceComment; use crate::context::PyFormatContext; -use crate::expression::parentheses::{ - parenthesized_with_dangling_comments, NeedsParentheses, OptionalParentheses, -}; +use crate::expression::parentheses::{parenthesized, NeedsParentheses, OptionalParentheses}; use crate::prelude::*; use crate::AsFormat; use crate::{FormatNodeRule, PyFormatter}; @@ -32,22 +31,22 @@ impl FormatNodeRule for FormatExprListComp { write!( f, - [parenthesized_with_dangling_comments( + [parenthesized( "[", - dangling, &group(&format_args![ group(&elt.format()), soft_line_break_or_space(), &joined ]), "]" - )] + ) + .with_dangling_comments(dangling)] ) } fn fmt_dangling_comments( &self, - _node: &ExprListComp, + _dangling_comments: &[SourceComment], _f: &mut PyFormatter, ) -> FormatResult<()> { // Handled as part of `fmt_fields` diff --git a/crates/ruff_python_formatter/src/expression/expr_name.rs b/crates/ruff_python_formatter/src/expression/expr_name.rs index 2653f343b4..a2aef80593 100644 --- a/crates/ruff_python_formatter/src/expression/expr_name.rs +++ b/crates/ruff_python_formatter/src/expression/expr_name.rs @@ -1,3 +1,4 @@ +use crate::comments::SourceComment; use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; use crate::prelude::*; use crate::FormatNodeRule; @@ -22,6 +23,15 @@ impl FormatNodeRule for FormatExprName { write!(f, [source_text_slice(*range, ContainsNewlines::No)]) } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + // Node cannot have dangling comments + Ok(()) + } } impl NeedsParentheses for ExprName { diff --git a/crates/ruff_python_formatter/src/expression/expr_named_expr.rs b/crates/ruff_python_formatter/src/expression/expr_named_expr.rs index 88bf4b2052..8858c6079a 100644 --- a/crates/ruff_python_formatter/src/expression/expr_named_expr.rs +++ b/crates/ruff_python_formatter/src/expression/expr_named_expr.rs @@ -44,9 +44,12 @@ impl NeedsParentheses for ExprNamedExpr { || parent.is_stmt_return() || parent.is_except_handler_except_handler() || parent.is_with_item() + || parent.is_expr_yield() + || parent.is_expr_yield_from() + || parent.is_expr_await() || parent.is_stmt_delete() || parent.is_stmt_for() - || parent.is_stmt_async_for() + || parent.is_stmt_function_def() { OptionalParentheses::Always } else { diff --git a/crates/ruff_python_formatter/src/expression/expr_set.rs b/crates/ruff_python_formatter/src/expression/expr_set.rs index 66795cb1a9..cccb7ea0e6 100644 --- a/crates/ruff_python_formatter/src/expression/expr_set.rs +++ b/crates/ruff_python_formatter/src/expression/expr_set.rs @@ -1,9 +1,8 @@ +use crate::comments::SourceComment; use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::{ExprSet, Ranged}; -use crate::expression::parentheses::{ - parenthesized_with_dangling_comments, NeedsParentheses, OptionalParentheses, -}; +use crate::expression::parentheses::{parenthesized, NeedsParentheses, OptionalParentheses}; use crate::prelude::*; use crate::FormatNodeRule; @@ -25,10 +24,16 @@ impl FormatNodeRule for FormatExprSet { let comments = f.context().comments().clone(); let dangling = comments.dangling_comments(item); - parenthesized_with_dangling_comments("{", dangling, &joined, "}").fmt(f) + parenthesized("{", &joined, "}") + .with_dangling_comments(dangling) + .fmt(f) } - fn fmt_dangling_comments(&self, _node: &ExprSet, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled as part of `fmt_fields` Ok(()) } diff --git a/crates/ruff_python_formatter/src/expression/expr_set_comp.rs b/crates/ruff_python_formatter/src/expression/expr_set_comp.rs index a5acbbd6f2..126b0a7038 100644 --- a/crates/ruff_python_formatter/src/expression/expr_set_comp.rs +++ b/crates/ruff_python_formatter/src/expression/expr_set_comp.rs @@ -2,10 +2,9 @@ use ruff_formatter::{format_args, write, Buffer, FormatResult}; use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::ExprSetComp; +use crate::comments::SourceComment; use crate::context::PyFormatContext; -use crate::expression::parentheses::{ - parenthesized_with_dangling_comments, NeedsParentheses, OptionalParentheses, -}; +use crate::expression::parentheses::{parenthesized, NeedsParentheses, OptionalParentheses}; use crate::prelude::*; use crate::AsFormat; use crate::{FormatNodeRule, PyFormatter}; @@ -32,20 +31,24 @@ impl FormatNodeRule for FormatExprSetComp { write!( f, - [parenthesized_with_dangling_comments( + [parenthesized( "{", - dangling, &group(&format_args!( group(&elt.format()), soft_line_break_or_space(), &joined )), "}" - )] + ) + .with_dangling_comments(dangling)] ) } - fn fmt_dangling_comments(&self, _node: &ExprSetComp, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled as part of `fmt_fields` Ok(()) } diff --git a/crates/ruff_python_formatter/src/expression/expr_starred.rs b/crates/ruff_python_formatter/src/expression/expr_starred.rs index 6f3e7723f3..a06cc3752a 100644 --- a/crates/ruff_python_formatter/src/expression/expr_starred.rs +++ b/crates/ruff_python_formatter/src/expression/expr_starred.rs @@ -1,5 +1,6 @@ use ruff_python_ast::ExprStarred; +use crate::comments::{dangling_comments, SourceComment}; use ruff_formatter::write; use ruff_python_ast::node::AnyNodeRef; @@ -19,12 +20,17 @@ impl FormatNodeRule for FormatExprStarred { ctx: _, } = item; - write!(f, [text("*"), value.format()]) + let comments = f.context().comments().clone(); + let dangling = comments.dangling_comments(item); + + write!(f, [text("*"), dangling_comments(dangling), value.format()]) } - fn fmt_dangling_comments(&self, node: &ExprStarred, f: &mut PyFormatter) -> FormatResult<()> { - debug_assert_eq!(f.context().comments().dangling_comments(node), []); - + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { Ok(()) } } diff --git a/crates/ruff_python_formatter/src/expression/expr_subscript.rs b/crates/ruff_python_formatter/src/expression/expr_subscript.rs index 1a2304801d..fbee7bd7f5 100644 --- a/crates/ruff_python_formatter/src/expression/expr_subscript.rs +++ b/crates/ruff_python_formatter/src/expression/expr_subscript.rs @@ -2,7 +2,7 @@ use ruff_formatter::{format_args, write, FormatRuleWithOptions}; use ruff_python_ast::node::{AnyNodeRef, AstNode}; use ruff_python_ast::{Expr, ExprSubscript}; -use crate::comments::trailing_comments; +use crate::comments::{trailing_comments, SourceComment}; use crate::context::PyFormatContext; use crate::context::{NodeLevel, WithNodeLevel}; use crate::expression::expr_tuple::TupleParentheses; @@ -81,7 +81,7 @@ impl FormatNodeRule for FormatExprSubscript { fn fmt_dangling_comments( &self, - _node: &ExprSubscript, + _dangling_comments: &[SourceComment], _f: &mut PyFormatter, ) -> FormatResult<()> { // Handled inside of `fmt_fields` diff --git a/crates/ruff_python_formatter/src/expression/expr_tuple.rs b/crates/ruff_python_formatter/src/expression/expr_tuple.rs index a2e2af857c..bb9cd298ec 100644 --- a/crates/ruff_python_formatter/src/expression/expr_tuple.rs +++ b/crates/ruff_python_formatter/src/expression/expr_tuple.rs @@ -1,17 +1,18 @@ -use ruff_python_ast::ExprTuple; -use ruff_python_ast::{Expr, Ranged}; -use ruff_text_size::TextRange; - use ruff_formatter::{format_args, write, FormatRuleWithOptions}; use ruff_python_ast::node::AnyNodeRef; +use ruff_python_ast::ExprTuple; +use ruff_python_ast::Ranged; +use ruff_python_trivia::{SimpleTokenKind, SimpleTokenizer}; +use ruff_text_size::TextRange; -use crate::builders::{empty_parenthesized_with_dangling_comments, parenthesize_if_expands}; +use crate::builders::parenthesize_if_expands; +use crate::comments::SourceComment; use crate::expression::parentheses::{ - parenthesized_with_dangling_comments, NeedsParentheses, OptionalParentheses, + empty_parenthesized, parenthesized, NeedsParentheses, OptionalParentheses, }; use crate::prelude::*; -#[derive(Eq, PartialEq, Debug, Default)] +#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] pub enum TupleParentheses { /// By default tuples with a single element will include parentheses. Tuples with multiple elements /// will parenthesize if the expression expands. This means that tuples will often *preserve* @@ -100,9 +101,9 @@ impl FormatRuleWithOptions> for FormatExprTuple { impl FormatNodeRule for FormatExprTuple { fn fmt_fields(&self, item: &ExprTuple, f: &mut PyFormatter) -> FormatResult<()> { let ExprTuple { - range, elts, ctx: _, + range: _, } = item; let comments = f.context().comments().clone(); @@ -120,25 +121,20 @@ impl FormatNodeRule for FormatExprTuple { // In all other cases comments get assigned to a list element match elts.as_slice() { [] => { - return empty_parenthesized_with_dangling_comments(text("("), dangling, text(")")) - .fmt(f); + return empty_parenthesized("(", dangling, ")").fmt(f); } [single] => match self.parentheses { TupleParentheses::Preserve - if !is_parenthesized(*range, elts, f.context().source()) => + if !is_tuple_parenthesized(item, f.context().source()) => { write!(f, [single.format(), text(",")]) } _ => // A single element tuple always needs parentheses and a trailing comma, except when inside of a subscript { - parenthesized_with_dangling_comments( - "(", - dangling, - &format_args![single.format(), text(",")], - ")", - ) - .fmt(f) + parenthesized("(", &format_args![single.format(), text(",")], ")") + .with_dangling_comments(dangling) + .fmt(f) } }, // If the tuple has parentheses, we generally want to keep them. The exception are for @@ -146,11 +142,12 @@ impl FormatNodeRule for FormatExprTuple { // // Unlike other expression parentheses, tuple parentheses are part of the range of the // tuple itself. - _ if is_parenthesized(*range, elts, f.context().source()) + _ if is_tuple_parenthesized(item, f.context().source()) && !(self.parentheses == TupleParentheses::NeverPreserve && dangling.is_empty()) => { - parenthesized_with_dangling_comments("(", dangling, &ExprSequence::new(item), ")") + parenthesized("(", &ExprSequence::new(item), ")") + .with_dangling_comments(dangling) .fmt(f) } _ => match self.parentheses { @@ -167,7 +164,11 @@ impl FormatNodeRule for FormatExprTuple { } } - fn fmt_dangling_comments(&self, _node: &ExprTuple, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled in `fmt_fields` Ok(()) } @@ -203,21 +204,30 @@ impl NeedsParentheses for ExprTuple { } /// Check if a tuple has already had parentheses in the input -fn is_parenthesized(tuple_range: TextRange, elts: &[Expr], source: &str) -> bool { - let parentheses = '('; - let first_char = &source[usize::from(tuple_range.start())..].chars().next(); - let Some(first_char) = first_char else { +pub(crate) fn is_tuple_parenthesized(tuple: &ExprTuple, source: &str) -> bool { + let Some(elt) = tuple.elts.first() else { return false; }; - if *first_char != parentheses { + + // Count the number of open parentheses between the start of the tuple and the first element. + let open_parentheses_count = + SimpleTokenizer::new(source, TextRange::new(tuple.start(), elt.start())) + .skip_trivia() + .filter(|token| token.kind() == SimpleTokenKind::LParen) + .count(); + if open_parentheses_count == 0 { return false; } - // Consider `a = (1, 2), 3`: The first char of the current expr starts is a parentheses, but - // it's not its own but that of its first tuple child. We know that it belongs to the child - // because if it wouldn't, the child would start (at least) a char later - let Some(first_child) = elts.first() else { - return false; - }; - first_child.range().start() != tuple_range.start() + // Count the number of parentheses between the end of the first element and its trailing comma. + let close_parentheses_count = + SimpleTokenizer::new(source, TextRange::new(elt.end(), tuple.end())) + .skip_trivia() + .take_while(|token| token.kind() != SimpleTokenKind::Comma) + .filter(|token| token.kind() == SimpleTokenKind::RParen) + .count(); + + // If the number of open parentheses is greater than the number of close parentheses, the tuple + // is parenthesized. + open_parentheses_count > close_parentheses_count } diff --git a/crates/ruff_python_formatter/src/expression/mod.rs b/crates/ruff_python_formatter/src/expression/mod.rs index f11b2a1f0d..a617c91328 100644 --- a/crates/ruff_python_formatter/src/expression/mod.rs +++ b/crates/ruff_python_formatter/src/expression/mod.rs @@ -25,12 +25,12 @@ pub(crate) mod expr_compare; pub(crate) mod expr_constant; pub(crate) mod expr_dict; pub(crate) mod expr_dict_comp; +pub(crate) mod expr_f_string; pub(crate) mod expr_formatted_value; pub(crate) mod expr_generator_exp; pub(crate) mod expr_if_exp; -pub(crate) mod expr_joined_str; +pub(crate) mod expr_ipy_escape_command; pub(crate) mod expr_lambda; -pub(crate) mod expr_line_magic; pub(crate) mod expr_list; pub(crate) mod expr_list_comp; pub(crate) mod expr_name; @@ -67,7 +67,7 @@ impl FormatRule> for FormatExpr { let parentheses = self.parentheses; let format_expr = format_with(|f| match expression { - Expr::BoolOp(expr) => expr.format().with_options(Some(parentheses)).fmt(f), + Expr::BoolOp(expr) => expr.format().fmt(f), Expr::NamedExpr(expr) => expr.format().fmt(f), Expr::BinOp(expr) => expr.format().fmt(f), Expr::UnaryOp(expr) => expr.format().fmt(f), @@ -82,10 +82,10 @@ impl FormatRule> for FormatExpr { Expr::Await(expr) => expr.format().fmt(f), Expr::Yield(expr) => expr.format().fmt(f), Expr::YieldFrom(expr) => expr.format().fmt(f), - Expr::Compare(expr) => expr.format().with_options(Some(parentheses)).fmt(f), + Expr::Compare(expr) => expr.format().fmt(f), Expr::Call(expr) => expr.format().fmt(f), Expr::FormattedValue(expr) => expr.format().fmt(f), - Expr::JoinedStr(expr) => expr.format().fmt(f), + Expr::FString(expr) => expr.format().fmt(f), Expr::Constant(expr) => expr.format().fmt(f), Expr::Attribute(expr) => expr.format().fmt(f), Expr::Subscript(expr) => expr.format().fmt(f), @@ -94,7 +94,7 @@ impl FormatRule> for FormatExpr { Expr::List(expr) => expr.format().fmt(f), Expr::Tuple(expr) => expr.format().fmt(f), Expr::Slice(expr) => expr.format().fmt(f), - Expr::LineMagic(_) => todo!(), + Expr::IpyEscapeCommand(_) => todo!(), }); let parenthesize = match parentheses { @@ -107,7 +107,15 @@ impl FormatRule> for FormatExpr { }; if parenthesize { - parenthesized("(", &format_expr, ")").fmt(f) + let comments = f.context().comments().clone(); + let open_parenthesis_comment = comments.open_parenthesis_comment(expression); + parenthesized("(", &format_expr, ")") + .with_dangling_comments( + open_parenthesis_comment + .map(std::slice::from_ref) + .unwrap_or_default(), + ) + .fmt(f) } else { let level = match f.context().node_level() { NodeLevel::TopLevel | NodeLevel::CompoundStatement => NodeLevel::Expression(None), @@ -162,6 +170,9 @@ impl Format> for MaybeParenthesizeExpression<'_> { let has_comments = comments.has_leading_comments(*expression) || comments.has_trailing_own_line_comments(*expression); + // If the expression has comments, we always want to preserve the parentheses. This also + // ensures that we correctly handle parenthesized comments, and don't need to worry about + // them in the implementation below. if preserve_parentheses || has_comments { return expression.format().with_options(Parentheses::Always).fmt(f); } @@ -175,26 +186,45 @@ impl Format> for MaybeParenthesizeExpression<'_> { needs_parentheses } } - Parenthesize::Optional | Parenthesize::IfBreaks => needs_parentheses, + Parenthesize::Optional + | Parenthesize::IfBreaks + | Parenthesize::IfBreaksOrIfRequired => needs_parentheses, }; - let can_omit_optional_parentheses = can_omit_optional_parentheses(expression, f.context()); match needs_parentheses { - OptionalParentheses::Multiline if *parenthesize != Parenthesize::IfRequired => { - if can_omit_optional_parentheses { - optional_parentheses(&expression.format().with_options(Parentheses::Never)) - .fmt(f) - } else { + OptionalParentheses::Multiline => match parenthesize { + Parenthesize::IfBreaksOrIfRequired => { parenthesize_if_expands(&expression.format().with_options(Parentheses::Never)) .fmt(f) } - } + Parenthesize::IfRequired => { + expression.format().with_options(Parentheses::Never).fmt(f) + } + Parenthesize::Optional | Parenthesize::IfBreaks => { + if can_omit_optional_parentheses(expression, f.context()) { + optional_parentheses(&expression.format().with_options(Parentheses::Never)) + .fmt(f) + } else { + parenthesize_if_expands( + &expression.format().with_options(Parentheses::Never), + ) + .fmt(f) + } + } + }, + OptionalParentheses::Never => match parenthesize { + Parenthesize::IfBreaksOrIfRequired => { + parenthesize_if_expands(&expression.format().with_options(Parentheses::Never)) + .fmt(f) + } + + Parenthesize::Optional | Parenthesize::IfBreaks | Parenthesize::IfRequired => { + expression.format().with_options(Parentheses::Never).fmt(f) + } + }, OptionalParentheses::Always => { expression.format().with_options(Parentheses::Always).fmt(f) } - OptionalParentheses::Never | OptionalParentheses::Multiline => { - expression.format().with_options(Parentheses::Never).fmt(f) - } } } } @@ -224,7 +254,7 @@ impl NeedsParentheses for Expr { Expr::Compare(expr) => expr.needs_parentheses(parent, context), Expr::Call(expr) => expr.needs_parentheses(parent, context), Expr::FormattedValue(expr) => expr.needs_parentheses(parent, context), - Expr::JoinedStr(expr) => expr.needs_parentheses(parent, context), + Expr::FString(expr) => expr.needs_parentheses(parent, context), Expr::Constant(expr) => expr.needs_parentheses(parent, context), Expr::Attribute(expr) => expr.needs_parentheses(parent, context), Expr::Subscript(expr) => expr.needs_parentheses(parent, context), @@ -233,7 +263,7 @@ impl NeedsParentheses for Expr { Expr::List(expr) => expr.needs_parentheses(parent, context), Expr::Tuple(expr) => expr.needs_parentheses(parent, context), Expr::Slice(expr) => expr.needs_parentheses(parent, context), - Expr::LineMagic(_) => todo!(), + Expr::IpyEscapeCommand(_) => todo!(), } } } @@ -264,10 +294,12 @@ impl<'ast> IntoFormat> for Expr { /// /// This mimics Black's [`_maybe_split_omitting_optional_parens`](https://github.com/psf/black/blob/d1248ca9beaf0ba526d265f4108836d89cf551b7/src/black/linegen.py#L746-L820) fn can_omit_optional_parentheses(expr: &Expr, context: &PyFormatContext) -> bool { - let mut visitor = CanOmitOptionalParenthesesVisitor::new(context.source()); + let mut visitor = CanOmitOptionalParenthesesVisitor::new(context); visitor.visit_subexpression(expr); - if visitor.max_priority_count > 1 { + if visitor.max_priority == OperatorPriority::None { + true + } else if visitor.max_priority_count > 1 { false } else if visitor.max_priority == OperatorPriority::Attribute { true @@ -275,13 +307,14 @@ fn can_omit_optional_parentheses(expr: &Expr, context: &PyFormatContext) -> bool // Only use the more complex IR when there is any expression that we can possibly split by false } else { - // Only use the layout if the first or last expression has parentheses of some sort. - let first_parenthesized = visitor - .first - .is_some_and(|first| has_parentheses(first, visitor.source)); - let last_parenthesized = visitor - .last - .is_some_and(|last| has_parentheses(last, visitor.source)); + // Only use the layout if the first or last expression has parentheses of some sort, and + // those parentheses are non-empty. + let first_parenthesized = visitor.first.is_some_and(|first| { + has_parentheses(first, context).is_some_and(|parentheses| parentheses.is_non_empty()) + }); + let last_parenthesized = visitor.last.is_some_and(|last| { + has_parentheses(last, context).is_some_and(|parentheses| parentheses.is_non_empty()) + }); first_parenthesized || last_parenthesized } } @@ -293,13 +326,13 @@ struct CanOmitOptionalParenthesesVisitor<'input> { any_parenthesized_expressions: bool, last: Option<&'input Expr>, first: Option<&'input Expr>, - source: &'input str, + context: &'input PyFormatContext<'input>, } impl<'input> CanOmitOptionalParenthesesVisitor<'input> { - fn new(source: &'input str) -> Self { + fn new(context: &'input PyFormatContext) -> Self { Self { - source, + context, max_priority: OperatorPriority::None, max_priority_count: 0, any_parenthesized_expressions: false, @@ -407,9 +440,12 @@ impl<'input> CanOmitOptionalParenthesesVisitor<'input> { attr: _, ctx: _, }) => { - if has_parentheses(value, self.source) { + self.visit_expr(value); + if has_parentheses(value, self.context).is_some() { self.update_max_priority(OperatorPriority::Attribute); } + self.last = Some(expr); + return; } Expr::NamedExpr(_) @@ -419,12 +455,12 @@ impl<'input> CanOmitOptionalParenthesesVisitor<'input> { | Expr::Yield(_) | Expr::YieldFrom(_) | Expr::FormattedValue(_) - | Expr::JoinedStr(_) + | Expr::FString(_) | Expr::Constant(_) | Expr::Starred(_) | Expr::Name(_) | Expr::Slice(_) => {} - Expr::LineMagic(_) => todo!(), + Expr::IpyEscapeCommand(_) => todo!(), }; walk_expr(self, expr); @@ -436,7 +472,7 @@ impl<'input> PreorderVisitor<'input> for CanOmitOptionalParenthesesVisitor<'inpu self.last = Some(expr); // Rule only applies for non-parenthesized expressions. - if is_expression_parenthesized(AnyNodeRef::from(expr), self.source) { + if is_expression_parenthesized(AnyNodeRef::from(expr), self.context.source()) { self.any_parenthesized_expressions = true; } else { self.visit_subexpression(expr); @@ -499,7 +535,7 @@ impl CallChainLayout { // ``` // f().g // ^^^ value - // data[:100].T` + // data[:100].T // ^^^^^^^^^^ value // ``` if matches!(value.as_ref(), Expr::Call(_) | Expr::Subscript(_)) { @@ -566,23 +602,95 @@ impl CallChainLayout { } } -fn has_parentheses(expr: &Expr, source: &str) -> bool { - has_own_parentheses(expr) || is_expression_parenthesized(AnyNodeRef::from(expr), source) +#[derive(Debug, Copy, Clone, PartialEq, Eq, is_macro::Is)] +pub(crate) enum OwnParentheses { + /// The node has parentheses, but they are empty (e.g., `[]` or `f()`). + Empty, + /// The node has parentheses, and they are non-empty (e.g., `[1]` or `f(1)`). + NonEmpty, } -pub(crate) const fn has_own_parentheses(expr: &Expr) -> bool { - matches!( - expr, - Expr::Dict(_) - | Expr::List(_) - | Expr::Tuple(_) - | Expr::Set(_) - | Expr::ListComp(_) - | Expr::SetComp(_) - | Expr::DictComp(_) - | Expr::Call(_) - | Expr::Subscript(_) - ) +/// Returns the [`OwnParentheses`] value for a given [`Expr`], to indicate whether it has its +/// own parentheses or is itself parenthesized. +/// +/// Differs from [`has_own_parentheses`] in that it returns [`OwnParentheses::NonEmpty`] for +/// parenthesized expressions, like `(1)` or `([1])`, regardless of whether those expression have +/// their _own_ parentheses. +fn has_parentheses(expr: &Expr, context: &PyFormatContext) -> Option { + let own_parentheses = has_own_parentheses(expr, context); + + // If the node has its own non-empty parentheses, we don't need to check for surrounding + // parentheses (e.g., `[1]`, or `([1])`). + if own_parentheses == Some(OwnParentheses::NonEmpty) { + return own_parentheses; + } + + // Otherwise, if the node lacks parentheses (e.g., `(1)`) or only contains empty parentheses + // (e.g., `([])`), we need to check for surrounding parentheses. + if is_expression_parenthesized(AnyNodeRef::from(expr), context.source()) { + return Some(OwnParentheses::NonEmpty); + } + + own_parentheses +} + +/// Returns the [`OwnParentheses`] value for a given [`Expr`], to indicate whether it has its +/// own parentheses, and whether those parentheses are empty. +/// +/// A node is considered to have its own parentheses if it includes a `[]`, `()`, or `{}` pair +/// that is inherent to the node (e.g., as in `f()`, `[]`, or `{1: 2}`, but not `(a.b.c)`). +/// +/// Parentheses are considered to be non-empty if they contain any elements or comments. +pub(crate) fn has_own_parentheses( + expr: &Expr, + context: &PyFormatContext, +) -> Option { + match expr { + // These expressions are always non-empty. + Expr::ListComp(_) | Expr::SetComp(_) | Expr::DictComp(_) | Expr::Subscript(_) => { + Some(OwnParentheses::NonEmpty) + } + + // These expressions must contain _some_ child or trivia token in order to be non-empty. + Expr::List(ast::ExprList { elts, .. }) + | Expr::Set(ast::ExprSet { elts, .. }) + | Expr::Tuple(ast::ExprTuple { elts, .. }) => { + if !elts.is_empty() + || context + .comments() + .has_dangling_comments(AnyNodeRef::from(expr)) + { + Some(OwnParentheses::NonEmpty) + } else { + Some(OwnParentheses::Empty) + } + } + + Expr::Dict(ast::ExprDict { keys, .. }) => { + if !keys.is_empty() + || context + .comments() + .has_dangling_comments(AnyNodeRef::from(expr)) + { + Some(OwnParentheses::NonEmpty) + } else { + Some(OwnParentheses::Empty) + } + } + Expr::Call(ast::ExprCall { arguments, .. }) => { + if !arguments.is_empty() + || context + .comments() + .has_dangling_comments(AnyNodeRef::from(expr)) + { + Some(OwnParentheses::NonEmpty) + } else { + Some(OwnParentheses::Empty) + } + } + + _ => None, + } } #[derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq)] diff --git a/crates/ruff_python_formatter/src/expression/parentheses.rs b/crates/ruff_python_formatter/src/expression/parentheses.rs index 0a0a04a411..3b52be652a 100644 --- a/crates/ruff_python_formatter/src/expression/parentheses.rs +++ b/crates/ruff_python_formatter/src/expression/parentheses.rs @@ -4,7 +4,9 @@ use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::Ranged; use ruff_python_trivia::{first_non_trivia_token, SimpleToken, SimpleTokenKind, SimpleTokenizer}; -use crate::comments::{dangling_comments, SourceComment}; +use crate::comments::{ + dangling_comments, dangling_open_parenthesis_comments, trailing_comments, SourceComment, +}; use crate::context::{NodeLevel, WithNodeLevel}; use crate::prelude::*; @@ -49,6 +51,11 @@ pub(crate) enum Parenthesize { /// * The expression is not enclosed by another parenthesized expression and it expands over multiple lines /// * The expression has leading or trailing comments. Adding parentheses is desired to prevent the comments from wandering. IfRequired, + + /// Parenthesizes the expression if the group doesn't fit on a line (e.g., even name expressions are parenthesized), or if + /// the expression doesn't break, but _does_ reports that it always requires parentheses in this position (e.g., walrus + /// operators in function return annotations). + IfBreaksOrIfRequired, } impl Parenthesize { @@ -116,25 +123,6 @@ where } } -/// Formats `content` enclosed by the `left` and `right` parentheses, along with any dangling -/// comments that on the parentheses themselves. -pub(crate) fn parenthesized_with_dangling_comments<'content, 'ast, Content>( - left: &'static str, - comments: &'content [SourceComment], - content: &'content Content, - right: &'static str, -) -> FormatParenthesized<'content, 'ast> -where - Content: Format>, -{ - FormatParenthesized { - left, - comments, - content: Argument::new(content), - right, - } -} - pub(crate) struct FormatParenthesized<'content, 'ast> { left: &'static str, comments: &'content [SourceComment], @@ -142,25 +130,34 @@ pub(crate) struct FormatParenthesized<'content, 'ast> { right: &'static str, } +impl<'content, 'ast> FormatParenthesized<'content, 'ast> { + /// Inserts any dangling comments that should be placed immediately after the open parenthesis. + /// For example: + /// ```python + /// [ # comment + /// 1, + /// 2, + /// 3, + /// ] + /// ``` + pub(crate) fn with_dangling_comments( + self, + comments: &'content [SourceComment], + ) -> FormatParenthesized<'content, 'ast> { + FormatParenthesized { comments, ..self } + } +} + impl<'ast> Format> for FormatParenthesized<'_, 'ast> { fn fmt(&self, f: &mut Formatter>) -> FormatResult<()> { let inner = format_with(|f| { - if self.comments.is_empty() { - group(&format_args![ - text(self.left), - &soft_block_indent(&Arguments::from(&self.content)), - text(self.right) - ]) - .fmt(f) - } else { - group(&format_args![ - text(self.left), - &line_suffix(&dangling_comments(self.comments)), - &group(&soft_block_indent(&Arguments::from(&self.content))), - text(self.right) - ]) - .fmt(f) - } + group(&format_args![ + text(self.left), + &dangling_open_parenthesis_comments(self.comments), + &soft_block_indent(&Arguments::from(&self.content)), + text(self.right) + ]) + .fmt(f) }); let current_level = f.context().node_level(); @@ -201,8 +198,8 @@ pub(crate) struct FormatOptionalParentheses<'content, 'ast> { impl<'ast> Format> for FormatOptionalParentheses<'_, 'ast> { fn fmt(&self, f: &mut Formatter>) -> FormatResult<()> { - // The group id is used as a condition in [`in_parentheses_only`] to create a conditional group - // that is only active if the optional parentheses group expands. + // The group id is used as a condition in [`in_parentheses_only_group`] to create a + // conditional group that is only active if the optional parentheses group expands. let parens_id = f.group_id("optional_parentheses"); let mut f = WithNodeLevel::new(NodeLevel::Expression(Some(parens_id)), f); @@ -271,7 +268,8 @@ impl<'ast> Format> for InParenthesesOnlyLineBreak { f.write_element(FormatElement::Line(match self { InParenthesesOnlyLineBreak::SoftLineBreak => LineMode::Soft, InParenthesesOnlyLineBreak::SoftLineBreakOrSpace => LineMode::SoftOrSpace, - })) + })); + Ok(()) } } } @@ -317,12 +315,74 @@ impl<'ast> Format> for FormatInParenthesesOnlyGroup<'_, 'a } } +/// Format comments inside empty parentheses, brackets or curly braces. +/// +/// Empty `()`, `[]` and `{}` are special because there can be dangling comments, and they can be in +/// two positions: +/// ```python +/// x = [ # end-of-line +/// # own line +/// ] +/// ``` +/// These comments are dangling because they can't be assigned to any element inside as they would +/// in all other cases. +pub(crate) fn empty_parenthesized<'content>( + left: &'static str, + comments: &'content [SourceComment], + right: &'static str, +) -> FormatEmptyParenthesized<'content> { + FormatEmptyParenthesized { + left, + comments, + right, + } +} + +pub(crate) struct FormatEmptyParenthesized<'content> { + left: &'static str, + comments: &'content [SourceComment], + right: &'static str, +} + +impl Format> for FormatEmptyParenthesized<'_> { + fn fmt(&self, f: &mut Formatter) -> FormatResult<()> { + let end_of_line_split = self + .comments + .partition_point(|comment| comment.line_position().is_end_of_line()); + debug_assert!(self.comments[end_of_line_split..] + .iter() + .all(|comment| comment.line_position().is_own_line())); + write!( + f, + [group(&format_args![ + text(self.left), + // end-of-line comments + trailing_comments(&self.comments[..end_of_line_split]), + // Avoid unstable formatting with + // ```python + // x = () - (# + // ) + // ``` + // Without this the comment would go after the empty tuple first, but still expand + // the bin op. In the second formatting pass they are trailing bin op comments + // so the bin op collapse. Suboptimally we keep parentheses around the bin op in + // either case. + (!self.comments[..end_of_line_split].is_empty()).then_some(hard_line_break()), + // own line comments, which need to be indented + soft_block_indent(&dangling_comments(&self.comments[end_of_line_split..])), + text(self.right) + ])] + ) + } +} + #[cfg(test)] mod tests { - use crate::expression::parentheses::is_expression_parenthesized; use ruff_python_ast::node::AnyNodeRef; use ruff_python_parser::parse_expression; + use crate::expression::parentheses::is_expression_parenthesized; + #[test] fn test_has_parentheses() { let expression = r#"(b().c("")).d()"#; diff --git a/crates/ruff_python_formatter/src/expression/string.rs b/crates/ruff_python_formatter/src/expression/string.rs index cd52d5a0c5..4d56ad66cb 100644 --- a/crates/ruff_python_formatter/src/expression/string.rs +++ b/crates/ruff_python_formatter/src/expression/string.rs @@ -1,16 +1,15 @@ use std::borrow::Cow; use bitflags::bitflags; + +use ruff_formatter::{format_args, write, FormatError}; use ruff_python_ast::node::AnyNodeRef; -use ruff_python_ast::{self as ast, ExprConstant, ExprJoinedStr, Ranged}; +use ruff_python_ast::{self as ast, ExprConstant, ExprFString, Ranged}; use ruff_python_parser::lexer::{lex_starts_at, LexicalError, LexicalErrorType}; use ruff_python_parser::{Mode, Tok}; use ruff_source_file::Locator; use ruff_text_size::{TextLen, TextRange, TextSize}; -use ruff_formatter::{format_args, write, FormatError}; -use ruff_python_ast::str::is_implicit_concatenation; - use crate::comments::{leading_comments, trailing_comments}; use crate::expression::parentheses::{ in_parentheses_only_group, in_parentheses_only_soft_line_break_or_space, @@ -27,15 +26,15 @@ enum Quoting { pub(super) enum AnyString<'a> { Constant(&'a ExprConstant), - JoinedStr(&'a ExprJoinedStr), + FString(&'a ExprFString), } impl<'a> AnyString<'a> { fn quoting(&self, locator: &Locator) -> Quoting { match self { Self::Constant(_) => Quoting::CanChange, - Self::JoinedStr(joined_str) => { - if joined_str.values.iter().any(|value| match value { + Self::FString(f_string) => { + if f_string.values.iter().any(|value| match value { Expr::FormattedValue(ast::ExprFormattedValue { range, .. }) => { let string_content = locator.slice(*range); string_content.contains(['"', '\'']) @@ -49,13 +48,24 @@ impl<'a> AnyString<'a> { } } } + + /// Returns `true` if the string is implicitly concatenated. + fn implicit_concatenated(&self) -> bool { + match self { + Self::Constant(ExprConstant { value, .. }) => value.is_implicit_concatenated(), + Self::FString(ExprFString { + implicit_concatenated, + .. + }) => *implicit_concatenated, + } + } } impl Ranged for AnyString<'_> { fn range(&self) -> TextRange { match self { Self::Constant(expr) => expr.range(), - Self::JoinedStr(expr) => expr.range(), + Self::FString(expr) => expr.range(), } } } @@ -64,7 +74,7 @@ impl<'a> From<&AnyString<'a>> for AnyNodeRef<'a> { fn from(value: &AnyString<'a>) -> Self { match value { AnyString::Constant(expr) => AnyNodeRef::ExprConstant(expr), - AnyString::JoinedStr(expr) => AnyNodeRef::ExprJoinedStr(expr), + AnyString::FString(expr) => AnyNodeRef::ExprFString(expr), } } } @@ -78,7 +88,7 @@ pub(super) struct FormatString<'a> { pub enum StringLayout { #[default] Default, - + DocString, ImplicitConcatenatedBinaryLeftSide, } @@ -103,16 +113,28 @@ impl<'a> Format> for FormatString<'a> { fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { match self.layout { StringLayout::Default => { - let string_range = self.string.range(); - let string_content = f.context().locator().slice(string_range); - - if is_implicit_concatenation(string_content) { + if self.string.implicit_concatenated() { in_parentheses_only_group(&FormatStringContinuation::new(self.string)).fmt(f) } else { - FormatStringPart::new(string_range, self.string.quoting(&f.context().locator())) - .fmt(f) + FormatStringPart::new( + self.string.range(), + self.string.quoting(&f.context().locator()), + &f.context().locator(), + f.options().quote_style(), + ) + .fmt(f) } } + StringLayout::DocString => { + let string_part = FormatStringPart::new( + self.string.range(), + // f-strings can't be docstrings + Quoting::CanChange, + &f.context().locator(), + f.options().quote_style(), + ); + format_docstring(&string_part, f) + } StringLayout::ImplicitConcatenatedBinaryLeftSide => { FormatStringContinuation::new(self.string).fmt(f) } @@ -137,6 +159,7 @@ impl Format> for FormatStringContinuation<'_> { fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { let comments = f.context().comments().clone(); let locator = f.context().locator(); + let quote_style = f.options().quote_style(); let mut dangling_comments = comments.dangling_comments(self.string); let string_range = self.string.range(); @@ -213,7 +236,12 @@ impl Format> for FormatStringContinuation<'_> { joiner.entry(&format_args![ line_suffix_boundary(), leading_comments(leading_part_comments), - FormatStringPart::new(token_range, self.string.quoting(&locator)), + FormatStringPart::new( + token_range, + self.string.quoting(&locator), + &locator, + quote_style, + ), trailing_comments(trailing_part_comments) ]); @@ -235,63 +263,67 @@ impl Format> for FormatStringContinuation<'_> { } struct FormatStringPart { - part_range: TextRange, - quoting: Quoting, + prefix: StringPrefix, + preferred_quotes: StringQuotes, + range: TextRange, + is_raw_string: bool, } impl FormatStringPart { - const fn new(range: TextRange, quoting: Quoting) -> Self { + fn new(range: TextRange, quoting: Quoting, locator: &Locator, quote_style: QuoteStyle) -> Self { + let string_content = locator.slice(range); + + let prefix = StringPrefix::parse(string_content); + let after_prefix = &string_content[usize::from(prefix.text_len())..]; + + let quotes = + StringQuotes::parse(after_prefix).expect("Didn't find string quotes after prefix"); + let relative_raw_content_range = TextRange::new( + prefix.text_len() + quotes.text_len(), + string_content.text_len() - quotes.text_len(), + ); + let raw_content_range = relative_raw_content_range + range.start(); + + let raw_content = &string_content[relative_raw_content_range]; + let is_raw_string = prefix.is_raw_string(); + let preferred_quotes = match quoting { + Quoting::Preserve => quotes, + Quoting::CanChange => { + if is_raw_string { + preferred_quotes_raw(raw_content, quotes, quote_style) + } else { + preferred_quotes(raw_content, quotes, quote_style) + } + } + }; + Self { - part_range: range, - quoting, + prefix, + range: raw_content_range, + preferred_quotes, + is_raw_string, } } } impl Format> for FormatStringPart { fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { - let string_content = f.context().locator().slice(self.part_range); - - let prefix = StringPrefix::parse(string_content); - let after_prefix = &string_content[usize::from(prefix.text_len())..]; - - let quotes = StringQuotes::parse(after_prefix).ok_or(FormatError::syntax_error( - "Didn't find string quotes after prefix", - ))?; - let relative_raw_content_range = TextRange::new( - prefix.text_len() + quotes.text_len(), - string_content.text_len() - quotes.text_len(), + let (normalized, contains_newlines) = normalize_string( + f.context().locator().slice(self.range), + self.preferred_quotes, + self.is_raw_string, ); - let raw_content_range = relative_raw_content_range + self.part_range.start(); - - let raw_content = &string_content[relative_raw_content_range]; - let is_raw_string = prefix.is_raw_string(); - let preferred_quotes = match self.quoting { - Quoting::Preserve => quotes, - Quoting::CanChange => { - if is_raw_string { - preferred_quotes_raw(raw_content, quotes, f.options().quote_style()) - } else { - preferred_quotes(raw_content, quotes, f.options().quote_style()) - } - } - }; - - write!(f, [prefix, preferred_quotes])?; - - let (normalized, contains_newlines) = - normalize_string(raw_content, preferred_quotes, is_raw_string); + write!(f, [self.prefix, self.preferred_quotes])?; match normalized { Cow::Borrowed(_) => { - source_text_slice(raw_content_range, contains_newlines).fmt(f)?; + source_text_slice(self.range, contains_newlines).fmt(f)?; } Cow::Owned(normalized) => { - dynamic_text(&normalized, Some(raw_content_range.start())).fmt(f)?; + dynamic_text(&normalized, Some(self.range.start())).fmt(f)?; } } - - preferred_quotes.fmt(f) + self.preferred_quotes.fmt(f) } } @@ -639,3 +671,311 @@ fn normalize_string( (normalized, newlines) } + +/// For docstring indentation, black counts spaces as 1 and tabs by increasing the indentation up +/// to the next multiple of 8. This is effectively a port of +/// [`str.expandtabs`](https://docs.python.org/3/library/stdtypes.html#str.expandtabs), +/// which black [calls with the default tab width of 8](https://github.com/psf/black/blob/c36e468794f9256d5e922c399240d49782ba04f1/src/black/strings.py#L61) +fn count_indentation_like_black(line: &str) -> TextSize { + let tab_width: u32 = 8; + let mut indentation = TextSize::default(); + for char in line.chars() { + if char == '\t' { + // Pad to the next multiple of tab_width + indentation += TextSize::from(tab_width - (indentation.to_u32().rem_euclid(tab_width))); + } else if char.is_whitespace() { + indentation += char.text_len(); + } else { + return indentation; + } + } + indentation +} + +/// Format a docstring by trimming whitespace and adjusting the indentation. +/// +/// Summary of changes we make: +/// * Normalize the string like all other strings +/// * Ignore docstring that have an escaped newline +/// * Trim all trailing whitespace, except for a chaperone space that avoids quotes or backslashes +/// in the last line. +/// * Trim leading whitespace on the first line, again except for a chaperone space +/// * If there is only content in the first line and after that only whitespace, collapse the +/// docstring into one line +/// * Adjust the indentation (see below) +/// +/// # Docstring indentation +/// +/// Unlike any other string, like black we change the indentation of docstring lines. +/// +/// We want to preserve the indentation inside the docstring relative to the suite statement/block +/// indent that the docstring statement is in, but also want to apply the change of the outer +/// indentation in the docstring, e.g. +/// ```python +/// def sparkle_sky(): +/// """Make a pretty sparkly sky. +/// * * ✨ *. . +/// * * ✨ . +/// . * . ✨ * . . +/// """ +/// ``` +/// should become +/// ```python +/// def sparkle_sky(): +/// """Make a pretty sparkly sky. +/// * * ✨ *. . +/// * * ✨ . +/// . * . ✨ * . . +/// """ +/// ``` +/// We can't compute the full indentation here since we don't know what the block indent of +/// the doc comment will be yet and which we can only have added by formatting each line +/// separately with a hard line break. This means we need to strip shared indentation from +/// docstring while preserving the in-docstring bigger-than-suite-statement indentation. Example: +/// ```python +/// def f(): +/// """first line +/// line a +/// line b +/// """ +/// ``` +/// The docstring indentation is 2, the block indents will change this to 4 (but we can't +/// determine this at this point). The indentation of line a is 2, so we trim ` line a` +/// to `line a`. For line b it's 5, so we trim it to `line b` and pad with 5-2=3 spaces to +/// ` line b`. The closing quotes, being on their own line, are stripped get only the +/// default indentation. Fully formatted: +/// ```python +/// def f(): +/// """first line +/// line a +/// line b +/// """ +/// ``` +/// +/// Tabs are counted by padding them to the next multiple of 8 according to +/// [`str.expandtabs`](https://docs.python.org/3/library/stdtypes.html#str.expandtabs). When +/// we see indentation that contains a tab or any other none ascii-space whitespace we rewrite the +/// string. +/// +/// Additionally, if any line in the docstring has less indentation than the docstring +/// (effectively a negative indentation wrt. to the current level), we pad all lines to the +/// level of the docstring with spaces. +/// ```python +/// def f(): +/// """first line +/// line a +/// line b +/// line c +/// """ +/// ``` +/// Here line a is 3 columns negatively indented, so we pad all lines by an extra 3 spaces: +/// ```python +/// def f(): +/// """first line +/// line a +/// line b +/// line c +/// """ +/// ``` +fn format_docstring(string_part: &FormatStringPart, f: &mut PyFormatter) -> FormatResult<()> { + let locator = f.context().locator(); + + // Black doesn't change the indentation of docstrings that contain an escaped newline + if locator.slice(string_part.range).contains("\\\n") { + return string_part.fmt(f); + } + + let (normalized, _) = normalize_string( + locator.slice(string_part.range), + string_part.preferred_quotes, + string_part.is_raw_string, + ); + // is_borrowed is unstable :/ + let already_normalized = matches!(normalized, Cow::Borrowed(_)); + + let mut lines = normalized.lines().peekable(); + + // Start the string + write!( + f, + [ + source_position(string_part.range.start()), + string_part.prefix, + string_part.preferred_quotes + ] + )?; + // We track where in the source docstring we are (in source code byte offsets) + let mut offset = string_part.range.start(); + + // The first line directly after the opening quotes has different rules than the rest, mainly + // that we remove all leading whitespace as there's no indentation + let first = lines.next().unwrap_or_default(); + // Black trims whitespace using [`str.strip()`](https://docs.python.org/3/library/stdtypes.html#str.strip) + // https://github.com/psf/black/blob/b4dca26c7d93f930bbd5a7b552807370b60d4298/src/black/strings.py#L77-L85 + // So we use the unicode whitespace definition through `trim_{start,end}` instead of the python + // tokenizer whitespace definition in `trim_whitespace_{start,end}`. + let trim_end = first.trim_end(); + let trim_both = trim_end.trim_start(); + + // Edge case: The first line is `""" "content`, so we need to insert chaperone space that keep + // inner quotes and closing quotes from getting to close to avoid `""""content` + if trim_both.starts_with(string_part.preferred_quotes.style.as_char()) { + space().fmt(f)?; + } + + if !trim_end.is_empty() { + // For the first line of the docstring we strip the leading and trailing whitespace, e.g. + // `""" content ` to `"""content` + let leading_whitespace = trim_end.text_len() - trim_both.text_len(); + let trimmed_line_range = + TextRange::at(offset, trim_end.text_len()).add_start(leading_whitespace); + if already_normalized { + source_text_slice(trimmed_line_range, ContainsNewlines::No).fmt(f)?; + } else { + dynamic_text(trim_both, Some(trimmed_line_range.start())).fmt(f)?; + } + } + offset += first.text_len(); + + // Check if we have a single line (or empty) docstring + if normalized[first.len()..].trim().is_empty() { + // For `"""\n"""` or other whitespace between the quotes, black keeps a single whitespace, + // but `""""""` doesn't get one inserted. + if needs_chaperone_space(string_part, trim_end) + || (trim_end.is_empty() && !normalized.is_empty()) + { + space().fmt(f)?; + } + string_part.preferred_quotes.fmt(f)?; + return Ok(()); + } + + hard_line_break().fmt(f)?; + // We know that the normalized string has \n line endings + offset += "\n".text_len(); + + // If some line of the docstring is less indented than the function body, we pad all lines to + // align it with the docstring statement. Conversely, if all lines are over-indented, we strip + // the extra indentation. We call this stripped indentation since it's relative to the block + // indent printer-made indentation. + let stripped_indentation = lines + .clone() + // We don't want to count whitespace-only lines as miss-indented + .filter(|line| !line.trim().is_empty()) + .map(count_indentation_like_black) + .min() + .unwrap_or_default(); + + while let Some(line) = lines.next() { + let is_last = lines.peek().is_none(); + format_docstring_line( + line, + is_last, + offset, + stripped_indentation, + already_normalized, + f, + )?; + // We know that the normalized string has \n line endings + offset += line.text_len() + "\n".text_len(); + } + + // Same special case in the last line as for the first line + let trim_end = normalized + .as_ref() + .trim_end_matches(|c: char| c.is_whitespace() && c != '\n'); + if needs_chaperone_space(string_part, trim_end) { + space().fmt(f)?; + } + + write!( + f, + [ + string_part.preferred_quotes, + source_position(string_part.range.end()) + ] + ) +} + +/// If the last line of the docstring is `content" """` or `content\ """`, we need a chaperone space +/// that avoids `content""""` and `content\"""`. This does only applies to un-escaped backslashes, +/// so `content\\ """` doesn't need a space while `content\\\ """` does. +fn needs_chaperone_space(string_part: &FormatStringPart, trim_end: &str) -> bool { + trim_end.ends_with(string_part.preferred_quotes.style.as_char()) + || trim_end.chars().rev().take_while(|c| *c == '\\').count() % 2 == 1 +} + +/// Format a docstring line that is not the first line +fn format_docstring_line( + line: &str, + is_last: bool, + offset: TextSize, + stripped_indentation: TextSize, + already_normalized: bool, + f: &mut PyFormatter, +) -> FormatResult<()> { + let trim_end = line.trim_end(); + if trim_end.is_empty() { + return if is_last { + // If the doc string ends with ` """`, the last line is ` `, but we don't want to + // insert an empty line (but close the docstring) + Ok(()) + } else { + empty_line().fmt(f) + }; + } + + let tab_or_non_ascii_space = trim_end + .chars() + .take_while(|c| c.is_whitespace()) + .any(|c| c != ' '); + + if tab_or_non_ascii_space { + // We strip the indentation that is shared with the docstring statement, unless a line + // was indented less than the docstring statement, in which we strip only this much + // indentation to implicitly pad all lines by the difference, or all lines were + // overindented, in which case we strip the additional whitespace (see example in + // [`format_docstring`] doc comment). We then prepend the in-docstring indentation to the + // string. + let indent_len = count_indentation_like_black(trim_end) - stripped_indentation; + let in_docstring_indent = " ".repeat(indent_len.to_usize()) + trim_end.trim_start(); + dynamic_text(&in_docstring_indent, Some(offset)).fmt(f)?; + } else { + // Take the string with the trailing whitespace removed, then also skip the leading + // whitespace + let trimmed_line_range = + TextRange::at(offset, trim_end.text_len()).add_start(stripped_indentation); + if already_normalized { + source_text_slice(trimmed_line_range, ContainsNewlines::No).fmt(f)?; + } else { + // All indents are ascii spaces, so the slicing is correct + dynamic_text( + &trim_end[stripped_indentation.to_usize()..], + Some(trimmed_line_range.start()), + ) + .fmt(f)?; + } + } + + // We handled the case that the closing quotes are on their own line above (the last line is + // empty except for whitespace). If they are on the same line as content, we don't insert a line + // break. + if !is_last { + hard_line_break().fmt(f)?; + } + + Ok(()) +} + +#[cfg(test)] +mod tests { + use crate::expression::string::count_indentation_like_black; + + #[test] + fn test_indentation_like_black() { + assert_eq!(count_indentation_like_black("\t \t \t").to_u32(), 24); + assert_eq!(count_indentation_like_black("\t \t").to_u32(), 24); + assert_eq!(count_indentation_like_black("\t\t\t").to_u32(), 24); + assert_eq!(count_indentation_like_black(" ").to_u32(), 4); + } +} diff --git a/crates/ruff_python_formatter/src/generated.rs b/crates/ruff_python_formatter/src/generated.rs index 1871e09bd5..5541df5c4b 100644 --- a/crates/ruff_python_formatter/src/generated.rs +++ b/crates/ruff_python_formatter/src/generated.rs @@ -108,42 +108,6 @@ impl<'ast> IntoFormat> for ast::StmtFunctionDef { } } -impl FormatRule> - for crate::statement::stmt_async_function_def::FormatStmtAsyncFunctionDef -{ - #[inline] - fn fmt(&self, node: &ast::StmtAsyncFunctionDef, f: &mut PyFormatter) -> FormatResult<()> { - FormatNodeRule::::fmt(self, node, f) - } -} -impl<'ast> AsFormat> for ast::StmtAsyncFunctionDef { - type Format<'a> = FormatRefWithRule< - 'a, - ast::StmtAsyncFunctionDef, - crate::statement::stmt_async_function_def::FormatStmtAsyncFunctionDef, - PyFormatContext<'ast>, - >; - fn format(&self) -> Self::Format<'_> { - FormatRefWithRule::new( - self, - crate::statement::stmt_async_function_def::FormatStmtAsyncFunctionDef::default(), - ) - } -} -impl<'ast> IntoFormat> for ast::StmtAsyncFunctionDef { - type Format = FormatOwnedWithRule< - ast::StmtAsyncFunctionDef, - crate::statement::stmt_async_function_def::FormatStmtAsyncFunctionDef, - PyFormatContext<'ast>, - >; - fn into_format(self) -> Self::Format { - FormatOwnedWithRule::new( - self, - crate::statement::stmt_async_function_def::FormatStmtAsyncFunctionDef::default(), - ) - } -} - impl FormatRule> for crate::statement::stmt_class_def::FormatStmtClassDef { @@ -424,42 +388,6 @@ impl<'ast> IntoFormat> for ast::StmtFor { } } -impl FormatRule> - for crate::statement::stmt_async_for::FormatStmtAsyncFor -{ - #[inline] - fn fmt(&self, node: &ast::StmtAsyncFor, f: &mut PyFormatter) -> FormatResult<()> { - FormatNodeRule::::fmt(self, node, f) - } -} -impl<'ast> AsFormat> for ast::StmtAsyncFor { - type Format<'a> = FormatRefWithRule< - 'a, - ast::StmtAsyncFor, - crate::statement::stmt_async_for::FormatStmtAsyncFor, - PyFormatContext<'ast>, - >; - fn format(&self) -> Self::Format<'_> { - FormatRefWithRule::new( - self, - crate::statement::stmt_async_for::FormatStmtAsyncFor::default(), - ) - } -} -impl<'ast> IntoFormat> for ast::StmtAsyncFor { - type Format = FormatOwnedWithRule< - ast::StmtAsyncFor, - crate::statement::stmt_async_for::FormatStmtAsyncFor, - PyFormatContext<'ast>, - >; - fn into_format(self) -> Self::Format { - FormatOwnedWithRule::new( - self, - crate::statement::stmt_async_for::FormatStmtAsyncFor::default(), - ) - } -} - impl FormatRule> for crate::statement::stmt_while::FormatStmtWhile { @@ -554,42 +482,6 @@ impl<'ast> IntoFormat> for ast::StmtWith { } } -impl FormatRule> - for crate::statement::stmt_async_with::FormatStmtAsyncWith -{ - #[inline] - fn fmt(&self, node: &ast::StmtAsyncWith, f: &mut PyFormatter) -> FormatResult<()> { - FormatNodeRule::::fmt(self, node, f) - } -} -impl<'ast> AsFormat> for ast::StmtAsyncWith { - type Format<'a> = FormatRefWithRule< - 'a, - ast::StmtAsyncWith, - crate::statement::stmt_async_with::FormatStmtAsyncWith, - PyFormatContext<'ast>, - >; - fn format(&self) -> Self::Format<'_> { - FormatRefWithRule::new( - self, - crate::statement::stmt_async_with::FormatStmtAsyncWith::default(), - ) - } -} -impl<'ast> IntoFormat> for ast::StmtAsyncWith { - type Format = FormatOwnedWithRule< - ast::StmtAsyncWith, - crate::statement::stmt_async_with::FormatStmtAsyncWith, - PyFormatContext<'ast>, - >; - fn into_format(self) -> Self::Format { - FormatOwnedWithRule::new( - self, - crate::statement::stmt_async_with::FormatStmtAsyncWith::default(), - ) - } -} - impl FormatRule> for crate::statement::stmt_match::FormatStmtMatch { @@ -690,42 +582,6 @@ impl<'ast> IntoFormat> for ast::StmtTry { } } -impl FormatRule> - for crate::statement::stmt_try_star::FormatStmtTryStar -{ - #[inline] - fn fmt(&self, node: &ast::StmtTryStar, f: &mut PyFormatter) -> FormatResult<()> { - FormatNodeRule::::fmt(self, node, f) - } -} -impl<'ast> AsFormat> for ast::StmtTryStar { - type Format<'a> = FormatRefWithRule< - 'a, - ast::StmtTryStar, - crate::statement::stmt_try_star::FormatStmtTryStar, - PyFormatContext<'ast>, - >; - fn format(&self) -> Self::Format<'_> { - FormatRefWithRule::new( - self, - crate::statement::stmt_try_star::FormatStmtTryStar::default(), - ) - } -} -impl<'ast> IntoFormat> for ast::StmtTryStar { - type Format = FormatOwnedWithRule< - ast::StmtTryStar, - crate::statement::stmt_try_star::FormatStmtTryStar, - PyFormatContext<'ast>, - >; - fn into_format(self) -> Self::Format { - FormatOwnedWithRule::new( - self, - crate::statement::stmt_try_star::FormatStmtTryStar::default(), - ) - } -} - impl FormatRule> for crate::statement::stmt_assert::FormatStmtAssert { @@ -1038,38 +894,38 @@ impl<'ast> IntoFormat> for ast::StmtContinue { } } -impl FormatRule> - for crate::statement::stmt_line_magic::FormatStmtLineMagic +impl FormatRule> + for crate::statement::stmt_ipy_escape_command::FormatStmtIpyEscapeCommand { #[inline] - fn fmt(&self, node: &ast::StmtLineMagic, f: &mut PyFormatter) -> FormatResult<()> { - FormatNodeRule::::fmt(self, node, f) + fn fmt(&self, node: &ast::StmtIpyEscapeCommand, f: &mut PyFormatter) -> FormatResult<()> { + FormatNodeRule::::fmt(self, node, f) } } -impl<'ast> AsFormat> for ast::StmtLineMagic { +impl<'ast> AsFormat> for ast::StmtIpyEscapeCommand { type Format<'a> = FormatRefWithRule< 'a, - ast::StmtLineMagic, - crate::statement::stmt_line_magic::FormatStmtLineMagic, + ast::StmtIpyEscapeCommand, + crate::statement::stmt_ipy_escape_command::FormatStmtIpyEscapeCommand, PyFormatContext<'ast>, >; fn format(&self) -> Self::Format<'_> { FormatRefWithRule::new( self, - crate::statement::stmt_line_magic::FormatStmtLineMagic::default(), + crate::statement::stmt_ipy_escape_command::FormatStmtIpyEscapeCommand::default(), ) } } -impl<'ast> IntoFormat> for ast::StmtLineMagic { +impl<'ast> IntoFormat> for ast::StmtIpyEscapeCommand { type Format = FormatOwnedWithRule< - ast::StmtLineMagic, - crate::statement::stmt_line_magic::FormatStmtLineMagic, + ast::StmtIpyEscapeCommand, + crate::statement::stmt_ipy_escape_command::FormatStmtIpyEscapeCommand, PyFormatContext<'ast>, >; fn into_format(self) -> Self::Format { FormatOwnedWithRule::new( self, - crate::statement::stmt_line_magic::FormatStmtLineMagic::default(), + crate::statement::stmt_ipy_escape_command::FormatStmtIpyEscapeCommand::default(), ) } } @@ -1714,38 +1570,38 @@ impl<'ast> IntoFormat> for ast::ExprFormattedValue { } } -impl FormatRule> - for crate::expression::expr_joined_str::FormatExprJoinedStr +impl FormatRule> + for crate::expression::expr_f_string::FormatExprFString { #[inline] - fn fmt(&self, node: &ast::ExprJoinedStr, f: &mut PyFormatter) -> FormatResult<()> { - FormatNodeRule::::fmt(self, node, f) + fn fmt(&self, node: &ast::ExprFString, f: &mut PyFormatter) -> FormatResult<()> { + FormatNodeRule::::fmt(self, node, f) } } -impl<'ast> AsFormat> for ast::ExprJoinedStr { +impl<'ast> AsFormat> for ast::ExprFString { type Format<'a> = FormatRefWithRule< 'a, - ast::ExprJoinedStr, - crate::expression::expr_joined_str::FormatExprJoinedStr, + ast::ExprFString, + crate::expression::expr_f_string::FormatExprFString, PyFormatContext<'ast>, >; fn format(&self) -> Self::Format<'_> { FormatRefWithRule::new( self, - crate::expression::expr_joined_str::FormatExprJoinedStr::default(), + crate::expression::expr_f_string::FormatExprFString::default(), ) } } -impl<'ast> IntoFormat> for ast::ExprJoinedStr { +impl<'ast> IntoFormat> for ast::ExprFString { type Format = FormatOwnedWithRule< - ast::ExprJoinedStr, - crate::expression::expr_joined_str::FormatExprJoinedStr, + ast::ExprFString, + crate::expression::expr_f_string::FormatExprFString, PyFormatContext<'ast>, >; fn into_format(self) -> Self::Format { FormatOwnedWithRule::new( self, - crate::expression::expr_joined_str::FormatExprJoinedStr::default(), + crate::expression::expr_f_string::FormatExprFString::default(), ) } } @@ -2038,38 +1894,38 @@ impl<'ast> IntoFormat> for ast::ExprSlice { } } -impl FormatRule> - for crate::expression::expr_line_magic::FormatExprLineMagic +impl FormatRule> + for crate::expression::expr_ipy_escape_command::FormatExprIpyEscapeCommand { #[inline] - fn fmt(&self, node: &ast::ExprLineMagic, f: &mut PyFormatter) -> FormatResult<()> { - FormatNodeRule::::fmt(self, node, f) + fn fmt(&self, node: &ast::ExprIpyEscapeCommand, f: &mut PyFormatter) -> FormatResult<()> { + FormatNodeRule::::fmt(self, node, f) } } -impl<'ast> AsFormat> for ast::ExprLineMagic { +impl<'ast> AsFormat> for ast::ExprIpyEscapeCommand { type Format<'a> = FormatRefWithRule< 'a, - ast::ExprLineMagic, - crate::expression::expr_line_magic::FormatExprLineMagic, + ast::ExprIpyEscapeCommand, + crate::expression::expr_ipy_escape_command::FormatExprIpyEscapeCommand, PyFormatContext<'ast>, >; fn format(&self) -> Self::Format<'_> { FormatRefWithRule::new( self, - crate::expression::expr_line_magic::FormatExprLineMagic::default(), + crate::expression::expr_ipy_escape_command::FormatExprIpyEscapeCommand::default(), ) } } -impl<'ast> IntoFormat> for ast::ExprLineMagic { +impl<'ast> IntoFormat> for ast::ExprIpyEscapeCommand { type Format = FormatOwnedWithRule< - ast::ExprLineMagic, - crate::expression::expr_line_magic::FormatExprLineMagic, + ast::ExprIpyEscapeCommand, + crate::expression::expr_ipy_escape_command::FormatExprIpyEscapeCommand, PyFormatContext<'ast>, >; fn into_format(self) -> Self::Format { FormatOwnedWithRule::new( self, - crate::expression::expr_line_magic::FormatExprLineMagic::default(), + crate::expression::expr_ipy_escape_command::FormatExprIpyEscapeCommand::default(), ) } } diff --git a/crates/ruff_python_formatter/src/lib.rs b/crates/ruff_python_formatter/src/lib.rs index 0ade2fad54..d088569905 100644 --- a/crates/ruff_python_formatter/src/lib.rs +++ b/crates/ruff_python_formatter/src/lib.rs @@ -1,26 +1,24 @@ -use crate::comments::{ - dangling_node_comments, leading_node_comments, trailing_node_comments, Comments, -}; -use crate::context::PyFormatContext; -pub use crate::options::{MagicTrailingComma, PyFormatOptions, QuoteStyle}; +use thiserror::Error; + use ruff_formatter::format_element::tag; -use ruff_formatter::prelude::{ - dynamic_text, source_position, source_text_slice, text, ContainsNewlines, Formatter, Tag, -}; +use ruff_formatter::prelude::{source_position, text, Formatter, Tag}; use ruff_formatter::{ - format, normalize_newlines, write, Buffer, Format, FormatElement, FormatError, FormatResult, - PrintError, + format, write, Buffer, Format, FormatElement, FormatError, FormatResult, PrintError, }; use ruff_formatter::{Formatted, Printed, SourceCode}; -use ruff_python_ast::node::{AnyNodeRef, AstNode, NodeKind}; -use ruff_python_ast::{Mod, Ranged}; +use ruff_python_ast::node::{AnyNodeRef, AstNode}; +use ruff_python_ast::Mod; use ruff_python_index::{CommentRanges, CommentRangesBuilder}; use ruff_python_parser::lexer::{lex, LexicalError}; use ruff_python_parser::{parse_tokens, Mode, ParseError}; use ruff_source_file::Locator; -use ruff_text_size::{TextLen, TextRange}; -use std::borrow::Cow; -use thiserror::Error; +use ruff_text_size::TextLen; + +use crate::comments::{ + dangling_comments, leading_comments, trailing_comments, Comments, SourceComment, +}; +use crate::context::PyFormatContext; +pub use crate::options::{MagicTrailingComma, PyFormatOptions, QuoteStyle}; pub(crate) mod builders; pub mod cli; @@ -35,6 +33,7 @@ pub(crate) mod pattern; mod prelude; pub(crate) mod statement; pub(crate) mod type_param; +mod verbatim; include!("../../ruff_formatter/shared_traits.rs"); @@ -47,30 +46,33 @@ where N: AstNode, { fn fmt(&self, node: &N, f: &mut PyFormatter) -> FormatResult<()> { - self.fmt_leading_comments(node, f)?; - self.fmt_node(node, f)?; - self.fmt_dangling_comments(node, f)?; - self.fmt_trailing_comments(node, f) - } + let comments = f.context().comments().clone(); + + let node_comments = comments.leading_dangling_trailing_comments(node.as_any_node_ref()); + + write!( + f, + [ + leading_comments(node_comments.leading), + source_position(node.start()) + ] + )?; - /// Formats the node without comments. Ignores any suppression comments. - fn fmt_node(&self, node: &N, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [source_position(node.start())])?; self.fmt_fields(node, f)?; - write!(f, [source_position(node.end())]) + self.fmt_dangling_comments(node_comments.dangling, f)?; + + write!( + f, + [ + source_position(node.end()), + trailing_comments(node_comments.trailing) + ] + ) } /// Formats the node's fields. fn fmt_fields(&self, item: &N, f: &mut PyFormatter) -> FormatResult<()>; - /// Formats the [leading comments](comments#leading-comments) of the node. - /// - /// You may want to override this method if you want to manually handle the formatting of comments - /// inside of the `fmt_fields` method or customize the formatting of the leading comments. - fn fmt_leading_comments(&self, node: &N, f: &mut PyFormatter) -> FormatResult<()> { - leading_node_comments(node).fmt(f) - } - /// Formats the [dangling comments](comments#dangling-comments) of the node. /// /// You should override this method if the node handled by this rule can have dangling comments because the @@ -78,16 +80,12 @@ where /// no comments are dropped. /// /// A node can have dangling comments if all its children are tokens or if all node children are optional. - fn fmt_dangling_comments(&self, node: &N, f: &mut PyFormatter) -> FormatResult<()> { - dangling_node_comments(node).fmt(f) - } - - /// Formats the [trailing comments](comments#trailing-comments) of the node. - /// - /// You may want to override this method if you want to manually handle the formatting of comments - /// inside of the `fmt_fields` method or customize the formatting of the trailing comments. - fn fmt_trailing_comments(&self, node: &N, f: &mut PyFormatter) -> FormatResult<()> { - trailing_node_comments(node).fmt(f) + fn fmt_dangling_comments( + &self, + dangling_node_comments: &[SourceComment], + f: &mut PyFormatter, + ) -> FormatResult<()> { + dangling_comments(dangling_node_comments).fmt(f) } } @@ -150,112 +148,68 @@ pub fn format_node<'a>( let locator = Locator::new(source); - format!( + let formatted = format!( PyFormatContext::new(options, locator.contents(), comments), [root.format()] - ) + )?; + formatted + .context() + .comments() + .assert_formatted_all_comments(SourceCode::new(source)); + Ok(formatted) } -pub(crate) struct NotYetImplemented(NodeKind); +pub(crate) struct NotYetImplementedCustomText<'a> { + text: &'static str, + node: AnyNodeRef<'a>, +} /// Formats a placeholder for nodes that have not yet been implemented -pub(crate) fn not_yet_implemented<'a, T>(node: T) -> NotYetImplemented +pub(crate) fn not_yet_implemented_custom_text<'a, T>( + text: &'static str, + node: T, +) -> NotYetImplementedCustomText<'a> where T: Into>, { - NotYetImplemented(node.into().kind()) -} - -impl Format> for NotYetImplemented { - fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { - let text = std::format!("NOT_YET_IMPLEMENTED_{:?}", self.0); - - f.write_element(FormatElement::Tag(Tag::StartVerbatim( - tag::VerbatimKind::Verbatim { - length: text.text_len(), - }, - )))?; - - f.write_element(FormatElement::DynamicText { - text: Box::from(text), - })?; - - f.write_element(FormatElement::Tag(Tag::EndVerbatim))?; - Ok(()) + NotYetImplementedCustomText { + text, + node: node.into(), } } -pub(crate) struct NotYetImplementedCustomText(&'static str); - -/// Formats a placeholder for nodes that have not yet been implemented -#[allow(dead_code)] -pub(crate) const fn not_yet_implemented_custom_text( - text: &'static str, -) -> NotYetImplementedCustomText { - NotYetImplementedCustomText(text) -} - -impl Format> for NotYetImplementedCustomText { +impl Format> for NotYetImplementedCustomText<'_> { fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { f.write_element(FormatElement::Tag(Tag::StartVerbatim( tag::VerbatimKind::Verbatim { - length: self.0.text_len(), + length: self.text.text_len(), }, - )))?; + ))); - text(self.0).fmt(f)?; + text(self.text).fmt(f)?; - f.write_element(FormatElement::Tag(Tag::EndVerbatim)) - } -} + f.write_element(FormatElement::Tag(Tag::EndVerbatim)); -pub(crate) struct VerbatimText(TextRange); + f.context() + .comments() + .mark_verbatim_node_comments_formatted(self.node); -#[allow(unused)] -pub(crate) fn verbatim_text(item: &T) -> VerbatimText -where - T: Ranged, -{ - VerbatimText(item.range()) -} - -impl Format> for VerbatimText { - fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { - f.write_element(FormatElement::Tag(Tag::StartVerbatim( - tag::VerbatimKind::Verbatim { - length: self.0.len(), - }, - )))?; - - match normalize_newlines(f.context().locator().slice(self.0), ['\r']) { - Cow::Borrowed(_) => { - write!(f, [source_text_slice(self.0, ContainsNewlines::Detect)])?; - } - Cow::Owned(cleaned) => { - write!( - f, - [ - dynamic_text(&cleaned, Some(self.0.start())), - source_position(self.0.end()) - ] - )?; - } - } - - f.write_element(FormatElement::Tag(Tag::EndVerbatim))?; Ok(()) } } #[cfg(test)] mod tests { - use crate::{format_module, format_node, PyFormatOptions}; + use std::path::Path; + use anyhow::Result; use insta::assert_snapshot; + use ruff_python_index::CommentRangesBuilder; use ruff_python_parser::lexer::lex; use ruff_python_parser::{parse_tokens, Mode}; - use std::path::Path; + + use crate::{format_module, format_node, PyFormatOptions}; /// Very basic test intentionally kept very similar to the CLI #[test] @@ -282,31 +236,16 @@ if True: #[ignore] #[test] fn quick_test() { - let src = r#" -with ( - [ - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", - "bbbbbbbbbb", - "cccccccccccccccccccccccccccccccccccccccccc", - dddddddddddddddddddddddddddddddd, - ] as example1, - aaaaaaaaaaaaaaaaaaaaaaaaaa - + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb - + cccccccccccccccccccccccccccc - + ddddddddddddddddd as example2, - CtxManager2() as example2, - CtxManager2() as example2, - CtxManager2() as example2, -): - ... + let src = r#"def test(): + # fmt: off -with [ - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", - "bbbbbbbbbb", - "cccccccccccccccccccccccccccccccccccccccccc", - dddddddddddddddddddddddddddddddd, -] as example1, aaaaaaaaaaaaaaaaaaaaaaaaaa * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb * cccccccccccccccccccccccccccc + ddddddddddddddddd as example2, CtxManager222222222222222() as example2: - ... + a + b + + + + # suppressed comments + +a + b # formatted "#; // Tokenize once @@ -331,9 +270,9 @@ with [ // Use `dbg_write!(f, []) instead of `write!(f, [])` in your formatting code to print some IR // inside of a `Format` implementation // use ruff_formatter::FormatContext; - // dbg!(formatted + // formatted // .document() - // .display(formatted.context().source_code())); + // .display(formatted.context().source_code()); // // dbg!(formatted // .context() diff --git a/crates/ruff_python_formatter/src/options.rs b/crates/ruff_python_formatter/src/options.rs index e5aef3dc35..0a5693e83c 100644 --- a/crates/ruff_python_formatter/src/options.rs +++ b/crates/ruff_python_formatter/src/options.rs @@ -2,6 +2,7 @@ use ruff_formatter::printer::{LineEnding, PrinterOptions}; use ruff_formatter::{FormatOptions, IndentStyle, LineWidth}; use ruff_python_ast::PySourceType; use std::path::Path; +use std::str::FromStr; #[derive(Clone, Debug)] #[cfg_attr( @@ -16,6 +17,7 @@ pub struct PyFormatOptions { /// Specifies the indent style: /// * Either a tab /// * or a specific amount of spaces + #[cfg_attr(feature = "serde", serde(default = "default_indent_style"))] indent_style: IndentStyle, /// The preferred line width at which the formatter should wrap lines. @@ -33,12 +35,16 @@ fn default_line_width() -> LineWidth { LineWidth::try_from(88).unwrap() } +fn default_indent_style() -> IndentStyle { + IndentStyle::Space(4) +} + impl Default for PyFormatOptions { fn default() -> Self { Self { source_type: PySourceType::default(), - indent_style: IndentStyle::Space(4), - line_width: LineWidth::try_from(88).unwrap(), + indent_style: default_indent_style(), + line_width: default_line_width(), quote_style: QuoteStyle::default(), magic_trailing_comma: MagicTrailingComma::default(), } @@ -66,7 +72,12 @@ impl PyFormatOptions { self.quote_style } - pub fn with_quote_style(&mut self, style: QuoteStyle) -> &mut Self { + pub fn source_type(&self) -> PySourceType { + self.source_type + } + + #[must_use] + pub fn with_quote_style(mut self, style: QuoteStyle) -> Self { self.quote_style = style; self } @@ -150,6 +161,19 @@ impl TryFrom for QuoteStyle { } } +impl FromStr for QuoteStyle { + type Err = &'static str; + + fn from_str(s: &str) -> Result { + match s { + "\"" | "double" | "Double" => Ok(Self::Double), + "'" | "single" | "Single" => Ok(Self::Single), + // TODO: replace this error with a diagnostic + _ => Err("Value not supported for QuoteStyle"), + } + } +} + #[derive(Copy, Clone, Debug, Default)] #[cfg_attr( feature = "serde", @@ -167,3 +191,16 @@ impl MagicTrailingComma { matches!(self, Self::Respect) } } + +impl FromStr for MagicTrailingComma { + type Err = &'static str; + + fn from_str(s: &str) -> Result { + match s { + "respect" | "Respect" => Ok(Self::Respect), + "ignore" | "Ignore" => Ok(Self::Ignore), + // TODO: replace this error with a diagnostic + _ => Err("Value not supported for MagicTrailingComma"), + } + } +} diff --git a/crates/ruff_python_formatter/src/other/arguments.rs b/crates/ruff_python_formatter/src/other/arguments.rs index e99c31807c..f4d8d1ea27 100644 --- a/crates/ruff_python_formatter/src/other/arguments.rs +++ b/crates/ruff_python_formatter/src/other/arguments.rs @@ -1,13 +1,12 @@ +use crate::comments::SourceComment; use ruff_formatter::write; use ruff_python_ast::node::AstNode; use ruff_python_ast::{Arguments, Expr, Ranged}; use ruff_python_trivia::{SimpleTokenKind, SimpleTokenizer}; use ruff_text_size::{TextRange, TextSize}; -use crate::builders::empty_parenthesized_with_dangling_comments; -use crate::comments::trailing_comments; use crate::expression::expr_generator_exp::GeneratorExpParentheses; -use crate::expression::parentheses::{parenthesized, Parentheses}; +use crate::expression::parentheses::{empty_parenthesized, parenthesized, Parentheses}; use crate::prelude::*; use crate::FormatNodeRule; @@ -25,28 +24,10 @@ impl FormatNodeRule for FormatArguments { // ``` if item.args.is_empty() && item.keywords.is_empty() { let comments = f.context().comments().clone(); - return write!( - f, - [empty_parenthesized_with_dangling_comments( - text("("), - comments.dangling_comments(item), - text(")"), - )] - ); + let dangling = comments.dangling_comments(item); + return write!(f, [empty_parenthesized("(", dangling, ")")]); } - // If the arguments are non-empty, then a dangling comment indicates a comment on the - // same line as the opening parenthesis, e.g.: - // ```python - // f( # This call has a dangling comment. - // a, - // b, - // c, - // ) - let comments = f.context().comments().clone(); - let dangling_comments = comments.dangling_comments(item.as_any_node_ref()); - write!(f, [trailing_comments(dangling_comments)])?; - let all_arguments = format_with(|f: &mut PyFormatter| { let source = f.context().source(); let mut joiner = f.join_comma_separated(item.end()); @@ -64,6 +45,9 @@ impl FormatNodeRule for FormatArguments { if is_single_argument_parenthesized(arg, item.end(), source) { Parentheses::Always } else { + // Note: no need to handle opening-parenthesis comments, since + // an opening-parenthesis comment implies that the argument is + // parenthesized. Parentheses::Never }; joiner.entry(other, &other.format().with_options(parentheses)) @@ -84,10 +68,21 @@ impl FormatNodeRule for FormatArguments { joiner.finish() }); + // If the arguments are non-empty, then a dangling comment indicates a comment on the + // same line as the opening parenthesis, e.g.: + // ```python + // f( # This call has a dangling comment. + // a, + // b, + // c, + // ) + let comments = f.context().comments().clone(); + let dangling_comments = comments.dangling_comments(item.as_any_node_ref()); + write!( f, [ - // The outer group is for things like + // The outer group is for things like: // ```python // get_collection( // hey_this_is_a_very_long_call, @@ -102,13 +97,17 @@ impl FormatNodeRule for FormatArguments { // hey_this_is_a_very_long_call, it_has_funny_attributes_asdf_asdf, really=True // ) // ``` - // TODO(konstin): Doesn't work see wrongly formatted test parenthesized("(", &group(&all_arguments), ")") + .with_dangling_comments(dangling_comments) ] ) } - fn fmt_dangling_comments(&self, _node: &Arguments, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled in `fmt_fields` Ok(()) } diff --git a/crates/ruff_python_formatter/src/other/comprehension.rs b/crates/ruff_python_formatter/src/other/comprehension.rs index 8654a67f87..951e6f71cb 100644 --- a/crates/ruff_python_formatter/src/other/comprehension.rs +++ b/crates/ruff_python_formatter/src/other/comprehension.rs @@ -1,4 +1,4 @@ -use crate::comments::{leading_comments, trailing_comments}; +use crate::comments::{leading_comments, trailing_comments, SourceComment}; use crate::expression::expr_tuple::TupleParentheses; use crate::prelude::*; use crate::AsFormat; @@ -98,7 +98,7 @@ impl FormatNodeRule for FormatComprehension { fn fmt_dangling_comments( &self, - _node: &Comprehension, + _dangling_comments: &[SourceComment], _f: &mut PyFormatter, ) -> FormatResult<()> { // dangling comments are formatted as part of fmt_fields diff --git a/crates/ruff_python_formatter/src/other/except_handler_except_handler.rs b/crates/ruff_python_formatter/src/other/except_handler_except_handler.rs index 052710e7c2..2f3524ba23 100644 --- a/crates/ruff_python_formatter/src/other/except_handler_except_handler.rs +++ b/crates/ruff_python_formatter/src/other/except_handler_except_handler.rs @@ -1,4 +1,4 @@ -use crate::comments::trailing_comments; +use crate::comments::{trailing_comments, SourceComment}; use crate::expression::maybe_parenthesize_expression; use crate::expression::parentheses::Parenthesize; use crate::prelude::*; @@ -81,7 +81,7 @@ impl FormatNodeRule for FormatExceptHandlerExceptHan fn fmt_dangling_comments( &self, - _node: &ExceptHandlerExceptHandler, + _dangling_comments: &[SourceComment], _f: &mut PyFormatter, ) -> FormatResult<()> { // dangling comments are formatted as part of fmt_fields diff --git a/crates/ruff_python_formatter/src/other/match_case.rs b/crates/ruff_python_formatter/src/other/match_case.rs index 91a584657e..1f60c163f0 100644 --- a/crates/ruff_python_formatter/src/other/match_case.rs +++ b/crates/ruff_python_formatter/src/other/match_case.rs @@ -1,12 +1,93 @@ -use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; -use ruff_formatter::{write, Buffer, FormatResult}; -use ruff_python_ast::MatchCase; +use ruff_formatter::{format_args, write, Buffer, FormatResult}; +use ruff_python_ast::{MatchCase, Pattern, Ranged}; +use ruff_python_trivia::{SimpleTokenKind, SimpleTokenizer}; +use ruff_text_size::TextRange; + +use crate::comments::{leading_comments, trailing_comments, SourceComment}; +use crate::expression::parentheses::parenthesized; +use crate::prelude::*; +use crate::{FormatError, FormatNodeRule, PyFormatter}; #[derive(Default)] pub struct FormatMatchCase; impl FormatNodeRule for FormatMatchCase { fn fmt_fields(&self, item: &MatchCase, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [not_yet_implemented(item)]) + let MatchCase { + range: _, + pattern, + guard, + body, + } = item; + + let comments = f.context().comments().clone(); + let dangling_item_comments = comments.dangling_comments(item); + + write!(f, [text("case"), space()])?; + let leading_pattern_comments = comments.leading_comments(pattern); + if !leading_pattern_comments.is_empty() { + parenthesized( + "(", + &format_args![leading_comments(leading_pattern_comments), pattern.format()], + ")", + ) + .fmt(f)?; + } else if is_match_case_pattern_parenthesized(item, pattern, f.context())? { + parenthesized("(", &pattern.format(), ")").fmt(f)?; + } else { + pattern.format().fmt(f)?; + } + + if let Some(guard) = guard { + write!(f, [space(), text("if"), space(), guard.format()])?; + } + + write!( + f, + [ + text(":"), + trailing_comments(dangling_item_comments), + block_indent(&body.format()) + ] + ) + } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + // Handled as part of `fmt_fields` + Ok(()) + } +} + +fn is_match_case_pattern_parenthesized( + case: &MatchCase, + pattern: &Pattern, + context: &PyFormatContext, +) -> FormatResult { + let mut tokenizer = SimpleTokenizer::new( + context.source(), + TextRange::new(case.range().start(), pattern.range().start()), + ) + .skip_trivia(); + + let case_keyword = tokenizer.next().ok_or(FormatError::syntax_error( + "Expected a `case` keyword, didn't find any token", + ))?; + + debug_assert_eq!( + case_keyword.kind(), + SimpleTokenKind::Case, + "Expected `case` keyword but at {case_keyword:?}" + ); + + match tokenizer.next() { + Some(left_paren) => { + debug_assert_eq!(left_paren.kind(), SimpleTokenKind::LParen); + Ok(true) + } + None => Ok(false), } } diff --git a/crates/ruff_python_formatter/src/other/parameters.rs b/crates/ruff_python_formatter/src/other/parameters.rs index 950f6dcaf9..3c10c8049f 100644 --- a/crates/ruff_python_formatter/src/other/parameters.rs +++ b/crates/ruff_python_formatter/src/other/parameters.rs @@ -1,22 +1,21 @@ use std::usize; -use ruff_python_ast::{Parameters, Ranged}; -use ruff_text_size::{TextRange, TextSize}; - use ruff_formatter::{format_args, write, FormatRuleWithOptions}; use ruff_python_ast::node::{AnyNodeRef, AstNode}; +use ruff_python_ast::{Parameters, Ranged}; use ruff_python_trivia::{SimpleToken, SimpleTokenKind, SimpleTokenizer}; +use ruff_text_size::{TextRange, TextSize}; use crate::comments::{ - dangling_comments, leading_comments, leading_node_comments, trailing_comments, + dangling_open_parenthesis_comments, leading_comments, leading_node_comments, trailing_comments, CommentLinePosition, SourceComment, }; use crate::context::{NodeLevel, WithNodeLevel}; -use crate::expression::parentheses::parenthesized; +use crate::expression::parentheses::empty_parenthesized; use crate::prelude::*; use crate::FormatNodeRule; -#[derive(Eq, PartialEq, Debug, Default)] +#[derive(Debug, Copy, Clone, Eq, PartialEq, Default)] pub enum ParametersParentheses { /// By default, parameters will always preserve their surrounding parentheses. #[default] @@ -61,9 +60,47 @@ impl FormatNodeRule for FormatParameters { kwarg, } = item; + let (slash, star) = find_parameter_separators(f.context().source(), item); + let comments = f.context().comments().clone(); let dangling = comments.dangling_comments(item); - let (slash, star) = find_argument_separators(f.context().source(), item); + + // First dangling comment: trailing the opening parenthesis, e.g.: + // ```python + // def f( # comment + // x, + // y, + // z, + // ): ... + // TODO(charlie): We already identified this comment as such in placement.rs. Consider + // labeling it as such. See: https://github.com/astral-sh/ruff/issues/5247. + let parenthesis_comments_end = usize::from(dangling.first().is_some_and(|comment| { + if comment.line_position().is_end_of_line() { + // Ensure that there are no tokens between the open bracket and the comment. + let mut lexer = SimpleTokenizer::new( + f.context().source(), + TextRange::new(item.start(), comment.start()), + ) + .skip_trivia() + .skip_while(|t| { + matches!( + t.kind(), + SimpleTokenKind::LParen + | SimpleTokenKind::LBrace + | SimpleTokenKind::LBracket + ) + }); + if lexer.next().is_none() { + return true; + } + } + false + })); + + // Separate into (dangling comments on the open parenthesis) and (dangling comments on the + // argument separators, e.g., `*` or `/`). + let (parenthesis_dangling, parameters_dangling) = + dangling.split_at(parenthesis_comments_end); let format_inner = format_with(|f: &mut PyFormatter| { let separator = format_with(|f| write!(f, [text(","), soft_line_break_or_space()])); @@ -76,10 +113,18 @@ impl FormatNodeRule for FormatParameters { last_node = Some(parameter_with_default.into()); } + // Second dangling comment: trailing the slash, e.g.: + // ```python + // def f( + // x, + // /, # comment + // y, + // z, + // ): ... let slash_comments_end = if posonlyargs.is_empty() { 0 } else { - let slash_comments_end = dangling.partition_point(|comment| { + let slash_comments_end = parameters_dangling.partition_point(|comment| { let assignment = assign_argument_separator_comment_placement( slash.as_ref(), star.as_ref(), @@ -95,7 +140,7 @@ impl FormatNodeRule for FormatParameters { }); joiner.entry(&CommentsAroundText { text: "/", - comments: &dangling[..slash_comments_end], + comments: ¶meters_dangling[..slash_comments_end], }); slash_comments_end }; @@ -135,7 +180,7 @@ impl FormatNodeRule for FormatParameters { // ``` joiner.entry(&CommentsAroundText { text: "*", - comments: &dangling[slash_comments_end..], + comments: ¶meters_dangling[slash_comments_end..], }); } @@ -200,20 +245,28 @@ impl FormatNodeRule for FormatParameters { write!(f, [group(&format_inner)]) } else if num_parameters == 0 { // No parameters, format any dangling comments between `()` + write!(f, [empty_parenthesized("(", dangling, ")")]) + } else { + // Intentionally avoid `parenthesized`, which groups the entire formatted contents. + // We want parameters to be grouped alongside return types, one level up, so we + // format them "inline" here. write!( f, [ text("("), - block_indent(&dangling_comments(dangling)), + dangling_open_parenthesis_comments(parenthesis_dangling), + soft_block_indent(&group(&format_inner)), text(")") ] ) - } else { - write!(f, [parenthesized("(", &group(&format_inner), ")")]) } } - fn fmt_dangling_comments(&self, _node: &Parameters, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled in `fmt_fields` Ok(()) } @@ -269,7 +322,7 @@ impl Format> for CommentsAroundText<'_> { /// ^ star following start /// ``` #[derive(Debug)] -pub(crate) struct ArgumentSeparator { +pub(crate) struct ParameterSeparator { /// The end of the last node or separator before this separator pub(crate) preceding_end: TextSize, /// The range of the separator itself @@ -281,10 +334,10 @@ pub(crate) struct ArgumentSeparator { /// Finds slash and star in `f(a, /, b, *, c)` or `lambda a, /, b, *, c: 1`. /// /// Returns the location of the slash and star separators, if any. -pub(crate) fn find_argument_separators( +pub(crate) fn find_parameter_separators( contents: &str, parameters: &Parameters, -) -> (Option, Option) { +) -> (Option, Option) { // We only compute preceding_end and token location here since following_start depends on the // star location, but the star location depends on slash's position let slash = if let Some(preceding_end) = parameters.posonlyargs.last().map(Ranged::end) { @@ -339,7 +392,7 @@ pub(crate) fn find_argument_separators( .expect("The function definition can't end here"); debug_assert!(star.kind() == SimpleTokenKind::Star, "{star:?}"); - Some(ArgumentSeparator { + Some(ParameterSeparator { preceding_end, separator: star.range, following_start: first_keyword_argument.start(), @@ -362,7 +415,7 @@ pub(crate) fn find_argument_separators( }; debug_assert!(star.kind() == SimpleTokenKind::Star, "{star:?}"); - Some(ArgumentSeparator { + Some(ParameterSeparator { preceding_end: parameters.range.start(), separator: star.range, following_start: first_keyword_argument.start(), @@ -385,7 +438,7 @@ pub(crate) fn find_argument_separators( .or(parameters.vararg.as_ref().map(|first| first.start())) .or(star.as_ref().map(|star| star.separator.start())) .unwrap_or(parameters.end()); - let slash = slash.map(|(preceding_end, slash)| ArgumentSeparator { + let slash = slash.map(|(preceding_end, slash)| ParameterSeparator { preceding_end, separator: slash, following_start: slash_following_start, @@ -485,12 +538,12 @@ pub(crate) fn find_argument_separators( /// ^^^^^^ keyword only parameters (kwargs) /// ``` pub(crate) fn assign_argument_separator_comment_placement( - slash: Option<&ArgumentSeparator>, - star: Option<&ArgumentSeparator>, + slash: Option<&ParameterSeparator>, + star: Option<&ParameterSeparator>, comment_range: TextRange, text_position: CommentLinePosition, ) -> Option { - if let Some(ArgumentSeparator { + if let Some(ParameterSeparator { preceding_end, separator: slash, following_start, @@ -529,7 +582,7 @@ pub(crate) fn assign_argument_separator_comment_placement( } } - if let Some(ArgumentSeparator { + if let Some(ParameterSeparator { preceding_end, separator: star, following_start, diff --git a/crates/ruff_python_formatter/src/other/with_item.rs b/crates/ruff_python_formatter/src/other/with_item.rs index 49fd36393a..2bd2d90ba8 100644 --- a/crates/ruff_python_formatter/src/other/with_item.rs +++ b/crates/ruff_python_formatter/src/other/with_item.rs @@ -2,7 +2,7 @@ use ruff_python_ast::WithItem; use ruff_formatter::{write, Buffer, FormatResult}; -use crate::comments::{leading_comments, trailing_comments}; +use crate::comments::{leading_comments, trailing_comments, SourceComment}; use crate::expression::maybe_parenthesize_expression; use crate::expression::parentheses::Parenthesize; use crate::prelude::*; @@ -47,7 +47,11 @@ impl FormatNodeRule for FormatWithItem { Ok(()) } - fn fmt_dangling_comments(&self, _node: &WithItem, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { Ok(()) } } diff --git a/crates/ruff_python_formatter/src/pattern/mod.rs b/crates/ruff_python_formatter/src/pattern/mod.rs index 992f90a49d..9099772a4d 100644 --- a/crates/ruff_python_formatter/src/pattern/mod.rs +++ b/crates/ruff_python_formatter/src/pattern/mod.rs @@ -1,3 +1,8 @@ +use ruff_formatter::{FormatOwnedWithRule, FormatRefWithRule}; +use ruff_python_ast::Pattern; + +use crate::prelude::*; + pub(crate) mod pattern_match_as; pub(crate) mod pattern_match_class; pub(crate) mod pattern_match_mapping; @@ -6,3 +11,37 @@ pub(crate) mod pattern_match_sequence; pub(crate) mod pattern_match_singleton; pub(crate) mod pattern_match_star; pub(crate) mod pattern_match_value; + +#[derive(Default)] +pub struct FormatPattern; + +impl FormatRule> for FormatPattern { + fn fmt(&self, item: &Pattern, f: &mut PyFormatter) -> FormatResult<()> { + match item { + Pattern::MatchValue(p) => p.format().fmt(f), + Pattern::MatchSingleton(p) => p.format().fmt(f), + Pattern::MatchSequence(p) => p.format().fmt(f), + Pattern::MatchMapping(p) => p.format().fmt(f), + Pattern::MatchClass(p) => p.format().fmt(f), + Pattern::MatchStar(p) => p.format().fmt(f), + Pattern::MatchAs(p) => p.format().fmt(f), + Pattern::MatchOr(p) => p.format().fmt(f), + } + } +} + +impl<'ast> AsFormat> for Pattern { + type Format<'a> = FormatRefWithRule<'a, Pattern, FormatPattern, PyFormatContext<'ast>>; + + fn format(&self) -> Self::Format<'_> { + FormatRefWithRule::new(self, FormatPattern) + } +} + +impl<'ast> IntoFormat> for Pattern { + type Format = FormatOwnedWithRule>; + + fn into_format(self) -> Self::Format { + FormatOwnedWithRule::new(self, FormatPattern) + } +} diff --git a/crates/ruff_python_formatter/src/pattern/pattern_match_as.rs b/crates/ruff_python_formatter/src/pattern/pattern_match_as.rs index efe8364e24..74a02a98e1 100644 --- a/crates/ruff_python_formatter/src/pattern/pattern_match_as.rs +++ b/crates/ruff_python_formatter/src/pattern/pattern_match_as.rs @@ -1,12 +1,19 @@ -use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; use ruff_formatter::{write, Buffer, FormatResult}; use ruff_python_ast::PatternMatchAs; +use crate::{not_yet_implemented_custom_text, FormatNodeRule, PyFormatter}; + #[derive(Default)] pub struct FormatPatternMatchAs; impl FormatNodeRule for FormatPatternMatchAs { fn fmt_fields(&self, item: &PatternMatchAs, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [not_yet_implemented(item)]) + write!( + f, + [not_yet_implemented_custom_text( + "x as NOT_YET_IMPLEMENTED_PatternMatchAs", + item + )] + ) } } diff --git a/crates/ruff_python_formatter/src/pattern/pattern_match_class.rs b/crates/ruff_python_formatter/src/pattern/pattern_match_class.rs index 4aeb063da4..6d8601b95e 100644 --- a/crates/ruff_python_formatter/src/pattern/pattern_match_class.rs +++ b/crates/ruff_python_formatter/src/pattern/pattern_match_class.rs @@ -1,12 +1,19 @@ -use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; use ruff_formatter::{write, Buffer, FormatResult}; use ruff_python_ast::PatternMatchClass; +use crate::{not_yet_implemented_custom_text, FormatNodeRule, PyFormatter}; + #[derive(Default)] pub struct FormatPatternMatchClass; impl FormatNodeRule for FormatPatternMatchClass { fn fmt_fields(&self, item: &PatternMatchClass, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [not_yet_implemented(item)]) + write!( + f, + [not_yet_implemented_custom_text( + "NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0)", + item + )] + ) } } diff --git a/crates/ruff_python_formatter/src/pattern/pattern_match_mapping.rs b/crates/ruff_python_formatter/src/pattern/pattern_match_mapping.rs index ea629eb9d9..a98abc4cc8 100644 --- a/crates/ruff_python_formatter/src/pattern/pattern_match_mapping.rs +++ b/crates/ruff_python_formatter/src/pattern/pattern_match_mapping.rs @@ -1,12 +1,19 @@ -use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; use ruff_formatter::{write, Buffer, FormatResult}; use ruff_python_ast::PatternMatchMapping; +use crate::{not_yet_implemented_custom_text, FormatNodeRule, PyFormatter}; + #[derive(Default)] pub struct FormatPatternMatchMapping; impl FormatNodeRule for FormatPatternMatchMapping { fn fmt_fields(&self, item: &PatternMatchMapping, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [not_yet_implemented(item)]) + write!( + f, + [not_yet_implemented_custom_text( + "{\"NOT_YET_IMPLEMENTED_PatternMatchMapping\": _, 2: _}", + item + )] + ) } } diff --git a/crates/ruff_python_formatter/src/pattern/pattern_match_or.rs b/crates/ruff_python_formatter/src/pattern/pattern_match_or.rs index be809d2056..ac19c02128 100644 --- a/crates/ruff_python_formatter/src/pattern/pattern_match_or.rs +++ b/crates/ruff_python_formatter/src/pattern/pattern_match_or.rs @@ -1,12 +1,19 @@ -use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; use ruff_formatter::{write, Buffer, FormatResult}; use ruff_python_ast::PatternMatchOr; +use crate::{not_yet_implemented_custom_text, FormatNodeRule, PyFormatter}; + #[derive(Default)] pub struct FormatPatternMatchOr; impl FormatNodeRule for FormatPatternMatchOr { fn fmt_fields(&self, item: &PatternMatchOr, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [not_yet_implemented(item)]) + write!( + f, + [not_yet_implemented_custom_text( + "NOT_YET_IMPLEMENTED_PatternMatchOf | (y)", + item + )] + ) } } diff --git a/crates/ruff_python_formatter/src/pattern/pattern_match_sequence.rs b/crates/ruff_python_formatter/src/pattern/pattern_match_sequence.rs index 7f5a9390eb..53599d14f8 100644 --- a/crates/ruff_python_formatter/src/pattern/pattern_match_sequence.rs +++ b/crates/ruff_python_formatter/src/pattern/pattern_match_sequence.rs @@ -1,12 +1,19 @@ -use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; use ruff_formatter::{write, Buffer, FormatResult}; use ruff_python_ast::PatternMatchSequence; +use crate::{not_yet_implemented_custom_text, FormatNodeRule, PyFormatter}; + #[derive(Default)] pub struct FormatPatternMatchSequence; impl FormatNodeRule for FormatPatternMatchSequence { fn fmt_fields(&self, item: &PatternMatchSequence, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [not_yet_implemented(item)]) + write!( + f, + [not_yet_implemented_custom_text( + "[NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]", + item + )] + ) } } diff --git a/crates/ruff_python_formatter/src/pattern/pattern_match_singleton.rs b/crates/ruff_python_formatter/src/pattern/pattern_match_singleton.rs index 0b06a2c56c..d3a19a3786 100644 --- a/crates/ruff_python_formatter/src/pattern/pattern_match_singleton.rs +++ b/crates/ruff_python_formatter/src/pattern/pattern_match_singleton.rs @@ -1,12 +1,13 @@ -use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; use ruff_formatter::{write, Buffer, FormatResult}; use ruff_python_ast::PatternMatchSingleton; +use crate::{not_yet_implemented_custom_text, FormatNodeRule, PyFormatter}; + #[derive(Default)] pub struct FormatPatternMatchSingleton; impl FormatNodeRule for FormatPatternMatchSingleton { fn fmt_fields(&self, item: &PatternMatchSingleton, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [not_yet_implemented(item)]) + write!(f, [not_yet_implemented_custom_text("None", item)]) } } diff --git a/crates/ruff_python_formatter/src/pattern/pattern_match_star.rs b/crates/ruff_python_formatter/src/pattern/pattern_match_star.rs index d7b457078d..613586752e 100644 --- a/crates/ruff_python_formatter/src/pattern/pattern_match_star.rs +++ b/crates/ruff_python_formatter/src/pattern/pattern_match_star.rs @@ -1,12 +1,19 @@ -use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; use ruff_formatter::{write, Buffer, FormatResult}; use ruff_python_ast::PatternMatchStar; +use crate::{not_yet_implemented_custom_text, FormatNodeRule, PyFormatter}; + #[derive(Default)] pub struct FormatPatternMatchStar; impl FormatNodeRule for FormatPatternMatchStar { fn fmt_fields(&self, item: &PatternMatchStar, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [not_yet_implemented(item)]) + write!( + f, + [not_yet_implemented_custom_text( + "*NOT_YET_IMPLEMENTED_PatternMatchStar", + item + )] + ) } } diff --git a/crates/ruff_python_formatter/src/pattern/pattern_match_value.rs b/crates/ruff_python_formatter/src/pattern/pattern_match_value.rs index 09d53faea4..8e824e8fe4 100644 --- a/crates/ruff_python_formatter/src/pattern/pattern_match_value.rs +++ b/crates/ruff_python_formatter/src/pattern/pattern_match_value.rs @@ -1,14 +1,19 @@ +use ruff_formatter::{write, Buffer, FormatResult}; use ruff_python_ast::PatternMatchValue; -use ruff_formatter::{write, Buffer, FormatResult}; - -use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; +use crate::{not_yet_implemented_custom_text, FormatNodeRule, PyFormatter}; #[derive(Default)] pub struct FormatPatternMatchValue; impl FormatNodeRule for FormatPatternMatchValue { fn fmt_fields(&self, item: &PatternMatchValue, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [not_yet_implemented(item)]) + write!( + f, + [not_yet_implemented_custom_text( + "\"NOT_YET_IMPLEMENTED_PatternMatchValue\"", + item + )] + ) } } diff --git a/crates/ruff_python_formatter/src/statement/mod.rs b/crates/ruff_python_formatter/src/statement/mod.rs index 114d771528..cf39929eb9 100644 --- a/crates/ruff_python_formatter/src/statement/mod.rs +++ b/crates/ruff_python_formatter/src/statement/mod.rs @@ -5,9 +5,6 @@ use ruff_python_ast::Stmt; pub(crate) mod stmt_ann_assign; pub(crate) mod stmt_assert; pub(crate) mod stmt_assign; -pub(crate) mod stmt_async_for; -pub(crate) mod stmt_async_function_def; -pub(crate) mod stmt_async_with; pub(crate) mod stmt_aug_assign; pub(crate) mod stmt_break; pub(crate) mod stmt_class_def; @@ -20,14 +17,13 @@ pub(crate) mod stmt_global; pub(crate) mod stmt_if; pub(crate) mod stmt_import; pub(crate) mod stmt_import_from; -pub(crate) mod stmt_line_magic; +pub(crate) mod stmt_ipy_escape_command; pub(crate) mod stmt_match; pub(crate) mod stmt_nonlocal; pub(crate) mod stmt_pass; pub(crate) mod stmt_raise; pub(crate) mod stmt_return; pub(crate) mod stmt_try; -pub(crate) mod stmt_try_star; pub(crate) mod stmt_type_alias; pub(crate) mod stmt_while; pub(crate) mod stmt_with; @@ -40,7 +36,6 @@ impl FormatRule> for FormatStmt { fn fmt(&self, item: &Stmt, f: &mut PyFormatter) -> FormatResult<()> { match item { Stmt::FunctionDef(x) => x.format().fmt(f), - Stmt::AsyncFunctionDef(x) => x.format().fmt(f), Stmt::ClassDef(x) => x.format().fmt(f), Stmt::Return(x) => x.format().fmt(f), Stmt::Delete(x) => x.format().fmt(f), @@ -48,15 +43,12 @@ impl FormatRule> for FormatStmt { Stmt::AugAssign(x) => x.format().fmt(f), Stmt::AnnAssign(x) => x.format().fmt(f), Stmt::For(x) => x.format().fmt(f), - Stmt::AsyncFor(x) => x.format().fmt(f), Stmt::While(x) => x.format().fmt(f), Stmt::If(x) => x.format().fmt(f), Stmt::With(x) => x.format().fmt(f), - Stmt::AsyncWith(x) => x.format().fmt(f), Stmt::Match(x) => x.format().fmt(f), Stmt::Raise(x) => x.format().fmt(f), Stmt::Try(x) => x.format().fmt(f), - Stmt::TryStar(x) => x.format().fmt(f), Stmt::Assert(x) => x.format().fmt(f), Stmt::Import(x) => x.format().fmt(f), Stmt::ImportFrom(x) => x.format().fmt(f), @@ -67,7 +59,7 @@ impl FormatRule> for FormatStmt { Stmt::Break(x) => x.format().fmt(f), Stmt::Continue(x) => x.format().fmt(f), Stmt::TypeAlias(x) => x.format().fmt(f), - Stmt::LineMagic(_) => todo!(), + Stmt::IpyEscapeCommand(_) => todo!(), } } } diff --git a/crates/ruff_python_formatter/src/statement/stmt_assign.rs b/crates/ruff_python_formatter/src/statement/stmt_assign.rs index 99c23d2de9..d54804939d 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_assign.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_assign.rs @@ -1,6 +1,5 @@ -use ruff_python_ast::{Expr, StmtAssign}; - use ruff_formatter::{format_args, write, FormatError}; +use ruff_python_ast::{Expr, StmtAssign}; use crate::context::{NodeLevel, WithNodeLevel}; use crate::expression::parentheses::{Parentheses, Parenthesize}; @@ -45,6 +44,7 @@ impl FormatNodeRule for FormatStmtAssign { } } +#[derive(Debug)] struct FormatTargets<'a> { targets: &'a [Expr], } @@ -52,9 +52,17 @@ struct FormatTargets<'a> { impl Format> for FormatTargets<'_> { fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { if let Some((first, rest)) = self.targets.split_first() { - let can_omit_parentheses = has_own_parentheses(first); + let comments = f.context().comments(); - let group_id = if can_omit_parentheses { + let parenthesize = if comments.has_leading_comments(first) { + ParenthesizeTarget::Always + } else if has_own_parentheses(first, f.context()).is_some() { + ParenthesizeTarget::Never + } else { + ParenthesizeTarget::IfBreaks + }; + + let group_id = if parenthesize == ParenthesizeTarget::Never { Some(f.group_id("assignment_parentheses")) } else { None @@ -62,17 +70,23 @@ impl Format> for FormatTargets<'_> { let format_first = format_with(|f: &mut PyFormatter| { let mut f = WithNodeLevel::new(NodeLevel::Expression(group_id), f); - if can_omit_parentheses { - write!(f, [first.format().with_options(Parentheses::Never)]) - } else { - write!( - f, - [ - if_group_breaks(&text("(")), - soft_block_indent(&first.format().with_options(Parentheses::Never)), - if_group_breaks(&text(")")) - ] - ) + match parenthesize { + ParenthesizeTarget::Always => { + write!(f, [first.format().with_options(Parentheses::Always)]) + } + ParenthesizeTarget::Never => { + write!(f, [first.format().with_options(Parentheses::Never)]) + } + ParenthesizeTarget::IfBreaks => { + write!( + f, + [ + if_group_breaks(&text("(")), + soft_block_indent(&first.format().with_options(Parentheses::Never)), + if_group_breaks(&text(")")) + ] + ) + } } }); @@ -92,3 +106,10 @@ impl Format> for FormatTargets<'_> { } } } + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum ParenthesizeTarget { + Always, + Never, + IfBreaks, +} diff --git a/crates/ruff_python_formatter/src/statement/stmt_async_for.rs b/crates/ruff_python_formatter/src/statement/stmt_async_for.rs deleted file mode 100644 index f47b3452e2..0000000000 --- a/crates/ruff_python_formatter/src/statement/stmt_async_for.rs +++ /dev/null @@ -1,23 +0,0 @@ -use crate::prelude::*; -use crate::statement::stmt_for::AnyStatementFor; -use crate::{FormatNodeRule, PyFormatter}; -use ruff_formatter::FormatResult; -use ruff_python_ast::StmtAsyncFor; - -#[derive(Default)] -pub struct FormatStmtAsyncFor; - -impl FormatNodeRule for FormatStmtAsyncFor { - fn fmt_fields(&self, item: &StmtAsyncFor, f: &mut PyFormatter) -> FormatResult<()> { - AnyStatementFor::from(item).fmt(f) - } - - fn fmt_dangling_comments( - &self, - _node: &StmtAsyncFor, - _f: &mut PyFormatter, - ) -> FormatResult<()> { - // Handled in `fmt_fields` - Ok(()) - } -} diff --git a/crates/ruff_python_formatter/src/statement/stmt_async_function_def.rs b/crates/ruff_python_formatter/src/statement/stmt_async_function_def.rs deleted file mode 100644 index 1ba23722e5..0000000000 --- a/crates/ruff_python_formatter/src/statement/stmt_async_function_def.rs +++ /dev/null @@ -1,24 +0,0 @@ -use ruff_python_ast::StmtAsyncFunctionDef; - -use ruff_python_ast::function::AnyFunctionDefinition; - -use crate::prelude::*; -use crate::FormatNodeRule; - -#[derive(Default)] -pub struct FormatStmtAsyncFunctionDef; - -impl FormatNodeRule for FormatStmtAsyncFunctionDef { - fn fmt_fields(&self, item: &StmtAsyncFunctionDef, f: &mut PyFormatter) -> FormatResult<()> { - AnyFunctionDefinition::from(item).format().fmt(f) - } - - fn fmt_dangling_comments( - &self, - _node: &StmtAsyncFunctionDef, - _f: &mut PyFormatter, - ) -> FormatResult<()> { - // Handled by `AnyFunctionDef` - Ok(()) - } -} diff --git a/crates/ruff_python_formatter/src/statement/stmt_async_with.rs b/crates/ruff_python_formatter/src/statement/stmt_async_with.rs deleted file mode 100644 index fdd89fdb2f..0000000000 --- a/crates/ruff_python_formatter/src/statement/stmt_async_with.rs +++ /dev/null @@ -1,22 +0,0 @@ -use crate::prelude::*; -use crate::statement::stmt_with::AnyStatementWith; -use crate::FormatNodeRule; -use ruff_python_ast::StmtAsyncWith; - -#[derive(Default)] -pub struct FormatStmtAsyncWith; - -impl FormatNodeRule for FormatStmtAsyncWith { - fn fmt_fields(&self, item: &StmtAsyncWith, f: &mut PyFormatter) -> FormatResult<()> { - AnyStatementWith::from(item).fmt(f) - } - - fn fmt_dangling_comments( - &self, - _node: &StmtAsyncWith, - _f: &mut PyFormatter, - ) -> FormatResult<()> { - // Handled in `fmt_fields` - Ok(()) - } -} diff --git a/crates/ruff_python_formatter/src/statement/stmt_class_def.rs b/crates/ruff_python_formatter/src/statement/stmt_class_def.rs index 56dce4a0c6..9a908b9593 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_class_def.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_class_def.rs @@ -2,7 +2,7 @@ use ruff_formatter::{write, Buffer}; use ruff_python_ast::{Ranged, StmtClassDef}; use ruff_python_trivia::lines_after_ignoring_trivia; -use crate::comments::{leading_comments, trailing_comments}; +use crate::comments::{leading_comments, trailing_comments, SourceComment}; use crate::prelude::*; use crate::statement::suite::SuiteKind; use crate::FormatNodeRule; @@ -129,7 +129,7 @@ impl FormatNodeRule for FormatStmtClassDef { fn fmt_dangling_comments( &self, - _node: &StmtClassDef, + _dangling_comments: &[SourceComment], _f: &mut PyFormatter, ) -> FormatResult<()> { // handled in fmt_fields diff --git a/crates/ruff_python_formatter/src/statement/stmt_delete.rs b/crates/ruff_python_formatter/src/statement/stmt_delete.rs index 02dd1f97b1..77592c732e 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_delete.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_delete.rs @@ -1,5 +1,5 @@ use crate::builders::{parenthesize_if_expands, PyFormatterExtensions}; -use crate::comments::dangling_node_comments; +use crate::comments::{dangling_node_comments, SourceComment}; use crate::expression::maybe_parenthesize_expression; use crate::expression::parentheses::Parenthesize; use crate::{FormatNodeRule, PyFormatter}; @@ -53,7 +53,11 @@ impl FormatNodeRule for FormatStmtDelete { } } - fn fmt_dangling_comments(&self, _node: &StmtDelete, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled in `fmt_fields` Ok(()) } diff --git a/crates/ruff_python_formatter/src/statement/stmt_for.rs b/crates/ruff_python_formatter/src/statement/stmt_for.rs index 957fd563c7..bc2bbf3a67 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_for.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_for.rs @@ -1,13 +1,12 @@ -use crate::comments::{leading_alternate_branch_comments, trailing_comments}; +use ruff_formatter::{format_args, write, Buffer, FormatResult}; +use ruff_python_ast::{Expr, Ranged, Stmt, StmtFor}; + +use crate::comments::{leading_alternate_branch_comments, trailing_comments, SourceComment}; use crate::expression::expr_tuple::TupleParentheses; use crate::expression::maybe_parenthesize_expression; use crate::expression::parentheses::Parenthesize; use crate::prelude::*; use crate::{FormatNodeRule, PyFormatter}; -use ruff_formatter::{format_args, write, Buffer, FormatResult}; -use ruff_python_ast::node::AnyNodeRef; -use ruff_python_ast::{Expr, Ranged, Stmt, StmtAsyncFor, StmtFor, Suite}; -use ruff_text_size::TextRange; #[derive(Debug)] struct ExprTupleWithoutParentheses<'a>(&'a Expr); @@ -27,85 +26,19 @@ impl Format> for ExprTupleWithoutParentheses<'_> { #[derive(Default)] pub struct FormatStmtFor; -pub(super) enum AnyStatementFor<'a> { - For(&'a StmtFor), - AsyncFor(&'a StmtAsyncFor), -} - -impl<'a> AnyStatementFor<'a> { - const fn is_async(&self) -> bool { - matches!(self, AnyStatementFor::AsyncFor(_)) - } - - fn target(&self) -> &Expr { - match self { - AnyStatementFor::For(stmt) => &stmt.target, - AnyStatementFor::AsyncFor(stmt) => &stmt.target, - } - } - - #[allow(clippy::iter_not_returning_iterator)] - fn iter(&self) -> &Expr { - match self { - AnyStatementFor::For(stmt) => &stmt.iter, - AnyStatementFor::AsyncFor(stmt) => &stmt.iter, - } - } - - fn body(&self) -> &Suite { - match self { - AnyStatementFor::For(stmt) => &stmt.body, - AnyStatementFor::AsyncFor(stmt) => &stmt.body, - } - } - - fn orelse(&self) -> &Suite { - match self { - AnyStatementFor::For(stmt) => &stmt.orelse, - AnyStatementFor::AsyncFor(stmt) => &stmt.orelse, - } - } -} - -impl Ranged for AnyStatementFor<'_> { - fn range(&self) -> TextRange { - match self { - AnyStatementFor::For(stmt) => stmt.range(), - AnyStatementFor::AsyncFor(stmt) => stmt.range(), - } - } -} - -impl<'a> From<&'a StmtFor> for AnyStatementFor<'a> { - fn from(value: &'a StmtFor) -> Self { - AnyStatementFor::For(value) - } -} - -impl<'a> From<&'a StmtAsyncFor> for AnyStatementFor<'a> { - fn from(value: &'a StmtAsyncFor) -> Self { - AnyStatementFor::AsyncFor(value) - } -} - -impl<'a> From<&AnyStatementFor<'a>> for AnyNodeRef<'a> { - fn from(value: &AnyStatementFor<'a>) -> Self { - match value { - AnyStatementFor::For(stmt) => AnyNodeRef::StmtFor(stmt), - AnyStatementFor::AsyncFor(stmt) => AnyNodeRef::StmtAsyncFor(stmt), - } - } -} - -impl Format> for AnyStatementFor<'_> { - fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { - let target = self.target(); - let iter = self.iter(); - let body = self.body(); - let orelse = self.orelse(); +impl FormatNodeRule for FormatStmtFor { + fn fmt_fields(&self, item: &StmtFor, f: &mut PyFormatter) -> FormatResult<()> { + let StmtFor { + is_async, + target, + iter, + body, + orelse, + range: _, + } = item; let comments = f.context().comments().clone(); - let dangling_comments = comments.dangling_comments(self); + let dangling_comments = comments.dangling_comments(item); let body_start = body.first().map_or(iter.end(), Stmt::start); let or_else_comments_start = dangling_comments.partition_point(|comment| comment.slice().end() < body_start); @@ -116,15 +49,14 @@ impl Format> for AnyStatementFor<'_> { write!( f, [ - self.is_async() - .then_some(format_args![text("async"), space()]), + is_async.then_some(format_args![text("async"), space()]), text("for"), space(), ExprTupleWithoutParentheses(target), space(), text("in"), space(), - maybe_parenthesize_expression(iter, self, Parenthesize::IfBreaks), + maybe_parenthesize_expression(iter, item, Parenthesize::IfBreaks), text(":"), trailing_comments(trailing_condition_comments), block_indent(&body.format()) @@ -153,14 +85,12 @@ impl Format> for AnyStatementFor<'_> { Ok(()) } -} -impl FormatNodeRule for FormatStmtFor { - fn fmt_fields(&self, item: &StmtFor, f: &mut PyFormatter) -> FormatResult<()> { - AnyStatementFor::from(item).fmt(f) - } - - fn fmt_dangling_comments(&self, _node: &StmtFor, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled in `fmt_fields` Ok(()) } diff --git a/crates/ruff_python_formatter/src/statement/stmt_function_def.rs b/crates/ruff_python_formatter/src/statement/stmt_function_def.rs index 37100ad626..edbfb59879 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_function_def.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_function_def.rs @@ -1,12 +1,10 @@ -use ruff_python_ast::{Ranged, StmtFunctionDef}; +use ruff_formatter::write; +use ruff_python_ast::{Parameters, Ranged, StmtFunctionDef}; +use ruff_python_trivia::{lines_after_ignoring_trivia, SimpleTokenKind, SimpleTokenizer}; -use ruff_formatter::{write, FormatOwnedWithRule, FormatRefWithRule}; -use ruff_python_ast::function::AnyFunctionDefinition; -use ruff_python_trivia::lines_after_ignoring_trivia; - -use crate::comments::{leading_comments, trailing_comments}; - -use crate::expression::parentheses::{optional_parentheses, Parentheses}; +use crate::comments::{leading_comments, trailing_comments, SourceComment}; +use crate::expression::maybe_parenthesize_expression; +use crate::expression::parentheses::{Parentheses, Parenthesize}; use crate::prelude::*; use crate::statement::suite::SuiteKind; use crate::FormatNodeRule; @@ -16,24 +14,6 @@ pub struct FormatStmtFunctionDef; impl FormatNodeRule for FormatStmtFunctionDef { fn fmt_fields(&self, item: &StmtFunctionDef, f: &mut PyFormatter) -> FormatResult<()> { - AnyFunctionDefinition::from(item).format().fmt(f) - } - - fn fmt_dangling_comments( - &self, - _node: &StmtFunctionDef, - _f: &mut PyFormatter, - ) -> FormatResult<()> { - // Handled by `AnyFunctionDef` - Ok(()) - } -} - -#[derive(Default)] -pub struct FormatAnyFunctionDef; - -impl FormatRule, PyFormatContext<'_>> for FormatAnyFunctionDef { - fn fmt(&self, item: &AnyFunctionDefinition<'_>, f: &mut PyFormatter) -> FormatResult<()> { let comments = f.context().comments().clone(); let dangling_comments = comments.dangling_comments(item); @@ -43,9 +23,9 @@ impl FormatRule, PyFormatContext<'_>> for FormatAnyFun let (leading_definition_comments, trailing_definition_comments) = dangling_comments.split_at(trailing_definition_comments_start); - if let Some(last_decorator) = item.decorators().last() { + if let Some(last_decorator) = item.decorator_list.last() { f.join_with(hard_line_break()) - .entries(item.decorators().iter().formatted()) + .entries(item.decorator_list.iter().formatted()) .finish()?; if leading_definition_comments.is_empty() { @@ -69,66 +49,132 @@ impl FormatRule, PyFormatContext<'_>> for FormatAnyFun } } - if item.is_async() { + if item.is_async { write!(f, [text("async"), space()])?; } - let name = item.name(); + write!(f, [text("def"), space(), item.name.format()])?; - write!(f, [text("def"), space(), name.format()])?; - - if let Some(type_params) = item.type_params() { + if let Some(type_params) = item.type_params.as_ref() { write!(f, [type_params.format()])?; } - write!(f, [item.arguments().format()])?; + let format_inner = format_with(|f: &mut PyFormatter| { + write!(f, [item.parameters.format()])?; - if let Some(return_annotation) = item.returns() { - write!( - f, - [ - space(), - text("->"), - space(), - optional_parentheses( - &return_annotation.format().with_options(Parentheses::Never) - ) - ] - )?; - } + if let Some(return_annotation) = item.returns.as_ref() { + write!(f, [space(), text("->"), space()])?; + + if return_annotation.is_tuple_expr() { + let parentheses = if comments.has_leading_comments(return_annotation.as_ref()) { + Parentheses::Always + } else { + Parentheses::Never + }; + write!(f, [return_annotation.format().with_options(parentheses)])?; + } else if comments.has_trailing_comments(return_annotation.as_ref()) { + // Intentionally parenthesize any return annotations with trailing comments. + // This avoids an instability in cases like: + // ```python + // def double( + // a: int + // ) -> ( + // int # Hello + // ): + // pass + // ``` + // If we allow this to break, it will be formatted as follows: + // ```python + // def double( + // a: int + // ) -> int: # Hello + // pass + // ``` + // On subsequent formats, the `# Hello` will be interpreted as a dangling + // comment on a function, yielding: + // ```python + // def double(a: int) -> int: # Hello + // pass + // ``` + // Ideally, we'd reach that final formatting in a single pass, but doing so + // requires that the parent be aware of how the child is formatted, which + // is challenging. As a compromise, we break those expressions to avoid an + // instability. + write!( + f, + [return_annotation.format().with_options(Parentheses::Always)] + )?; + } else { + write!( + f, + [maybe_parenthesize_expression( + return_annotation, + item, + if empty_parameters(&item.parameters, f.context().source()) { + // If the parameters are empty, add parentheses if the return annotation + // breaks at all. + Parenthesize::IfBreaksOrIfRequired + } else { + // Otherwise, use our normal rules for parentheses, which allows us to break + // like: + // ```python + // def f( + // x, + // ) -> Tuple[ + // int, + // int, + // ]: + // ... + // ``` + Parenthesize::IfBreaks + }, + )] + )?; + } + } + Ok(()) + }); + + write!(f, [group(&format_inner)])?; write!( f, [ text(":"), trailing_comments(trailing_definition_comments), - block_indent(&item.body().format().with_options(SuiteKind::Function)) + block_indent(&item.body.format().with_options(SuiteKind::Function)) ] ) } -} -impl<'def, 'ast> AsFormat> for AnyFunctionDefinition<'def> { - type Format<'a> = FormatRefWithRule< - 'a, - AnyFunctionDefinition<'def>, - FormatAnyFunctionDef, - PyFormatContext<'ast>, - > where Self: 'a; - - fn format(&self) -> Self::Format<'_> { - FormatRefWithRule::new(self, FormatAnyFunctionDef) + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + // Handled in `fmt_fields` + Ok(()) } } -impl<'def, 'ast> IntoFormat> for AnyFunctionDefinition<'def> { - type Format = FormatOwnedWithRule< - AnyFunctionDefinition<'def>, - FormatAnyFunctionDef, - PyFormatContext<'ast>, - >; +/// Returns `true` if [`Parameters`] is empty (no parameters, no comments, etc.). +fn empty_parameters(parameters: &Parameters, source: &str) -> bool { + let mut tokenizer = SimpleTokenizer::new(source, parameters.range()) + .filter(|token| !matches!(token.kind, SimpleTokenKind::Whitespace)); - fn into_format(self) -> Self::Format { - FormatOwnedWithRule::new(self, FormatAnyFunctionDef) + let Some(lpar) = tokenizer.next() else { + return false; + }; + if !matches!(lpar.kind, SimpleTokenKind::LParen) { + return false; } + + let Some(rpar) = tokenizer.next() else { + return false; + }; + if !matches!(rpar.kind, SimpleTokenKind::RParen) { + return false; + } + + true } diff --git a/crates/ruff_python_formatter/src/statement/stmt_if.rs b/crates/ruff_python_formatter/src/statement/stmt_if.rs index 7eb8652fc0..35596b3c32 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_if.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_if.rs @@ -1,4 +1,4 @@ -use crate::comments::{leading_alternate_branch_comments, trailing_comments}; +use crate::comments::{leading_alternate_branch_comments, trailing_comments, SourceComment}; use crate::expression::maybe_parenthesize_expression; use crate::expression::parentheses::Parenthesize; use crate::prelude::*; @@ -43,7 +43,11 @@ impl FormatNodeRule for FormatStmtIf { Ok(()) } - fn fmt_dangling_comments(&self, _node: &StmtIf, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled by `fmt_fields` Ok(()) } diff --git a/crates/ruff_python_formatter/src/statement/stmt_import_from.rs b/crates/ruff_python_formatter/src/statement/stmt_import_from.rs index 30b76d57b6..ab7ffd9b9a 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_import_from.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_import_from.rs @@ -3,8 +3,9 @@ use ruff_formatter::{write, Buffer, Format, FormatResult}; use ruff_python_ast::node::AstNode; use ruff_python_ast::{Ranged, StmtImportFrom}; -use crate::builders::{parenthesize_if_expands, PyFormatterExtensions}; -use crate::comments::trailing_comments; +use crate::builders::{parenthesize_if_expands, PyFormatterExtensions, TrailingComma}; +use crate::comments::SourceComment; +use crate::expression::parentheses::parenthesized; use crate::{AsFormat, FormatNodeRule, PyFormatter}; #[derive(Default)] @@ -15,8 +16,8 @@ impl FormatNodeRule for FormatStmtImportFrom { let StmtImportFrom { module, names, - range: _, level, + range: _, } = item; let level_str = level @@ -43,21 +44,35 @@ impl FormatNodeRule for FormatStmtImportFrom { } } - let comments = f.context().comments().clone(); - let dangling_comments = comments.dangling_comments(item.as_any_node_ref()); - write!(f, [trailing_comments(dangling_comments)])?; - let names = format_with(|f| { f.join_comma_separated(item.end()) + .with_trailing_comma(TrailingComma::OneOrMore) .entries(names.iter().map(|name| (name, name.format()))) .finish() }); - parenthesize_if_expands(&names).fmt(f) + + // A dangling comment on an import is a parenthesized comment, like: + // ```python + // from example import ( # comment + // A, + // B, + // ) + // ``` + let comments = f.context().comments().clone(); + let parenthesized_comments = comments.dangling_comments(item.as_any_node_ref()); + + if parenthesized_comments.is_empty() { + parenthesize_if_expands(&names).fmt(f) + } else { + parenthesized("(", &names, ")") + .with_dangling_comments(parenthesized_comments) + .fmt(f) + } } fn fmt_dangling_comments( &self, - _node: &StmtImportFrom, + _dangling_comments: &[SourceComment], _f: &mut PyFormatter, ) -> FormatResult<()> { // Handled in `fmt_fields` diff --git a/crates/ruff_python_formatter/src/statement/stmt_ipy_escape_command.rs b/crates/ruff_python_formatter/src/statement/stmt_ipy_escape_command.rs new file mode 100644 index 0000000000..539ab3a8d8 --- /dev/null +++ b/crates/ruff_python_formatter/src/statement/stmt_ipy_escape_command.rs @@ -0,0 +1,11 @@ +use crate::prelude::*; +use ruff_python_ast::{Ranged, StmtIpyEscapeCommand}; + +#[derive(Default)] +pub struct FormatStmtIpyEscapeCommand; + +impl FormatNodeRule for FormatStmtIpyEscapeCommand { + fn fmt_fields(&self, item: &StmtIpyEscapeCommand, f: &mut PyFormatter) -> FormatResult<()> { + source_text_slice(item.range(), ContainsNewlines::No).fmt(f) + } +} diff --git a/crates/ruff_python_formatter/src/statement/stmt_line_magic.rs b/crates/ruff_python_formatter/src/statement/stmt_line_magic.rs deleted file mode 100644 index 906bd9a148..0000000000 --- a/crates/ruff_python_formatter/src/statement/stmt_line_magic.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::{verbatim_text, FormatNodeRule, PyFormatter}; -use ruff_formatter::{write, Buffer, FormatResult}; -use ruff_python_ast::StmtLineMagic; - -#[derive(Default)] -pub struct FormatStmtLineMagic; - -impl FormatNodeRule for FormatStmtLineMagic { - fn fmt_fields(&self, item: &StmtLineMagic, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [verbatim_text(item)]) - } -} diff --git a/crates/ruff_python_formatter/src/statement/stmt_match.rs b/crates/ruff_python_formatter/src/statement/stmt_match.rs index 073acc1722..9c58fcfe27 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_match.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_match.rs @@ -1,12 +1,75 @@ -use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; -use ruff_formatter::{write, Buffer, FormatResult}; +use ruff_formatter::{format_args, write, Buffer, FormatResult}; use ruff_python_ast::StmtMatch; +use crate::comments::{leading_alternate_branch_comments, trailing_comments, SourceComment}; +use crate::context::{NodeLevel, WithNodeLevel}; +use crate::expression::maybe_parenthesize_expression; +use crate::expression::parentheses::Parenthesize; +use crate::prelude::*; +use crate::{FormatNodeRule, PyFormatter}; + #[derive(Default)] pub struct FormatStmtMatch; impl FormatNodeRule for FormatStmtMatch { fn fmt_fields(&self, item: &StmtMatch, f: &mut PyFormatter) -> FormatResult<()> { - write!(f, [not_yet_implemented(item)]) + let StmtMatch { + range: _, + subject, + cases, + } = item; + + let comments = f.context().comments().clone(); + let dangling_item_comments = comments.dangling_comments(item); + + // There can be at most one dangling comment after the colon in a match statement. + debug_assert!(dangling_item_comments.len() <= 1); + + write!( + f, + [ + text("match"), + space(), + maybe_parenthesize_expression(subject, item, Parenthesize::IfBreaks), + text(":"), + trailing_comments(dangling_item_comments) + ] + )?; + + let mut cases_iter = cases.iter(); + let Some(first) = cases_iter.next() else { + return Ok(()); + }; + + // The new level is for the `case` nodes. + let mut f = WithNodeLevel::new(NodeLevel::CompoundStatement, f); + + write!(f, [block_indent(&first.format())])?; + let mut last_case = first; + + for case in cases_iter { + write!( + f, + [block_indent(&format_args!( + leading_alternate_branch_comments( + comments.leading_comments(case), + last_case.body.last(), + ), + case.format() + ))] + )?; + last_case = case; + } + + Ok(()) + } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + // Handled as part of `fmt_fields` + Ok(()) } } diff --git a/crates/ruff_python_formatter/src/statement/stmt_try.rs b/crates/ruff_python_formatter/src/statement/stmt_try.rs index 7db4372469..be5e108088 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_try.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_try.rs @@ -1,86 +1,13 @@ -use crate::comments; -use crate::comments::SourceComment; -use crate::comments::{leading_alternate_branch_comments, trailing_comments}; -use crate::other::except_handler_except_handler::ExceptHandlerKind; -use crate::prelude::*; -use crate::statement::FormatRefWithRule; -use crate::statement::Stmt; -use crate::{FormatNodeRule, PyFormatter}; use ruff_formatter::FormatRuleWithOptions; use ruff_formatter::{write, Buffer, FormatResult}; -use ruff_python_ast::node::AnyNodeRef; -use ruff_python_ast::{ExceptHandler, Ranged, StmtTry, StmtTryStar, Suite}; -use ruff_text_size::TextRange; +use ruff_python_ast::{ExceptHandler, Ranged, StmtTry, Suite}; -pub(super) enum AnyStatementTry<'a> { - Try(&'a StmtTry), - TryStar(&'a StmtTryStar), -} -impl<'a> AnyStatementTry<'a> { - const fn except_handler_kind(&self) -> ExceptHandlerKind { - match self { - AnyStatementTry::Try(_) => ExceptHandlerKind::Regular, - AnyStatementTry::TryStar(_) => ExceptHandlerKind::Starred, - } - } - - fn body(&self) -> &Suite { - match self { - AnyStatementTry::Try(try_) => &try_.body, - AnyStatementTry::TryStar(try_) => &try_.body, - } - } - - fn handlers(&self) -> &[ExceptHandler] { - match self { - AnyStatementTry::Try(try_) => try_.handlers.as_slice(), - AnyStatementTry::TryStar(try_) => try_.handlers.as_slice(), - } - } - fn orelse(&self) -> &Suite { - match self { - AnyStatementTry::Try(try_) => &try_.orelse, - AnyStatementTry::TryStar(try_) => &try_.orelse, - } - } - - fn finalbody(&self) -> &Suite { - match self { - AnyStatementTry::Try(try_) => &try_.finalbody, - AnyStatementTry::TryStar(try_) => &try_.finalbody, - } - } -} - -impl Ranged for AnyStatementTry<'_> { - fn range(&self) -> TextRange { - match self { - AnyStatementTry::Try(with) => with.range(), - AnyStatementTry::TryStar(with) => with.range(), - } - } -} - -impl<'a> From<&'a StmtTry> for AnyStatementTry<'a> { - fn from(value: &'a StmtTry) -> Self { - AnyStatementTry::Try(value) - } -} - -impl<'a> From<&'a StmtTryStar> for AnyStatementTry<'a> { - fn from(value: &'a StmtTryStar) -> Self { - AnyStatementTry::TryStar(value) - } -} - -impl<'a> From<&AnyStatementTry<'a>> for AnyNodeRef<'a> { - fn from(value: &AnyStatementTry<'a>) -> Self { - match value { - AnyStatementTry::Try(with) => AnyNodeRef::StmtTry(with), - AnyStatementTry::TryStar(with) => AnyNodeRef::StmtTryStar(with), - } - } -} +use crate::comments; +use crate::comments::{leading_alternate_branch_comments, trailing_comments, SourceComment}; +use crate::other::except_handler_except_handler::ExceptHandlerKind; +use crate::prelude::*; +use crate::statement::{FormatRefWithRule, Stmt}; +use crate::{FormatNodeRule, PyFormatter}; #[derive(Default)] pub struct FormatStmtTry; @@ -102,9 +29,10 @@ impl FormatRuleWithOptions> for FormatExceptH impl FormatRule> for FormatExceptHandler { fn fmt(&self, item: &ExceptHandler, f: &mut PyFormatter) -> FormatResult<()> { match item { - ExceptHandler::ExceptHandler(x) => { - x.format().with_options(self.except_handler_kind).fmt(f) - } + ExceptHandler::ExceptHandler(except_handler) => except_handler + .format() + .with_options(self.except_handler_kind) + .fmt(f), } } } @@ -121,14 +49,20 @@ impl<'ast> AsFormat> for ExceptHandler { FormatRefWithRule::new(self, FormatExceptHandler::default()) } } -impl Format> for AnyStatementTry<'_> { - fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { + +impl FormatNodeRule for FormatStmtTry { + fn fmt_fields(&self, item: &StmtTry, f: &mut PyFormatter) -> FormatResult<()> { + let StmtTry { + body, + handlers, + orelse, + finalbody, + is_star, + range: _, + } = item; + let comments_info = f.context().comments().clone(); - let mut dangling_comments = comments_info.dangling_comments(self); - let body = self.body(); - let handlers = self.handlers(); - let orelse = self.orelse(); - let finalbody = self.finalbody(); + let mut dangling_comments = comments_info.dangling_comments(item); (_, dangling_comments) = format_case("try", body, None, dangling_comments, f)?; let mut previous_node = body.last(); @@ -139,7 +73,11 @@ impl Format> for AnyStatementTry<'_> { f, [ leading_alternate_branch_comments(handler_comments, previous_node), - &handler.format().with_options(self.except_handler_kind()), + &handler.format().with_options(if *is_star { + ExceptHandlerKind::Starred + } else { + ExceptHandlerKind::Regular + }), ] )?; previous_node = match handler { @@ -154,14 +92,12 @@ impl Format> for AnyStatementTry<'_> { write!(f, [comments::dangling_comments(dangling_comments)]) } -} -impl FormatNodeRule for FormatStmtTry { - fn fmt_fields(&self, item: &StmtTry, f: &mut PyFormatter) -> FormatResult<()> { - AnyStatementTry::from(item).fmt(f) - } - - fn fmt_dangling_comments(&self, _node: &StmtTry, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // dangling comments are formatted as part of AnyStatementTry::fmt Ok(()) } diff --git a/crates/ruff_python_formatter/src/statement/stmt_try_star.rs b/crates/ruff_python_formatter/src/statement/stmt_try_star.rs index 3c20fc42ee..8b13789179 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_try_star.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_try_star.rs @@ -1,19 +1 @@ -use crate::statement::stmt_try::AnyStatementTry; -use crate::{FormatNodeRule, PyFormatter}; -use ruff_formatter::Format; -use ruff_formatter::FormatResult; -use ruff_python_ast::StmtTryStar; -#[derive(Default)] -pub struct FormatStmtTryStar; - -impl FormatNodeRule for FormatStmtTryStar { - fn fmt_fields(&self, item: &StmtTryStar, f: &mut PyFormatter) -> FormatResult<()> { - AnyStatementTry::from(item).fmt(f) - } - - fn fmt_dangling_comments(&self, _node: &StmtTryStar, _f: &mut PyFormatter) -> FormatResult<()> { - // dangling comments are formatted as part of AnyStatementTry::fmt - Ok(()) - } -} diff --git a/crates/ruff_python_formatter/src/statement/stmt_while.rs b/crates/ruff_python_formatter/src/statement/stmt_while.rs index 3ee9e1a7a3..504c6f8489 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_while.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_while.rs @@ -1,4 +1,4 @@ -use crate::comments::{leading_alternate_branch_comments, trailing_comments}; +use crate::comments::{leading_alternate_branch_comments, trailing_comments, SourceComment}; use crate::expression::maybe_parenthesize_expression; use crate::expression::parentheses::Parenthesize; use crate::prelude::*; @@ -62,7 +62,11 @@ impl FormatNodeRule for FormatStmtWhile { Ok(()) } - fn fmt_dangling_comments(&self, _node: &StmtWhile, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled in `fmt_fields` Ok(()) } diff --git a/crates/ruff_python_formatter/src/statement/stmt_with.rs b/crates/ruff_python_formatter/src/statement/stmt_with.rs index 828d0e3536..fb08c27f76 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_with.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_with.rs @@ -1,92 +1,68 @@ -use ruff_python_ast::{Ranged, StmtAsyncWith, StmtWith, Suite, WithItem}; +use ruff_formatter::{format_args, write, FormatError}; +use ruff_python_ast::node::AstNode; +use ruff_python_ast::{Ranged, StmtWith}; +use ruff_python_trivia::{SimpleTokenKind, SimpleTokenizer}; use ruff_text_size::TextRange; -use ruff_formatter::{format_args, write, FormatError}; -use ruff_python_ast::node::AnyNodeRef; -use ruff_python_trivia::{SimpleTokenKind, SimpleTokenizer}; - -use crate::comments::trailing_comments; +use crate::comments::{trailing_comments, SourceComment}; use crate::expression::parentheses::{ - in_parentheses_only_soft_line_break_or_space, optional_parentheses, + in_parentheses_only_soft_line_break_or_space, optional_parentheses, parenthesized, }; use crate::prelude::*; use crate::FormatNodeRule; -pub(super) enum AnyStatementWith<'a> { - With(&'a StmtWith), - AsyncWith(&'a StmtAsyncWith), -} - -impl<'a> AnyStatementWith<'a> { - const fn is_async(&self) -> bool { - matches!(self, AnyStatementWith::AsyncWith(_)) - } - - fn items(&self) -> &[WithItem] { - match self { - AnyStatementWith::With(with) => with.items.as_slice(), - AnyStatementWith::AsyncWith(with) => with.items.as_slice(), - } - } - - fn body(&self) -> &Suite { - match self { - AnyStatementWith::With(with) => &with.body, - AnyStatementWith::AsyncWith(with) => &with.body, - } - } -} - -impl Ranged for AnyStatementWith<'_> { - fn range(&self) -> TextRange { - match self { - AnyStatementWith::With(with) => with.range(), - AnyStatementWith::AsyncWith(with) => with.range(), - } - } -} - -impl<'a> From<&'a StmtWith> for AnyStatementWith<'a> { - fn from(value: &'a StmtWith) -> Self { - AnyStatementWith::With(value) - } -} - -impl<'a> From<&'a StmtAsyncWith> for AnyStatementWith<'a> { - fn from(value: &'a StmtAsyncWith) -> Self { - AnyStatementWith::AsyncWith(value) - } -} - -impl<'a> From<&AnyStatementWith<'a>> for AnyNodeRef<'a> { - fn from(value: &AnyStatementWith<'a>) -> Self { - match value { - AnyStatementWith::With(with) => AnyNodeRef::StmtWith(with), - AnyStatementWith::AsyncWith(with) => AnyNodeRef::StmtAsyncWith(with), - } - } -} - -impl Format> for AnyStatementWith<'_> { - fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { - let comments = f.context().comments().clone(); - let dangling_comments = comments.dangling_comments(self); +#[derive(Default)] +pub struct FormatStmtWith; +impl FormatNodeRule for FormatStmtWith { + fn fmt_fields(&self, item: &StmtWith, f: &mut PyFormatter) -> FormatResult<()> { write!( f, [ - self.is_async() + item.is_async .then_some(format_args![text("async"), space()]), text("with"), space() ] )?; - if are_with_items_parenthesized(self, f.context())? { - optional_parentheses(&format_with(|f| { - let mut joiner = f.join_comma_separated(self.body().first().unwrap().start()); + // The `with` statement can have one dangling comment on the open parenthesis, like: + // ```python + // with ( # comment + // CtxManager() as example + // ): + // ... + // ``` + // + // Any other dangling comments are trailing comments on the colon, like: + // ```python + // with CtxManager() as example: # comment + // ... + // ``` + let comments = f.context().comments().clone(); + let dangling_comments = comments.dangling_comments(item.as_any_node_ref()); + let partition_point = dangling_comments.partition_point(|comment| { + item.items + .first() + .is_some_and(|with_item| with_item.start() > comment.start()) + }); + let (parenthesized_comments, colon_comments) = dangling_comments.split_at(partition_point); - for item in self.items() { + if !parenthesized_comments.is_empty() { + let joined = format_with(|f: &mut PyFormatter| { + f.join_comma_separated(item.body.first().unwrap().start()) + .nodes(&item.items) + .finish() + }); + + parenthesized("(", &joined, ")") + .with_dangling_comments(parenthesized_comments) + .fmt(f)?; + } else if are_with_items_parenthesized(item, f.context())? { + optional_parentheses(&format_with(|f| { + let mut joiner = f.join_comma_separated(item.body.first().unwrap().start()); + + for item in &item.items { joiner.entry_with_line_separator( item, &item.format(), @@ -98,7 +74,7 @@ impl Format> for AnyStatementWith<'_> { .fmt(f)?; } else { f.join_with(format_args![text(","), space()]) - .entries(self.items().iter().formatted()) + .entries(item.items.iter().formatted()) .finish()?; } @@ -106,19 +82,25 @@ impl Format> for AnyStatementWith<'_> { f, [ text(":"), - trailing_comments(dangling_comments), - block_indent(&self.body().format()) + trailing_comments(colon_comments), + block_indent(&item.body.format()) ] ) } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + // Handled in `fmt_fields` + Ok(()) + } } -fn are_with_items_parenthesized( - with: &AnyStatementWith, - context: &PyFormatContext, -) -> FormatResult { +fn are_with_items_parenthesized(with: &StmtWith, context: &PyFormatContext) -> FormatResult { let first_with_item = with - .items() + .items .first() .ok_or(FormatError::syntax_error("Expected at least one with item"))?; let before_first_with_item = TextRange::new(with.start(), first_with_item.start()); @@ -145,17 +127,3 @@ fn are_with_items_parenthesized( None => Ok(false), } } - -#[derive(Default)] -pub struct FormatStmtWith; - -impl FormatNodeRule for FormatStmtWith { - fn fmt_fields(&self, item: &StmtWith, f: &mut PyFormatter) -> FormatResult<()> { - AnyStatementWith::from(item).fmt(f) - } - - fn fmt_dangling_comments(&self, _node: &StmtWith, _f: &mut PyFormatter) -> FormatResult<()> { - // Handled in `fmt_fields` - Ok(()) - } -} diff --git a/crates/ruff_python_formatter/src/statement/suite.rs b/crates/ruff_python_formatter/src/statement/suite.rs index 771ad26036..383589dde5 100644 --- a/crates/ruff_python_formatter/src/statement/suite.rs +++ b/crates/ruff_python_formatter/src/statement/suite.rs @@ -1,10 +1,19 @@ +use crate::comments::{leading_comments, trailing_comments}; use ruff_formatter::{write, FormatOwnedWithRule, FormatRefWithRule, FormatRuleWithOptions}; use ruff_python_ast::helpers::is_compound_statement; -use ruff_python_ast::{self as ast, Constant, Expr, Ranged, Stmt, Suite}; +use ruff_python_ast::node::AnyNodeRef; +use ruff_python_ast::{self as ast, Constant, Expr, ExprConstant, Ranged, Stmt, Suite}; use ruff_python_trivia::{lines_after_ignoring_trivia, lines_before}; +use ruff_text_size::TextRange; use crate::context::{NodeLevel, WithNodeLevel}; +use crate::expression::expr_constant::ExprConstantLayout; +use crate::expression::string::StringLayout; use crate::prelude::*; +use crate::verbatim::{ + write_suppressed_statements_starting_with_leading_comment, + write_suppressed_statements_starting_with_trailing_comment, +}; /// Level at which the [`Suite`] appears in the source code. #[derive(Copy, Clone, Debug)] @@ -46,174 +55,295 @@ impl FormatRule> for FormatSuite { let comments = f.context().comments().clone(); let source = f.context().source(); - - let mut iter = statements.iter(); - let Some(first) = iter.next() else { - return Ok(()); - }; + let source_type = f.options().source_type(); let mut f = WithNodeLevel::new(node_level, f); - - // Format the first statement in the body, which often has special formatting rules. - let mut last = first; - match self.kind { - SuiteKind::Other => { - if is_class_or_function_definition(first) && !comments.has_leading_comments(first) { - // Add an empty line for any nested functions or classes defined within - // non-function or class compound statements, e.g., this is stable formatting: - // ```python - // if True: - // - // def test(): - // ... - // ``` - write!(f, [empty_line()])?; - } - write!(f, [first.format()])?; - } - SuiteKind::Class if is_docstring(first) => { - if !comments.has_leading_comments(first) && lines_before(first.start(), source) > 1 - { - // Allow up to one empty line before a class docstring, e.g., this is - // stable formatting: - // ```python - // class Test: - // - // """Docstring""" - // ``` - write!(f, [empty_line()])?; - } - write!(f, [first.format()])?; - - // Enforce an empty line after a class docstring, e.g., these are both stable - // formatting: - // ```python - // class Test: - // """Docstring""" - // - // ... - // - // - // class Test: - // - // """Docstring""" - // - // ... - // ``` - if let Some(second) = iter.next() { - // Format the subsequent statement immediately. This rule takes precedence - // over the rules in the loop below (and most of them won't apply anyway, - // e.g., we know the first statement isn't an import). - write!(f, [empty_line(), second.format()])?; - last = second; - } - } - _ => { - write!(f, [first.format()])?; - } - } - - for statement in iter { - if is_class_or_function_definition(last) || is_class_or_function_definition(statement) { - match self.kind { - SuiteKind::TopLevel => { - write!(f, [empty_line(), empty_line(), statement.format()])?; - } - SuiteKind::Function | SuiteKind::Class | SuiteKind::Other => { - write!(f, [empty_line(), statement.format()])?; - } - } - } else if is_import_definition(last) && !is_import_definition(statement) { - write!(f, [empty_line(), statement.format()])?; - } else if is_compound_statement(last) { - // Handles the case where a body has trailing comments. The issue is that RustPython does not include - // the comments in the range of the suite. This means, the body ends right after the last statement in the body. - // ```python - // def test(): - // ... - // # The body of `test` ends right after `...` and before this comment - // - // # leading comment - // - // - // a = 10 - // ``` - // Using `lines_after` for the node doesn't work because it would count the lines after the `...` - // which is 0 instead of 1, the number of lines between the trailing comment and - // the leading comment. This is why the suite handling counts the lines before the - // start of the next statement or before the first leading comments for compound statements. - let start = - if let Some(first_leading) = comments.leading_comments(statement).first() { - first_leading.slice().start() - } else { - statement.start() - }; - - match lines_before(start, source) { - 0 | 1 => write!(f, [hard_line_break()])?, - 2 => write!(f, [empty_line()])?, - 3.. => match self.kind { - SuiteKind::TopLevel => write!(f, [empty_line(), empty_line()])?, - SuiteKind::Function | SuiteKind::Class | SuiteKind::Other => { - write!(f, [empty_line()])?; - } - }, - } - - write!(f, [statement.format()])?; - } else { - // Insert the appropriate number of empty lines based on the node level, e.g.: - // * [`NodeLevel::Module`]: Up to two empty lines - // * [`NodeLevel::CompoundStatement`]: Up to one empty line - // * [`NodeLevel::Expression`]: No empty lines - - let count_lines = |offset| { - // It's necessary to skip any trailing line comment because RustPython doesn't include trailing comments - // in the node's range - // ```python - // a # The range of `a` ends right before this comment - // - // b - // ``` - // - // Simply using `lines_after` doesn't work if a statement has a trailing comment because - // it then counts the lines between the statement and the trailing comment, which is - // always 0. This is why it skips any trailing trivia (trivia that's on the same line) - // and counts the lines after. - lines_after_ignoring_trivia(offset, source) + write!( + f, + [format_with(|f| { + let mut iter = statements.iter(); + let Some(first) = iter.next() else { + return Ok(()); }; - match node_level { - NodeLevel::TopLevel => match count_lines(last.end()) { - 0 | 1 => write!(f, [hard_line_break()])?, - 2 => write!(f, [empty_line()])?, - _ => write!(f, [empty_line(), empty_line()])?, - }, - NodeLevel::CompoundStatement => match count_lines(last.end()) { - 0 | 1 => write!(f, [hard_line_break()])?, - _ => write!(f, [empty_line()])?, - }, - NodeLevel::Expression(_) | NodeLevel::ParenthesizedExpression => { - write!(f, [hard_line_break()])?; + // Format the first statement in the body, which often has special formatting rules. + let first = match self.kind { + SuiteKind::Other => { + if is_class_or_function_definition(first) + && !comments.has_leading_comments(first) + { + // Add an empty line for any nested functions or classes defined within + // non-function or class compound statements, e.g., this is stable formatting: + // ```python + // if True: + // + // def test(): + // ... + // ``` + empty_line().fmt(f)?; + } + + SuiteChildStatement::Other(first) + } + + SuiteKind::Function => { + if let Some(docstring) = DocstringStmt::try_from_statement(first) { + SuiteChildStatement::Docstring(docstring) + } else { + SuiteChildStatement::Other(first) + } + } + + SuiteKind::Class => { + if let Some(docstring) = DocstringStmt::try_from_statement(first) { + if !comments.has_leading_comments(first) + && lines_before(first.start(), source) > 1 + { + // Allow up to one empty line before a class docstring, e.g., this is + // stable formatting: + // ```python + // class Test: + // + // """Docstring""" + // ``` + empty_line().fmt(f)?; + } + + SuiteChildStatement::Docstring(docstring) + } else { + SuiteChildStatement::Other(first) + } + } + SuiteKind::TopLevel => SuiteChildStatement::Other(first), + }; + + let first_comments = comments.leading_dangling_trailing_comments(first); + + let (mut preceding, mut after_class_docstring) = if first_comments + .leading + .iter() + .any(|comment| comment.is_suppression_off_comment(source)) + { + ( + write_suppressed_statements_starting_with_leading_comment( + first, &mut iter, f, + )?, + false, + ) + } else if first_comments + .trailing + .iter() + .any(|comment| comment.is_suppression_off_comment(source)) + { + ( + write_suppressed_statements_starting_with_trailing_comment( + first, &mut iter, f, + )?, + false, + ) + } else { + first.fmt(f)?; + ( + first.statement(), + matches!(first, SuiteChildStatement::Docstring(_)) + && matches!(self.kind, SuiteKind::Class), + ) + }; + + while let Some(following) = iter.next() { + if is_class_or_function_definition(preceding) + || is_class_or_function_definition(following) + { + match self.kind { + SuiteKind::TopLevel if source_type.is_stub() => { + // Preserve the empty line if the definitions are separated by a comment + if comments.has_trailing_comments(preceding) + || comments.has_leading_comments(following) + { + empty_line().fmt(f)?; + } else { + // Two subsequent classes that both have an ellipsis only body + // ```python + // class A: ... + // class B: ... + // ``` + let class_sequences_with_ellipsis_only = + preceding.as_class_def_stmt().is_some_and(|class| { + contains_only_an_ellipsis(&class.body) + }) && following.as_class_def_stmt().is_some_and(|class| { + contains_only_an_ellipsis(&class.body) + }); + + // Two subsequent functions where the preceding has an ellipsis only body + // ```python + // def test(): ... + // def b(): a + // ``` + let function_with_ellipsis = + preceding.as_function_def_stmt().is_some_and(|function| { + contains_only_an_ellipsis(&function.body) + }) && following.is_function_def_stmt(); + + // Don't add an empty line between two classes that have an `...` body only or after + // a function with an `...` body. Otherwise add an empty line. + if !class_sequences_with_ellipsis_only + && !function_with_ellipsis + { + empty_line().fmt(f)?; + } + } + } + SuiteKind::TopLevel => { + write!(f, [empty_line(), empty_line()])?; + } + SuiteKind::Function | SuiteKind::Class | SuiteKind::Other => { + empty_line().fmt(f)?; + } + } + } else if is_import_definition(preceding) && !is_import_definition(following) { + empty_line().fmt(f)?; + } else if is_compound_statement(preceding) { + // Handles the case where a body has trailing comments. The issue is that RustPython does not include + // the comments in the range of the suite. This means, the body ends right after the last statement in the body. + // ```python + // def test(): + // ... + // # The body of `test` ends right after `...` and before this comment + // + // # leading comment + // + // + // a = 10 + // ``` + // Using `lines_after` for the node doesn't work because it would count the lines after the `...` + // which is 0 instead of 1, the number of lines between the trailing comment and + // the leading comment. This is why the suite handling counts the lines before the + // start of the next statement or before the first leading comments for compound statements. + let start = if let Some(first_leading) = + comments.leading_comments(following).first() + { + first_leading.slice().start() + } else { + following.start() + }; + + match lines_before(start, source) { + 0 | 1 => hard_line_break().fmt(f)?, + 2 => empty_line().fmt(f)?, + 3.. => match self.kind { + SuiteKind::TopLevel => write!(f, [empty_line(), empty_line()])?, + SuiteKind::Function | SuiteKind::Class | SuiteKind::Other => { + empty_line().fmt(f)?; + } + }, + } + } else if after_class_docstring { + // Enforce an empty line after a class docstring, e.g., these are both stable + // formatting: + // ```python + // class Test: + // """Docstring""" + // + // ... + // + // + // class Test: + // + // """Docstring""" + // + // ... + // ``` + empty_line().fmt(f)?; + after_class_docstring = false; + } else { + // Insert the appropriate number of empty lines based on the node level, e.g.: + // * [`NodeLevel::Module`]: Up to two empty lines + // * [`NodeLevel::CompoundStatement`]: Up to one empty line + // * [`NodeLevel::Expression`]: No empty lines + + let count_lines = |offset| { + // It's necessary to skip any trailing line comment because RustPython doesn't include trailing comments + // in the node's range + // ```python + // a # The range of `a` ends right before this comment + // + // b + // ``` + // + // Simply using `lines_after` doesn't work if a statement has a trailing comment because + // it then counts the lines between the statement and the trailing comment, which is + // always 0. This is why it skips any trailing trivia (trivia that's on the same line) + // and counts the lines after. + lines_after_ignoring_trivia(offset, source) + }; + + match node_level { + NodeLevel::TopLevel => match count_lines(preceding.end()) { + 0 | 1 => hard_line_break().fmt(f)?, + 2 => empty_line().fmt(f)?, + _ => write!(f, [empty_line(), empty_line()])?, + }, + NodeLevel::CompoundStatement => match count_lines(preceding.end()) { + 0 | 1 => hard_line_break().fmt(f)?, + _ => empty_line().fmt(f)?, + }, + NodeLevel::Expression(_) | NodeLevel::ParenthesizedExpression => { + hard_line_break().fmt(f)?; + } + } + } + + let following_comments = comments.leading_dangling_trailing_comments(following); + + if following_comments + .leading + .iter() + .any(|comment| comment.is_suppression_off_comment(source)) + { + preceding = write_suppressed_statements_starting_with_leading_comment( + SuiteChildStatement::Other(following), + &mut iter, + f, + )?; + } else if following_comments + .trailing + .iter() + .any(|comment| comment.is_suppression_off_comment(source)) + { + preceding = write_suppressed_statements_starting_with_trailing_comment( + SuiteChildStatement::Other(following), + &mut iter, + f, + )?; + } else { + following.format().fmt(f)?; + preceding = following; } } - write!(f, [statement.format()])?; - } + Ok(()) + })] + ) + } +} - last = statement; - } - - Ok(()) +/// Returns `true` if a function or class body contains only an ellipsis. +fn contains_only_an_ellipsis(body: &[Stmt]) -> bool { + match body { + [Stmt::Expr(ast::StmtExpr { value, .. })] => matches!( + value.as_ref(), + Expr::Constant(ast::ExprConstant { + value: Constant::Ellipsis, + .. + }) + ), + _ => false, } } /// Returns `true` if a [`Stmt`] is a class or function definition. const fn is_class_or_function_definition(stmt: &Stmt) -> bool { - matches!( - stmt, - Stmt::FunctionDef(_) | Stmt::AsyncFunctionDef(_) | Stmt::ClassDef(_) - ) + matches!(stmt, Stmt::FunctionDef(_) | Stmt::ClassDef(_)) } /// Returns `true` if a [`Stmt`] is an import. @@ -221,20 +351,6 @@ const fn is_import_definition(stmt: &Stmt) -> bool { matches!(stmt, Stmt::Import(_) | Stmt::ImportFrom(_)) } -fn is_docstring(stmt: &Stmt) -> bool { - let Stmt::Expr(ast::StmtExpr { value, .. }) = stmt else { - return false; - }; - - matches!( - value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Str(..), - .. - }) - ) -} - impl FormatRuleWithOptions> for FormatSuite { type Options = SuiteKind; @@ -260,10 +376,96 @@ impl<'ast> IntoFormat> for Suite { } } +/// A statement representing a docstring. +#[derive(Copy, Clone)] +pub(crate) struct DocstringStmt<'a>(&'a Stmt); + +impl<'a> DocstringStmt<'a> { + /// Checks if the statement is a simple string that can be formatted as a docstring + fn try_from_statement(stmt: &'a Stmt) -> Option> { + let Stmt::Expr(ast::StmtExpr { value, .. }) = stmt else { + return None; + }; + + if let Expr::Constant(ExprConstant { value, .. }) = value.as_ref() { + if !value.is_implicit_concatenated() { + return Some(DocstringStmt(stmt)); + } + } + + None + } +} + +impl Format> for DocstringStmt<'_> { + fn fmt(&self, f: &mut Formatter>) -> FormatResult<()> { + // SAFETY: Safe because `DocStringStmt` guarantees that it only ever wraps a `ExprStmt` containing a `ConstantExpr`. + let constant = self + .0 + .as_expr_stmt() + .unwrap() + .value + .as_constant_expr() + .unwrap(); + let comments = f.context().comments().clone(); + + // We format the expression, but the statement carries the comments + write!( + f, + [ + leading_comments(comments.leading_comments(self.0)), + constant + .format() + .with_options(ExprConstantLayout::String(StringLayout::DocString)), + trailing_comments(comments.trailing_comments(self.0)), + ] + ) + } +} + +/// A Child of a suite. +#[derive(Copy, Clone)] +pub(crate) enum SuiteChildStatement<'a> { + /// A docstring documenting a class or function definition. + Docstring(DocstringStmt<'a>), + + /// Any other statement. + Other(&'a Stmt), +} + +impl<'a> SuiteChildStatement<'a> { + pub(crate) const fn statement(self) -> &'a Stmt { + match self { + SuiteChildStatement::Docstring(docstring) => docstring.0, + SuiteChildStatement::Other(statement) => statement, + } + } +} + +impl Ranged for SuiteChildStatement<'_> { + fn range(&self) -> TextRange { + self.statement().range() + } +} + +impl<'a> From> for AnyNodeRef<'a> { + fn from(value: SuiteChildStatement<'a>) -> Self { + value.statement().into() + } +} + +impl Format> for SuiteChildStatement<'_> { + fn fmt(&self, f: &mut Formatter>) -> FormatResult<()> { + match self { + SuiteChildStatement::Docstring(docstring) => docstring.fmt(f), + SuiteChildStatement::Other(statement) => statement.format().fmt(f), + } + } +} + #[cfg(test)] mod tests { use ruff_formatter::format; - use ruff_python_parser::parse_suite; use crate::comments::Comments; diff --git a/crates/ruff_python_formatter/src/type_param/type_params.rs b/crates/ruff_python_formatter/src/type_param/type_params.rs index 8c82caec1e..0c48581530 100644 --- a/crates/ruff_python_formatter/src/type_param/type_params.rs +++ b/crates/ruff_python_formatter/src/type_param/type_params.rs @@ -1,5 +1,5 @@ use crate::builders::PyFormatterExtensions; -use crate::comments::trailing_comments; +use crate::comments::{trailing_comments, SourceComment}; use crate::expression::parentheses::parenthesized; use crate::prelude::*; use ruff_formatter::write; @@ -34,7 +34,11 @@ impl FormatNodeRule for FormatTypeParams { parenthesized("[", &items, "]").fmt(f) } - fn fmt_dangling_comments(&self, _node: &TypeParams, _f: &mut PyFormatter) -> FormatResult<()> { + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { // Handled in `fmt_fields` Ok(()) } diff --git a/crates/ruff_python_formatter/src/verbatim.rs b/crates/ruff_python_formatter/src/verbatim.rs new file mode 100644 index 0000000000..fcb741c80b --- /dev/null +++ b/crates/ruff_python_formatter/src/verbatim.rs @@ -0,0 +1,884 @@ +use std::borrow::Cow; +use std::iter::FusedIterator; + +use unicode_width::UnicodeWidthStr; + +use ruff_formatter::{write, FormatError}; +use ruff_python_ast::node::AnyNodeRef; +use ruff_python_ast::{Ranged, Stmt}; +use ruff_python_parser::lexer::{lex_starts_at, LexResult}; +use ruff_python_parser::{Mode, Tok}; +use ruff_python_trivia::lines_before; +use ruff_source_file::Locator; +use ruff_text_size::{TextRange, TextSize}; + +use crate::comments::format::{empty_lines, format_comment}; +use crate::comments::{leading_comments, trailing_comments, SourceComment}; +use crate::prelude::*; +use crate::statement::suite::SuiteChildStatement; + +/// Disables formatting for all statements between the `first_suppressed` that has a leading `fmt: off` comment +/// and the first trailing or leading `fmt: on` comment. The statements are formatted as they appear in the source code. +/// +/// Returns the last formatted statement. +/// +/// ## Panics +/// If `first_suppressed` has no leading suppression comment. +#[cold] +pub(crate) fn write_suppressed_statements_starting_with_leading_comment<'a>( + // The first suppressed statement + first_suppressed: SuiteChildStatement<'a>, + statements: &mut std::slice::Iter<'a, Stmt>, + f: &mut PyFormatter, +) -> FormatResult<&'a Stmt> { + let comments = f.context().comments().clone(); + let source = f.context().source(); + + let mut leading_comment_ranges = + CommentRangeIter::outside_suppression(comments.leading_comments(first_suppressed), source); + + let before_format_off = leading_comment_ranges + .next() + .expect("Suppressed node to have leading comments"); + + let (formatted_comments, format_off_comment) = before_format_off.unwrap_suppression_starts(); + + // Format the leading comments before the fmt off + // ```python + // # leading comment that gets formatted + // # fmt: off + // statement + // ``` + write!( + f, + [ + leading_comments(formatted_comments), + // Format the off comment without adding any trailing new lines + format_comment(format_off_comment) + ] + )?; + + format_off_comment.mark_formatted(); + + // Now inside a suppressed range + write_suppressed_statements( + format_off_comment, + first_suppressed, + leading_comment_ranges.as_slice(), + statements, + f, + ) +} + +/// Disables formatting for all statements between the `last_formatted` and the first trailing or leading `fmt: on` comment. +/// The statements are formatted as they appear in the source code. +/// +/// Returns the last formatted statement. +/// +/// ## Panics +/// If `last_formatted` has no trailing suppression comment. +#[cold] +pub(crate) fn write_suppressed_statements_starting_with_trailing_comment<'a>( + last_formatted: SuiteChildStatement<'a>, + statements: &mut std::slice::Iter<'a, Stmt>, + f: &mut PyFormatter, +) -> FormatResult<&'a Stmt> { + let comments = f.context().comments().clone(); + let source = f.context().source(); + let indentation = Indentation::from_stmt(last_formatted.statement(), source); + + let trailing_node_comments = comments.trailing_comments(last_formatted); + let mut trailing_comment_ranges = + CommentRangeIter::outside_suppression(trailing_node_comments, source); + + // Formatted comments gets formatted as part of the statement. + let (_, mut format_off_comment) = trailing_comment_ranges + .next() + .expect("Suppressed statement to have trailing comments") + .unwrap_suppression_starts(); + + let maybe_suppressed = trailing_comment_ranges.as_slice(); + + // Mark them as formatted so that calling the node's formatting doesn't format the comments. + for comment in maybe_suppressed { + comment.mark_formatted(); + } + format_off_comment.mark_formatted(); + + // Format the leading comments, the node, and the trailing comments up to the `fmt: off` comment. + last_formatted.fmt(f)?; + + format_off_comment.mark_unformatted(); + TrailingFormatOffComment(format_off_comment).fmt(f)?; + + for range in trailing_comment_ranges { + match range { + // A `fmt: off`..`fmt: on` sequence. Disable formatting for the in-between comments. + // ```python + // def test(): + // pass + // # fmt: off + // # haha + // # fmt: on + // # fmt: off (maybe) + // ``` + SuppressionComments::SuppressionEnds { + suppressed_comments: _, + format_on_comment, + formatted_comments, + format_off_comment: new_format_off_comment, + } => { + format_on_comment.mark_unformatted(); + + for comment in formatted_comments { + comment.mark_unformatted(); + } + + write!( + f, + [ + FormatVerbatimStatementRange { + verbatim_range: TextRange::new( + format_off_comment.end(), + format_on_comment.start(), + ), + indentation + }, + trailing_comments(std::slice::from_ref(format_on_comment)), + trailing_comments(formatted_comments), + ] + )?; + + // `fmt: off`..`fmt:on`..`fmt:off` sequence + // ```python + // def test(): + // pass + // # fmt: off + // # haha + // # fmt: on + // # fmt: off + // ``` + if let Some(new_format_off_comment) = new_format_off_comment { + new_format_off_comment.mark_unformatted(); + + TrailingFormatOffComment(new_format_off_comment).fmt(f)?; + + format_off_comment = new_format_off_comment; + } else { + // `fmt: off`..`fmt:on` sequence. The suppression ends here. Start formatting the nodes again. + return Ok(last_formatted.statement()); + } + } + + // All comments in this range are suppressed + SuppressionComments::Suppressed { comments: _ } => {} + // SAFETY: Unreachable because the function returns as soon as it reaches the end of the suppressed range + SuppressionComments::SuppressionStarts { .. } + | SuppressionComments::Formatted { .. } => unreachable!(), + } + } + + // The statement with the suppression comment isn't the last statement in the suite. + // Format the statements up to the first `fmt: on` comment (or end of the suite) as verbatim/suppressed. + // ```python + // a + b + // # fmt: off + // + // def a(): + // pass + // ``` + if let Some(first_suppressed) = statements.next() { + write_suppressed_statements( + format_off_comment, + SuiteChildStatement::Other(first_suppressed), + comments.leading_comments(first_suppressed), + statements, + f, + ) + } + // The suppression comment is the block's last node. Format any trailing comments as suppressed + // ```python + // def test(): + // pass + // # fmt: off + // # a trailing comment + // ``` + else if let Some(last_comment) = trailing_node_comments.last() { + FormatVerbatimStatementRange { + verbatim_range: TextRange::new(format_off_comment.end(), last_comment.end()), + indentation, + } + .fmt(f)?; + Ok(last_formatted.statement()) + } + // The suppression comment is the very last code in the block. There's nothing more to format. + // ```python + // def test(): + // pass + // # fmt: off + // ``` + else { + Ok(last_formatted.statement()) + } +} + +/// Formats the statements from `first_suppressed` until the suppression ends (by a `fmt: on` comment) +/// as they appear in the source code. +fn write_suppressed_statements<'a>( + // The `fmt: off` comment that starts the suppressed range. Can be a leading comment of `first_suppressed` or + // a trailing comment of the previous node. + format_off_comment: &SourceComment, + // The first suppressed statement + first_suppressed: SuiteChildStatement<'a>, + // The leading comments of `first_suppressed` that come after the `format_off_comment` + first_suppressed_leading_comments: &[SourceComment], + // The remaining statements + statements: &mut std::slice::Iter<'a, Stmt>, + f: &mut PyFormatter, +) -> FormatResult<&'a Stmt> { + let comments = f.context().comments().clone(); + let source = f.context().source(); + + let mut statement = first_suppressed; + let mut leading_node_comments = first_suppressed_leading_comments; + let mut format_off_comment = format_off_comment; + let indentation = Indentation::from_stmt(first_suppressed.statement(), source); + + loop { + for range in CommentRangeIter::in_suppression(leading_node_comments, source) { + match range { + // All leading comments are suppressed + // ```python + // # suppressed comment + // statement + // ``` + SuppressionComments::Suppressed { comments } => { + for comment in comments { + comment.mark_formatted(); + } + } + + // Node has a leading `fmt: on` comment and maybe another `fmt: off` comment + // ```python + // # suppressed comment (optional) + // # fmt: on + // # formatted comment (optional) + // # fmt: off (optional) + // statement + // ``` + SuppressionComments::SuppressionEnds { + suppressed_comments, + format_on_comment, + formatted_comments, + format_off_comment: new_format_off_comment, + } => { + for comment in suppressed_comments { + comment.mark_formatted(); + } + + write!( + f, + [ + FormatVerbatimStatementRange { + verbatim_range: TextRange::new( + format_off_comment.end(), + format_on_comment.start(), + ), + indentation + }, + leading_comments(std::slice::from_ref(format_on_comment)), + leading_comments(formatted_comments), + ] + )?; + + if let Some(new_format_off_comment) = new_format_off_comment { + format_off_comment = new_format_off_comment; + format_comment(format_off_comment).fmt(f)?; + format_off_comment.mark_formatted(); + } else { + // Suppression ends here. Test if the node has a trailing suppression comment and, if so, + // recurse and format the trailing comments and the following statements as suppressed. + return if comments + .trailing_comments(statement) + .iter() + .any(|comment| comment.is_suppression_off_comment(source)) + { + // Node has a trailing suppression comment, hell yeah, start all over again. + write_suppressed_statements_starting_with_trailing_comment( + statement, statements, f, + ) + } else { + // Formats the trailing comments + statement.fmt(f)?; + Ok(statement.statement()) + }; + } + } + + // Unreachable because the function exits as soon as it reaches the end of the suppression + // and it already starts in a suppressed range. + SuppressionComments::SuppressionStarts { .. } => unreachable!(), + SuppressionComments::Formatted { .. } => unreachable!(), + } + } + + comments.mark_verbatim_node_comments_formatted(AnyNodeRef::from(statement)); + + for range in CommentRangeIter::in_suppression(comments.trailing_comments(statement), source) + { + match range { + // All leading comments are suppressed + // ```python + // statement + // # suppressed + // ``` + SuppressionComments::Suppressed { comments } => { + for comment in comments { + comment.mark_formatted(); + } + } + + // Node has a trailing `fmt: on` comment and maybe another `fmt: off` comment + // ```python + // statement + // # suppressed comment (optional) + // # fmt: on + // # formatted comment (optional) + // # fmt: off (optional) + // ``` + SuppressionComments::SuppressionEnds { + suppressed_comments, + format_on_comment, + formatted_comments, + format_off_comment: new_format_off_comment, + } => { + for comment in suppressed_comments { + comment.mark_formatted(); + } + + write!( + f, + [ + FormatVerbatimStatementRange { + verbatim_range: TextRange::new( + format_off_comment.end(), + format_on_comment.start() + ), + indentation + }, + format_comment(format_on_comment), + hard_line_break(), + trailing_comments(formatted_comments), + ] + )?; + + format_on_comment.mark_formatted(); + + if let Some(new_format_off_comment) = new_format_off_comment { + format_off_comment = new_format_off_comment; + format_comment(format_off_comment).fmt(f)?; + format_off_comment.mark_formatted(); + } else { + return Ok(statement.statement()); + } + } + + // Unreachable because the function exits as soon as it reaches the end of the suppression + // and it already starts in a suppressed range. + SuppressionComments::SuppressionStarts { .. } => unreachable!(), + SuppressionComments::Formatted { .. } => unreachable!(), + } + } + + if let Some(next_statement) = statements.next() { + statement = SuiteChildStatement::Other(next_statement); + leading_node_comments = comments.leading_comments(next_statement); + } else { + let end = comments + .trailing_comments(statement) + .last() + .map_or(statement.end(), Ranged::end); + + FormatVerbatimStatementRange { + verbatim_range: TextRange::new(format_off_comment.end(), end), + indentation, + } + .fmt(f)?; + + return Ok(statement.statement()); + } + } +} + +#[derive(Copy, Clone, Debug)] +enum InSuppression { + No, + Yes, +} + +#[derive(Debug)] +enum SuppressionComments<'a> { + /// The first `fmt: off` comment. + SuppressionStarts { + /// The comments appearing before the `fmt: off` comment + formatted_comments: &'a [SourceComment], + format_off_comment: &'a SourceComment, + }, + + /// A `fmt: on` comment inside a suppressed range. + SuppressionEnds { + /// The comments before the `fmt: on` comment that should *not* be formatted. + suppressed_comments: &'a [SourceComment], + format_on_comment: &'a SourceComment, + + /// The comments after the `fmt: on` comment (if any), that should be formatted. + formatted_comments: &'a [SourceComment], + + /// Any following `fmt: off` comment if any. + /// * `None`: The suppression ends here (for good) + /// * `Some`: A `fmt: off`..`fmt: on` .. `fmt: off` sequence. The suppression continues after + /// the `fmt: off` comment. + format_off_comment: Option<&'a SourceComment>, + }, + + /// Comments that all fall into the suppressed range. + Suppressed { comments: &'a [SourceComment] }, + + /// Comments that all fall into the formatted range. + Formatted { + #[allow(unused)] + comments: &'a [SourceComment], + }, +} + +impl<'a> SuppressionComments<'a> { + fn unwrap_suppression_starts(&self) -> (&'a [SourceComment], &'a SourceComment) { + if let SuppressionComments::SuppressionStarts { + formatted_comments, + format_off_comment, + } = self + { + (formatted_comments, *format_off_comment) + } else { + panic!("Expected SuppressionStarts") + } + } +} + +struct CommentRangeIter<'a> { + comments: &'a [SourceComment], + source: &'a str, + in_suppression: InSuppression, +} + +impl<'a> CommentRangeIter<'a> { + fn in_suppression(comments: &'a [SourceComment], source: &'a str) -> Self { + Self { + comments, + in_suppression: InSuppression::Yes, + source, + } + } + + fn outside_suppression(comments: &'a [SourceComment], source: &'a str) -> Self { + Self { + comments, + in_suppression: InSuppression::No, + source, + } + } + + /// Returns a slice containing the remaining comments. + fn as_slice(&self) -> &'a [SourceComment] { + self.comments + } +} + +impl<'a> Iterator for CommentRangeIter<'a> { + type Item = SuppressionComments<'a>; + + fn next(&mut self) -> Option { + if self.comments.is_empty() { + return None; + } + + Some(match self.in_suppression { + // Inside of a suppressed range + InSuppression::Yes => { + if let Some(format_on_position) = self + .comments + .iter() + .position(|comment| comment.is_suppression_on_comment(self.source)) + { + let (suppressed_comments, formatted) = + self.comments.split_at(format_on_position); + let (format_on_comment, rest) = formatted.split_first().unwrap(); + + let (formatted_comments, format_off_comment) = + if let Some(format_off_position) = rest + .iter() + .position(|comment| comment.is_suppression_off_comment(self.source)) + { + let (formatted_comments, suppressed_comments) = + rest.split_at(format_off_position); + let (format_off_comment, rest) = + suppressed_comments.split_first().unwrap(); + + self.comments = rest; + + (formatted_comments, Some(format_off_comment)) + } else { + self.in_suppression = InSuppression::No; + + self.comments = &[]; + (rest, None) + }; + + SuppressionComments::SuppressionEnds { + suppressed_comments, + format_on_comment, + formatted_comments, + format_off_comment, + } + } else { + SuppressionComments::Suppressed { + comments: std::mem::take(&mut self.comments), + } + } + } + + // Outside of a suppression + InSuppression::No => { + if let Some(format_off_position) = self + .comments + .iter() + .position(|comment| comment.is_suppression_off_comment(self.source)) + { + self.in_suppression = InSuppression::Yes; + + let (formatted_comments, suppressed) = + self.comments.split_at(format_off_position); + let format_off_comment = &suppressed[0]; + + self.comments = &suppressed[1..]; + + SuppressionComments::SuppressionStarts { + formatted_comments, + format_off_comment, + } + } else { + SuppressionComments::Formatted { + comments: std::mem::take(&mut self.comments), + } + } + } + }) + } +} + +impl FusedIterator for CommentRangeIter<'_> {} + +struct TrailingFormatOffComment<'a>(&'a SourceComment); + +impl Format> for TrailingFormatOffComment<'_> { + fn fmt(&self, f: &mut Formatter>) -> FormatResult<()> { + debug_assert!(self.0.is_unformatted()); + let lines_before_comment = lines_before(self.0.start(), f.context().source()); + + write!( + f, + [empty_lines(lines_before_comment), format_comment(self.0)] + )?; + + self.0.mark_formatted(); + + Ok(()) + } +} + +/// Stores the indentation of a statement by storing the number of indentation characters. +/// Storing the number of indentation characters is sufficient because: +/// * Two indentations are equal if they result in the same column, regardless of the used tab size. +/// This implementation makes use of this fact and assumes a tab size of 1. +/// * The source document is correctly indented because it is valid Python code (or the formatter would have failed parsing the code). +#[derive(Copy, Clone)] +struct Indentation(u32); + +impl Indentation { + fn from_stmt(stmt: &Stmt, source: &str) -> Indentation { + let line_start = Locator::new(source).line_start(stmt.start()); + + let mut indentation = 0u32; + for c in source[TextRange::new(line_start, stmt.start())].chars() { + if is_indent_whitespace(c) { + indentation += 1; + } else { + break; + } + } + + Indentation(indentation) + } + + fn trim_indent(self, ranged: impl Ranged, source: &str) -> TextRange { + let range = ranged.range(); + let mut start_offset = TextSize::default(); + + for c in source[range].chars().take(self.0 as usize) { + if is_indent_whitespace(c) { + start_offset += TextSize::new(1); + } else { + break; + } + } + + TextRange::new(range.start() + start_offset, range.end()) + } +} + +/// Returns `true` for a space or tab character. +/// +/// This is different than [`is_python_whitespace`] in that it returns `false` for a form feed character. +/// Form feed characters are excluded because they should be preserved in the suppressed output. +const fn is_indent_whitespace(c: char) -> bool { + matches!(c, ' ' | '\t') +} + +/// Formats a verbatim range where the top-level nodes are statements (or statement-level comments). +/// +/// Formats each statement as written in the source code, but adds the right indentation to match +/// the indentation of formatted statements: +/// +/// ```python +/// def test(): +/// print("formatted") +/// # fmt: off +/// ( +/// not_formatted + b +/// ) +/// # fmt: on +/// ``` +/// +/// Gets formatted as +/// +/// ```python +/// def test(): +/// print("formatted") +/// # fmt: off +/// ( +/// not_formatted + b +/// ) +/// # fmt: on +/// ``` +/// +/// Notice how the `not_formatted + b` expression statement gets the same indentation as the `print` statement above, +/// but the indentation of the expression remains unchanged. It changes the indentation to: +/// * Prevent syntax errors because of different indentation levels between formatted and suppressed statements. +/// * Align with the `fmt: skip` where statements are indented as well, but inner expressions are formatted as is. +struct FormatVerbatimStatementRange { + verbatim_range: TextRange, + indentation: Indentation, +} + +impl Format> for FormatVerbatimStatementRange { + fn fmt(&self, f: &mut Formatter>) -> FormatResult<()> { + let lexer = lex_starts_at( + &f.context().source()[self.verbatim_range], + Mode::Module, + self.verbatim_range.start(), + ); + + let logical_lines = LogicalLinesIter::new(lexer, self.verbatim_range); + let mut first = true; + + for logical_line in logical_lines { + let logical_line = logical_line?; + + let trimmed_line_range = self + .indentation + .trim_indent(&logical_line, f.context().source()); + + // A line without any content, write an empty line, except for the first or last (indent only) line. + if trimmed_line_range.is_empty() { + if logical_line.has_trailing_newline { + if first { + hard_line_break().fmt(f)?; + } else { + empty_line().fmt(f)?; + } + } + } else { + // Non empty line, write the text of the line + verbatim_text(trimmed_line_range, logical_line.contains_newlines).fmt(f)?; + + // Write the line separator that terminates the line, except if it is the last line (that isn't separated by a hard line break). + if logical_line.has_trailing_newline { + // Insert an empty line if the text is non-empty but all characters have a width of zero. + // This is necessary to work around the fact that the Printer omits hard line breaks if the line width is 0. + // The alternative is to "fix" the printer and explicitly track the width and whether the line is empty. + // There's currently no use case for zero-width content outside of the verbatim context (and, form feeds are a Python specific speciality). + // It, therefore, feels wrong to add additional complexity to the very hot `Printer::print_char` function, + // to work around this special case. Therefore, work around the Printer behavior here, in the cold verbatim-formatting. + if f.context().source()[trimmed_line_range].width() == 0 { + empty_line().fmt(f)?; + } else { + hard_line_break().fmt(f)?; + } + } + } + + first = false; + } + + Ok(()) + } +} + +struct LogicalLinesIter { + lexer: I, + // The end of the last logical line + last_line_end: TextSize, + // The position where the content to lex ends. + content_end: TextSize, +} + +impl LogicalLinesIter { + fn new(lexer: I, verbatim_range: TextRange) -> Self { + Self { + lexer, + last_line_end: verbatim_range.start(), + content_end: verbatim_range.end(), + } + } +} + +impl Iterator for LogicalLinesIter +where + I: Iterator, +{ + type Item = FormatResult; + + fn next(&mut self) -> Option { + let mut parens = 0u32; + let mut contains_newlines = ContainsNewlines::No; + + let (content_end, full_end) = loop { + match self.lexer.next() { + Some(Ok((token, range))) => match token { + Tok::Newline => break (range.start(), range.end()), + // Ignore if inside an expression + Tok::NonLogicalNewline if parens == 0 => break (range.start(), range.end()), + Tok::NonLogicalNewline => { + contains_newlines = ContainsNewlines::Yes; + } + Tok::Lbrace | Tok::Lpar | Tok::Lsqb => { + parens = parens.saturating_add(1); + } + Tok::Rbrace | Tok::Rpar | Tok::Rsqb => { + parens = parens.saturating_sub(1); + } + Tok::String { value, .. } if value.contains(['\n', '\r']) => { + contains_newlines = ContainsNewlines::Yes; + } + _ => {} + }, + None => { + // Returns any content that comes after the last newline. This is mainly whitespace + // or characters that the `Lexer` skips, like a form-feed character. + return if self.last_line_end < self.content_end { + let content_start = self.last_line_end; + self.last_line_end = self.content_end; + Some(Ok(LogicalLine { + content_range: TextRange::new(content_start, self.content_end), + contains_newlines: ContainsNewlines::No, + has_trailing_newline: false, + })) + } else { + None + }; + } + Some(Err(_)) => { + return Some(Err(FormatError::syntax_error( + "Unexpected token when lexing verbatim statement range.", + ))) + } + } + }; + + let line_start = self.last_line_end; + self.last_line_end = full_end; + + Some(Ok(LogicalLine { + content_range: TextRange::new(line_start, content_end), + contains_newlines, + has_trailing_newline: true, + })) + } +} + +impl FusedIterator for LogicalLinesIter where I: Iterator {} + +/// A logical line or a comment (or form feed only) line +struct LogicalLine { + /// The range of this lines content (excluding the trailing newline) + content_range: TextRange, + /// Whether the content in `content_range` contains any newlines. + contains_newlines: ContainsNewlines, + /// Does this logical line have a trailing newline or does it just happen to be the last line. + has_trailing_newline: bool, +} + +impl Ranged for LogicalLine { + fn range(&self) -> TextRange { + self.content_range + } +} + +struct VerbatimText { + verbatim_range: TextRange, + contains_newlines: ContainsNewlines, +} + +fn verbatim_text(item: T, contains_newlines: ContainsNewlines) -> VerbatimText +where + T: Ranged, +{ + VerbatimText { + verbatim_range: item.range(), + contains_newlines, + } +} + +impl Format> for VerbatimText { + fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { + f.write_element(FormatElement::Tag(Tag::StartVerbatim( + tag::VerbatimKind::Verbatim { + length: self.verbatim_range.len(), + }, + ))); + + match normalize_newlines(f.context().locator().slice(self.verbatim_range), ['\r']) { + Cow::Borrowed(_) => { + write!( + f, + [source_text_slice( + self.verbatim_range, + self.contains_newlines + )] + )?; + } + Cow::Owned(cleaned) => { + write!( + f, + [ + dynamic_text(&cleaned, Some(self.verbatim_range.start())), + source_position(self.verbatim_range.end()) + ] + )?; + } + } + + f.write_element(FormatElement::Tag(Tag::EndVerbatim)); + Ok(()) + } +} diff --git a/crates/ruff_python_formatter/tests/fixtures.rs b/crates/ruff_python_formatter/tests/fixtures.rs index 2ea1be0828..1991b838f4 100644 --- a/crates/ruff_python_formatter/tests/fixtures.rs +++ b/crates/ruff_python_formatter/tests/fixtures.rs @@ -161,7 +161,11 @@ fn format() { }); }; - insta::glob!("../resources", "test/fixtures/ruff/**/*.py", test_file); + insta::glob!( + "../resources", + "test/fixtures/ruff/**/*.{py,pyi}", + test_file + ); } /// Format another time and make sure that there are no changes anymore diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@miscellaneous__docstring_no_string_normalization.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@miscellaneous__docstring_no_string_normalization.py.snap index 80c7ba60ec..0b680fd94c 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@miscellaneous__docstring_no_string_normalization.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@miscellaneous__docstring_no_string_normalization.py.snap @@ -135,7 +135,7 @@ def multiline_backslash_3(): ```diff --- Black +++ Ruff -@@ -1,73 +1,75 @@ +@@ -1,24 +1,24 @@ class ALonelyClass: - ''' + """ @@ -167,96 +167,7 @@ def multiline_backslash_3(): pass - def foo(): -- """This is a docstring with -- some lines of text here -- """ -+ """This is a docstring with -+ some lines of text here -+ """ - return - - - def baz(): - '''"This" is a string with some -- embedded "quotes"''' -+ embedded "quotes"''' - return - - - def poit(): - """ -- Lorem ipsum dolor sit amet. -+ Lorem ipsum dolor sit amet. - -- Consectetur adipiscing elit: -- - sed do eiusmod tempor incididunt ut labore -- - dolore magna aliqua -- - enim ad minim veniam -- - quis nostrud exercitation ullamco laboris nisi -- - aliquip ex ea commodo consequat -- """ -+ Consectetur adipiscing elit: -+ - sed do eiusmod tempor incididunt ut labore -+ - dolore magna aliqua -+ - enim ad minim veniam -+ - quis nostrud exercitation ullamco laboris nisi -+ - aliquip ex ea commodo consequat -+ """ - pass - - - def under_indent(): - """ -- These lines are indented in a way that does not -- make sense. -- """ -+ These lines are indented in a way that does not -+make sense. -+ """ - pass - - - def over_indent(): - """ -- This has a shallow indent -- - But some lines are deeper -- - And the closing quote is too deep -+ This has a shallow indent -+ - But some lines are deeper -+ - And the closing quote is too deep - """ - pass - - - def single_line(): -- """But with a newline after it!""" -+ """But with a newline after it! -+ -+ """ - pass - - -@@ -83,41 +85,41 @@ - - def and_that(): - """ -- "hey yah" """ -+ "hey yah" """ - - - def and_this(): -- ''' -- "hey yah"''' -+ ''' -+ "hey yah"''' - - - def believe_it_or_not_this_is_in_the_py_stdlib(): -- ''' -- "hey yah"''' -+ ''' -+"hey yah"''' +@@ -97,27 +97,27 @@ def shockingly_the_quotes_are_normalized_v2(): @@ -285,14 +196,14 @@ def multiline_backslash_3(): - ''' - hey there \ ''' + """ -+ hey there \ """ ++ hey there \ """ def multiline_backslash_3(): - ''' - already escaped \\''' + """ -+ already escaped \\ """ ++ already escaped \\""" ``` ## Ruff Output @@ -323,53 +234,51 @@ def shockingly_the_quotes_are_normalized(): def foo(): - """This is a docstring with - some lines of text here - """ + """This is a docstring with + some lines of text here + """ return def baz(): '''"This" is a string with some - embedded "quotes"''' + embedded "quotes"''' return def poit(): """ - Lorem ipsum dolor sit amet. + Lorem ipsum dolor sit amet. - Consectetur adipiscing elit: - - sed do eiusmod tempor incididunt ut labore - - dolore magna aliqua - - enim ad minim veniam - - quis nostrud exercitation ullamco laboris nisi - - aliquip ex ea commodo consequat - """ + Consectetur adipiscing elit: + - sed do eiusmod tempor incididunt ut labore + - dolore magna aliqua + - enim ad minim veniam + - quis nostrud exercitation ullamco laboris nisi + - aliquip ex ea commodo consequat + """ pass def under_indent(): """ - These lines are indented in a way that does not -make sense. - """ + These lines are indented in a way that does not + make sense. + """ pass def over_indent(): """ - This has a shallow indent - - But some lines are deeper - - And the closing quote is too deep + This has a shallow indent + - But some lines are deeper + - And the closing quote is too deep """ pass def single_line(): - """But with a newline after it! - - """ + """But with a newline after it!""" pass @@ -385,17 +294,17 @@ def that(): def and_that(): """ - "hey yah" """ + "hey yah" """ def and_this(): - ''' - "hey yah"''' + ''' + "hey yah"''' def believe_it_or_not_this_is_in_the_py_stdlib(): - ''' -"hey yah"''' + ''' + "hey yah"''' def shockingly_the_quotes_are_normalized_v2(): @@ -417,12 +326,12 @@ def multiline_backslash_1(): def multiline_backslash_2(): """ - hey there \ """ + hey there \ """ def multiline_backslash_3(): """ - already escaped \\ """ + already escaped \\""" ``` ## Black Output diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_complex.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_complex.py.snap index ce5a833fd2..71e912b57a 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_complex.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_complex.py.snap @@ -156,180 +156,191 @@ match x: ```diff --- Black +++ Ruff -@@ -1,144 +1,60 @@ - # Cases sampled from Lib/test/test_patma.py +@@ -2,105 +2,105 @@ # case black_test_patma_098 --match x: + match x: - case -0j: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_142 --match x: + match x: - case bytes(z): -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + y = 0 # case black_test_patma_073 --match x: + match x: - case 0 if 0: -- y = 0 ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue" if 0: + y = 0 - case 0 if 1: -- y = 1 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue" if 1: + y = 1 # case black_test_patma_006 --match 3: + match 3: - case 0 | 1 | 2 | 3: -- x = True -+NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + x = True # case black_test_patma_049 --match x: + match x: - case [0, 1] | [1, 0]: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + y = 0 # case black_check_sequence_then_mapping --match x: + match x: - case [*_]: -- return "seq" ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + return "seq" - case {}: -- return "map" -+NOT_YET_IMPLEMENTED_StmtMatch ++ case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + return "map" # case black_test_patma_035 --match x: + match x: - case {0: [1, 2, {}]}: -- y = 0 ++ case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = 0 - case {0: [1, 2, {}] | True} | {1: [[]]} | {0: [1, 2, {}]} | [] | "X" | {}: -- y = 1 ++ case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + y = 1 - case []: -- y = 2 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 2 # case black_test_patma_107 --match x: + match x: - case 0.25 + 1.75j: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_097 --match x: + match x: - case -0j: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_007 --match 4: + match 4: - case 0 | 1 | 2 | 3: -- x = True -+NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + x = True # case black_test_patma_154 --match x: + match x: - case 0 if x: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue" if x: + y = 0 # case black_test_patma_134 --match x: + match x: - case {1: 0}: -- y = 0 ++ case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = 0 - case {0: 0}: -- y = 1 ++ case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = 1 - case {**z}: -- y = 2 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = 2 # case black_test_patma_185 --match Seq(): + match Seq(): - case [*_]: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 0 # case black_test_patma_063 --match x: + match x: - case 1: -- y = 0 ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 - case 1: -- y = 1 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 1 # case black_test_patma_248 --match x: + match x: - case {"foo": bar}: -- y = bar -+NOT_YET_IMPLEMENTED_StmtMatch ++ case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = bar # case black_test_patma_019 --match (0, 1, 2): + match (0, 1, 2): - case [0, 1, *x, 2]: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 0 # case black_test_patma_052 --match x: + match x: - case [0]: -- y = 0 ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 0 - case [1, 0] if (x := x[:0]): -- y = 1 ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2] if (x := x[:0]): + y = 1 - case [1, 0]: -- y = 2 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 2 # case black_test_patma_191 --match w: + match w: - case [x, y, *_]: -- z = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + z = 0 # case black_test_patma_110 --match x: + match x: - case -0.25 - 1.75j: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_151 --match (x,): + match (x,): - case [y]: -- z = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + z = 0 # case black_test_patma_114 --match x: + match x: - case A.B.C.D: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_232 --match x: -- case None: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch + match x: +@@ -108,37 +108,37 @@ + y = 0 # case black_test_patma_058 --match x: + match x: - case 0: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_233 --match x: + match x: - case False: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case None: + y = 0 # case black_test_patma_078 --match x: + match x: - case []: -- y = 0 ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 0 - case [""]: -- y = 1 ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 1 - case "": -- y = 2 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 2 # case black_test_patma_156 --match x: + match x: - case z: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + y = 0 # case black_test_patma_189 --match w: + match w: - case [x, y, *rest]: -- z = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + z = 0 # case black_test_patma_042 --match x: + match x: - case (0 as z) | (1 as z) | (2 as z) if z == x % 2: -- y = 0 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchOf | (y) if z == x % 2: + y = 0 # case black_test_patma_034 --match x: + match x: - case {0: [1, 2, {}]}: -- y = 0 ++ case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = 0 - case {0: [1, 2, {}] | False} | {1: [[]]} | {0: [1, 2, {}]} | [] | "X" | {}: -- y = 1 ++ case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + y = 1 - case []: -- y = 2 -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 2 ``` ## Ruff Output @@ -338,63 +349,147 @@ match x: # Cases sampled from Lib/test/test_patma.py # case black_test_patma_098 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_142 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + y = 0 # case black_test_patma_073 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case "NOT_YET_IMPLEMENTED_PatternMatchValue" if 0: + y = 0 + case "NOT_YET_IMPLEMENTED_PatternMatchValue" if 1: + y = 1 # case black_test_patma_006 -NOT_YET_IMPLEMENTED_StmtMatch +match 3: + case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + x = True # case black_test_patma_049 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + y = 0 # case black_check_sequence_then_mapping -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + return "seq" + case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + return "map" # case black_test_patma_035 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = 0 + case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + y = 1 + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 2 # case black_test_patma_107 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_097 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_007 -NOT_YET_IMPLEMENTED_StmtMatch +match 4: + case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + x = True # case black_test_patma_154 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case "NOT_YET_IMPLEMENTED_PatternMatchValue" if x: + y = 0 # case black_test_patma_134 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = 0 + case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = 1 + case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = 2 # case black_test_patma_185 -NOT_YET_IMPLEMENTED_StmtMatch +match Seq(): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 0 # case black_test_patma_063 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 1 # case black_test_patma_248 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = bar # case black_test_patma_019 -NOT_YET_IMPLEMENTED_StmtMatch +match (0, 1, 2): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 0 # case black_test_patma_052 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 0 + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2] if (x := x[:0]): + y = 1 + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 2 # case black_test_patma_191 -NOT_YET_IMPLEMENTED_StmtMatch +match w: + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + z = 0 # case black_test_patma_110 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_151 -NOT_YET_IMPLEMENTED_StmtMatch +match (x,): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + z = 0 # case black_test_patma_114 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_232 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case None: + y = 0 # case black_test_patma_058 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 # case black_test_patma_233 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case None: + y = 0 # case black_test_patma_078 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 0 + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 1 + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 2 # case black_test_patma_156 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + y = 0 # case black_test_patma_189 -NOT_YET_IMPLEMENTED_StmtMatch +match w: + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + z = 0 # case black_test_patma_042 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case NOT_YET_IMPLEMENTED_PatternMatchOf | (y) if z == x % 2: + y = 0 # case black_test_patma_034 -NOT_YET_IMPLEMENTED_StmtMatch +match x: + case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + y = 0 + case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + y = 1 + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + y = 2 ``` ## Black Output diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_extras.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_extras.py.snap index 23dd576815..942764211b 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_extras.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_extras.py.snap @@ -131,139 +131,155 @@ match bar1: ```diff --- Black +++ Ruff -@@ -1,119 +1,43 @@ +@@ -1,13 +1,13 @@ import match --match something: + match something: - case [a as b]: -- print(b) ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print(b) - case [a as b, c, d, e as f]: -- print(f) ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print(f) - case Point(a as b): -- print(b) ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(b) - case Point(int() as x, int() as y): -- print(x, y) -+NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(x, y) - match = 1 +@@ -15,40 +15,43 @@ case: int = re.match(something) --match re.match(case): + match re.match(case): - case type("match", match): -- pass ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass - case match: -- pass -+NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass def func(match: case, case: match) -> case: -- match Something(): + match Something(): - case func(match, case): -- ... ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + ... - case another: -- ... -+ NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + ... --match maybe, multiple: + match maybe, multiple: - case perhaps, 5: -- pass ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass - case perhaps, 6,: -- pass -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass -match more := (than, one), indeed,: - case _, (5, 6): -- pass ++match ( ++ more := (than, one), ++ indeed, ++): ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass - case [[5], (6)], [7],: -- pass ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass - case _: -- pass -+NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass --match a, *b, c: + match a, *b, c: - case [*_]: -- assert "seq" == _ ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + assert "seq" == _ - case {}: -- assert "map" == b -+NOT_YET_IMPLEMENTED_StmtMatch ++ case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + assert "map" == b --match match( -- case, -- match( -- match, case, match, looooooooooooooooooooooooooooooooooooong, match, case, match -- ), -- case, --): +@@ -59,61 +62,51 @@ + ), + case, + ): - case case( - match=case, - case=re.match( - loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong - ), - ): -- pass -+NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass - case [a as match]: -- pass ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass - case case: -- pass -- -- --match match: -- case case: -- pass -- -+NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass --match a, *b(), c: + + match match: +- case case: ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass + + + match a, *b(), c: - case d, *f, g: -- pass ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass -- --match something: + + match something: - case { - "key": key as key_1, - "password": PASS.ONE | PASS.TWO | PASS.THREE as password, - }: -- pass ++ case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + pass - case {"maybe": something(complicated as this) as that}: -- pass -+NOT_YET_IMPLEMENTED_StmtMatch ++ case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + pass --match something: + match something: - case 1 as a: -- pass -+NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass - case 2 as b, 3 as c: -- pass ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass - case 4 as d, (5 as e), (6 | 7 as g), *h: -- pass -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass --match bar1: + match bar1: - case Foo(aa=Callable() as aa, bb=int()): -- print(bar1.aa, bar1.bb) ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(bar1.aa, bar1.bb) - case _: -- print("no match", "\n") -+NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + print("no match", "\n") --match bar1: + match bar1: - case Foo( - normal=x, perhaps=[list, {"x": d, "y": 1.0}] as y, otherwise=something, q=t as u - ): -- pass -+NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass ``` ## Ruff Output @@ -271,47 +287,116 @@ match bar1: ```py import match -NOT_YET_IMPLEMENTED_StmtMatch +match something: + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print(b) + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print(f) + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(b) + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(x, y) match = 1 case: int = re.match(something) -NOT_YET_IMPLEMENTED_StmtMatch +match re.match(case): + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass def func(match: case, case: match) -> case: - NOT_YET_IMPLEMENTED_StmtMatch + match Something(): + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + ... + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + ... -NOT_YET_IMPLEMENTED_StmtMatch +match maybe, multiple: + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass -NOT_YET_IMPLEMENTED_StmtMatch +match ( + more := (than, one), + indeed, +): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass -NOT_YET_IMPLEMENTED_StmtMatch +match a, *b, c: + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + assert "seq" == _ + case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + assert "map" == b -NOT_YET_IMPLEMENTED_StmtMatch +match match( + case, + match( + match, case, match, looooooooooooooooooooooooooooooooooooong, match, case, match + ), + case, +): + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass + + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass + + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass -NOT_YET_IMPLEMENTED_StmtMatch +match match: + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass -NOT_YET_IMPLEMENTED_StmtMatch +match a, *b(), c: + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass -NOT_YET_IMPLEMENTED_StmtMatch +match something: + case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + pass + case {"NOT_YET_IMPLEMENTED_PatternMatchMapping": _, 2: _}: + pass -NOT_YET_IMPLEMENTED_StmtMatch +match something: + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass + + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass + + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass -NOT_YET_IMPLEMENTED_StmtMatch +match bar1: + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(bar1.aa, bar1.bb) + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + print("no match", "\n") -NOT_YET_IMPLEMENTED_StmtMatch +match bar1: + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass ``` ## Black Output diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_generic.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_generic.py.snap index 6049e7897b..5783c75da6 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_generic.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_generic.py.snap @@ -119,49 +119,44 @@ with match() as match: ```diff --- Black +++ Ruff -@@ -23,11 +23,7 @@ - pygram.python_grammar, +@@ -24,9 +24,9 @@ ] -- match match: + match match: - case case: -- match match: ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + match match: - case case: -- pass -+ NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass if all(version.is_python2() for version in target_versions): - # Python 2-only code, so try Python 2 grammars. -@@ -45,9 +41,7 @@ - +@@ -46,7 +46,7 @@ def test_patma_139(self): x = False -- match x: + match x: - case bool(z): -- y = 0 -+ NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + y = 0 self.assertIs(x, False) self.assertEqual(y, 0) - self.assertIs(z, x) -@@ -72,16 +66,12 @@ - def test_patma_155(self): +@@ -73,14 +73,14 @@ x = 0 y = None -- match x: + match x: - case 1e1000: -- y = 0 -+ NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 self.assertEqual(x, 0) self.assertIs(y, None) x = range(3) -- match x: + match x: - case [y, case as x, z]: -- w = 0 -+ NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + w = 0 # At least one of the above branches must have been taken, because every Python - # version has exactly one of the two 'ASYNC_*' flags ``` ## Ruff Output @@ -192,7 +187,11 @@ def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]: pygram.python_grammar, ] - NOT_YET_IMPLEMENTED_StmtMatch + match match: + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + match match: + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass if all(version.is_python2() for version in target_versions): # Python 2-only code, so try Python 2 grammars. @@ -210,7 +209,9 @@ def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]: def test_patma_139(self): x = False - NOT_YET_IMPLEMENTED_StmtMatch + match x: + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + y = 0 self.assertIs(x, False) self.assertEqual(y, 0) self.assertIs(z, x) @@ -235,12 +236,16 @@ def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]: def test_patma_155(self): x = 0 y = None - NOT_YET_IMPLEMENTED_StmtMatch + match x: + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + y = 0 self.assertEqual(x, 0) self.assertIs(y, None) x = range(3) - NOT_YET_IMPLEMENTED_StmtMatch + match x: + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + w = 0 # At least one of the above branches must have been taken, because every Python # version has exactly one of the two 'ASYNC_*' flags diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_simple.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_simple.py.snap index a165da5f84..522535bd25 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_simple.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_simple.py.snap @@ -104,111 +104,129 @@ def where_is(point): ```diff --- Black +++ Ruff -@@ -1,92 +1,27 @@ +@@ -1,92 +1,92 @@ # Cases sampled from PEP 636 examples --match command.split(): + match command.split(): - case [action, obj]: -- ... # interpret action, obj -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + ... # interpret action, obj --match command.split(): + match command.split(): - case [action]: -- ... # interpret single-verb action ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + ... # interpret single-verb action - case [action, obj]: -- ... # interpret action, obj -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + ... # interpret action, obj --match command.split(): + match command.split(): - case ["quit"]: -- print("Goodbye!") -- quit_game() ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print("Goodbye!") + quit_game() - case ["look"]: -- current_room.describe() ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + current_room.describe() - case ["get", obj]: -- character.get(obj, current_room) ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + character.get(obj, current_room) - case ["go", direction]: -- current_room = current_room.neighbor(direction) -- # The rest of your commands go here -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + current_room = current_room.neighbor(direction) + # The rest of your commands go here --match command.split(): + match command.split(): - case ["drop", *objects]: -- for obj in objects: -- character.drop(obj, current_room) -- # The rest of your commands go here -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + for obj in objects: + character.drop(obj, current_room) + # The rest of your commands go here --match command.split(): + match command.split(): - case ["quit"]: -- pass ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass - case ["go", direction]: -- print("Going:", direction) ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print("Going:", direction) - case ["drop", *objects]: -- print("Dropping: ", *objects) ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print("Dropping: ", *objects) - case _: -- print(f"Sorry, I couldn't understand {command!r}") -+NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + print(f"Sorry, I couldn't understand {command!r}") --match command.split(): + match command.split(): - case ["north"] | ["go", "north"]: -- current_room = current_room.neighbor("north") ++ case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + current_room = current_room.neighbor("north") - case ["get", obj] | ["pick", "up", obj] | ["pick", obj, "up"]: -- ... # Code for picking up the given object -+NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + ... # Code for picking up the given object --match command.split(): + match command.split(): - case ["go", ("north" | "south" | "east" | "west")]: -- current_room = current_room.neighbor(...) -- # how do I know which direction to go? -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + current_room = current_room.neighbor(...) + # how do I know which direction to go? --match command.split(): + match command.split(): - case ["go", ("north" | "south" | "east" | "west") as direction]: -- current_room = current_room.neighbor(direction) -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + current_room = current_room.neighbor(direction) --match command.split(): + match command.split(): - case ["go", direction] if direction in current_room.exits: -- current_room = current_room.neighbor(direction) ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2] if direction in current_room.exits: + current_room = current_room.neighbor(direction) - case ["go", _]: -- print("Sorry, you can't go that way") -+NOT_YET_IMPLEMENTED_StmtMatch ++ case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print("Sorry, you can't go that way") --match event.get(): + match event.get(): - case Click(position=(x, y)): -- handle_click_at(x, y) ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + handle_click_at(x, y) - case KeyPress(key_name="Q") | Quit(): -- game.quit() ++ case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + game.quit() - case KeyPress(key_name="up arrow"): -- game.go_north() ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + game.go_north() - case KeyPress(): -- pass # Ignore other keystrokes ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass # Ignore other keystrokes - case other_event: -- raise ValueError(f"Unrecognized event: {other_event}") -+NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + raise ValueError(f"Unrecognized event: {other_event}") --match event.get(): + match event.get(): - case Click((x, y), button=Button.LEFT): # This is a left click -- handle_click_at(x, y) ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): # This is a left click + handle_click_at(x, y) - case Click(): -- pass # ignore other clicks -+NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass # ignore other clicks def where_is(point): -- match point: + match point: - case Point(x=0, y=0): -- print("Origin") ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print("Origin") - case Point(x=0, y=y): -- print(f"Y={y}") ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(f"Y={y}") - case Point(x=x, y=0): -- print(f"X={x}") ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(f"X={x}") - case Point(): -- print("Somewhere else") ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print("Somewhere else") - case _: -- print("Not a point") -+ NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + print("Not a point") ``` ## Ruff Output @@ -216,31 +234,96 @@ def where_is(point): ```py # Cases sampled from PEP 636 examples -NOT_YET_IMPLEMENTED_StmtMatch +match command.split(): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + ... # interpret action, obj -NOT_YET_IMPLEMENTED_StmtMatch +match command.split(): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + ... # interpret single-verb action + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + ... # interpret action, obj -NOT_YET_IMPLEMENTED_StmtMatch +match command.split(): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print("Goodbye!") + quit_game() + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + current_room.describe() + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + character.get(obj, current_room) + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + current_room = current_room.neighbor(direction) + # The rest of your commands go here -NOT_YET_IMPLEMENTED_StmtMatch +match command.split(): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + for obj in objects: + character.drop(obj, current_room) + # The rest of your commands go here -NOT_YET_IMPLEMENTED_StmtMatch +match command.split(): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print("Going:", direction) + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print("Dropping: ", *objects) + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + print(f"Sorry, I couldn't understand {command!r}") -NOT_YET_IMPLEMENTED_StmtMatch +match command.split(): + case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + current_room = current_room.neighbor("north") + case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + ... # Code for picking up the given object -NOT_YET_IMPLEMENTED_StmtMatch +match command.split(): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + current_room = current_room.neighbor(...) + # how do I know which direction to go? -NOT_YET_IMPLEMENTED_StmtMatch +match command.split(): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + current_room = current_room.neighbor(direction) -NOT_YET_IMPLEMENTED_StmtMatch +match command.split(): + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2] if direction in current_room.exits: + current_room = current_room.neighbor(direction) + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + print("Sorry, you can't go that way") -NOT_YET_IMPLEMENTED_StmtMatch +match event.get(): + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + handle_click_at(x, y) + case NOT_YET_IMPLEMENTED_PatternMatchOf | (y): + game.quit() + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + game.go_north() + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass # Ignore other keystrokes + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + raise ValueError(f"Unrecognized event: {other_event}") -NOT_YET_IMPLEMENTED_StmtMatch +match event.get(): + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): # This is a left click + handle_click_at(x, y) + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass # ignore other clicks def where_is(point): - NOT_YET_IMPLEMENTED_StmtMatch + match point: + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print("Origin") + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(f"Y={y}") + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(f"X={x}") + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print("Somewhere else") + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + print("Not a point") ``` ## Black Output diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_style.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_style.py.snap index 56fe93fb72..74b37542ae 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_style.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__pattern_matching_style.py.snap @@ -65,22 +65,25 @@ match match( ```diff --- Black +++ Ruff -@@ -1,35 +1,24 @@ --match something: +@@ -1,35 +1,34 @@ + match something: - case b(): -- print(1 + 1) ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(1 + 1) - case c( - very_complex=True, perhaps_even_loooooooooooooooooooooooooooooooooooooong=-1 - ): -- print(1) ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(1) - case c( - very_complex=True, - perhaps_even_loooooooooooooooooooooooooooooooooooooong=-1, - ): -- print(2) ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(2) - case a: -- pass -+NOT_YET_IMPLEMENTED_StmtMatch ++ case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass -match(arg) # comment +match( @@ -106,18 +109,26 @@ match match( + something # fast +) re.match() --match match(): + match match(): - case case( - arg, # comment - ): -- pass -+NOT_YET_IMPLEMENTED_StmtMatch ++ case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass ``` ## Ruff Output ```py -NOT_YET_IMPLEMENTED_StmtMatch +match something: + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(1 + 1) + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(1) + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + print(2) + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass match( arg # comment @@ -140,7 +151,9 @@ re.match( something # fast ) re.match() -NOT_YET_IMPLEMENTED_StmtMatch +match match(): + case NOT_YET_IMPLEMENTED_PatternMatchClass(0, 0): + pass ``` ## Black Output diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__remove_newline_after_match.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__remove_newline_after_match.py.snap index 6099825e88..061ae70d6f 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__remove_newline_after_match.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_310__remove_newline_after_match.py.snap @@ -31,28 +31,42 @@ def http_status(status): ```diff --- Black +++ Ruff -@@ -1,13 +1,2 @@ +@@ -1,13 +1,13 @@ def http_status(status): -- match status: + match status: - case 400: -- return "Bad request" -- ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + return "Bad request" + - case 401: -- return "Unauthorized" -- ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + return "Unauthorized" + - case 403: -- return "Forbidden" -- ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + return "Forbidden" + - case 404: -- return "Not found" -+ NOT_YET_IMPLEMENTED_StmtMatch ++ case "NOT_YET_IMPLEMENTED_PatternMatchValue": + return "Not found" ``` ## Ruff Output ```py def http_status(status): - NOT_YET_IMPLEMENTED_StmtMatch + match status: + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + return "Bad request" + + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + return "Unauthorized" + + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + return "Forbidden" + + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + return "Not found" ``` ## Black Output diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_38__pep_570.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_38__pep_570.py.snap deleted file mode 100644 index b1326fc877..0000000000 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_38__pep_570.py.snap +++ /dev/null @@ -1,168 +0,0 @@ ---- -source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/black/py_38/pep_570.py ---- -## Input - -```py -def positional_only_arg(a, /): - pass - - -def all_markers(a, b, /, c, d, *, e, f): - pass - - -def all_markers_with_args_and_kwargs( - a_long_one, - b_long_one, - /, - c_long_one, - d_long_one, - *args, - e_long_one, - f_long_one, - **kwargs, -): - pass - - -def all_markers_with_defaults(a, b=1, /, c=2, d=3, *, e=4, f=5): - pass - - -def long_one_with_long_parameter_names( - but_all_of_them, - are_positional_only, - arguments_mmmmkay, - so_this_is_only_valid_after, - three_point_eight, - /, -): - pass - - -lambda a, /: a - -lambda a, b, /, c, d, *, e, f: a - -lambda a, b, /, c, d, *args, e, f, **kwargs: args - -lambda a, b=1, /, c=2, d=3, *, e=4, f=5: 1 -``` - -## Black Differences - -```diff ---- Black -+++ Ruff -@@ -35,7 +35,7 @@ - pass - - --lambda a, /: a -+lambda: a - - lambda a, b, /, c, d, *, e, f: a - -``` - -## Ruff Output - -```py -def positional_only_arg(a, /): - pass - - -def all_markers(a, b, /, c, d, *, e, f): - pass - - -def all_markers_with_args_and_kwargs( - a_long_one, - b_long_one, - /, - c_long_one, - d_long_one, - *args, - e_long_one, - f_long_one, - **kwargs, -): - pass - - -def all_markers_with_defaults(a, b=1, /, c=2, d=3, *, e=4, f=5): - pass - - -def long_one_with_long_parameter_names( - but_all_of_them, - are_positional_only, - arguments_mmmmkay, - so_this_is_only_valid_after, - three_point_eight, - /, -): - pass - - -lambda: a - -lambda a, b, /, c, d, *, e, f: a - -lambda a, b, /, c, d, *args, e, f, **kwargs: args - -lambda a, b=1, /, c=2, d=3, *, e=4, f=5: 1 -``` - -## Black Output - -```py -def positional_only_arg(a, /): - pass - - -def all_markers(a, b, /, c, d, *, e, f): - pass - - -def all_markers_with_args_and_kwargs( - a_long_one, - b_long_one, - /, - c_long_one, - d_long_one, - *args, - e_long_one, - f_long_one, - **kwargs, -): - pass - - -def all_markers_with_defaults(a, b=1, /, c=2, d=3, *, e=4, f=5): - pass - - -def long_one_with_long_parameter_names( - but_all_of_them, - are_positional_only, - arguments_mmmmkay, - so_this_is_only_valid_after, - three_point_eight, - /, -): - pass - - -lambda a, /: a - -lambda a, b, /, c, d, *, e, f: a - -lambda a, b, /, c, d, *args, e, f, **kwargs: args - -lambda a, b=1, /, c=2, d=3, *, e=4, f=5: 1 -``` - - diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_38__pep_572_remove_parens.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_38__pep_572_remove_parens.py.snap new file mode 100644 index 0000000000..daea36ba7e --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_38__pep_572_remove_parens.py.snap @@ -0,0 +1,247 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/black/py_38/pep_572_remove_parens.py +--- +## Input + +```py +if (foo := 0): + pass + +if (foo := 1): + pass + +if (y := 5 + 5): + pass + +y = (x := 0) + +y += (x := 0) + +(y := 5 + 5) + +test: int = (test2 := 2) + +a, b = (test := (1, 2)) + +# see also https://github.com/psf/black/issues/2139 +assert (foo := 42 - 12) + +foo(x=(y := f(x))) + + +def foo(answer=(p := 42)): + ... + + +def foo2(answer: (p := 42) = 5): + ... + + +lambda: (x := 1) + +a[(x := 12)] +a[:(x := 13)] + +# we don't touch expressions in f-strings but if we do one day, don't break 'em +f'{(x:=10)}' + + +def a(): + return (x := 3) + await (b := 1) + yield (a := 2) + raise (c := 3) + +def this_is_so_dumb() -> (please := no): + pass + +async def await_the_walrus(): + with (x := y): + pass + + with (x := y) as z, (a := b) as c: + pass + + with (x := await y): + pass + + with (x := await a, y := await b): + pass + + with ((x := await a, y := await b)): + pass + + with (x := await a), (y := await b): + pass +``` + +## Black Differences + +```diff +--- Black ++++ Ruff +@@ -34,7 +34,7 @@ + lambda: (x := 1) + + a[(x := 12)] +-a[:(x := 13)] ++a[: (x := 13)] + + # we don't touch expressions in f-strings but if we do one day, don't break 'em + f"{(x:=10)}" +``` + +## Ruff Output + +```py +if foo := 0: + pass + +if foo := 1: + pass + +if y := 5 + 5: + pass + +y = (x := 0) + +y += (x := 0) + +(y := 5 + 5) + +test: int = (test2 := 2) + +a, b = (test := (1, 2)) + +# see also https://github.com/psf/black/issues/2139 +assert (foo := 42 - 12) + +foo(x=(y := f(x))) + + +def foo(answer=(p := 42)): + ... + + +def foo2(answer: (p := 42) = 5): + ... + + +lambda: (x := 1) + +a[(x := 12)] +a[: (x := 13)] + +# we don't touch expressions in f-strings but if we do one day, don't break 'em +f"{(x:=10)}" + + +def a(): + return (x := 3) + await (b := 1) + yield (a := 2) + raise (c := 3) + + +def this_is_so_dumb() -> (please := no): + pass + + +async def await_the_walrus(): + with (x := y): + pass + + with (x := y) as z, (a := b) as c: + pass + + with (x := await y): + pass + + with (x := await a, y := await b): + pass + + with (x := await a, y := await b): + pass + + with (x := await a), (y := await b): + pass +``` + +## Black Output + +```py +if foo := 0: + pass + +if foo := 1: + pass + +if y := 5 + 5: + pass + +y = (x := 0) + +y += (x := 0) + +(y := 5 + 5) + +test: int = (test2 := 2) + +a, b = (test := (1, 2)) + +# see also https://github.com/psf/black/issues/2139 +assert (foo := 42 - 12) + +foo(x=(y := f(x))) + + +def foo(answer=(p := 42)): + ... + + +def foo2(answer: (p := 42) = 5): + ... + + +lambda: (x := 1) + +a[(x := 12)] +a[:(x := 13)] + +# we don't touch expressions in f-strings but if we do one day, don't break 'em +f"{(x:=10)}" + + +def a(): + return (x := 3) + await (b := 1) + yield (a := 2) + raise (c := 3) + + +def this_is_so_dumb() -> (please := no): + pass + + +async def await_the_walrus(): + with (x := y): + pass + + with (x := y) as z, (a := b) as c: + pass + + with (x := await y): + pass + + with (x := await a, y := await b): + pass + + with (x := await a, y := await b): + pass + + with (x := await a), (y := await b): + pass +``` + + diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_39__pep_572_py39.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_39__pep_572_py39.py.snap deleted file mode 100644 index 561947c702..0000000000 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@py_39__pep_572_py39.py.snap +++ /dev/null @@ -1,54 +0,0 @@ ---- -source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/black/py_39/pep_572_py39.py ---- -## Input - -```py -# Unparenthesized walruses are now allowed in set literals & set comprehensions -# since Python 3.9 -{x := 1, 2, 3} -{x4 := x**5 for x in range(7)} -# We better not remove the parentheses here (since it's a 3.10 feature) -x[(a := 1)] -x[(a := 1), (b := 3)] -``` - -## Black Differences - -```diff ---- Black -+++ Ruff -@@ -4,4 +4,4 @@ - {x4 := x**5 for x in range(7)} - # We better not remove the parentheses here (since it's a 3.10 feature) - x[(a := 1)] --x[(a := 1), (b := 3)] -+x[((a := 1), (b := 3))] -``` - -## Ruff Output - -```py -# Unparenthesized walruses are now allowed in set literals & set comprehensions -# since Python 3.9 -{x := 1, 2, 3} -{x4 := x**5 for x in range(7)} -# We better not remove the parentheses here (since it's a 3.10 feature) -x[(a := 1)] -x[((a := 1), (b := 3))] -``` - -## Black Output - -```py -# Unparenthesized walruses are now allowed in set literals & set comprehensions -# since Python 3.9 -{x := 1, 2, 3} -{x4 := x**5 for x in range(7)} -# We better not remove the parentheses here (since it's a 3.10 feature) -x[(a := 1)] -x[(a := 1), (b := 3)] -``` - - diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__comments2.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__comments2.py.snap index 9628978a2c..0e98a11642 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__comments2.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__comments2.py.snap @@ -180,17 +180,6 @@ instruction()#comment with bad spacing ```diff --- Black +++ Ruff -@@ -1,8 +1,8 @@ - from com.my_lovely_company.my_lovely_team.my_lovely_project.my_lovely_component import ( -- MyLovelyCompanyTeamProjectComponent, # NOT DRY -+ MyLovelyCompanyTeamProjectComponent # NOT DRY - ) - from com.my_lovely_company.my_lovely_team.my_lovely_project.my_lovely_component import ( -- MyLovelyCompanyTeamProjectComponent as component, # DRY -+ MyLovelyCompanyTeamProjectComponent as component # DRY - ) - - # Please keep __all__ alphabetized within each category. @@ -60,8 +60,12 @@ # Comment before function. def inline_comments_in_brackets_ruin_everything(): @@ -259,10 +248,10 @@ instruction()#comment with bad spacing ```py from com.my_lovely_company.my_lovely_team.my_lovely_project.my_lovely_component import ( - MyLovelyCompanyTeamProjectComponent # NOT DRY + MyLovelyCompanyTeamProjectComponent, # NOT DRY ) from com.my_lovely_company.my_lovely_team.my_lovely_project.my_lovely_component import ( - MyLovelyCompanyTeamProjectComponent as component # DRY + MyLovelyCompanyTeamProjectComponent as component, # DRY ) # Please keep __all__ alphabetized within each category. diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__comments6.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__comments6.py.snap index 6be2a77bc1..6725d8d840 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__comments6.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__comments6.py.snap @@ -141,7 +141,7 @@ aaaaaaaaaaaaa, bbbbbbbbb = map(list, map(itertools.chain.from_iterable, zip(*ite an_element_with_a_long_value = calls() or more_calls() and more() # type: bool tup = ( -@@ -100,19 +98,30 @@ +@@ -100,7 +98,13 @@ ) c = call( @@ -156,10 +156,9 @@ aaaaaaaaaaaaa, bbbbbbbbb = map(list, map(itertools.chain.from_iterable, zip(*ite ) --result = ( # aaa -- "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --) -+result = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # aaa +@@ -108,11 +112,18 @@ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + ) -AAAAAAAAAAAAA = [AAAAAAAAAAAAA] + SHARED_AAAAAAAAAAAAA + USER_AAAAAAAAAAAAA + AAAAAAAAAAAAA # type: ignore +AAAAAAAAAAAAA = ( @@ -293,7 +292,9 @@ def func( ) -result = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # aaa +result = ( # aaa + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +) AAAAAAAAAAAAA = ( [AAAAAAAAAAAAA] + SHARED_AAAAAAAAAAAAA + USER_AAAAAAAAAAAAA + AAAAAAAAAAAAA diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__comments_non_breaking_space.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__comments_non_breaking_space.py.snap deleted file mode 100644 index e8c73055d0..0000000000 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__comments_non_breaking_space.py.snap +++ /dev/null @@ -1,105 +0,0 @@ ---- -source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/black/simple_cases/comments_non_breaking_space.py ---- -## Input - -```py -from .config import ( ConfigTypeAttributes, Int, Path, # String, - # DEFAULT_TYPE_ATTRIBUTES, -) - -result = 1 # A simple comment -result = ( 1, ) # Another one - -result = 1 # type: ignore -result = 1# This comment is talking about type: ignore -square = Square(4) # type: Optional[Square] - -def function(a:int=42): - """ This docstring is already formatted - a - b - """ - #  There's a NBSP + 3 spaces before - # And 4 spaces on the next line - pass -``` - -## Black Differences - -```diff ---- Black -+++ Ruff -@@ -14,9 +14,9 @@ - - - def function(a: int = 42): -- """This docstring is already formatted -- a -- b -+ """ This docstring is already formatted -+ a -+ b - """ - # There's a NBSP + 3 spaces before - # And 4 spaces on the next line -``` - -## Ruff Output - -```py -from .config import ( - ConfigTypeAttributes, - Int, - Path, # String, - # DEFAULT_TYPE_ATTRIBUTES, -) - -result = 1 # A simple comment -result = (1,) # Another one - -result = 1 #  type: ignore -result = 1 # This comment is talking about type: ignore -square = Square(4) #  type: Optional[Square] - - -def function(a: int = 42): - """ This docstring is already formatted - a - b - """ - # There's a NBSP + 3 spaces before - # And 4 spaces on the next line - pass -``` - -## Black Output - -```py -from .config import ( - ConfigTypeAttributes, - Int, - Path, # String, - # DEFAULT_TYPE_ATTRIBUTES, -) - -result = 1 # A simple comment -result = (1,) # Another one - -result = 1 #  type: ignore -result = 1 # This comment is talking about type: ignore -square = Square(4) #  type: Optional[Square] - - -def function(a: int = 42): - """This docstring is already formatted - a - b - """ - # There's a NBSP + 3 spaces before - # And 4 spaces on the next line - pass -``` - - diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__docstring.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__docstring.py.snap deleted file mode 100644 index 60a50df3a5..0000000000 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__docstring.py.snap +++ /dev/null @@ -1,924 +0,0 @@ ---- -source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/black/simple_cases/docstring.py ---- -## Input - -```py -class MyClass: - """ Multiline - class docstring - """ - - def method(self): - """Multiline - method docstring - """ - pass - - -def foo(): - """This is a docstring with - some lines of text here - """ - return - - -def bar(): - '''This is another docstring - with more lines of text - ''' - return - - -def baz(): - '''"This" is a string with some - embedded "quotes"''' - return - - -def troz(): - '''Indentation with tabs - is just as OK - ''' - return - - -def zort(): - """Another - multiline - docstring - """ - pass - -def poit(): - """ - Lorem ipsum dolor sit amet. - - Consectetur adipiscing elit: - - sed do eiusmod tempor incididunt ut labore - - dolore magna aliqua - - enim ad minim veniam - - quis nostrud exercitation ullamco laboris nisi - - aliquip ex ea commodo consequat - """ - pass - - -def under_indent(): - """ - These lines are indented in a way that does not -make sense. - """ - pass - - -def over_indent(): - """ - This has a shallow indent - - But some lines are deeper - - And the closing quote is too deep - """ - pass - - -def single_line(): - """But with a newline after it! - - """ - pass - - -def this(): - r""" - 'hey ho' - """ - - -def that(): - """ "hey yah" """ - - -def and_that(): - """ - "hey yah" """ - - -def and_this(): - ''' - "hey yah"''' - - -def multiline_whitespace(): - ''' - - - - - ''' - - -def oneline_whitespace(): - ''' ''' - - -def empty(): - """""" - - -def single_quotes(): - 'testing' - - -def believe_it_or_not_this_is_in_the_py_stdlib(): ''' -"hey yah"''' - - -def ignored_docstring(): - """a => \ -b""" - -def single_line_docstring_with_whitespace(): - """ This should be stripped """ - -def docstring_with_inline_tabs_and_space_indentation(): - """hey - - tab separated value - tab at start of line and then a tab separated value - multiple tabs at the beginning and inline - mixed tabs and spaces at beginning. next line has mixed tabs and spaces only. - - line ends with some tabs - """ - - -def docstring_with_inline_tabs_and_tab_indentation(): - """hey - - tab separated value - tab at start of line and then a tab separated value - multiple tabs at the beginning and inline - mixed tabs and spaces at beginning. next line has mixed tabs and spaces only. - - line ends with some tabs - """ - pass - - -def backslash_space(): - """\ """ - - -def multiline_backslash_1(): - ''' - hey\there\ - \ ''' - - -def multiline_backslash_2(): - ''' - hey there \ ''' - -# Regression test for #3425 -def multiline_backslash_really_long_dont_crash(): - """ - hey there hello guten tag hi hoow are you ola zdravstvuyte ciao como estas ca va \ """ - - -def multiline_backslash_3(): - ''' - already escaped \\ ''' - - -def my_god_its_full_of_stars_1(): - "I'm sorry Dave\u2001" - - -# the space below is actually a \u2001, removed in output -def my_god_its_full_of_stars_2(): - "I'm sorry Dave " - - -def docstring_almost_at_line_limit(): - """long docstring.................................................................""" - - -def docstring_almost_at_line_limit2(): - """long docstring................................................................. - - .................................................................................. - """ - - -def docstring_at_line_limit(): - """long docstring................................................................""" - - -def multiline_docstring_at_line_limit(): - """first line----------------------------------------------------------------------- - - second line----------------------------------------------------------------------""" - - -def stable_quote_normalization_with_immediate_inner_single_quote(self): - '''' - - - ''' -``` - -## Black Differences - -```diff ---- Black -+++ Ruff -@@ -1,83 +1,85 @@ - class MyClass: -- """Multiline -- class docstring -- """ -+ """ Multiline -+ class docstring -+ """ - - def method(self): - """Multiline -- method docstring -- """ -+ method docstring -+ """ - pass - - - def foo(): -- """This is a docstring with -- some lines of text here -- """ -+ """This is a docstring with -+ some lines of text here -+ """ - return - - - def bar(): - """This is another docstring -- with more lines of text -- """ -+ with more lines of text -+ """ - return - - - def baz(): - '''"This" is a string with some -- embedded "quotes"''' -+ embedded "quotes"''' - return - - - def troz(): - """Indentation with tabs -- is just as OK -- """ -+ is just as OK -+ """ - return - - - def zort(): - """Another -- multiline -- docstring -- """ -+ multiline -+ docstring -+ """ - pass - - - def poit(): - """ -- Lorem ipsum dolor sit amet. -+ Lorem ipsum dolor sit amet. - -- Consectetur adipiscing elit: -- - sed do eiusmod tempor incididunt ut labore -- - dolore magna aliqua -- - enim ad minim veniam -- - quis nostrud exercitation ullamco laboris nisi -- - aliquip ex ea commodo consequat -- """ -+ Consectetur adipiscing elit: -+ - sed do eiusmod tempor incididunt ut labore -+ - dolore magna aliqua -+ - enim ad minim veniam -+ - quis nostrud exercitation ullamco laboris nisi -+ - aliquip ex ea commodo consequat -+ """ - pass - - - def under_indent(): - """ -- These lines are indented in a way that does not -- make sense. -- """ -+ These lines are indented in a way that does not -+make sense. -+ """ - pass - - - def over_indent(): - """ -- This has a shallow indent -- - But some lines are deeper -- - And the closing quote is too deep -+ This has a shallow indent -+ - But some lines are deeper -+ - And the closing quote is too deep - """ - pass - - - def single_line(): -- """But with a newline after it!""" -+ """But with a newline after it! -+ -+ """ - pass - - -@@ -93,20 +95,25 @@ - - def and_that(): - """ -- "hey yah" """ -+ "hey yah" """ - - - def and_this(): -- ''' -- "hey yah"''' -+ ''' -+ "hey yah"''' - - - def multiline_whitespace(): -- """ """ -+ """ -+ -+ -+ -+ -+ """ - - - def oneline_whitespace(): -- """ """ -+ """ """ - - - def empty(): -@@ -118,8 +125,8 @@ - - - def believe_it_or_not_this_is_in_the_py_stdlib(): -- ''' -- "hey yah"''' -+ ''' -+"hey yah"''' - - - def ignored_docstring(): -@@ -128,31 +135,31 @@ - - - def single_line_docstring_with_whitespace(): -- """This should be stripped""" -+ """ This should be stripped """ - - - def docstring_with_inline_tabs_and_space_indentation(): - """hey - - tab separated value -- tab at start of line and then a tab separated value -- multiple tabs at the beginning and inline -- mixed tabs and spaces at beginning. next line has mixed tabs and spaces only. -- -- line ends with some tabs -+ tab at start of line and then a tab separated value -+ multiple tabs at the beginning and inline -+ mixed tabs and spaces at beginning. next line has mixed tabs and spaces only. -+ -+ line ends with some tabs - """ - - - def docstring_with_inline_tabs_and_tab_indentation(): - """hey - -- tab separated value -- tab at start of line and then a tab separated value -- multiple tabs at the beginning and inline -- mixed tabs and spaces at beginning. next line has mixed tabs and spaces only. -- -- line ends with some tabs -- """ -+ tab separated value -+ tab at start of line and then a tab separated value -+ multiple tabs at the beginning and inline -+ mixed tabs and spaces at beginning. next line has mixed tabs and spaces only. -+ -+ line ends with some tabs -+ """ - pass - - -@@ -168,7 +175,7 @@ - - def multiline_backslash_2(): - """ -- hey there \ """ -+ hey there \ """ - - - # Regression test for #3425 -@@ -179,7 +186,7 @@ - - def multiline_backslash_3(): - """ -- already escaped \\""" -+ already escaped \\ """ - - - def my_god_its_full_of_stars_1(): -@@ -188,7 +195,7 @@ - - # the space below is actually a \u2001, removed in output - def my_god_its_full_of_stars_2(): -- "I'm sorry Dave" -+ "I'm sorry Dave " - - - def docstring_almost_at_line_limit(): -``` - -## Ruff Output - -```py -class MyClass: - """ Multiline - class docstring - """ - - def method(self): - """Multiline - method docstring - """ - pass - - -def foo(): - """This is a docstring with - some lines of text here - """ - return - - -def bar(): - """This is another docstring - with more lines of text - """ - return - - -def baz(): - '''"This" is a string with some - embedded "quotes"''' - return - - -def troz(): - """Indentation with tabs - is just as OK - """ - return - - -def zort(): - """Another - multiline - docstring - """ - pass - - -def poit(): - """ - Lorem ipsum dolor sit amet. - - Consectetur adipiscing elit: - - sed do eiusmod tempor incididunt ut labore - - dolore magna aliqua - - enim ad minim veniam - - quis nostrud exercitation ullamco laboris nisi - - aliquip ex ea commodo consequat - """ - pass - - -def under_indent(): - """ - These lines are indented in a way that does not -make sense. - """ - pass - - -def over_indent(): - """ - This has a shallow indent - - But some lines are deeper - - And the closing quote is too deep - """ - pass - - -def single_line(): - """But with a newline after it! - - """ - pass - - -def this(): - r""" - 'hey ho' - """ - - -def that(): - """ "hey yah" """ - - -def and_that(): - """ - "hey yah" """ - - -def and_this(): - ''' - "hey yah"''' - - -def multiline_whitespace(): - """ - - - - - """ - - -def oneline_whitespace(): - """ """ - - -def empty(): - """""" - - -def single_quotes(): - "testing" - - -def believe_it_or_not_this_is_in_the_py_stdlib(): - ''' -"hey yah"''' - - -def ignored_docstring(): - """a => \ -b""" - - -def single_line_docstring_with_whitespace(): - """ This should be stripped """ - - -def docstring_with_inline_tabs_and_space_indentation(): - """hey - - tab separated value - tab at start of line and then a tab separated value - multiple tabs at the beginning and inline - mixed tabs and spaces at beginning. next line has mixed tabs and spaces only. - - line ends with some tabs - """ - - -def docstring_with_inline_tabs_and_tab_indentation(): - """hey - - tab separated value - tab at start of line and then a tab separated value - multiple tabs at the beginning and inline - mixed tabs and spaces at beginning. next line has mixed tabs and spaces only. - - line ends with some tabs - """ - pass - - -def backslash_space(): - """\ """ - - -def multiline_backslash_1(): - """ - hey\there\ - \ """ - - -def multiline_backslash_2(): - """ - hey there \ """ - - -# Regression test for #3425 -def multiline_backslash_really_long_dont_crash(): - """ - hey there hello guten tag hi hoow are you ola zdravstvuyte ciao como estas ca va \ """ - - -def multiline_backslash_3(): - """ - already escaped \\ """ - - -def my_god_its_full_of_stars_1(): - "I'm sorry Dave\u2001" - - -# the space below is actually a \u2001, removed in output -def my_god_its_full_of_stars_2(): - "I'm sorry Dave " - - -def docstring_almost_at_line_limit(): - """long docstring.................................................................""" - - -def docstring_almost_at_line_limit2(): - """long docstring................................................................. - - .................................................................................. - """ - - -def docstring_at_line_limit(): - """long docstring................................................................""" - - -def multiline_docstring_at_line_limit(): - """first line----------------------------------------------------------------------- - - second line----------------------------------------------------------------------""" - - -def stable_quote_normalization_with_immediate_inner_single_quote(self): - """' - - - """ -``` - -## Black Output - -```py -class MyClass: - """Multiline - class docstring - """ - - def method(self): - """Multiline - method docstring - """ - pass - - -def foo(): - """This is a docstring with - some lines of text here - """ - return - - -def bar(): - """This is another docstring - with more lines of text - """ - return - - -def baz(): - '''"This" is a string with some - embedded "quotes"''' - return - - -def troz(): - """Indentation with tabs - is just as OK - """ - return - - -def zort(): - """Another - multiline - docstring - """ - pass - - -def poit(): - """ - Lorem ipsum dolor sit amet. - - Consectetur adipiscing elit: - - sed do eiusmod tempor incididunt ut labore - - dolore magna aliqua - - enim ad minim veniam - - quis nostrud exercitation ullamco laboris nisi - - aliquip ex ea commodo consequat - """ - pass - - -def under_indent(): - """ - These lines are indented in a way that does not - make sense. - """ - pass - - -def over_indent(): - """ - This has a shallow indent - - But some lines are deeper - - And the closing quote is too deep - """ - pass - - -def single_line(): - """But with a newline after it!""" - pass - - -def this(): - r""" - 'hey ho' - """ - - -def that(): - """ "hey yah" """ - - -def and_that(): - """ - "hey yah" """ - - -def and_this(): - ''' - "hey yah"''' - - -def multiline_whitespace(): - """ """ - - -def oneline_whitespace(): - """ """ - - -def empty(): - """""" - - -def single_quotes(): - "testing" - - -def believe_it_or_not_this_is_in_the_py_stdlib(): - ''' - "hey yah"''' - - -def ignored_docstring(): - """a => \ -b""" - - -def single_line_docstring_with_whitespace(): - """This should be stripped""" - - -def docstring_with_inline_tabs_and_space_indentation(): - """hey - - tab separated value - tab at start of line and then a tab separated value - multiple tabs at the beginning and inline - mixed tabs and spaces at beginning. next line has mixed tabs and spaces only. - - line ends with some tabs - """ - - -def docstring_with_inline_tabs_and_tab_indentation(): - """hey - - tab separated value - tab at start of line and then a tab separated value - multiple tabs at the beginning and inline - mixed tabs and spaces at beginning. next line has mixed tabs and spaces only. - - line ends with some tabs - """ - pass - - -def backslash_space(): - """\ """ - - -def multiline_backslash_1(): - """ - hey\there\ - \ """ - - -def multiline_backslash_2(): - """ - hey there \ """ - - -# Regression test for #3425 -def multiline_backslash_really_long_dont_crash(): - """ - hey there hello guten tag hi hoow are you ola zdravstvuyte ciao como estas ca va \ """ - - -def multiline_backslash_3(): - """ - already escaped \\""" - - -def my_god_its_full_of_stars_1(): - "I'm sorry Dave\u2001" - - -# the space below is actually a \u2001, removed in output -def my_god_its_full_of_stars_2(): - "I'm sorry Dave" - - -def docstring_almost_at_line_limit(): - """long docstring.................................................................""" - - -def docstring_almost_at_line_limit2(): - """long docstring................................................................. - - .................................................................................. - """ - - -def docstring_at_line_limit(): - """long docstring................................................................""" - - -def multiline_docstring_at_line_limit(): - """first line----------------------------------------------------------------------- - - second line----------------------------------------------------------------------""" - - -def stable_quote_normalization_with_immediate_inner_single_quote(self): - """' - - - """ -``` - - diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__docstring_preview.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__docstring_preview.py.snap index 427408a63c..dad30c4cb8 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__docstring_preview.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__docstring_preview.py.snap @@ -62,11 +62,7 @@ def single_quote_docstring_over_line_limit2(): ```diff --- Black +++ Ruff -@@ -1,9 +1,11 @@ - def docstring_almost_at_line_limit(): -- """long docstring.................................................................""" -+ """long docstring................................................................. -+ """ +@@ -3,7 +3,8 @@ def docstring_almost_at_line_limit_with_prefix(): @@ -82,8 +78,7 @@ def single_quote_docstring_over_line_limit2(): ```py def docstring_almost_at_line_limit(): - """long docstring................................................................. - """ + """long docstring.................................................................""" def docstring_almost_at_line_limit_with_prefix(): diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff.py.snap index 16f03bc425..614cee9816 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff.py.snap @@ -198,77 +198,7 @@ d={'a':1, ```diff --- Black +++ Ruff -@@ -6,8 +6,8 @@ - - from library import some_connection, some_decorator - # fmt: off --from third_party import (X, -- Y, Z) -+from third_party import X, Y, Z -+ - # fmt: on - f"trigger 3.6 mode" - # Comment 1 -@@ -17,26 +17,40 @@ - - # fmt: off - def func_no_args(): -- a; b; c -- if True: raise RuntimeError -- if False: ... -- for i in range(10): -- print(i) -- continue -- exec('new-style exec', {}, {}) -- return None -+ a -+ b -+ c -+ if True: -+ raise RuntimeError -+ if False: -+ ... -+ for i in range(10): -+ print(i) -+ continue -+ exec("new-style exec", {}, {}) -+ return None -+ -+ - async def coroutine(arg, exec=False): -- 'Single-line docstring. Multiline is harder to reformat.' -- async with some_connection() as conn: -- await conn.do_what_i_mean('SELECT bobby, tables FROM xkcd', timeout=2) -- await asyncio.sleep(1) -+ "Single-line docstring. Multiline is harder to reformat." -+ async with some_connection() as conn: -+ await conn.do_what_i_mean("SELECT bobby, tables FROM xkcd", timeout=2) -+ await asyncio.sleep(1) -+ -+ - @asyncio.coroutine --@some_decorator( --with_args=True, --many_args=[1,2,3] --) --def function_signature_stress_test(number:int,no_annotation=None,text:str='default',* ,debug:bool=False,**kwargs) -> str: -- return text[number:-1] -+@some_decorator(with_args=True, many_args=[1, 2, 3]) -+def function_signature_stress_test( -+ number: int, -+ no_annotation=None, -+ text: str = "default", -+ *, -+ debug: bool = False, -+ **kwargs, -+) -> str: -+ return text[number:-1] -+ -+ - # fmt: on - def spaces(a=1, b=(), c=[], d={}, e=True, f=-1, g=1 if False else 2, h="", i=r""): - offset = attr.ib(default=attr.Factory(lambda: _r.uniform(1, 2))) -@@ -63,15 +77,15 @@ +@@ -63,15 +63,15 @@ something = { # fmt: off @@ -287,88 +217,28 @@ d={'a':1, # fmt: on goes + here, andhere, -@@ -80,38 +94,42 @@ - - def import_as_names(): +@@ -122,8 +122,10 @@ + """ # fmt: off -- from hello import a, b -- 'unformatted' -+ from hello import a, b + +- # hey, that won't work + ++ #hey, that won't work ++ + -+ "unformatted" # fmt: on + pass - - def testlist_star_expr(): - # fmt: off -- a , b = *hello -- 'unformatted' -+ a, b = *hello -+ "unformatted" - # fmt: on - - - def yield_expr(): - # fmt: off - yield hello -- 'unformatted' -+ "unformatted" - # fmt: on - "formatted" - # fmt: off -- ( yield hello ) -- 'unformatted' -+ (yield hello) -+ "unformatted" - # fmt: on - - - def example(session): - # fmt: off -- result = session\ -- .query(models.Customer.id)\ -- .filter(models.Customer.account_id == account_id, -- models.Customer.email == email_address)\ -- .order_by(models.Customer.id.asc())\ -+ result = ( -+ session.query(models.Customer.id) -+ .filter( -+ models.Customer.account_id == account_id, -+ models.Customer.email == email_address, -+ ) -+ .order_by(models.Customer.id.asc()) - .all() -+ ) - # fmt: on - - -@@ -132,10 +150,10 @@ - """Another known limitation.""" +@@ -138,7 +140,7 @@ + now . considers . multiple . fmt . directives . within . one . prefix # fmt: on # fmt: off -- this=should.not_be.formatted() -- and_=indeed . it is not formatted -- because . the . handling . inside . generate_ignored_nodes() -- now . considers . multiple . fmt . directives . within . one . prefix -+ this = should.not_be.formatted() -+ and_ = indeed.it is not formatted -+ because.the.handling.inside.generate_ignored_nodes() -+ now.considers.multiple.fmt.directives.within.one.prefix +- # ...but comments still get reformatted even though they should not be ++ # ...but comments still get reformatted even though they should not be # fmt: on - # fmt: off - # ...but comments still get reformatted even though they should not be -@@ -153,9 +171,7 @@ - ) - ) - # fmt: off -- a = ( -- unnecessary_bracket() -- ) -+ a = unnecessary_bracket() - # fmt: on - _type_comment_re = re.compile( - r""" -@@ -178,7 +194,7 @@ + + +@@ -178,7 +180,7 @@ $ """, # fmt: off @@ -377,18 +247,6 @@ d={'a':1, # fmt: on ) -@@ -216,8 +232,7 @@ - xxxxxxxxxx_xxxxxxxxxxx_xxxxxxx_xxxxxxxxx=5, - ) - # fmt: off --yield 'hello' -+yield "hello" - # No formatting to the end of the file --l=[1,2,3] --d={'a':1, -- 'b':2} -+l = [1, 2, 3] -+d = {"a": 1, "b": 2} ``` ## Ruff Output @@ -402,8 +260,8 @@ from third_party import X, Y, Z from library import some_connection, some_decorator # fmt: off -from third_party import X, Y, Z - +from third_party import (X, + Y, Z) # fmt: on f"trigger 3.6 mode" # Comment 1 @@ -413,40 +271,26 @@ f"trigger 3.6 mode" # fmt: off def func_no_args(): - a - b - c - if True: - raise RuntimeError - if False: - ... - for i in range(10): - print(i) - continue - exec("new-style exec", {}, {}) - return None - - + a; b; c + if True: raise RuntimeError + if False: ... + for i in range(10): + print(i) + continue + exec('new-style exec', {}, {}) + return None async def coroutine(arg, exec=False): - "Single-line docstring. Multiline is harder to reformat." - async with some_connection() as conn: - await conn.do_what_i_mean("SELECT bobby, tables FROM xkcd", timeout=2) - await asyncio.sleep(1) - - + 'Single-line docstring. Multiline is harder to reformat.' + async with some_connection() as conn: + await conn.do_what_i_mean('SELECT bobby, tables FROM xkcd', timeout=2) + await asyncio.sleep(1) @asyncio.coroutine -@some_decorator(with_args=True, many_args=[1, 2, 3]) -def function_signature_stress_test( - number: int, - no_annotation=None, - text: str = "default", - *, - debug: bool = False, - **kwargs, -) -> str: - return text[number:-1] - - +@some_decorator( +with_args=True, +many_args=[1,2,3] +) +def function_signature_stress_test(number:int,no_annotation=None,text:str='default',* ,debug:bool=False,**kwargs) -> str: + return text[number:-1] # fmt: on def spaces(a=1, b=(), c=[], d={}, e=True, f=-1, g=1 if False else 2, h="", i=r""): offset = attr.ib(default=attr.Factory(lambda: _r.uniform(1, 2))) @@ -490,42 +334,38 @@ def subscriptlist(): def import_as_names(): # fmt: off - from hello import a, b - - "unformatted" + from hello import a, b + 'unformatted' # fmt: on def testlist_star_expr(): # fmt: off - a, b = *hello - "unformatted" + a , b = *hello + 'unformatted' # fmt: on def yield_expr(): # fmt: off yield hello - "unformatted" + 'unformatted' # fmt: on "formatted" # fmt: off - (yield hello) - "unformatted" + ( yield hello ) + 'unformatted' # fmt: on def example(session): # fmt: off - result = ( - session.query(models.Customer.id) - .filter( - models.Customer.account_id == account_id, - models.Customer.email == email_address, - ) - .order_by(models.Customer.id.asc()) + result = session\ + .query(models.Customer.id)\ + .filter(models.Customer.account_id == account_id, + models.Customer.email == email_address)\ + .order_by(models.Customer.id.asc())\ .all() - ) # fmt: on @@ -536,7 +376,9 @@ def off_and_on_without_data(): """ # fmt: off - # hey, that won't work + + #hey, that won't work + # fmt: on pass @@ -546,13 +388,13 @@ def on_and_off_broken(): """Another known limitation.""" # fmt: on # fmt: off - this = should.not_be.formatted() - and_ = indeed.it is not formatted - because.the.handling.inside.generate_ignored_nodes() - now.considers.multiple.fmt.directives.within.one.prefix + this=should.not_be.formatted() + and_=indeed . it is not formatted + because . the . handling . inside . generate_ignored_nodes() + now . considers . multiple . fmt . directives . within . one . prefix # fmt: on # fmt: off - # ...but comments still get reformatted even though they should not be + # ...but comments still get reformatted even though they should not be # fmt: on @@ -567,7 +409,9 @@ def long_lines(): ) ) # fmt: off - a = unnecessary_bracket() + a = ( + unnecessary_bracket() + ) # fmt: on _type_comment_re = re.compile( r""" @@ -628,10 +472,11 @@ cfg.rule( xxxxxxxxxx_xxxxxxxxxxx_xxxxxxx_xxxxxxxxx=5, ) # fmt: off -yield "hello" +yield 'hello' # No formatting to the end of the file -l = [1, 2, 3] -d = {"a": 1, "b": 2} +l=[1,2,3] +d={'a':1, + 'b':2} ``` ## Black Output diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff2.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff2.py.snap deleted file mode 100644 index 012dd71335..0000000000 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff2.py.snap +++ /dev/null @@ -1,201 +0,0 @@ ---- -source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/black/simple_cases/fmtonoff2.py ---- -## Input - -```py -import pytest - -TmSt = 1 -TmEx = 2 - -# fmt: off - -# Test data: -# Position, Volume, State, TmSt/TmEx/None, [call, [arg1...]] - -@pytest.mark.parametrize('test', [ - - # Test don't manage the volume - [ - ('stuff', 'in') - ], -]) -def test_fader(test): - pass - -def check_fader(test): - - pass - -def verify_fader(test): - # misaligned comment - pass - -def verify_fader(test): - """Hey, ho.""" - assert test.passed() - -def test_calculate_fades(): - calcs = [ - # one is zero/none - (0, 4, 0, 0, 10, 0, 0, 6, 10), - (None, 4, 0, 0, 10, 0, 0, 6, 10), - ] - -# fmt: on -``` - -## Black Differences - -```diff ---- Black -+++ Ruff -@@ -5,36 +5,40 @@ - - # fmt: off - -+ - # Test data: - # Position, Volume, State, TmSt/TmEx/None, [call, [arg1...]] - --@pytest.mark.parametrize('test', [ -- -- # Test don't manage the volume -+@pytest.mark.parametrize( -+ "test", - [ -- ('stuff', 'in') -+ # Test don't manage the volume -+ [("stuff", "in")], - ], --]) -+) - def test_fader(test): - pass - -+ - def check_fader(test): -- - pass - -+ - def verify_fader(test): -- # misaligned comment -+ # misaligned comment - pass - -+ - def verify_fader(test): - """Hey, ho.""" - assert test.passed() - -+ - def test_calculate_fades(): - calcs = [ - # one is zero/none -- (0, 4, 0, 0, 10, 0, 0, 6, 10), -- (None, 4, 0, 0, 10, 0, 0, 6, 10), -+ (0, 4, 0, 0, 10, 0, 0, 6, 10), -+ (None, 4, 0, 0, 10, 0, 0, 6, 10), - ] - - # fmt: on -``` - -## Ruff Output - -```py -import pytest - -TmSt = 1 -TmEx = 2 - -# fmt: off - - -# Test data: -# Position, Volume, State, TmSt/TmEx/None, [call, [arg1...]] - -@pytest.mark.parametrize( - "test", - [ - # Test don't manage the volume - [("stuff", "in")], - ], -) -def test_fader(test): - pass - - -def check_fader(test): - pass - - -def verify_fader(test): - # misaligned comment - pass - - -def verify_fader(test): - """Hey, ho.""" - assert test.passed() - - -def test_calculate_fades(): - calcs = [ - # one is zero/none - (0, 4, 0, 0, 10, 0, 0, 6, 10), - (None, 4, 0, 0, 10, 0, 0, 6, 10), - ] - -# fmt: on -``` - -## Black Output - -```py -import pytest - -TmSt = 1 -TmEx = 2 - -# fmt: off - -# Test data: -# Position, Volume, State, TmSt/TmEx/None, [call, [arg1...]] - -@pytest.mark.parametrize('test', [ - - # Test don't manage the volume - [ - ('stuff', 'in') - ], -]) -def test_fader(test): - pass - -def check_fader(test): - - pass - -def verify_fader(test): - # misaligned comment - pass - -def verify_fader(test): - """Hey, ho.""" - assert test.passed() - -def test_calculate_fades(): - calcs = [ - # one is zero/none - (0, 4, 0, 0, 10, 0, 0, 6, 10), - (None, 4, 0, 0, 10, 0, 0, 6, 10), - ] - -# fmt: on -``` - - diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff3.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff3.py.snap deleted file mode 100644 index 42ebc85486..0000000000 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff3.py.snap +++ /dev/null @@ -1,101 +0,0 @@ ---- -source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/black/simple_cases/fmtonoff3.py ---- -## Input - -```py -# fmt: off -x = [ - 1, 2, - 3, 4, -] -# fmt: on - -# fmt: off -x = [ - 1, 2, - 3, 4, -] -# fmt: on - -x = [ - 1, 2, 3, 4 -] -``` - -## Black Differences - -```diff ---- Black -+++ Ruff -@@ -1,14 +1,18 @@ - # fmt: off - x = [ -- 1, 2, -- 3, 4, -+ 1, -+ 2, -+ 3, -+ 4, - ] - # fmt: on - - # fmt: off - x = [ -- 1, 2, -- 3, 4, -+ 1, -+ 2, -+ 3, -+ 4, - ] - # fmt: on - -``` - -## Ruff Output - -```py -# fmt: off -x = [ - 1, - 2, - 3, - 4, -] -# fmt: on - -# fmt: off -x = [ - 1, - 2, - 3, - 4, -] -# fmt: on - -x = [1, 2, 3, 4] -``` - -## Black Output - -```py -# fmt: off -x = [ - 1, 2, - 3, 4, -] -# fmt: on - -# fmt: off -x = [ - 1, 2, - 3, 4, -] -# fmt: on - -x = [1, 2, 3, 4] -``` - - diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff4.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff4.py.snap index a8dc2ef620..5962f31f5f 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff4.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff4.py.snap @@ -25,52 +25,48 @@ def f(): pass ```diff --- Black +++ Ruff -@@ -1,8 +1,12 @@ - # fmt: off --@test([ -- 1, 2, -- 3, 4, --]) -+@test( -+ [ -+ 1, -+ 2, -+ 3, -+ 4, -+ ] -+) +@@ -4,17 +4,10 @@ + 3, 4, + ]) # fmt: on - def f(): - pass +-def f(): +- pass +- ++def f(): pass + +-@test( +- [ +- 1, +- 2, +- 3, +- 4, +- ] +-) +-def f(): +- pass ++@test([ ++ 1, 2, ++ 3, 4, ++]) ++def f(): pass ``` ## Ruff Output ```py # fmt: off -@test( - [ - 1, - 2, - 3, - 4, - ] -) +@test([ + 1, 2, + 3, 4, +]) # fmt: on -def f(): - pass +def f(): pass - -@test( - [ - 1, - 2, - 3, - 4, - ] -) -def f(): - pass +@test([ + 1, 2, + 3, 4, +]) +def f(): pass ``` ## Black Output diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff5.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff5.py.snap index 99e98844ff..b28415f3ac 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff5.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtonoff5.py.snap @@ -110,57 +110,7 @@ elif unformatted: }, ) -@@ -27,7 +26,7 @@ - # Regression test for https://github.com/psf/black/issues/3026. - def test_func(): - # yapf: disable -- if unformatted( args ): -+ if unformatted(args): - return True - # yapf: enable - elif b: -@@ -39,10 +38,10 @@ - # Regression test for https://github.com/psf/black/issues/2567. - if True: - # fmt: off -- for _ in range( 1 ): -- # fmt: on -- print ( "This won't be formatted" ) -- print ( "This won't be formatted either" ) -+ for _ in range(1): -+ # fmt: on -+ print("This won't be formatted") -+ print("This won't be formatted either") - else: - print("This will be formatted") - -@@ -52,14 +51,12 @@ - async def call(param): - if param: - # fmt: off -- if param[0:4] in ( -- "ABCD", "EFGH" -- ) : -+ if param[0:4] in ("ABCD", "EFGH"): - # fmt: on -- print ( "This won't be formatted" ) -+ print("This won't be formatted") - - elif param[0:4] in ("ZZZZ",): -- print ( "This won't be formatted either" ) -+ print("This won't be formatted either") - - print("This will be formatted") - -@@ -68,13 +65,13 @@ - class Named(t.Protocol): - # fmt: off - @property -- def this_wont_be_formatted ( self ) -> str: ... -+ def this_wont_be_formatted(self) -> str: -+ ... - - +@@ -74,7 +73,6 @@ class Factory(t.Protocol): def this_will_be_formatted(self, **kwargs) -> Named: ... @@ -168,7 +118,7 @@ elif unformatted: # fmt: on -@@ -82,6 +79,6 @@ +@@ -82,6 +80,6 @@ if x: return x # fmt: off @@ -209,7 +159,7 @@ run( # Regression test for https://github.com/psf/black/issues/3026. def test_func(): # yapf: disable - if unformatted(args): + if unformatted( args ): return True # yapf: enable elif b: @@ -221,10 +171,10 @@ def test_func(): # Regression test for https://github.com/psf/black/issues/2567. if True: # fmt: off - for _ in range(1): - # fmt: on - print("This won't be formatted") - print("This won't be formatted either") + for _ in range( 1 ): + # fmt: on + print ( "This won't be formatted" ) + print ( "This won't be formatted either" ) else: print("This will be formatted") @@ -234,12 +184,14 @@ class A: async def call(param): if param: # fmt: off - if param[0:4] in ("ABCD", "EFGH"): + if param[0:4] in ( + "ABCD", "EFGH" + ) : # fmt: on - print("This won't be formatted") + print ( "This won't be formatted" ) elif param[0:4] in ("ZZZZ",): - print("This won't be formatted either") + print ( "This won't be formatted either" ) print("This will be formatted") @@ -248,8 +200,7 @@ class A: class Named(t.Protocol): # fmt: off @property - def this_wont_be_formatted(self) -> str: - ... + def this_wont_be_formatted ( self ) -> str: ... class Factory(t.Protocol): diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtskip3.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtskip3.py.snap deleted file mode 100644 index 002454e8da..0000000000 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__fmtskip3.py.snap +++ /dev/null @@ -1,64 +0,0 @@ ---- -source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/black/simple_cases/fmtskip3.py ---- -## Input - -```py -a = 3 -# fmt: off -b, c = 1, 2 -d = 6 # fmt: skip -e = 5 -# fmt: on -f = ["This is a very long line that should be formatted into a clearer line ", "by rearranging."] -``` - -## Black Differences - -```diff ---- Black -+++ Ruff -@@ -1,7 +1,7 @@ - a = 3 - # fmt: off --b, c = 1, 2 --d = 6 # fmt: skip -+b, c = 1, 2 -+d = 6 # fmt: skip - e = 5 - # fmt: on - f = [ -``` - -## Ruff Output - -```py -a = 3 -# fmt: off -b, c = 1, 2 -d = 6 # fmt: skip -e = 5 -# fmt: on -f = [ - "This is a very long line that should be formatted into a clearer line ", - "by rearranging.", -] -``` - -## Black Output - -```py -a = 3 -# fmt: off -b, c = 1, 2 -d = 6 # fmt: skip -e = 5 -# fmt: on -f = [ - "This is a very long line that should be formatted into a clearer line ", - "by rearranging.", -] -``` - - diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__import_spacing.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__import_spacing.py.snap deleted file mode 100644 index f08a097d01..0000000000 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__import_spacing.py.snap +++ /dev/null @@ -1,213 +0,0 @@ ---- -source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/black/simple_cases/import_spacing.py ---- -## Input - -```py -"""The asyncio package, tracking PEP 3156.""" - -# flake8: noqa - -from logging import ( - WARNING -) -from logging import ( - ERROR, -) -import sys - -# This relies on each of the submodules having an __all__ variable. -from .base_events import * -from .coroutines import * -from .events import * # comment here - -from .futures import * -from .locks import * # comment here -from .protocols import * - -from ..runners import * # comment here -from ..queues import * -from ..streams import * - -from some_library import ( - Just, Enough, Libraries, To, Fit, In, This, Nice, Split, Which, We, No, Longer, Use -) -from name_of_a_company.extremely_long_project_name.component.ttypes import CuteLittleServiceHandlerFactoryyy -from name_of_a_company.extremely_long_project_name.extremely_long_component_name.ttypes import * - -from .a.b.c.subprocess import * -from . import (tasks) -from . import (A, B, C) -from . import SomeVeryLongNameAndAllOfItsAdditionalLetters1, \ - SomeVeryLongNameAndAllOfItsAdditionalLetters2 - -__all__ = ( - base_events.__all__ - + coroutines.__all__ - + events.__all__ - + futures.__all__ - + locks.__all__ - + protocols.__all__ - + runners.__all__ - + queues.__all__ - + streams.__all__ - + tasks.__all__ -) -``` - -## Black Differences - -```diff ---- Black -+++ Ruff -@@ -38,7 +38,7 @@ - Use, - ) - from name_of_a_company.extremely_long_project_name.component.ttypes import ( -- CuteLittleServiceHandlerFactoryyy, -+ CuteLittleServiceHandlerFactoryyy - ) - from name_of_a_company.extremely_long_project_name.extremely_long_component_name.ttypes import * - -``` - -## Ruff Output - -```py -"""The asyncio package, tracking PEP 3156.""" - -# flake8: noqa - -from logging import WARNING -from logging import ( - ERROR, -) -import sys - -# This relies on each of the submodules having an __all__ variable. -from .base_events import * -from .coroutines import * -from .events import * # comment here - -from .futures import * -from .locks import * # comment here -from .protocols import * - -from ..runners import * # comment here -from ..queues import * -from ..streams import * - -from some_library import ( - Just, - Enough, - Libraries, - To, - Fit, - In, - This, - Nice, - Split, - Which, - We, - No, - Longer, - Use, -) -from name_of_a_company.extremely_long_project_name.component.ttypes import ( - CuteLittleServiceHandlerFactoryyy -) -from name_of_a_company.extremely_long_project_name.extremely_long_component_name.ttypes import * - -from .a.b.c.subprocess import * -from . import tasks -from . import A, B, C -from . import ( - SomeVeryLongNameAndAllOfItsAdditionalLetters1, - SomeVeryLongNameAndAllOfItsAdditionalLetters2, -) - -__all__ = ( - base_events.__all__ - + coroutines.__all__ - + events.__all__ - + futures.__all__ - + locks.__all__ - + protocols.__all__ - + runners.__all__ - + queues.__all__ - + streams.__all__ - + tasks.__all__ -) -``` - -## Black Output - -```py -"""The asyncio package, tracking PEP 3156.""" - -# flake8: noqa - -from logging import WARNING -from logging import ( - ERROR, -) -import sys - -# This relies on each of the submodules having an __all__ variable. -from .base_events import * -from .coroutines import * -from .events import * # comment here - -from .futures import * -from .locks import * # comment here -from .protocols import * - -from ..runners import * # comment here -from ..queues import * -from ..streams import * - -from some_library import ( - Just, - Enough, - Libraries, - To, - Fit, - In, - This, - Nice, - Split, - Which, - We, - No, - Longer, - Use, -) -from name_of_a_company.extremely_long_project_name.component.ttypes import ( - CuteLittleServiceHandlerFactoryyy, -) -from name_of_a_company.extremely_long_project_name.extremely_long_component_name.ttypes import * - -from .a.b.c.subprocess import * -from . import tasks -from . import A, B, C -from . import ( - SomeVeryLongNameAndAllOfItsAdditionalLetters1, - SomeVeryLongNameAndAllOfItsAdditionalLetters2, -) - -__all__ = ( - base_events.__all__ - + coroutines.__all__ - + events.__all__ - + futures.__all__ - + locks.__all__ - + protocols.__all__ - + runners.__all__ - + queues.__all__ - + streams.__all__ - + tasks.__all__ -) -``` - - diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__multiline_consecutive_open_parentheses_ignore.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__multiline_consecutive_open_parentheses_ignore.py.snap index 8e1c160ff4..7759ca34bc 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__multiline_consecutive_open_parentheses_ignore.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__multiline_consecutive_open_parentheses_ignore.py.snap @@ -33,19 +33,17 @@ print( "111" ) # type: ignore ```diff --- Black +++ Ruff -@@ -1,10 +1,8 @@ - # This is a regression test. Issue #3737 - --a = ( # type: ignore -+a = int( # type: ignore # type: ignore +@@ -3,7 +3,9 @@ + a = ( # type: ignore int( # type: ignore -- int( # type: ignore + int( # type: ignore - int(6) # type: ignore -- ) -+ int(6) # type: ignore ++ int( # type: ignore ++ 6 ++ ) + ) ) ) - ``` ## Ruff Output @@ -53,9 +51,13 @@ print( "111" ) # type: ignore ```py # This is a regression test. Issue #3737 -a = int( # type: ignore # type: ignore +a = ( # type: ignore int( # type: ignore - int(6) # type: ignore + int( # type: ignore + int( # type: ignore + 6 + ) + ) ) ) diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__remove_await_parens.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__remove_await_parens.py.snap index 26fc695ecb..428ca61376 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__remove_await_parens.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__remove_await_parens.py.snap @@ -93,13 +93,12 @@ async def main(): ```diff --- Black +++ Ruff -@@ -21,7 +21,10 @@ +@@ -21,7 +21,9 @@ # Check comments async def main(): - await asyncio.sleep(1) # Hello -+ await ( -+ # Hello ++ await ( # Hello + asyncio.sleep(1) + ) @@ -133,8 +132,7 @@ async def main(): # Check comments async def main(): - await ( - # Hello + await ( # Hello asyncio.sleep(1) ) diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__return_annotation_brackets.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__return_annotation_brackets.py.snap index c35111a8b1..552ca4576b 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__return_annotation_brackets.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__return_annotation_brackets.py.snap @@ -100,28 +100,28 @@ def foo() -> tuple[int, int, int,]: ```diff --- Black +++ Ruff -@@ -26,7 +26,9 @@ +@@ -22,11 +22,19 @@ + + + # Don't lose the comments +-def double(a: int) -> int: # Hello ++def double( ++ a: int ++) -> ( # Hello ++ int ++): return 2 * a -def double(a: int) -> int: # Hello -+def double(a: int) -> ( ++def double( ++ a: int ++) -> ( + int # Hello +): return 2 * a -@@ -54,7 +56,9 @@ - a: int, - b: int, - c: int, --) -> intsdfsafafafdfdsasdfsfsdfasdfafdsafdfdsfasdskdsdsfdsafdsafsdfdasfffsfdsfdsafafhdskfhdsfjdslkfdlfsdkjhsdfjkdshfkljds: -+) -> ( -+ intsdfsafafafdfdsasdfsfsdfasdfafdsafdfdsfasdskdsdsfdsafdsafsdfdasfffsfdsfdsafafhdskfhdsfjdslkfdlfsdkjhsdfjkdshfkljds -+): - return 2 - - ``` ## Ruff Output @@ -151,11 +151,17 @@ def double(a: int) -> int: # Don't lose the comments -def double(a: int) -> int: # Hello +def double( + a: int +) -> ( # Hello + int +): return 2 * a -def double(a: int) -> ( +def double( + a: int +) -> ( int # Hello ): return 2 * a @@ -185,9 +191,7 @@ def foo( a: int, b: int, c: int, -) -> ( - intsdfsafafafdfdsasdfsfsdfasdfafdsafdfdsfasdskdsdsfdsafdsafsdfdasfffsfdsfdsafafhdskfhdsfjdslkfdlfsdkjhsdfjkdshfkljds -): +) -> intsdfsafafafdfdsasdfsfsdfasdfafdsafdfdsfasdskdsdsfdsafdsafsdfdasfffsfdsfdsafafhdskfhdsfjdslkfdlfsdkjhsdfjkdshfkljds: return 2 diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__torture.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__torture.py.snap index 69341cf627..f44e1053f0 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__torture.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@simple_cases__torture.py.snap @@ -50,14 +50,15 @@ assert ( ) # assert sort_by_dependency( -@@ -25,9 +25,7 @@ +@@ -25,9 +25,9 @@ class A: def foo(self): for _ in range(10): - aaaaaaaaaaaaaaaaaaa = bbbbbbbbbbbbbbb.cccccccccc( -- xxxxxxxxxxxx ++ aaaaaaaaaaaaaaaaaaa = bbbbbbbbbbbbbbb.cccccccccc( # pylint: disable=no-member + xxxxxxxxxxxx - ) # pylint: disable=no-member -+ aaaaaaaaaaaaaaaaaaa = bbbbbbbbbbbbbbb.cccccccccc(xxxxxxxxxxxx) # pylint: disable=no-member ++ ) def test(self, othr): @@ -93,7 +94,9 @@ importA class A: def foo(self): for _ in range(10): - aaaaaaaaaaaaaaaaaaa = bbbbbbbbbbbbbbb.cccccccccc(xxxxxxxxxxxx) # pylint: disable=no-member + aaaaaaaaaaaaaaaaaaa = bbbbbbbbbbbbbbb.cccccccccc( # pylint: disable=no-member + xxxxxxxxxxxx + ) def test(self, othr): diff --git a/crates/ruff_python_formatter/tests/snapshots/format@docstring.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@docstring.py.snap new file mode 100644 index 0000000000..0a3c9a62a6 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@docstring.py.snap @@ -0,0 +1,448 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/docstring.py +--- +## Input +```py +def single_line_backslashes1(): + """ content\ """ + return + + +def single_line_backslashes2(): + """ content\\ """ + return + + +def single_line_backslashes3(): + """ content\\\ """ + return + + +def multiline_backslashes1(): + """This is a docstring with + some lines of text\ """ + return + + +def multiline_backslashes2(): + """This is a docstring with + some lines of text\\ """ + return + + +def multiline_backslashes3(): + """This is a docstring with + some lines of text\\\ """ + return + + +def multiple_negatively_indented_docstring_lines(): + """a + b + c + d + e + """ + + +def overindentend_docstring(): + """a + over-indented + """ + + +def comment_before_docstring(): + # don't lose this function comment ... + """Does nothing. + + But it has comments + """ # ... neither lose this function comment + + +class CommentBeforeDocstring(): + # don't lose this class comment ... + """Empty class. + + But it has comments + """ # ... neither lose this class comment + + +class IndentMeSome: + def doc_string_without_linebreak_after_colon(self): """ This is somewhat strange + a + b + We format this a is the docstring had started properly indented on the next + line if the target indentation. This may we incorrect since source and target + indentation can be incorrect, but this is also an edge case. + """ + + +class IgnoreImplicitlyConcatenatedStrings: + """""" "" + + +def docstring_that_ends_with_quote_and_a_line_break1(): + """ + he said "the news of my death have been greatly exaggerated" + """ + + +def docstring_that_ends_with_quote_and_a_line_break2(): + """he said "the news of my death have been greatly exaggerated" + """ + + +def docstring_that_ends_with_quote_and_a_line_break3(): + """he said "the news of my death have been greatly exaggerated" + + """ + + +class TabbedIndent: + def tabbed_indent(self): + """check for correct tabbed formatting + ^^^^^^^^^^ + Normal indented line + - autor + """ +``` + +## Outputs +### Output 1 +``` +indent-style = Spaces, size: 4 +line-width = 88 +quote-style = Double +magic-trailing-comma = Respect +``` + +```py +def single_line_backslashes1(): + """content\ """ + return + + +def single_line_backslashes2(): + """content\\""" + return + + +def single_line_backslashes3(): + """content\\\ """ + return + + +def multiline_backslashes1(): + """This is a docstring with + some lines of text\ """ + return + + +def multiline_backslashes2(): + """This is a docstring with + some lines of text\\""" + return + + +def multiline_backslashes3(): + """This is a docstring with + some lines of text\\\ """ + return + + +def multiple_negatively_indented_docstring_lines(): + """a + b + c + d + e + """ + + +def overindentend_docstring(): + """a + over-indented + """ + + +def comment_before_docstring(): + # don't lose this function comment ... + """Does nothing. + + But it has comments + """ # ... neither lose this function comment + + +class CommentBeforeDocstring: + # don't lose this class comment ... + """Empty class. + + But it has comments + """ # ... neither lose this class comment + + +class IndentMeSome: + def doc_string_without_linebreak_after_colon(self): + """This is somewhat strange + a + b + We format this a is the docstring had started properly indented on the next + line if the target indentation. This may we incorrect since source and target + indentation can be incorrect, but this is also an edge case. + """ + + +class IgnoreImplicitlyConcatenatedStrings: + """""" "" + + +def docstring_that_ends_with_quote_and_a_line_break1(): + """ + he said "the news of my death have been greatly exaggerated" + """ + + +def docstring_that_ends_with_quote_and_a_line_break2(): + """he said "the news of my death have been greatly exaggerated" """ + + +def docstring_that_ends_with_quote_and_a_line_break3(): + """he said "the news of my death have been greatly exaggerated" """ + + +class TabbedIndent: + def tabbed_indent(self): + """check for correct tabbed formatting + ^^^^^^^^^^ + Normal indented line + - autor + """ +``` + + +### Output 2 +``` +indent-style = Spaces, size: 2 +line-width = 88 +quote-style = Double +magic-trailing-comma = Respect +``` + +```py +def single_line_backslashes1(): + """content\ """ + return + + +def single_line_backslashes2(): + """content\\""" + return + + +def single_line_backslashes3(): + """content\\\ """ + return + + +def multiline_backslashes1(): + """This is a docstring with + some lines of text\ """ + return + + +def multiline_backslashes2(): + """This is a docstring with + some lines of text\\""" + return + + +def multiline_backslashes3(): + """This is a docstring with + some lines of text\\\ """ + return + + +def multiple_negatively_indented_docstring_lines(): + """a + b + c + d + e + """ + + +def overindentend_docstring(): + """a + over-indented + """ + + +def comment_before_docstring(): + # don't lose this function comment ... + """Does nothing. + + But it has comments + """ # ... neither lose this function comment + + +class CommentBeforeDocstring: + # don't lose this class comment ... + """Empty class. + + But it has comments + """ # ... neither lose this class comment + + +class IndentMeSome: + def doc_string_without_linebreak_after_colon(self): + """This is somewhat strange + a + b + We format this a is the docstring had started properly indented on the next + line if the target indentation. This may we incorrect since source and target + indentation can be incorrect, but this is also an edge case. + """ + + +class IgnoreImplicitlyConcatenatedStrings: + """""" "" + + +def docstring_that_ends_with_quote_and_a_line_break1(): + """ + he said "the news of my death have been greatly exaggerated" + """ + + +def docstring_that_ends_with_quote_and_a_line_break2(): + """he said "the news of my death have been greatly exaggerated" """ + + +def docstring_that_ends_with_quote_and_a_line_break3(): + """he said "the news of my death have been greatly exaggerated" """ + + +class TabbedIndent: + def tabbed_indent(self): + """check for correct tabbed formatting + ^^^^^^^^^^ + Normal indented line + - autor + """ +``` + + +### Output 3 +``` +indent-style = Tab +line-width = 88 +quote-style = Double +magic-trailing-comma = Respect +``` + +```py +def single_line_backslashes1(): + """content\ """ + return + + +def single_line_backslashes2(): + """content\\""" + return + + +def single_line_backslashes3(): + """content\\\ """ + return + + +def multiline_backslashes1(): + """This is a docstring with + some lines of text\ """ + return + + +def multiline_backslashes2(): + """This is a docstring with + some lines of text\\""" + return + + +def multiline_backslashes3(): + """This is a docstring with + some lines of text\\\ """ + return + + +def multiple_negatively_indented_docstring_lines(): + """a + b + c + d + e + """ + + +def overindentend_docstring(): + """a + over-indented + """ + + +def comment_before_docstring(): + # don't lose this function comment ... + """Does nothing. + + But it has comments + """ # ... neither lose this function comment + + +class CommentBeforeDocstring: + # don't lose this class comment ... + """Empty class. + + But it has comments + """ # ... neither lose this class comment + + +class IndentMeSome: + def doc_string_without_linebreak_after_colon(self): + """This is somewhat strange + a + b + We format this a is the docstring had started properly indented on the next + line if the target indentation. This may we incorrect since source and target + indentation can be incorrect, but this is also an edge case. + """ + + +class IgnoreImplicitlyConcatenatedStrings: + """""" "" + + +def docstring_that_ends_with_quote_and_a_line_break1(): + """ + he said "the news of my death have been greatly exaggerated" + """ + + +def docstring_that_ends_with_quote_and_a_line_break2(): + """he said "the news of my death have been greatly exaggerated" """ + + +def docstring_that_ends_with_quote_and_a_line_break3(): + """he said "the news of my death have been greatly exaggerated" """ + + +class TabbedIndent: + def tabbed_indent(self): + """check for correct tabbed formatting + ^^^^^^^^^^ + Normal indented line + - autor + """ +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__attribute.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__attribute.py.snap index ecbc21d1a1..59623f33ac 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__attribute.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__attribute.py.snap @@ -204,8 +204,7 @@ x6 = ( ) # regression: https://github.com/astral-sh/ruff/issues/6181 -( - # +( # () ).a ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__binary.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__binary.py.snap index 61499e20e3..172b318812 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__binary.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__binary.py.snap @@ -217,6 +217,17 @@ for user_id in set(target_user_ids) - {u.user_id for u in updates}: log(self.price / self.strike) + (self.risk_free - self.div_cont + 0.5 * (self.sigma**2)) * self.exp_time ) / self.sigmaT + +# Stability with end-of-line comments between empty tuples and bin op +x = () - (# +) +x = ( + () + - () # +) +x = ( + () - () # +) ``` ## Output @@ -488,6 +499,19 @@ for user_id in set(target_user_ids) - {u.user_id for u in updates}: log(self.price / self.strike) + (self.risk_free - self.div_cont + 0.5 * (self.sigma**2)) * self.exp_time ) / self.sigmaT + +# Stability with end-of-line comments between empty tuples and bin op +x = ( + () + - ( # + ) +) +x = ( + () - () # +) +x = ( + () - () # +) ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__binary_implicit_string.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__binary_implicit_string.py.snap index 8176cc6fdf..a87ae3d9d8 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__binary_implicit_string.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__binary_implicit_string.py.snap @@ -180,7 +180,8 @@ def test(): ", %s unmodified" % unmodified_count if collected["unmodified"] else "" ), "post_processed": ( - collected["post_processed"] and ", %s post-processed" % post_processed_count + collected["post_processed"] + and ", %s post-processed" % post_processed_count or "" ), } diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__boolean_operation.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__boolean_operation.py.snap index 979f6fb805..01ae09af34 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__boolean_operation.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__boolean_operation.py.snap @@ -68,6 +68,38 @@ if ( and [dddddddddddddd, eeeeeeeeee, fffffffffffffff] ): pass + +# Regression test for https://github.com/astral-sh/ruff/issues/6068 +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) or numpy and isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) and numpy or isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) or xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy and isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) and xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy or isinstance(ccccccccccc, dddddd) +): + pass + + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) or (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy) and isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) and (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy) or isinstance(ccccccccccc, dddddd) +): + pass ``` ## Output @@ -136,6 +168,58 @@ if ( and [dddddddddddddd, eeeeeeeeee, fffffffffffffff] ): pass + +# Regression test for https://github.com/astral-sh/ruff/issues/6068 +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) + or numpy + and isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) + and numpy + or isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) + or xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy + and isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) + and xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy + or isinstance(ccccccccccc, dddddd) +): + pass + + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) + or ( + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy + ) + and isinstance(ccccccccccc, dddddd) +): + pass + +if not ( + isinstance(aaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbb) + and ( + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy + ) + or isinstance(ccccccccccc, dddddd) +): + pass ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__call.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__call.py.snap index 8120fdd4d8..d597fca638 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__call.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__call.py.snap @@ -117,6 +117,59 @@ f ( 1 # abc ) + +threshold_date = datetime.datetime.now() - datetime.timedelta( # comment + days=threshold_days_threshold_days +) + +# Parenthesized and opening-parenthesis comments +func( + (x for x in y) +) + +func( # outer comment + (x for x in y) +) + +func( + ( # inner comment + x for x in y + ) +) + +func( + ( + # inner comment + x for x in y + ) +) + +func( # outer comment + ( # inner comment + 1 + ) +) + +func( + # outer comment + ( # inner comment + x for x in y + ) +) + + +func( + ( # inner comment + [] + ) +) + +func( + # outer comment + ( # inner comment + [] + ) +) ``` ## Output @@ -209,7 +262,8 @@ f( a.very_long_function_function_that_is_so_long_that_it_expands_the_parent_but_its_only_a_single_argument() ) -f() # abc +f( # abc +) f( # abc # abc @@ -219,7 +273,9 @@ f( # abc ) -f(1) # abc +f( # abc + 1 +) f( # abc @@ -230,6 +286,57 @@ f( 1 # abc ) + +threshold_date = datetime.datetime.now() - datetime.timedelta( # comment + days=threshold_days_threshold_days +) + +# Parenthesized and opening-parenthesis comments +func(x for x in y) + +func( # outer comment + x for x in y +) + +func( + ( # inner comment + x for x in y + ) +) + +func( + # inner comment + x + for x in y +) + +func( # outer comment + ( # inner comment + 1 + ) +) + +func( + # outer comment + ( # inner comment + x for x in y + ) +) + + +func( + ( # inner comment + [] + ) +) + +func( + ( + # outer comment + # inner comment + [] + ) +) ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__compare.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__compare.py.snap index f62138f5d9..e47b22e60a 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__compare.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__compare.py.snap @@ -65,6 +65,58 @@ return 1 == 2 and ( >= c ) ] + +def f(): + return ( + unicodedata.normalize("NFKC", s1).casefold() + == unicodedata.normalize("NFKC", s2).casefold() + ) + +# Call expressions with trailing attributes. + +ct_match = ( + aaaaaaaaaaact_id == self.get_content_type(obj=rel_obj, using=instance._state.db).id +) + +ct_match = ( + {aaaaaaaaaaaaaaaa} == self.get_content_type(obj=rel_obj, using=instance._state.db).id +) + +ct_match = ( + (aaaaaaaaaaaaaaaa) == self.get_content_type(obj=rel_obj, using=instance._state.db).id +) + +ct_match = aaaaaaaaaaact_id == self.get_content_type( + obj=rel_obj, using=instance._state.db +) + +# Call expressions with trailing subscripts. + +ct_match = ( + aaaaaaaaaaact_id == self.get_content_type(obj=rel_obj, using=instance._state.db)[id] +) + +ct_match = ( + {aaaaaaaaaaaaaaaa} == self.get_content_type(obj=rel_obj, using=instance._state.db)[id] +) + +ct_match = ( + (aaaaaaaaaaaaaaaa) == self.get_content_type(obj=rel_obj, using=instance._state.db)[id] +) + +# Subscripts expressions with trailing attributes. + +ct_match = ( + aaaaaaaaaaact_id == self.get_content_type[obj, rel_obj, using, instance._state.db].id +) + +ct_match = ( + {aaaaaaaaaaaaaaaa} == self.get_content_type[obj, rel_obj, using, instance._state.db].id +) + +ct_match = ( + (aaaaaaaaaaaaaaaa) == self.get_content_type[obj, rel_obj, using, instance._state.db].id +) ``` ## Output @@ -171,6 +223,61 @@ return 1 == 2 and ( >= c ) ] + + +def f(): + return ( + unicodedata.normalize("NFKC", s1).casefold() + == unicodedata.normalize("NFKC", s2).casefold() + ) + + +# Call expressions with trailing attributes. + +ct_match = ( + aaaaaaaaaaact_id == self.get_content_type(obj=rel_obj, using=instance._state.db).id +) + +ct_match = {aaaaaaaaaaaaaaaa} == self.get_content_type( + obj=rel_obj, using=instance._state.db +).id + +ct_match = (aaaaaaaaaaaaaaaa) == self.get_content_type( + obj=rel_obj, using=instance._state.db +).id + +ct_match = aaaaaaaaaaact_id == self.get_content_type( + obj=rel_obj, using=instance._state.db +) + +# Call expressions with trailing subscripts. + +ct_match = ( + aaaaaaaaaaact_id == self.get_content_type(obj=rel_obj, using=instance._state.db)[id] +) + +ct_match = { + aaaaaaaaaaaaaaaa +} == self.get_content_type(obj=rel_obj, using=instance._state.db)[id] + +ct_match = ( + aaaaaaaaaaaaaaaa +) == self.get_content_type(obj=rel_obj, using=instance._state.db)[id] + +# Subscripts expressions with trailing attributes. + +ct_match = ( + aaaaaaaaaaact_id + == self.get_content_type[obj, rel_obj, using, instance._state.db].id +) + +ct_match = { + aaaaaaaaaaaaaaaa +} == self.get_content_type[obj, rel_obj, using, instance._state.db].id + +ct_match = ( + aaaaaaaaaaaaaaaa +) == self.get_content_type[obj, rel_obj, using, instance._state.db].id ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__dict.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__dict.py.snap index e27a63126d..a5b6c5e896 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__dict.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__dict.py.snap @@ -129,7 +129,8 @@ a = { 3: True, } -x = {} # dangling end of line comment +x = { # dangling end of line comment +} ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__dict_comp.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__dict_comp.py.snap index 190d80a451..4d725fc27c 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__dict_comp.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__dict_comp.py.snap @@ -265,7 +265,10 @@ selected_choices = { { k: v - for (x, aaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaay) in z # foo + for ( # foo + x, + aaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaay, + ) in z } a = { diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__fstring.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__fstring.py.snap new file mode 100644 index 0000000000..e6e7156208 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__fstring.py.snap @@ -0,0 +1,82 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/fstring.py +--- +## Input +```py +( + f'{one}' + f'{two}' +) + + +rf"Not-so-tricky \"quote" + +# Regression test for fstrings dropping comments +result_f = ( + 'Traceback (most recent call last):\n' + f' File "{__file__}", line {lineno_f+5}, in _check_recursive_traceback_display\n' + ' f()\n' + f' File "{__file__}", line {lineno_f+1}, in f\n' + ' f()\n' + f' File "{__file__}", line {lineno_f+1}, in f\n' + ' f()\n' + f' File "{__file__}", line {lineno_f+1}, in f\n' + ' f()\n' + # XXX: The following line changes depending on whether the tests + # are run through the interactive interpreter or with -m + # It also varies depending on the platform (stack size) + # Fortunately, we don't care about exactness here, so we use regex + r' \[Previous line repeated (\d+) more times\]' '\n' + 'RecursionError: maximum recursion depth exceeded\n' +) + + +# Regression for fstring dropping comments that were accidentally attached to +# an expression inside a formatted value +( + f'{1}' + # comment + '' +) +``` + +## Output +```py +(f"{one}" f"{two}") + + +rf'Not-so-tricky "quote' + +# Regression test for fstrings dropping comments +result_f = ( + "Traceback (most recent call last):\n" + f' File "{__file__}", line {lineno_f+5}, in _check_recursive_traceback_display\n' + " f()\n" + f' File "{__file__}", line {lineno_f+1}, in f\n' + " f()\n" + f' File "{__file__}", line {lineno_f+1}, in f\n' + " f()\n" + f' File "{__file__}", line {lineno_f+1}, in f\n' + " f()\n" + # XXX: The following line changes depending on whether the tests + # are run through the interactive interpreter or with -m + # It also varies depending on the platform (stack size) + # Fortunately, we don't care about exactness here, so we use regex + r" \[Previous line repeated (\d+) more times\]" + "\n" + "RecursionError: maximum recursion depth exceeded\n" +) + + +# Regression for fstring dropping comments that were accidentally attached to +# an expression inside a formatted value +( + f"{1}" + # comment + "" +) +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__generator_exp.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__generator_exp.py.snap index b634d6dd46..ed11b4724c 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__generator_exp.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__generator_exp.py.snap @@ -79,10 +79,11 @@ f((1) for _ in (a)) # black keeps these atm, but intends to remove them in the future: # https://github.com/psf/black/issues/2943 len( - # leading - a - for b in c - # trailing + ( # leading + a + for b in c + # trailing + ) ) len( diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__joined_string.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__joined_string.py.snap deleted file mode 100644 index d9f8f4313d..0000000000 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__joined_string.py.snap +++ /dev/null @@ -1,25 +0,0 @@ ---- -source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/joined_string.py ---- -## Input -```py -( - f'{one}' - f'{two}' -) - - -rf"Not-so-tricky \"quote" -``` - -## Output -```py -(f"{one}" f"{two}") - - -rf'Not-so-tricky "quote' -``` - - - diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__lambda.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__lambda.py.snap index 6937a6e5e1..0c1ec4565e 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__lambda.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__lambda.py.snap @@ -97,6 +97,8 @@ lambda *args, b, **kwds,: 0 lambda *, b, **kwds,: 0 lambda a, *args, b, **kwds,: 0 lambda a, *, b, **kwds,: 0 +lambda a, /: a +lambda a, /, c: a ``` ## Output @@ -165,7 +167,8 @@ a = ( # Regression test: lambda empty arguments ranges were too long, leading to unstable # formatting ( - lambda: (), # + lambda: ( # + ), ) @@ -194,6 +197,8 @@ lambda *args, b, **kwds,: 0 lambda *, b, **kwds,: 0 lambda a, *args, b, **kwds,: 0 lambda a, *, b, **kwds,: 0 +lambda a, /: a +lambda a, /, c: a ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__list.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__list.py.snap index e94d3cf33f..a4b60d427a 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__list.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__list.py.snap @@ -50,13 +50,20 @@ c1 = [ # trailing open bracket [ # end-of-line comment 1 ] + +[ # inner comment + first, + second, + third +] # outer comment ``` ## Output ```py # Dangling comment placement in empty lists # Regression test for https://github.com/python/cpython/blob/03160630319ca26dcbbad65225da4248e54c45ec/Tools/c-analyzer/c_analyzer/datafiles.py#L14-L16 -a1 = [] # a +a1 = [ # a +] a2 = [ # a # b ] @@ -87,13 +94,22 @@ c1 = [ # trailing open bracket ] # trailing close bracket -[] # end-of-line comment +[ # end-of-line comment +] [ # end-of-line comment # own-line comment ] -[1] # end-of-line comment +[ # end-of-line comment + 1 +] + +[ # inner comment + first, + second, + third, +] # outer comment ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__named_expr.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__named_expr.py.snap index 018df04c72..8a57c6cb90 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__named_expr.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__named_expr.py.snap @@ -42,6 +42,21 @@ except (e := Exception): (x := 1) (x := 1) + (y := 2) + +with (x := 1): + pass + + +def f(): + yield (x := 1) + + +def f(): + yield from (x := 1) + + +async def f(): + await (x := 1) ``` ## Output @@ -82,6 +97,21 @@ except (e := Exception): (x := 1) (x := 1) + (y := 2) + +with (x := 1): + pass + + +def f(): + yield (x := 1) + + +def f(): + yield from (x := 1) + + +async def f(): + await (x := 1) ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__split_empty_brackets.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__split_empty_brackets.py.snap new file mode 100644 index 0000000000..c923784d04 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__split_empty_brackets.py.snap @@ -0,0 +1,197 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/split_empty_brackets.py +--- +## Input +```py +# Expressions with empty parentheses. +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold() + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold(1) + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold(0) + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold(1) +) + +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold(1) + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold(1) +) + +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold( + # foo + ) + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold( + # foo + ) +) + +ct_match = ( + [].unicodedata.normalize("NFKC", s1).casefold() + == [].unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + [].unicodedata.normalize("NFKC", s1).casefold() + == [1].unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + [1].unicodedata.normalize("NFKC", s1).casefold() + == [].unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + [1].unicodedata.normalize("NFKC", s1).casefold() + == [1].unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + {}.unicodedata.normalize("NFKC", s1).casefold() + == {}.unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + {}.unicodedata.normalize("NFKC", s1).casefold() + == {1}.unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + {1}.unicodedata.normalize("NFKC", s1).casefold() + == {}.unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + {1}.unicodedata.normalize("NFKC", s1).casefold() + == {1}.unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + ([]).unicodedata.normalize("NFKC", s1).casefold() + == ([]).unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +return await self.http_client.fetch( + f"http://127.0.0.1:{self.port}{path}", method=method, **kwargs, +) + +return await self.http_client().fetch( + f"http://127.0.0.1:{self.port}{path}", method=method, **kwargs, +) + +return await self().http_client().fetch( + f"http://127.0.0.1:{self.port}{path}", method=method, **kwargs, +) + +response = await sync_to_async( + lambda: self.django_handler.get_response(request), thread_sensitive=True +)() +``` + +## Output +```py +# Expressions with empty parentheses. +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold() + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold(1) + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = unicodedata.normalize("NFKC", s1).casefold(0) == unicodedata.normalize( + "NFKCNFKCNFKCNFKCNFKC", s2 +).casefold(1) + +ct_match = unicodedata.normalize("NFKC", s1).casefold(1) == unicodedata.normalize( + "NFKCNFKCNFKCNFKCNFKC", s2 +).casefold(1) + +ct_match = ( + unicodedata.normalize("NFKC", s1).casefold( + # foo + ) + == unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold( + # foo + ) +) + +ct_match = ( + [].unicodedata.normalize("NFKC", s1).casefold() + == [].unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + [].unicodedata.normalize("NFKC", s1).casefold() + == [1].unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = [1].unicodedata.normalize("NFKC", s1).casefold() == [].unicodedata.normalize( + "NFKCNFKCNFKCNFKCNFKC", s2 +).casefold() + +ct_match = [1].unicodedata.normalize("NFKC", s1).casefold() == [ + 1 +].unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() + +ct_match = ( + {}.unicodedata.normalize("NFKC", s1).casefold() + == {}.unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = ( + {}.unicodedata.normalize("NFKC", s1).casefold() + == {1}.unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() +) + +ct_match = {1}.unicodedata.normalize("NFKC", s1).casefold() == {}.unicodedata.normalize( + "NFKCNFKCNFKCNFKCNFKC", s2 +).casefold() + +ct_match = {1}.unicodedata.normalize("NFKC", s1).casefold() == { + 1 +}.unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() + +ct_match = ([]).unicodedata.normalize("NFKC", s1).casefold() == ( + [] +).unicodedata.normalize("NFKCNFKCNFKCNFKCNFKC", s2).casefold() + +return await self.http_client.fetch( + f"http://127.0.0.1:{self.port}{path}", + method=method, + **kwargs, +) + +return await self.http_client().fetch( + f"http://127.0.0.1:{self.port}{path}", + method=method, + **kwargs, +) + +return ( + await self() + .http_client() + .fetch( + f"http://127.0.0.1:{self.port}{path}", + method=method, + **kwargs, + ) +) + +response = await sync_to_async( + lambda: self.django_handler.get_response(request), thread_sensitive=True +)() +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__starred.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__starred.py.snap index fcc8712509..2393ae56af 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__starred.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__starred.py.snap @@ -19,6 +19,24 @@ call( [What, i, this, s, very, long, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa] ) # trailing value comment ) + +call( + x, + # Leading starred comment + * # Trailing star comment + [ + # Leading value comment + [What, i, this, s, very, long, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa] + ] # trailing value comment +) + +call( + x, + * # Trailing star comment + ( # Leading value comment + y + ) +) ``` ## Output @@ -42,8 +60,7 @@ call( call( # Leading starred comment - # Leading value comment - *( + *( # Leading value comment [ What, i, @@ -55,6 +72,32 @@ call( ] ) # trailing value comment ) + +call( + x, + # Leading starred comment + # Trailing star comment + *[ + # Leading value comment + [ + What, + i, + this, + s, + very, + long, + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, + ] + ], # trailing value comment +) + +call( + x, + # Trailing star comment + *( # Leading value comment + y + ), +) ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__tuple.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__tuple.py.snap index 5e818a39cb..85dfa81fff 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__tuple.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__tuple.py.snap @@ -9,6 +9,8 @@ a1 = 1, 2 a2 = (1, 2) a3 = (1, 2), 3 a4 = ((1, 2), 3) +a5 = (1), (2) +a6 = ((1), (2)) # Wrapping parentheses checks b1 = (("Michael", "Ende"), ("Der", "satanarchäolügenialkohöllische", "Wunschpunsch"), ("Beelzebub", "Irrwitzer"), ("Tyrannja", "Vamperl"),) @@ -79,6 +81,8 @@ a1 = 1, 2 a2 = (1, 2) a3 = (1, 2), 3 a4 = ((1, 2), 3) +a5 = (1), (2) +a6 = ((1), (2)) # Wrapping parentheses checks b1 = ( diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__yield.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__yield.py.snap index b5d464ec81..1698ba87e2 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__yield.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__yield.py.snap @@ -63,6 +63,14 @@ def foo(): yield from (yield l) + ( + yield + #comment 1 + * # comment 2 + # comment 3 + test, # comment 4 + 1 + ) ``` ## Output @@ -115,6 +123,18 @@ def foo(): pass yield from (yield l) + + ( + yield ( + # comment 1 + ( + # comment 2 + # comment 3 + *test, # comment 4 + 1, + ) + ) + ) ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__comments.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__comments.py.snap new file mode 100644 index 0000000000..ad353b6d2f --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__comments.py.snap @@ -0,0 +1,70 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/comments.py +--- +## Input +```py +pass + +# fmt: off + # A comment that falls into the verbatim range +a + b # a trailing comment + +# in between comments + +# function comment +def test(): + pass + + # under indent + + def nested(): + ... + + # trailing comment that falls into the verbatim range + # trailing outer comment + # fmt: on + +a + b + +def test(): + pass + # fmt: off + # a trailing comment + +``` + +## Output +```py +pass + +# fmt: off + # A comment that falls into the verbatim range +a + b # a trailing comment + +# in between comments + +# function comment +def test(): + pass + + # under indent + + def nested(): + ... + + # trailing comment that falls into the verbatim range + # trailing outer comment + # fmt: on + +a + b + + +def test(): + pass + # fmt: off + # a trailing comment +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__empty_file.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__empty_file.py.snap new file mode 100644 index 0000000000..7dbe39d5d1 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__empty_file.py.snap @@ -0,0 +1,24 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/empty_file.py +--- +## Input +```py +# fmt: off + + # this does not work because there are no statements + +# fmt: on +``` + +## Output +```py +# fmt: off + +# this does not work because there are no statements + +# fmt: on +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__fmt_off_docstring.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__fmt_off_docstring.py.snap new file mode 100644 index 0000000000..dd1d9c6714 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__fmt_off_docstring.py.snap @@ -0,0 +1,91 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/fmt_off_docstring.py +--- +## Input +```py +def test(): + # fmt: off + """ This docstring does not + get formatted + """ + + # fmt: on + + but + this + does + +def test(): + # fmt: off + # just for fun + # fmt: on + # leading comment + """ This docstring gets formatted + """ # trailing comment + + and_this + gets + formatted + too +``` + +## Outputs +### Output 1 +``` +indent-style = Spaces, size: 4 +line-width = 88 +quote-style = Double +magic-trailing-comma = Respect +``` + +```py +def test(): + # fmt: off + """ This docstring does not + get formatted + """ + + # fmt: on + + but + this + does + + +def test(): + # fmt: off + # just for fun + # fmt: on + # leading comment + """This docstring gets formatted""" # trailing comment + + and_this + gets + formatted + too +``` + + +### Output 2 +``` +indent-style = Spaces, size: 2 +line-width = 88 +quote-style = Double +magic-trailing-comma = Respect +``` + +```py +def test(): + # fmt: off + """ This docstring does not + get formatted + """ + + # fmt: on + + but + this + does + + +def test(): + # fmt: off + # just for fun + # fmt: on + # leading comment + """This docstring gets formatted""" # trailing comment + + and_this + gets + formatted + too +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__form_feed.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__form_feed.py.snap new file mode 100644 index 0000000000..0c009fa424 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__form_feed.py.snap @@ -0,0 +1,28 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/form_feed.py +--- +## Input +```py +# fmt: off +# DB layer (form feed at the start of the next line) + +# fmt: on + +def test(): + pass +``` + +## Output +```py +# fmt: off +# DB layer (form feed at the start of the next line) + +# fmt: on + +def test(): + pass +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__indent.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__indent.py.snap new file mode 100644 index 0000000000..37ea15222f --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__indent.py.snap @@ -0,0 +1,272 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/indent.py +--- +## Input +```py +def test(): + # fmt: off + a_very_small_indent + ( +not_fixed + ) + + if True: + pass + more + # fmt: on + + formatted + + def test(): + a_small_indent + # fmt: off +# fix under-indented comments + (or_the_inner_expression + +expressions + ) + + if True: + pass + # fmt: on + + +# fmt: off +def test(): + pass + + # It is necessary to indent comments because the following fmt: on comment because it otherwise becomes a trailing comment + # of the `test` function if the "proper" indentation is larger than 2 spaces. + # fmt: on + +disabled + formatting; + +# fmt: on + +formatted; + +def test(): + pass + # fmt: off + """A multiline strings + that should not get formatted""" + + "A single quoted multiline \ + string" + + disabled + formatting; + +# fmt: on + +formatted; +``` + +## Outputs +### Output 1 +``` +indent-style = Spaces, size: 4 +line-width = 88 +quote-style = Double +magic-trailing-comma = Respect +``` + +```py +def test(): + # fmt: off + a_very_small_indent + ( +not_fixed + ) + + if True: + pass + more + # fmt: on + + formatted + + def test(): + a_small_indent + # fmt: off + # fix under-indented comments + (or_the_inner_expression + +expressions + ) + + if True: + pass + # fmt: on + + +# fmt: off +def test(): + pass + + # It is necessary to indent comments because the following fmt: on comment because it otherwise becomes a trailing comment + # of the `test` function if the "proper" indentation is larger than 2 spaces. + # fmt: on + +disabled + formatting; + +# fmt: on + +formatted + + +def test(): + pass + # fmt: off + """A multiline strings + that should not get formatted""" + + "A single quoted multiline \ + string" + + disabled + formatting + + +# fmt: on + +formatted +``` + + +### Output 2 +``` +indent-style = Spaces, size: 1 +line-width = 88 +quote-style = Double +magic-trailing-comma = Respect +``` + +```py +def test(): + # fmt: off + a_very_small_indent + ( +not_fixed + ) + + if True: + pass + more + # fmt: on + + formatted + + def test(): + a_small_indent + # fmt: off + # fix under-indented comments + (or_the_inner_expression + +expressions + ) + + if True: + pass + # fmt: on + + +# fmt: off +def test(): + pass + + # It is necessary to indent comments because the following fmt: on comment because it otherwise becomes a trailing comment + # of the `test` function if the "proper" indentation is larger than 2 spaces. + # fmt: on + +disabled + formatting; + +# fmt: on + +formatted + + +def test(): + pass + # fmt: off + """A multiline strings + that should not get formatted""" + + "A single quoted multiline \ + string" + + disabled + formatting + + +# fmt: on + +formatted +``` + + +### Output 3 +``` +indent-style = Tab +line-width = 88 +quote-style = Double +magic-trailing-comma = Respect +``` + +```py +def test(): + # fmt: off + a_very_small_indent + ( +not_fixed + ) + + if True: + pass + more + # fmt: on + + formatted + + def test(): + a_small_indent + # fmt: off + # fix under-indented comments + (or_the_inner_expression + +expressions + ) + + if True: + pass + # fmt: on + + +# fmt: off +def test(): + pass + + # It is necessary to indent comments because the following fmt: on comment because it otherwise becomes a trailing comment + # of the `test` function if the "proper" indentation is larger than 2 spaces. + # fmt: on + +disabled + formatting; + +# fmt: on + +formatted + + +def test(): + pass + # fmt: off + """A multiline strings + that should not get formatted""" + + "A single quoted multiline \ + string" + + disabled + formatting + + +# fmt: on + +formatted +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__last_statement.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__last_statement.py.snap new file mode 100644 index 0000000000..07d0eeaf0c --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__last_statement.py.snap @@ -0,0 +1,35 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/last_statement.py +--- +## Input +```py +def test(): + # fmt: off + + a + b + + + + # suppressed comments + +a + b # formatted +``` + +## Output +```py +def test(): + # fmt: off + + a + b + + + + # suppressed comments + + +a + b # formatted +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__mixed_space_and_tab.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__mixed_space_and_tab.py.snap new file mode 100644 index 0000000000..1027b24e41 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__mixed_space_and_tab.py.snap @@ -0,0 +1,103 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/mixed_space_and_tab.py +--- +## Input +```py +def test(): + # fmt: off + a_very_small_indent + ( +not_fixed + ) + + if True: +# Fun tab, space, tab, space. Followed by space, tab, tab, space + pass + more + else: + other + # fmt: on + +``` + +## Outputs +### Output 1 +``` +indent-style = Spaces, size: 4 +line-width = 88 +quote-style = Double +magic-trailing-comma = Respect +``` + +```py +def test(): + # fmt: off + a_very_small_indent + ( +not_fixed + ) + + if True: + # Fun tab, space, tab, space. Followed by space, tab, tab, space + pass + more + else: + other +# fmt: on +``` + + +### Output 2 +``` +indent-style = Spaces, size: 2 +line-width = 88 +quote-style = Double +magic-trailing-comma = Respect +``` + +```py +def test(): + # fmt: off + a_very_small_indent + ( +not_fixed + ) + + if True: + # Fun tab, space, tab, space. Followed by space, tab, tab, space + pass + more + else: + other +# fmt: on +``` + + +### Output 3 +``` +indent-style = Tab +line-width = 88 +quote-style = Double +magic-trailing-comma = Respect +``` + +```py +def test(): + # fmt: off + a_very_small_indent + ( +not_fixed + ) + + if True: + # Fun tab, space, tab, space. Followed by space, tab, tab, space + pass + more + else: + other +# fmt: on +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__no_fmt_on.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__no_fmt_on.py.snap new file mode 100644 index 0000000000..15ded04ff6 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__no_fmt_on.py.snap @@ -0,0 +1,33 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/no_fmt_on.py +--- +## Input +```py +def test(): + # fmt: off + not formatted + + if unformatted + a: + pass + +# Get's formatted again +a + b +``` + +## Output +```py +def test(): + # fmt: off + not formatted + + if unformatted + a: + pass + + +# Get's formatted again +a + b +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__off_on_off_on.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__off_on_off_on.py.snap new file mode 100644 index 0000000000..c33f5faa9b --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__off_on_off_on.py.snap @@ -0,0 +1,156 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/off_on_off_on.py +--- +## Input +```py +# Tricky sequences of fmt off and on + +# Formatted +a + b + +# fmt: off + # not formatted 1 +# fmt: on +a + b + # formatted + + +# fmt: off + # not formatted 1 +# fmt: on + # not formatted 2 +# fmt: off +a + b +# fmt: on + + +# fmt: off + # not formatted 1 +# fmt: on + # formatted 1 +# fmt: off + # not formatted 2 +a + b +# fmt: on + # formatted +b + c + + +# fmt: off +a + b + + # not formatted +# fmt: on + # formatted +a + b + + +# fmt: off +a + b + + # not formatted 1 +# fmt: on + # formatted +# fmt: off + # not formatted 2 +a + b + + +# fmt: off +a + b + + # not formatted 1 +# fmt: on + # formatted + +# leading +a + b +# fmt: off + + # leading unformatted +def test (): + pass + + # fmt: on + +a + b +``` + +## Output +```py +# Tricky sequences of fmt off and on + +# Formatted +a + b + +# fmt: off + # not formatted 1 +# fmt: on +a + b +# formatted + + +# fmt: off + # not formatted 1 +# fmt: on +# not formatted 2 +# fmt: off +a + b +# fmt: on + + +# fmt: off + # not formatted 1 +# fmt: on +# formatted 1 +# fmt: off + # not formatted 2 +a + b +# fmt: on +# formatted +b + c + + +# fmt: off +a + b + + # not formatted +# fmt: on +# formatted +a + b + + +# fmt: off +a + b + + # not formatted 1 +# fmt: on +# formatted +# fmt: off + # not formatted 2 +a + b + + +# fmt: off +a + b + + # not formatted 1 +# fmt: on +# formatted + +# leading +a + b +# fmt: off + + # leading unformatted +def test (): + pass + + # fmt: on + +a + b +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__simple.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__simple.py.snap new file mode 100644 index 0000000000..e9f968a425 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__simple.py.snap @@ -0,0 +1,32 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/simple.py +--- +## Input +```py +# Get's formatted +a + b + +# fmt: off +a + [1, 2, 3, 4, 5 ] +# fmt: on + +# Get's formatted again +a + b +``` + +## Output +```py +# Get's formatted +a + b + +# fmt: off +a + [1, 2, 3, 4, 5 ] +# fmt: on + +# Get's formatted again +a + b +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__trailing_comments.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__trailing_comments.py.snap new file mode 100644 index 0000000000..e80951bd3a --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__trailing_comments.py.snap @@ -0,0 +1,96 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/trailing_comments.py +--- +## Input +```py +a = 10 +# fmt: off + +# more format + +def test(): ... + + +# fmt: on + +b = 20 +# Sequence of trailing comments that toggle between format on and off. The sequence ends with a `fmt: on`, so that the function gets formatted. +# formatted 1 +# fmt: off + # not formatted +# fmt: on + # formatted comment +# fmt: off + # not formatted 2 +# fmt: on + + # formatted +def test2 (): + ... + +a = 10 + +# Sequence of trailing comments that toggles between format on and off. The sequence ends with a `fmt: off`, so that the function is not formatted. + # formatted 1 +# fmt: off + # not formatted +# fmt: on + # formattd +# fmt: off + + # not formatted +def test3 (): + ... + +# fmt: on +``` + +## Output +```py +a = 10 +# fmt: off + +# more format + +def test(): ... + + +# fmt: on + +b = 20 +# Sequence of trailing comments that toggle between format on and off. The sequence ends with a `fmt: on`, so that the function gets formatted. +# formatted 1 +# fmt: off + # not formatted +# fmt: on +# formatted comment +# fmt: off + # not formatted 2 +# fmt: on + + +# formatted +def test2(): + ... + + +a = 10 + +# Sequence of trailing comments that toggles between format on and off. The sequence ends with a `fmt: off`, so that the function is not formatted. +# formatted 1 +# fmt: off + # not formatted +# fmt: on +# formattd +# fmt: off + + # not formatted +def test3 (): + ... + +# fmt: on +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__yapf.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__yapf.py.snap new file mode 100644 index 0000000000..45f0ad07d0 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@fmt_on_off__yapf.py.snap @@ -0,0 +1,48 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/yapf.py +--- +## Input +```py +# Get's formatted +a + b + +# yapf: disable +a + [1, 2, 3, 4, 5 ] +# yapf: enable + +# Get's formatted again +a + b + + +# yapf: disable +a + [1, 2, 3, 4, 5 ] +# fmt: on + +# Get's formatted again +a + b +``` + +## Output +```py +# Get's formatted +a + b + +# yapf: disable +a + [1, 2, 3, 4, 5 ] +# yapf: enable + +# Get's formatted again +a + b + + +# yapf: disable +a + [1, 2, 3, 4, 5 ] +# fmt: on + +# Get's formatted again +a + b +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@call_chains.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@parentheses__call_chains.py.snap similarity index 94% rename from crates/ruff_python_formatter/tests/snapshots/format@call_chains.py.snap rename to crates/ruff_python_formatter/tests/snapshots/format@parentheses__call_chains.py.snap index cca9b84a2f..8c8c952a79 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@call_chains.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@parentheses__call_chains.py.snap @@ -1,6 +1,6 @@ --- source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/call_chains.py +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/call_chains.py --- ## Input ```py @@ -160,7 +160,13 @@ zero( five, ) +max_message_id = ( + Message.objects.filter(recipient=recipient).order_by("id").reverse()[0].id +) +max_message_id = ( + Message.objects.filter(recipient=recipient).order_by("id").reverse()[0].id() +) ``` ## Output @@ -334,6 +340,14 @@ zero( ).four( five, ) + +max_message_id = ( + Message.objects.filter(recipient=recipient).order_by("id").reverse()[0].id +) + +max_message_id = ( + Message.objects.filter(recipient=recipient).order_by("id").reverse()[0].id() +) ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@parentheses__nested.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@parentheses__nested.py.snap new file mode 100644 index 0000000000..2106ed7f65 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@parentheses__nested.py.snap @@ -0,0 +1,139 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/nested.py +--- +## Input +```py +a1 = f( # 1 + g( # 2 + ) +) +a2 = f( # 1 + g( # 2 + x + ) +) +a3 = f( + ( + # + () + ) +) + + +call( + a, + b, + [ # Empty because of + ] +) + +a = a + b + c + d + ( # Hello + e + f + g +) + +a = int( # type: ignore + int( # type: ignore + int( # type: ignore + 6 + ) + ) +) + +# Stability and correctness checks +b1 = () - ( # +) +() - ( # +) +b2 = () - f( # +) +() - f( # +) +b3 = ( + # + () +) +( + # + () +) +``` + +## Output +```py +a1 = f( # 1 + g( # 2 + ) +) +a2 = f( # 1 + g( # 2 + x + ) +) +a3 = f( + ( + # + () + ) +) + + +call( + a, + b, + [ # Empty because of + ], +) + +a = ( + a + + b + + c + + d + + + ( # Hello + e + f + g + ) +) + +a = int( # type: ignore + int( # type: ignore + int( # type: ignore + 6 + ) + ) +) + +# Stability and correctness checks +b1 = ( + () + - ( # + ) +) +( + () + - ( # + ) +) +b2 = ( + () + - f( # + ) +) +( + () + - f( # + ) +) +b3 = ( + # + () +) +( + # + () +) +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@parentheses__opening_parentheses_comment_empty.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@parentheses__opening_parentheses_comment_empty.py.snap new file mode 100644 index 0000000000..4a16d601bb --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@parentheses__opening_parentheses_comment_empty.py.snap @@ -0,0 +1,192 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/opening_parentheses_comment_empty.py +--- +## Input +```py +# Opening parentheses end-of-line comment without a value in the parentheses + +( # a 1 +) +a2 = ( # a 2 +) +a3 = f( # a 3 +) +a4 = ( # a 4 +) = a4 +a5: List( # a 5 +) = 5 + +raise ( # b 1a +) +raise b1b from ( # b 1b +) +raise ( # b 1c +) from b1c +del ( # b 2 +) +assert ( # b 3 +), ( #b 4 +) + +def g(): + """Statements that are only allowed in function bodies""" + return ( # c 1 + ) + yield ( # c 2 + ) +async def h(): + """Statements that are only allowed in async function bodies""" + await ( # c 3 + ) + +with ( # d 1 +): pass +match ( # d 2 +): + case d2: + pass +match d3: + case ( # d 3 + ): + pass +while ( # d 4 +): + pass +if ( # d 5 +): + pass +elif ( # d 6 +): + pass +for ( # d 7 +) in ( # d 8 +): + pass +try: + pass +except ( # d 9 +): + pass + + +def e1( # e 1 +): pass + + +def e2() -> ( # e 2 +): pass + + +class E3( # e 3 +): pass + + +f1 = [ # f 1 +] +[ # f 2 +] +f3 = { # f3 +} +{ # f 4 +} +``` + +## Output +```py +# Opening parentheses end-of-line comment without a value in the parentheses + +( # a 1 +) +a2 = ( # a 2 +) +a3 = f( # a 3 +) +a4 = ( # a 4 +) = a4 +a5: List( # a 5 +) = 5 + +raise ( # b 1a +) +raise b1b from ( # b 1b +) +raise ( # b 1c +) from b1c +del ( # b 2 +) +assert ( # b 3 +), ( # b 4 +) + + +def g(): + """Statements that are only allowed in function bodies""" + return ( # c 1 + ) + yield ( # c 2 + ) + + +async def h(): + """Statements that are only allowed in async function bodies""" + await ( # c 3 + ) + + +with ( # d 1 +): + pass +match ( # d 2 +): + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass +match d3: + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass +while ( # d 4 +): + pass +if ( # d 5 +): + pass +elif ( # d 6 +): + pass +for ( # d 7 +) in ( # d 8 +): + pass +try: + pass +except ( # d 9 +): + pass + + +def e1( # e 1 +): + pass + + +def e2() -> ( # e 2 +): + pass + + +class E3: # e 3 + pass + + +f1 = [ # f 1 +] +[ # f 2 +] +f3 = { # f3 +} +{ # f 4 +} +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@parentheses__opening_parentheses_comment_value.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@parentheses__opening_parentheses_comment_value.py.snap new file mode 100644 index 0000000000..bf8a4b4478 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@parentheses__opening_parentheses_comment_value.py.snap @@ -0,0 +1,350 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/parentheses/opening_parentheses_comment_value.py +--- +## Input +```py +# Opening parentheses end-of-line comment with value in the parentheses + +( # a 1 +x) +a2 = ( # a 2 +x) +a3 = f( # a 3 +x) +a4 = ( # a 4 +x) = a4 +a5: List( # a 5 +x) = 5 + +raise ( # b 1a +x) +raise b1b from ( # b 1b +x) +raise ( # b 1c +x) from b1c +del ( # b 2 +x) +assert ( # b 3 +x), ( #b 4 +x) + +def g(): + """Statements that are only allowed in function bodies""" + return ( # c 1 + x) + yield ( # c 2 + x) +async def h(): + """Statements that are only allowed in async function bodies""" + await ( # c 3 + x) + +with ( # d 1 +x): pass +match ( # d 2 +x): + case d2: + pass +match d3: + case ( # d 3 + x): + pass +while ( # d 4 +x): + pass +if ( # d 5 +x): + pass +elif ( # d 6 +y): + pass +for ( # d 7 +x) in ( # d 8 +y): + pass +try: + pass +except ( # d 9 + x +): + pass + + +def e1( # e 1 +x): pass + + +def e2() -> ( # e 2 +x): pass + + +def e3() -> ( + # e 2 +x): pass + + +def e4() -> ( + x +# e 4 +): pass + + +def e5() -> ( # e 5 + ( # e 5 + x + ) +): pass + + +def e6() -> ( + ( + # e 6 + x + ) +): pass + + +def e7() -> ( + ( + x + # e 7 + ) +): pass + + +def e8() -> ( + ( + x + ) + # e 8 +): pass + + +class E9( # e 9 +x): pass + + +f1 = [ # f 1 +x] +[ # f 2 +x] +f3 = { # f3 +x} +{ # f 4 +x} + + + +# Non-empty parentheses: These are not allowed without a value +def f1[ # f1 + T +](): pass +f2 = ( # f2 + i for i in range(10) +) +f3 = [ # f3 + i for i in range(10) +] +f4 = { # f4 + i for i in range(10) +} +f5 = { # f5 + i: i**2 for i in range(10) +} + + +``` + +## Output +```py +# Opening parentheses end-of-line comment with value in the parentheses + +( # a 1 + x +) +a2 = ( # a 2 + x +) +a3 = f( # a 3 + x +) +a4 = ( # a 4 + x +) = a4 +a5: List( # a 5 + x +) = 5 + +raise ( # b 1a + x +) +raise b1b from ( # b 1b + x +) +raise ( # b 1c + x +) from b1c +del ( # b 2 + x +) +assert ( # b 3 + x +), ( # b 4 + x +) + + +def g(): + """Statements that are only allowed in function bodies""" + return ( # c 1 + x + ) + yield ( # c 2 + x + ) + + +async def h(): + """Statements that are only allowed in async function bodies""" + await ( # c 3 + x + ) + + +with ( # d 1 + x +): + pass +match ( # d 2 + x +): + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass +match d3: + case ( + # d 3 + x as NOT_YET_IMPLEMENTED_PatternMatchAs + ): + pass +while ( # d 4 + x +): + pass +if ( # d 5 + x +): + pass +elif ( # d 6 + y +): + pass +for ( # d 7 + x +) in ( # d 8 + y +): + pass +try: + pass +except ( # d 9 + x +): + pass + + +def e1( # e 1 + x +): + pass + + +def e2() -> ( # e 2 + x +): + pass + + +def e3() -> ( + # e 2 + x +): + pass + + +def e4() -> ( + x + # e 4 +): + pass + + +def e5() -> ( # e 5 + # e 5 + x +): + pass + + +def e6() -> ( + # e 6 + x +): + pass + + +def e7() -> ( + x + # e 7 +): + pass + + +def e8() -> ( + x + # e 8 +): + pass + + +class E9( # e 9 + x +): + pass + + +f1 = [ # f 1 + x +] +[ # f 2 + x +] +f3 = { # f3 + x +} +{ # f 4 + x +} + + +# Non-empty parentheses: These are not allowed without a value +def f1[T](): # f1 + pass + + +f2 = ( # f2 + i for i in range(10) +) +f3 = [ # f3 + i for i in range(10) +] +f4 = { # f4 + i for i in range(10) +} +f5 = { # f5 + i: i**2 for i in range(10) +} +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__assert.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__assert.py.snap index 089244c385..78163db003 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__assert.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__assert.py.snap @@ -52,10 +52,8 @@ assert ( # Dangle1 assert ( # Leading test value True # Trailing test value same-line -), ( # Trailing test value own-line - "Some string" -) # Trailing msg same-line +), "Some string" # Trailing msg same-line # Trailing assert # Random dangler @@ -65,11 +63,9 @@ assert ( assert ( # Leading test value True # Trailing test value same-line -), ( # Trailing test value own-line # Test dangler - "Some string" -) # Trailing msg same-line +), "Some string" # Trailing msg same-line # Trailing assert ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__assign.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__assign.py.snap index 4134d2b91e..03b8bf6fec 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__assign.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__assign.py.snap @@ -19,9 +19,47 @@ aa = [ bakjdshflkjahdslkfjlasfdahjlfds ] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] +aa = [ + +] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = [ + # foo +] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = ([ +]) = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + aaaa = ( # trailing # comment bbbbb) = cccccccccccccccc = 3 + +x = ( # comment + [ # comment + a, + b, + c, + ] +) = 1 + + +x = ( + # comment + [ + a, + b, + c, + ] +) = 1 + + +x = ( + [ # comment + a, + b, + c, + ] +) = 1 ``` ## Output @@ -47,10 +85,43 @@ aa = [ bakjdshflkjahdslkfjlasfdahjlfds ] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] +aa = [] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = [ + # foo +] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = [] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + aaaa = ( # trailing # comment bbbbb ) = cccccccccccccccc = 3 + +x = ( # comment + [ # comment + a, + b, + c, + ] +) = 1 + + +x = ( + # comment + [ + a, + b, + c, + ] +) = 1 + + +x = [ # comment + a, + b, + c, +] = 1 ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__delete.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__delete.py.snap index 39a4afbc07..ce4add0b94 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__delete.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__delete.py.snap @@ -79,6 +79,10 @@ del ( del ( # dangling end of line comment ) + +del ( # dangling end of line comment + # dangling own line comment +) # trailing statement comment ``` ## Output @@ -215,7 +219,12 @@ del ( ) # Completed # Done -del () # dangling end of line comment +del ( # dangling end of line comment +) + +del ( # dangling end of line comment + # dangling own line comment +) # trailing statement comment ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__for.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__for.py.snap index 637372d81f..fbff2337ec 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__for.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__for.py.snap @@ -38,6 +38,16 @@ for (x, y) in (z, w): # type comment for x in (): # type: int ... + +# Tuple parentheses for iterable. +for x in 1, 2, 3: + pass + +for x in (1, 2, 3): + pass + +for x in 1, 2, 3,: + pass ``` ## Output @@ -76,6 +86,20 @@ for x, y in (z, w): # type comment for x in (): # type: int ... + +# Tuple parentheses for iterable. +for x in 1, 2, 3: + pass + +for x in (1, 2, 3): + pass + +for x in ( + 1, + 2, + 3, +): + pass ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__function.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__function.py.snap index 9b0021e5ad..d801c863eb 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__function.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__function.py.snap @@ -301,6 +301,87 @@ def f(*args, b, **kwds, ): pass def f(*, b, **kwds, ): pass def f(a, *args, b, **kwds, ): pass def f(a, *, b, **kwds, ): pass + +# Handle comments on open parenthesis. +def f( + # first + # second +): + ... + + +def f( # first + # second +): # third + ... + + +def f( # first +): # second + ... + + +def f( + a, + /, + # first + b + # second +): + ... + + +def f( # first + *, + # second + b + # third +): + ... + + +def f( # first + # second + *, + # third + b + # fourth +): + ... + + +def f( # first + a, + # second +): # third + ... + + +def f( # first + a +): # second + ... + + +def f( # first + a + # second +): # third + ... + + +def f( # first + a, + / # second + , + # third +): + ... + +# Walrus operator in return type. +def this_is_unusual() -> (please := no): ... + +def this_is_unusual(x) -> (please := no): ... ``` ## Output @@ -753,6 +834,91 @@ def f( **kwds, ): pass + + +# Handle comments on open parenthesis. +def f( + # first + # second +): + ... + + +def f( # first + # second +): # third + ... + + +def f( # first +): # second + ... + + +def f( + a, + /, + # first + b, + # second +): + ... + + +def f( # first + *, + # second + b, + # third +): + ... + + +def f( # first + # second + *, + # third + b, + # fourth +): + ... + + +def f( # first + a, + # second +): # third + ... + + +def f( # first + a +): # second + ... + + +def f( # first + a, + # second +): # third + ... + + +def f( # first + a, + # third + /, # second +): + ... + + +# Walrus operator in return type. +def this_is_unusual() -> (please := no): + ... + + +def this_is_unusual(x) -> (please := no): + ... ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__if.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__if.py.snap index 10ab45b872..9c459694dd 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__if.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__if.py.snap @@ -109,6 +109,18 @@ else: if True: print("a") # 1 elif True: print("b") # 2 else: print("c") # 3 + +# Regression test for https://github.com/astral-sh/ruff/issues/5337 +if parent_body: + if current_body: + child_in_body() + last_child_in_current_body() # may or may not have children on its own +# a + # b + # c + # d + # e + #f ``` ## Output @@ -224,6 +236,18 @@ elif True: print("b") # 2 else: print("c") # 3 + +# Regression test for https://github.com/astral-sh/ruff/issues/5337 +if parent_body: + if current_body: + child_in_body() + last_child_in_current_body() # may or may not have children on its own + # e + # f + # c + # d +# a +# b ``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__import.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__import.py.snap index 0208606383..4c76352286 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__import.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__import.py.snap @@ -12,7 +12,7 @@ from a import aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfksajlhfajfjf ## Output ```py from a import ( - aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfksajlhfajfjfsaahflakjslhdfkjalhdskjfa + aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfksajlhfajfjfsaahflakjslhdfkjalhdskjfa, ) from a import ( aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfksajlhfajfjfsaahflakjslhdfkjalhdskjfa, diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__import_from.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__import_from.py.snap index dd2ca4c80f..6b3942ea0c 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__import_from.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__import_from.py.snap @@ -88,7 +88,9 @@ from a import ( # comment bar, ) -from a import bar # comment +from a import ( # comment + bar, +) from a import ( bar, diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__match.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__match.py.snap new file mode 100644 index 0000000000..56d1c9f008 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__match.py.snap @@ -0,0 +1,291 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/match.py +--- +## Input +```py +# leading match comment +match foo: # dangling match comment + case "bar": + pass + + +# leading match comment +match ( # leading expr comment + # another leading expr comment + foo # trailing expr comment + # another trailing expr comment +): # dangling match comment + case "bar": + pass + + +# leading match comment +match ( # hello + foo # trailing expr comment + , # another +): # dangling match comment + case "bar": + pass + + +match [ # comment + first, + second, + third +]: # another comment + case ["a", "b", "c"]: + pass + +match ( # comment + "a b c" +).split(): # another comment + case ["a", "b", "c"]: + pass + + +match ( # comment + # let's go + yield foo +): # another comment + case ["a", "b", "c"]: + pass + + +match aaaaaaaaahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh: # comment + case "sshhhhhhhh": + pass + + +def foo(): + match inside_func: # comment + case "bar": + pass + + +match newlines: + + # case 1 leading comment + + + case "top level case comment with newlines": # case dangling comment + # pass leading comment + pass + # pass trailing comment + + + # case 2 leading comment + + + + case "case comment with newlines" if foo == 2: # second + pass + + case "one", "newline" if (foo := 1): # third + pass + + + case "two newlines": + pass + + + + case "three newlines": + pass + case _: + pass + + +match long_lines: + case "this is a long line for if condition" if aaaaaaaaahhhhhhhh == 1 and bbbbbbaaaaaaaaaaa == 2: # comment + pass + + case "this is a long line for if condition with parentheses" if (aaaaaaaaahhhhhhhh == 1 and bbbbbbaaaaaaaaaaa == 2): # comment + pass + + case "named expressions aren't special" if foo := 1: + pass + + case "named expressions aren't that special" if (foo := 1): + pass + + case "but with already broken long lines" if ( + aaaaaaahhhhhhhhhhh == 1 and + bbbbbbbbaaaaaahhhh == 2 + ): # another comment + pass + + +match pattern_comments: + case ( + only_trailing # trailing 1 + # trailing 2 +# trailing 3 + ): + pass + + +match pattern_comments: + case ( # leading + only_leading + ): + pass + + +match pattern_comments: + case ( + # leading + leading_and_trailing # trailing 1 + # trailing 2 +# trailing 3 + ): + pass + + +match pattern_comments: + case ( + no_comments + ): + pass +``` + +## Output +```py +# leading match comment +match foo: # dangling match comment + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + pass + + +# leading match comment +match ( # leading expr comment + # another leading expr comment + foo # trailing expr comment + # another trailing expr comment +): # dangling match comment + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + pass + + +# leading match comment +match ( # hello + foo, # trailing expr comment # another +): # dangling match comment + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + pass + + +match [ # comment + first, + second, + third, +]: # another comment + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass + +match ( # comment + "a b c" +).split(): # another comment + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass + + +match ( # comment + # let's go + yield foo +): # another comment + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2]: + pass + + +match aaaaaaaaahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh: # comment + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + pass + + +def foo(): + match inside_func: # comment + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + pass + + +match newlines: + # case 1 leading comment + + case "NOT_YET_IMPLEMENTED_PatternMatchValue": # case dangling comment + # pass leading comment + pass + # pass trailing comment + + # case 2 leading comment + + case "NOT_YET_IMPLEMENTED_PatternMatchValue" if foo == 2: # second + pass + + case [NOT_YET_IMPLEMENTED_PatternMatchSequence, 2] if (foo := 1): # third + pass + + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + pass + + case "NOT_YET_IMPLEMENTED_PatternMatchValue": + pass + case x as NOT_YET_IMPLEMENTED_PatternMatchAs: + pass + + +match long_lines: + case "NOT_YET_IMPLEMENTED_PatternMatchValue" if aaaaaaaaahhhhhhhh == 1 and bbbbbbaaaaaaaaaaa == 2: # comment + pass + + case "NOT_YET_IMPLEMENTED_PatternMatchValue" if ( + aaaaaaaaahhhhhhhh == 1 and bbbbbbaaaaaaaaaaa == 2 + ): # comment + pass + + case "NOT_YET_IMPLEMENTED_PatternMatchValue" if foo := 1: + pass + + case "NOT_YET_IMPLEMENTED_PatternMatchValue" if (foo := 1): + pass + + case "NOT_YET_IMPLEMENTED_PatternMatchValue" if ( + aaaaaaahhhhhhhhhhh == 1 and bbbbbbbbaaaaaahhhh == 2 + ): # another comment + pass + + +match pattern_comments: + case ( + x as NOT_YET_IMPLEMENTED_PatternMatchAs # trailing 1 + # trailing 2 + # trailing 3 + ): + pass + + +match pattern_comments: + case ( + # leading + x as NOT_YET_IMPLEMENTED_PatternMatchAs + ): + pass + + +match pattern_comments: + case ( + # leading + x as NOT_YET_IMPLEMENTED_PatternMatchAs # trailing 1 + # trailing 2 + # trailing 3 + ): + pass + + +match pattern_comments: + case (x as NOT_YET_IMPLEMENTED_PatternMatchAs): + pass +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__raise.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__raise.py.snap index db7ed62b73..46637a3543 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__raise.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__raise.py.snap @@ -154,8 +154,7 @@ raise ( ) -raise ( - # hey +raise ( # hey aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa # Holala + bbbbbbbbbbbbbbbbbbbbbbbbbb # stay @@ -165,8 +164,7 @@ raise ( ) # whaaaaat # the end -raise ( - # hey 2 +raise ( # hey 2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" # Holala "bbbbbbbbbbbbbbbbbbbbbbbb" # stay @@ -192,7 +190,8 @@ raise aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfk < ( ) # the other end # sneaky comment -raise () # another comment +raise ( # another comment +) raise () # what now diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__return_annotation.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__return_annotation.py.snap new file mode 100644 index 0000000000..b2fc744894 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__return_annotation.py.snap @@ -0,0 +1,521 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/return_annotation.py +--- +## Input +```py +# Handle comments on empty tuple return types. +def zrevrangebylex(self, name: _Key, max: _Value, min: _Value, start: int | None = None, num: int | None = None) -> ( # type: ignore[override] +): ... + +def zrevrangebylex(self, name: _Key, max: _Value, min: _Value, start: int | None = None, num: int | None = None) -> ( # type: ignore[override] + # comment +): ... + +def zrevrangebylex(self, name: _Key, max: _Value, min: _Value, start: int | None = None, num: int | None = None) -> ( # type: ignore[override] + 1 +): ... + +def zrevrangebylex(self, name: _Key, max: _Value, min: _Value, start: int | None = None, num: int | None = None) -> ( # type: ignore[override] + 1, 2 +): ... + +def zrevrangebylex(self, name: _Key, max: _Value, min: _Value, start: int | None = None, num: int | None = None) -> ( # type: ignore[override] + (1, 2) +): ... + +def handleMatch( # type: ignore[override] # https://github.com/python/mypy/issues/10197 + self, m: Match[str], data: str +) -> Union[Tuple[None, None, None], Tuple[Element, int, int]]: + ... + +def double(a: int # Hello +) -> (int): + return 2 * a + +def double(a: int) -> ( # Hello + int +): + return 2*a + +def double(a: int) -> ( # Hello +): + return 2*a + +# Breaking over parameters and return types. (Black adds a trailing comma when the +# function arguments break here with a single argument; we do not.) +def f(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + +def f(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, a) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + +def f(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) -> a: + ... + +def f(a) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + +def f[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]() -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + +def f[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]() -> a: + ... + +def f[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa](aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + +def f[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa](aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) -> a: + ... + +# Breaking return type annotations. Black adds parentheses if the parameters are +# empty; otherwise, it leverages the expressions own parentheses if possible. +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] +): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +]: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] +): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +]: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> ( + Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] +): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(*args) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +]: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( # foo +) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + # bar +) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + x) -> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + x) -> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> (X + Y + foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> (X + Y + foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> (X and Y and foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> (X and Y and foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> (X | Y | foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> (X | Y | foooooooooooooooooooooooooooooooooooo()): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + X | Y | foooooooooooooooooooooooooooooooooooo() # comment +): + ... + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> ( + X | Y | foooooooooooooooooooooooooooooooooooo() # comment +): + ... + + +def double() -> first_item and foo.bar.baz().bop(1,): + return 2 * a + + +# Dangling comments on return annotations. +def double(a: int) -> ( + int # Hello +): + return 2*a + +def double(a: int) -> ( + foo.bar # Hello +): + return 2*a + +def double(a: int) -> ( + [int] # Hello +): + return 2*a + +def double(a: int) -> ( + int | list[int] # Hello +): + pass + +def double(a: int) -> ( + int | list[int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int] # Hello +): + pass +``` + +## Output +```py +# Handle comments on empty tuple return types. +def zrevrangebylex( + self, + name: _Key, + max: _Value, + min: _Value, + start: int | None = None, + num: int | None = None, +) -> ( # type: ignore[override] +): + ... + + +def zrevrangebylex( + self, + name: _Key, + max: _Value, + min: _Value, + start: int | None = None, + num: int | None = None, +) -> ( # type: ignore[override] + # comment +): + ... + + +def zrevrangebylex( + self, + name: _Key, + max: _Value, + min: _Value, + start: int | None = None, + num: int | None = None, +) -> ( # type: ignore[override] + 1 +): + ... + + +def zrevrangebylex( + self, + name: _Key, + max: _Value, + min: _Value, + start: int | None = None, + num: int | None = None, +) -> ( # type: ignore[override] + 1, + 2, +): + ... + + +def zrevrangebylex( + self, + name: _Key, + max: _Value, + min: _Value, + start: int | None = None, + num: int | None = None, +) -> ( # type: ignore[override] + (1, 2) +): + ... + + +def handleMatch( # type: ignore[override] # https://github.com/python/mypy/issues/10197 + self, m: Match[str], data: str +) -> Union[Tuple[None, None, None], Tuple[Element, int, int]]: + ... + + +def double( + a: int, # Hello +) -> int: + return 2 * a + + +def double( + a: int +) -> ( # Hello + int +): + return 2 * a + + +def double( + a: int +) -> ( # Hello +): + return 2 * a + + +# Breaking over parameters and return types. (Black adds a trailing comma when the +# function arguments break here with a single argument; we do not.) +def f( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + + +def f( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, a +) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + + +def f( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +) -> a: + ... + + +def f( + a +) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + + +def f[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]() -> ( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +): + ... + + +def f[ + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +]() -> a: + ... + + +def f[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +) -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: + ... + + +def f[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +) -> a: + ... + + +# Breaking return type annotations. Black adds parentheses if the parameters are +# empty; otherwise, it leverages the expressions own parentheses if possible. +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + ] +): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + ] +): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + ] +): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + x +) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +]: + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + x +) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +]: + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + *args +) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +]: + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( # foo +) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +]: + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + # bar +) -> Set[ + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +]: + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + x +) -> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + x +) -> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> X + Y + foooooooooooooooooooooooooooooooooooo(): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> X + Y + foooooooooooooooooooooooooooooooooooo(): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + X and Y and foooooooooooooooooooooooooooooooooooo() +): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + x +) -> X and Y and foooooooooooooooooooooooooooooooooooo(): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> X | Y | foooooooooooooooooooooooooooooooooooo(): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx(x) -> X | Y | foooooooooooooooooooooooooooooooooooo(): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx() -> ( + X | Y | foooooooooooooooooooooooooooooooooooo() # comment +): + ... + + +def xxxxxxxxxxxxxxxxxxxxxxxxxxxx( + x +) -> ( + X | Y | foooooooooooooooooooooooooooooooooooo() # comment +): + ... + + +def double() -> ( + first_item + and foo.bar.baz().bop( + 1, + ) +): + return 2 * a + + +# Dangling comments on return annotations. +def double( + a: int +) -> ( + int # Hello +): + return 2 * a + + +def double( + a: int +) -> ( + foo.bar # Hello +): + return 2 * a + + +def double( + a: int +) -> ( + [int] # Hello +): + return 2 * a + + +def double( + a: int +) -> ( + int | list[int] # Hello +): + pass + + +def double( + a: int +) -> ( + int + | list[ + int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int + ] # Hello +): + pass +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__top_level.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__top_level.py.snap new file mode 100644 index 0000000000..735d40d806 --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__top_level.py.snap @@ -0,0 +1,118 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/top_level.py +--- +## Input +```py +class A: + def __init__(self): + pass + +class B: + def __init__(self): + pass + +def foo(): + pass + +class Del(expr_context): ... +class Load(expr_context): ... + +# Some comment. +class Other(expr_context): ... +class Store(expr_context): ... +class Foo(Bar): ... + +class Baz(Qux): + def __init__(self): + pass + +class Quux(Qux): + def __init__(self): + pass + +# Some comment. +class Quuz(Qux): + def __init__(self): + pass + +def bar(): ... +def baz(): ... +def quux(): + """Some docstring.""" + +def quuz(): + """Some docstring.""" +``` + +## Output +```py +class A: + def __init__(self): + pass + + +class B: + def __init__(self): + pass + + +def foo(): + pass + + +class Del(expr_context): + ... + + +class Load(expr_context): + ... + + +# Some comment. +class Other(expr_context): + ... + + +class Store(expr_context): + ... + + +class Foo(Bar): + ... + + +class Baz(Qux): + def __init__(self): + pass + + +class Quux(Qux): + def __init__(self): + pass + + +# Some comment. +class Quuz(Qux): + def __init__(self): + pass + + +def bar(): + ... + + +def baz(): + ... + + +def quux(): + """Some docstring.""" + + +def quuz(): + """Some docstring.""" +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__top_level.pyi.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__top_level.pyi.snap new file mode 100644 index 0000000000..35fced5adf --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__top_level.pyi.snap @@ -0,0 +1,153 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/top_level.pyi +--- +## Input +```py +class A: + def __init__(self): + pass + + +class B: + def __init__(self): + pass + + +def foo(): + pass + + +class Del(expr_context): + ... + + +class Load(expr_context): + ... + + +# Some comment. +class Other(expr_context): + ... + + +class Store(expr_context): + ... + + +class Foo(Bar): + ... + + +class Baz(Qux): + def __init__(self): + pass + + +class Quux(Qux): + def __init__(self): + pass + + +# Some comment. +class Quuz(Qux): + def __init__(self): + pass + + +def bar(): + ... + + +def baz(): + ... + + +def quux(): + """Some docstring.""" + + +def quuz(): + """Some docstring.""" + +def a(): + ... + +class Test: + ... + +class Test2(A): + ... + +def b(): ... +# comment +def c(): ... +``` + +## Output +```py +class A: + def __init__(self): + pass + +class B: + def __init__(self): + pass + +def foo(): + pass + +class Del(expr_context): + ... +class Load(expr_context): + ... + +# Some comment. +class Other(expr_context): + ... +class Store(expr_context): + ... +class Foo(Bar): + ... + +class Baz(Qux): + def __init__(self): + pass + +class Quux(Qux): + def __init__(self): + pass + +# Some comment. +class Quuz(Qux): + def __init__(self): + pass + +def bar(): + ... +def baz(): + ... +def quux(): + """Some docstring.""" + +def quuz(): + """Some docstring.""" + +def a(): + ... + +class Test: + ... +class Test2(A): + ... + +def b(): + ... + +# comment +def c(): + ... +``` + + + diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__with.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__with.py.snap index 3140929dc1..6e16935581 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__with.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__with.py.snap @@ -114,7 +114,6 @@ with ( ): ... - with [ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbb", @@ -122,6 +121,49 @@ with [ dddddddddddddddddddddddddddddddd, ] as example1, aaaaaaaaaaaaaaaaaaaaaaaaaa * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb * cccccccccccccccccccccccccccc + ddddddddddddddddd as example2, CtxManager222222222222222() as example2: ... + +# Comments on open parentheses +with ( # comment + CtxManager1() as example1, + CtxManager2() as example2, + CtxManager3() as example3, +): + ... + +with ( # outer comment + ( # inner comment + CtxManager1() + ) as example1, + CtxManager2() as example2, + CtxManager3() as example3, +): + ... + +with ( # outer comment + CtxManager() +) as example: + ... + +with ( # outer comment + CtxManager() +) as example, ( # inner comment + CtxManager2() +) as example2: + ... + +with ( # outer comment + CtxManager1(), + CtxManager2(), +) as example: + ... + +with ( # outer comment + ( # inner comment + CtxManager1() + ), + CtxManager2(), +) as example: + ... ``` ## Output @@ -242,7 +284,6 @@ with ( ): ... - with [ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbb", @@ -250,6 +291,49 @@ with [ dddddddddddddddddddddddddddddddd, ] as example1, aaaaaaaaaaaaaaaaaaaaaaaaaa * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb * cccccccccccccccccccccccccccc + ddddddddddddddddd as example2, CtxManager222222222222222() as example2: ... + +# Comments on open parentheses +with ( # comment + CtxManager1() as example1, + CtxManager2() as example2, + CtxManager3() as example3, +): + ... + +with ( # outer comment + ( # inner comment + CtxManager1() + ) as example1, + CtxManager2() as example2, + CtxManager3() as example3, +): + ... + +with ( # outer comment + CtxManager() +) as example: + ... + +with ( # outer comment + CtxManager() +) as example, ( # inner comment + CtxManager2() +) as example2: + ... + +with ( # outer comment + CtxManager1(), + CtxManager2(), +) as example: + ... + +with ( # outer comment + ( # inner comment + CtxManager1() + ), + CtxManager2(), +) as example: + ... ``` diff --git a/crates/ruff_python_index/Cargo.toml b/crates/ruff_python_index/Cargo.toml index 10d8813ce4..b82aaeeab9 100644 --- a/crates/ruff_python_index/Cargo.toml +++ b/crates/ruff_python_index/Cargo.toml @@ -22,5 +22,4 @@ ruff_text_size = { path = "../ruff_text_size" } itertools = { workspace = true } - [dev-dependencies] diff --git a/crates/ruff_python_literal/Cargo.toml b/crates/ruff_python_literal/Cargo.toml index 819dd59149..fd6a8dc439 100644 --- a/crates/ruff_python_literal/Cargo.toml +++ b/crates/ruff_python_literal/Cargo.toml @@ -17,7 +17,6 @@ hexf-parse = "0.2.1" is-macro.workspace = true itertools = { workspace = true } lexical-parse-float = { version = "0.8.0", features = ["format"] } -num-bigint = { workspace = true } num-traits = { workspace = true } unic-ucd-category = "0.9" diff --git a/crates/ruff_python_literal/src/cformat.rs b/crates/ruff_python_literal/src/cformat.rs index f0aa883bdc..e635faa384 100644 --- a/crates/ruff_python_literal/src/cformat.rs +++ b/crates/ruff_python_literal/src/cformat.rs @@ -1,15 +1,13 @@ //! Implementation of Printf-Style string formatting //! as per the [Python Docs](https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting). use bitflags::bitflags; -use num_traits::Signed; use std::{ - cmp, fmt, + fmt, iter::{Enumerate, Peekable}, str::FromStr, }; -use crate::{float, Case}; -use num_bigint::{BigInt, Sign}; +use crate::Case; #[derive(Debug, PartialEq)] pub enum CFormatErrorType { @@ -165,249 +163,6 @@ impl CFormatSpec { format_char, }) } - - fn compute_fill_string(fill_char: char, fill_chars_needed: usize) -> String { - (0..fill_chars_needed) - .map(|_| fill_char) - .collect::() - } - - fn fill_string( - &self, - string: String, - fill_char: char, - num_prefix_chars: Option, - ) -> String { - let mut num_chars = string.chars().count(); - if let Some(num_prefix_chars) = num_prefix_chars { - num_chars += num_prefix_chars; - } - let num_chars = num_chars; - - let width = match &self.min_field_width { - Some(CFormatQuantity::Amount(width)) => cmp::max(width, &num_chars), - _ => &num_chars, - }; - let fill_chars_needed = width.saturating_sub(num_chars); - let fill_string = CFormatSpec::compute_fill_string(fill_char, fill_chars_needed); - - if fill_string.is_empty() { - string - } else { - if self.flags.contains(CConversionFlags::LEFT_ADJUST) { - format!("{string}{fill_string}") - } else { - format!("{fill_string}{string}") - } - } - } - - fn fill_string_with_precision(&self, string: String, fill_char: char) -> String { - let num_chars = string.chars().count(); - - let width = match &self.precision { - Some(CFormatPrecision::Quantity(CFormatQuantity::Amount(width))) => { - cmp::max(width, &num_chars) - } - _ => &num_chars, - }; - let fill_chars_needed = width.saturating_sub(num_chars); - let fill_string = CFormatSpec::compute_fill_string(fill_char, fill_chars_needed); - - if fill_string.is_empty() { - string - } else { - // Don't left-adjust if precision-filling: that will always be prepending 0s to %d - // arguments, the LEFT_ADJUST flag will be used by a later call to fill_string with - // the 0-filled string as the string param. - format!("{fill_string}{string}") - } - } - - fn format_string_with_precision( - &self, - string: String, - precision: Option<&CFormatPrecision>, - ) -> String { - // truncate if needed - let string = match precision { - Some(CFormatPrecision::Quantity(CFormatQuantity::Amount(precision))) - if string.chars().count() > *precision => - { - string.chars().take(*precision).collect::() - } - Some(CFormatPrecision::Dot) => { - // truncate to 0 - String::new() - } - _ => string, - }; - self.fill_string(string, ' ', None) - } - - #[inline] - pub fn format_string(&self, string: String) -> String { - self.format_string_with_precision(string, self.precision.as_ref()) - } - - #[inline] - pub fn format_char(&self, ch: char) -> String { - self.format_string_with_precision( - ch.to_string(), - Some(&(CFormatQuantity::Amount(1).into())), - ) - } - - pub fn format_bytes(&self, bytes: &[u8]) -> Vec { - let bytes = if let Some(CFormatPrecision::Quantity(CFormatQuantity::Amount(precision))) = - self.precision - { - &bytes[..cmp::min(bytes.len(), precision)] - } else { - bytes - }; - if let Some(CFormatQuantity::Amount(width)) = self.min_field_width { - let fill = cmp::max(0, width - bytes.len()); - let mut v = Vec::with_capacity(bytes.len() + fill); - if self.flags.contains(CConversionFlags::LEFT_ADJUST) { - v.extend_from_slice(bytes); - v.append(&mut vec![b' '; fill]); - } else { - v.append(&mut vec![b' '; fill]); - v.extend_from_slice(bytes); - } - v - } else { - bytes.to_vec() - } - } - - pub fn format_number(&self, num: &BigInt) -> String { - use CNumberType::{Decimal, Hex, Octal}; - let magnitude = num.abs(); - let prefix = if self.flags.contains(CConversionFlags::ALTERNATE_FORM) { - match self.format_type { - CFormatType::Number(Octal) => "0o", - CFormatType::Number(Hex(Case::Lower)) => "0x", - CFormatType::Number(Hex(Case::Upper)) => "0X", - _ => "", - } - } else { - "" - }; - - let magnitude_string: String = match self.format_type { - CFormatType::Number(Decimal) => magnitude.to_str_radix(10), - CFormatType::Number(Octal) => magnitude.to_str_radix(8), - CFormatType::Number(Hex(Case::Lower)) => magnitude.to_str_radix(16), - CFormatType::Number(Hex(Case::Upper)) => { - let mut result = magnitude.to_str_radix(16); - result.make_ascii_uppercase(); - result - } - _ => unreachable!(), // Should not happen because caller has to make sure that this is a number - }; - - let sign_string = match num.sign() { - Sign::Minus => "-", - _ => self.flags.sign_string(), - }; - - let padded_magnitude_string = self.fill_string_with_precision(magnitude_string, '0'); - - if self.flags.contains(CConversionFlags::ZERO_PAD) { - let fill_char = if self.flags.contains(CConversionFlags::LEFT_ADJUST) { - ' ' // '-' overrides the '0' conversion if both are given - } else { - '0' - }; - let signed_prefix = format!("{sign_string}{prefix}"); - format!( - "{}{}", - signed_prefix, - self.fill_string( - padded_magnitude_string, - fill_char, - Some(signed_prefix.chars().count()), - ), - ) - } else { - self.fill_string( - format!("{sign_string}{prefix}{padded_magnitude_string}"), - ' ', - None, - ) - } - } - - pub fn format_float(&self, num: f64) -> String { - let sign_string = if num.is_sign_negative() && !num.is_nan() { - "-" - } else { - self.flags.sign_string() - }; - - let precision = match &self.precision { - Some(CFormatPrecision::Quantity(quantity)) => match quantity { - CFormatQuantity::Amount(amount) => *amount, - CFormatQuantity::FromValuesTuple => 6, - }, - Some(CFormatPrecision::Dot) => 0, - None => 6, - }; - - let magnitude_string = match &self.format_type { - CFormatType::Float(CFloatType::PointDecimal(case)) => { - let magnitude = num.abs(); - float::format_fixed( - precision, - magnitude, - *case, - self.flags.contains(CConversionFlags::ALTERNATE_FORM), - ) - } - CFormatType::Float(CFloatType::Exponent(case)) => { - let magnitude = num.abs(); - float::format_exponent( - precision, - magnitude, - *case, - self.flags.contains(CConversionFlags::ALTERNATE_FORM), - ) - } - CFormatType::Float(CFloatType::General(case)) => { - let precision = if precision == 0 { 1 } else { precision }; - let magnitude = num.abs(); - float::format_general( - precision, - magnitude, - *case, - self.flags.contains(CConversionFlags::ALTERNATE_FORM), - false, - ) - } - _ => unreachable!(), - }; - - if self.flags.contains(CConversionFlags::ZERO_PAD) { - let fill_char = if self.flags.contains(CConversionFlags::LEFT_ADJUST) { - ' ' - } else { - '0' - }; - format!( - "{}{}", - sign_string, - self.fill_string( - magnitude_string, - fill_char, - Some(sign_string.chars().count()), - ) - ) - } else { - self.fill_string(format!("{sign_string}{magnitude_string}"), ' ', None) - } - } } fn parse_spec_mapping_key(iter: &mut ParseIter) -> Result, ParsingError> @@ -741,38 +496,6 @@ impl CFormatString { mod tests { use super::*; - #[test] - fn test_fill_and_align() { - assert_eq!( - "%10s" - .parse::() - .unwrap() - .format_string("test".to_owned()), - " test".to_owned() - ); - assert_eq!( - "%-10s" - .parse::() - .unwrap() - .format_string("test".to_owned()), - "test ".to_owned() - ); - assert_eq!( - "%#10x" - .parse::() - .unwrap() - .format_number(&BigInt::from(0x1337)), - " 0x1337".to_owned() - ); - assert_eq!( - "%-#10x" - .parse::() - .unwrap() - .format_number(&BigInt::from(0x1337)), - "0x1337 ".to_owned() - ); - } - #[test] fn test_parse_key() { let expected = Ok(CFormatSpec { @@ -844,165 +567,6 @@ mod tests { }); let parsed = "% 0 -+++###10d".parse::(); assert_eq!(parsed, expected); - assert_eq!( - parsed.unwrap().format_number(&BigInt::from(12)), - "+12 ".to_owned() - ); - } - - #[test] - fn test_parse_and_format_string() { - assert_eq!( - "%5.4s" - .parse::() - .unwrap() - .format_string("Hello, World!".to_owned()), - " Hell".to_owned() - ); - assert_eq!( - "%-5.4s" - .parse::() - .unwrap() - .format_string("Hello, World!".to_owned()), - "Hell ".to_owned() - ); - assert_eq!( - "%.s" - .parse::() - .unwrap() - .format_string("Hello, World!".to_owned()), - String::new() - ); - assert_eq!( - "%5.s" - .parse::() - .unwrap() - .format_string("Hello, World!".to_owned()), - " ".to_owned() - ); - } - - #[test] - fn test_parse_and_format_unicode_string() { - assert_eq!( - "%.2s" - .parse::() - .unwrap() - .format_string("❤❤❤❤❤❤❤❤".to_owned()), - "❤❤".to_owned() - ); - } - - #[test] - fn test_parse_and_format_number() { - assert_eq!( - "%5d" - .parse::() - .unwrap() - .format_number(&BigInt::from(27)), - " 27".to_owned() - ); - assert_eq!( - "%05d" - .parse::() - .unwrap() - .format_number(&BigInt::from(27)), - "00027".to_owned() - ); - assert_eq!( - "%.5d" - .parse::() - .unwrap() - .format_number(&BigInt::from(27)), - "00027".to_owned() - ); - assert_eq!( - "%+05d" - .parse::() - .unwrap() - .format_number(&BigInt::from(27)), - "+0027".to_owned() - ); - assert_eq!( - "%-d" - .parse::() - .unwrap() - .format_number(&BigInt::from(-27)), - "-27".to_owned() - ); - assert_eq!( - "% d" - .parse::() - .unwrap() - .format_number(&BigInt::from(27)), - " 27".to_owned() - ); - assert_eq!( - "% d" - .parse::() - .unwrap() - .format_number(&BigInt::from(-27)), - "-27".to_owned() - ); - assert_eq!( - "%08x" - .parse::() - .unwrap() - .format_number(&BigInt::from(0x1337)), - "00001337".to_owned() - ); - assert_eq!( - "%#010x" - .parse::() - .unwrap() - .format_number(&BigInt::from(0x1337)), - "0x00001337".to_owned() - ); - assert_eq!( - "%-#010x" - .parse::() - .unwrap() - .format_number(&BigInt::from(0x1337)), - "0x1337 ".to_owned() - ); - } - - #[test] - fn test_parse_and_format_float() { - assert_eq!( - "%f".parse::().unwrap().format_float(1.2345), - "1.234500" - ); - assert_eq!( - "%.2f".parse::().unwrap().format_float(1.2345), - "1.23" - ); - assert_eq!( - "%.f".parse::().unwrap().format_float(1.2345), - "1" - ); - assert_eq!( - "%+.f".parse::().unwrap().format_float(1.2345), - "+1" - ); - assert_eq!( - "%+f".parse::().unwrap().format_float(1.2345), - "+1.234500" - ); - assert_eq!( - "% f".parse::().unwrap().format_float(1.2345), - " 1.234500" - ); - assert_eq!( - "%f".parse::().unwrap().format_float(-1.2345), - "-1.234500" - ); - assert_eq!( - "%f".parse::() - .unwrap() - .format_float(1.234_567_890_1), - "1.234568" - ); } #[test] diff --git a/crates/ruff_python_literal/src/escape.rs b/crates/ruff_python_literal/src/escape.rs index c291e13034..01de325f10 100644 --- a/crates/ruff_python_literal/src/escape.rs +++ b/crates/ruff_python_literal/src/escape.rs @@ -341,7 +341,7 @@ impl AsciiEscape<'_> { let mut single_count = 0; let mut double_count = 0; - for ch in source.iter() { + for ch in source { let incr = match ch { b'\'' => { single_count += 1; @@ -425,7 +425,7 @@ impl<'a> Escape for AsciiEscape<'a> { #[cold] fn write_body_slow(&self, formatter: &mut impl std::fmt::Write) -> std::fmt::Result { - for ch in self.source.iter() { + for ch in self.source { Self::write_char(*ch, self.layout().quote, formatter)?; } Ok(()) diff --git a/crates/ruff_python_literal/src/format.rs b/crates/ruff_python_literal/src/format.rs index 43565966f2..dd6fdcc8e7 100644 --- a/crates/ruff_python_literal/src/format.rs +++ b/crates/ruff_python_literal/src/format.rs @@ -1,12 +1,9 @@ use itertools::{Itertools, PeekingNext}; -use num_traits::{cast::ToPrimitive, FromPrimitive, Signed}; use std::error::Error; -use std::ops::Deref; -use std::{cmp, str::FromStr}; +use std::str::FromStr; -use crate::{float, Case}; -use num_bigint::{BigInt, Sign}; +use crate::Case; trait FormatParse { fn parse(text: &str) -> (Option, &str) @@ -188,14 +185,23 @@ impl FormatParse for FormatType { #[derive(Debug, PartialEq)] pub struct FormatSpec { + // Ex) `!s` in `'{!s}'` conversion: Option, + // Ex) `*` in `'{:*^30}'` fill: Option, + // Ex) `<` in `'{:<30}'` align: Option, + // Ex) `+` in `'{:+f}'` sign: Option, + // Ex) `#` in `'{:#x}'` alternate_form: bool, + // Ex) `30` in `'{:<30}'` width: Option, + // Ex) `,` in `'{:,}'` grouping_option: Option, + // Ex) `2` in `'{:.2}'` precision: Option, + // Ex) `f` in `'{:+f}'` format_type: Option, } @@ -316,418 +322,6 @@ impl FormatSpec { format_type, }) } - - fn compute_fill_string(fill_char: char, fill_chars_needed: i32) -> String { - (0..fill_chars_needed) - .map(|_| fill_char) - .collect::() - } - - #[allow( - clippy::cast_possible_wrap, - clippy::cast_possible_truncation, - clippy::cast_sign_loss - )] - fn add_magnitude_separators_for_char( - magnitude_str: &str, - inter: i32, - sep: char, - disp_digit_cnt: i32, - ) -> String { - // Don't add separators to the floating decimal point of numbers - let mut parts = magnitude_str.splitn(2, '.'); - let magnitude_int_str = parts.next().unwrap().to_string(); - let dec_digit_cnt = magnitude_str.len() as i32 - magnitude_int_str.len() as i32; - let int_digit_cnt = disp_digit_cnt - dec_digit_cnt; - let mut result = FormatSpec::separate_integer(magnitude_int_str, inter, sep, int_digit_cnt); - if let Some(part) = parts.next() { - result.push_str(&format!(".{part}")); - } - result - } - - #[allow( - clippy::cast_sign_loss, - clippy::cast_possible_wrap, - clippy::cast_possible_truncation - )] - fn separate_integer( - magnitude_str: String, - inter: i32, - sep: char, - disp_digit_cnt: i32, - ) -> String { - let magnitude_len = magnitude_str.len() as i32; - let offset = i32::from(disp_digit_cnt % (inter + 1) == 0); - let disp_digit_cnt = disp_digit_cnt + offset; - let pad_cnt = disp_digit_cnt - magnitude_len; - let sep_cnt = disp_digit_cnt / (inter + 1); - let diff = pad_cnt - sep_cnt; - if pad_cnt > 0 && diff > 0 { - // separate with 0 padding - let padding = "0".repeat(diff as usize); - let padded_num = format!("{padding}{magnitude_str}"); - FormatSpec::insert_separator(padded_num, inter, sep, sep_cnt) - } else { - // separate without padding - let sep_cnt = (magnitude_len - 1) / inter; - FormatSpec::insert_separator(magnitude_str, inter, sep, sep_cnt) - } - } - - #[allow( - clippy::cast_sign_loss, - clippy::cast_possible_truncation, - clippy::cast_possible_wrap - )] - fn insert_separator(mut magnitude_str: String, inter: i32, sep: char, sep_cnt: i32) -> String { - let magnitude_len = magnitude_str.len() as i32; - for i in 1..=sep_cnt { - magnitude_str.insert((magnitude_len - inter * i) as usize, sep); - } - magnitude_str - } - - fn validate_format(&self, default_format_type: FormatType) -> Result<(), FormatSpecError> { - let format_type = self.format_type.as_ref().unwrap_or(&default_format_type); - match (&self.grouping_option, format_type) { - ( - Some(FormatGrouping::Comma), - FormatType::String - | FormatType::Character - | FormatType::Binary - | FormatType::Octal - | FormatType::Hex(_) - | FormatType::Number(_), - ) => { - let ch = char::from(format_type); - Err(FormatSpecError::UnspecifiedFormat(',', ch)) - } - ( - Some(FormatGrouping::Underscore), - FormatType::String | FormatType::Character | FormatType::Number(_), - ) => { - let ch = char::from(format_type); - Err(FormatSpecError::UnspecifiedFormat('_', ch)) - } - _ => Ok(()), - } - } - - fn get_separator_interval(&self) -> usize { - match self.format_type { - Some(FormatType::Binary | FormatType::Octal | FormatType::Hex(_)) => 4, - Some(FormatType::Decimal | FormatType::Number(_) | FormatType::FixedPoint(_)) => 3, - None => 3, - _ => panic!("Separators only valid for numbers!"), - } - } - - #[allow(clippy::cast_possible_wrap, clippy::cast_possible_truncation)] - fn add_magnitude_separators(&self, magnitude_str: String, prefix: &str) -> String { - match &self.grouping_option { - Some(fg) => { - let sep = match fg { - FormatGrouping::Comma => ',', - FormatGrouping::Underscore => '_', - }; - let inter = self.get_separator_interval().try_into().unwrap(); - let magnitude_len = magnitude_str.len(); - let width = self.width.unwrap_or(magnitude_len) as i32 - prefix.len() as i32; - let disp_digit_cnt = cmp::max(width, magnitude_len as i32); - FormatSpec::add_magnitude_separators_for_char( - &magnitude_str, - inter, - sep, - disp_digit_cnt, - ) - } - None => magnitude_str, - } - } - - pub fn format_bool(&self, input: bool) -> Result { - let x = u8::from(input); - match &self.format_type { - Some( - FormatType::Binary - | FormatType::Decimal - | FormatType::Octal - | FormatType::Number(Case::Lower) - | FormatType::Hex(_) - | FormatType::GeneralFormat(_) - | FormatType::Character, - ) => self.format_int(&BigInt::from_u8(x).unwrap()), - Some(FormatType::Exponent(_) | FormatType::FixedPoint(_) | FormatType::Percentage) => { - self.format_float(f64::from(x)) - } - None => { - let first_letter = (input.to_string().as_bytes()[0] as char).to_uppercase(); - Ok(first_letter.collect::() + &input.to_string()[1..]) - } - _ => Err(FormatSpecError::InvalidFormatSpecifier), - } - } - - pub fn format_float(&self, num: f64) -> Result { - self.validate_format(FormatType::FixedPoint(Case::Lower))?; - let precision = self.precision.unwrap_or(6); - let magnitude = num.abs(); - let raw_magnitude_str: Result = match &self.format_type { - Some(FormatType::FixedPoint(case)) => Ok(float::format_fixed( - precision, - magnitude, - *case, - self.alternate_form, - )), - Some( - FormatType::Decimal - | FormatType::Binary - | FormatType::Octal - | FormatType::Hex(_) - | FormatType::String - | FormatType::Character - | FormatType::Number(Case::Upper), - ) => { - let ch = char::from(self.format_type.as_ref().unwrap()); - Err(FormatSpecError::UnknownFormatCode(ch, "float")) - } - Some(FormatType::GeneralFormat(case) | FormatType::Number(case)) => { - let precision = if precision == 0 { 1 } else { precision }; - Ok(float::format_general( - precision, - magnitude, - *case, - self.alternate_form, - false, - )) - } - Some(FormatType::Exponent(case)) => Ok(float::format_exponent( - precision, - magnitude, - *case, - self.alternate_form, - )), - Some(FormatType::Percentage) => match magnitude { - magnitude if magnitude.is_nan() => Ok("nan%".to_owned()), - magnitude if magnitude.is_infinite() => Ok("inf%".to_owned()), - _ => { - let result = format!("{:.*}", precision, magnitude * 100.0); - let point = float::decimal_point_or_empty(precision, self.alternate_form); - Ok(format!("{result}{point}%")) - } - }, - None => match magnitude { - magnitude if magnitude.is_nan() => Ok("nan".to_owned()), - magnitude if magnitude.is_infinite() => Ok("inf".to_owned()), - _ => match self.precision { - Some(precision) => Ok(float::format_general( - precision, - magnitude, - Case::Lower, - self.alternate_form, - true, - )), - None => Ok(float::to_string(magnitude)), - }, - }, - }; - let format_sign = self.sign.unwrap_or(FormatSign::Minus); - let sign_str = if num.is_sign_negative() && !num.is_nan() { - "-" - } else { - match format_sign { - FormatSign::Plus => "+", - FormatSign::Minus => "", - FormatSign::MinusOrSpace => " ", - } - }; - let magnitude_str = self.add_magnitude_separators(raw_magnitude_str?, sign_str); - Ok( - self.format_sign_and_align( - &AsciiStr::new(&magnitude_str), - sign_str, - FormatAlign::Right, - ), - ) - } - - #[inline] - fn format_int_radix(&self, magnitude: &BigInt, radix: u32) -> Result { - match self.precision { - Some(_) => Err(FormatSpecError::PrecisionNotAllowed), - None => Ok(magnitude.to_str_radix(radix)), - } - } - - pub fn format_int(&self, num: &BigInt) -> Result { - self.validate_format(FormatType::Decimal)?; - let magnitude = num.abs(); - let prefix = if self.alternate_form { - match self.format_type { - Some(FormatType::Binary) => "0b", - Some(FormatType::Octal) => "0o", - Some(FormatType::Hex(Case::Lower)) => "0x", - Some(FormatType::Hex(Case::Upper)) => "0X", - _ => "", - } - } else { - "" - }; - let raw_magnitude_str = match self.format_type { - Some(FormatType::Binary) => self.format_int_radix(&magnitude, 2), - Some(FormatType::Decimal) => self.format_int_radix(&magnitude, 10), - Some(FormatType::Octal) => self.format_int_radix(&magnitude, 8), - Some(FormatType::Hex(Case::Lower)) => self.format_int_radix(&magnitude, 16), - Some(FormatType::Hex(Case::Upper)) => { - if self.precision.is_some() { - Err(FormatSpecError::PrecisionNotAllowed) - } else { - let mut result = magnitude.to_str_radix(16); - result.make_ascii_uppercase(); - Ok(result) - } - } - - Some(FormatType::Number(Case::Lower)) => self.format_int_radix(&magnitude, 10), - Some(FormatType::Number(Case::Upper)) => { - Err(FormatSpecError::UnknownFormatCode('N', "int")) - } - Some(FormatType::String) => Err(FormatSpecError::UnknownFormatCode('s', "int")), - Some(FormatType::Character) => match (self.sign, self.alternate_form) { - (Some(_), _) => Err(FormatSpecError::NotAllowed("Sign")), - (_, true) => Err(FormatSpecError::NotAllowed("Alternate form (#)")), - (_, _) => match num.to_u32() { - Some(n) if n <= 0x0010_ffff => Ok(std::char::from_u32(n).unwrap().to_string()), - Some(_) | None => Err(FormatSpecError::CodeNotInRange), - }, - }, - Some( - FormatType::GeneralFormat(_) - | FormatType::FixedPoint(_) - | FormatType::Exponent(_) - | FormatType::Percentage, - ) => match num.to_f64() { - Some(float) => return self.format_float(float), - _ => Err(FormatSpecError::UnableToConvert), - }, - None => self.format_int_radix(&magnitude, 10), - }?; - let format_sign = self.sign.unwrap_or(FormatSign::Minus); - let sign_str = match num.sign() { - Sign::Minus => "-", - _ => match format_sign { - FormatSign::Plus => "+", - FormatSign::Minus => "", - FormatSign::MinusOrSpace => " ", - }, - }; - let sign_prefix = format!("{sign_str}{prefix}"); - let magnitude_str = self.add_magnitude_separators(raw_magnitude_str, &sign_prefix); - Ok(self.format_sign_and_align( - &AsciiStr::new(&magnitude_str), - &sign_prefix, - FormatAlign::Right, - )) - } - - pub fn format_string(&self, s: &T) -> Result - where - T: CharLen + Deref, - { - self.validate_format(FormatType::String)?; - match self.format_type { - Some(FormatType::String) | None => { - let mut value = self.format_sign_and_align(s, "", FormatAlign::Left); - if let Some(precision) = self.precision { - value.truncate(precision); - } - Ok(value) - } - _ => { - let ch = char::from(self.format_type.as_ref().unwrap()); - Err(FormatSpecError::UnknownFormatCode(ch, "str")) - } - } - } - - #[allow(clippy::cast_possible_wrap, clippy::cast_possible_truncation)] - fn format_sign_and_align( - &self, - magnitude_str: &T, - sign_str: &str, - default_align: FormatAlign, - ) -> String - where - T: CharLen + Deref, - { - let align = self.align.unwrap_or(default_align); - - let num_chars = magnitude_str.char_len(); - let fill_char = self.fill.unwrap_or(' '); - let fill_chars_needed: i32 = self.width.map_or(0, |w| { - cmp::max(0, (w as i32) - (num_chars as i32) - (sign_str.len() as i32)) - }); - - let magnitude_str = &**magnitude_str; - match align { - FormatAlign::Left => format!( - "{}{}{}", - sign_str, - magnitude_str, - FormatSpec::compute_fill_string(fill_char, fill_chars_needed) - ), - FormatAlign::Right => format!( - "{}{}{}", - FormatSpec::compute_fill_string(fill_char, fill_chars_needed), - sign_str, - magnitude_str - ), - FormatAlign::AfterSign => format!( - "{}{}{}", - sign_str, - FormatSpec::compute_fill_string(fill_char, fill_chars_needed), - magnitude_str - ), - FormatAlign::Center => { - let left_fill_chars_needed = fill_chars_needed / 2; - let right_fill_chars_needed = fill_chars_needed - left_fill_chars_needed; - let left_fill_string = - FormatSpec::compute_fill_string(fill_char, left_fill_chars_needed); - let right_fill_string = - FormatSpec::compute_fill_string(fill_char, right_fill_chars_needed); - format!("{left_fill_string}{sign_str}{magnitude_str}{right_fill_string}") - } - } - } -} - -pub trait CharLen { - /// Returns the number of characters in the text - fn char_len(&self) -> usize; -} - -struct AsciiStr<'a> { - inner: &'a str, -} - -impl<'a> AsciiStr<'a> { - fn new(inner: &'a str) -> Self { - Self { inner } - } -} - -impl CharLen for AsciiStr<'_> { - fn char_len(&self) -> usize { - self.inner.len() - } -} - -impl Deref for AsciiStr<'_> { - type Target = str; - fn deref(&self) -> &Self::Target { - self.inner - } } #[derive(Debug, PartialEq)] @@ -1113,98 +707,6 @@ mod tests { assert_eq!(FormatSpec::parse("<>-#23,.11b"), expected); } - fn format_bool(text: &str, value: bool) -> Result { - FormatSpec::parse(text).and_then(|spec| spec.format_bool(value)) - } - - #[test] - fn test_format_bool() { - assert_eq!(format_bool("b", true), Ok("1".to_owned())); - assert_eq!(format_bool("b", false), Ok("0".to_owned())); - assert_eq!(format_bool("d", true), Ok("1".to_owned())); - assert_eq!(format_bool("d", false), Ok("0".to_owned())); - assert_eq!(format_bool("o", true), Ok("1".to_owned())); - assert_eq!(format_bool("o", false), Ok("0".to_owned())); - assert_eq!(format_bool("n", true), Ok("1".to_owned())); - assert_eq!(format_bool("n", false), Ok("0".to_owned())); - assert_eq!(format_bool("x", true), Ok("1".to_owned())); - assert_eq!(format_bool("x", false), Ok("0".to_owned())); - assert_eq!(format_bool("X", true), Ok("1".to_owned())); - assert_eq!(format_bool("X", false), Ok("0".to_owned())); - assert_eq!(format_bool("g", true), Ok("1".to_owned())); - assert_eq!(format_bool("g", false), Ok("0".to_owned())); - assert_eq!(format_bool("G", true), Ok("1".to_owned())); - assert_eq!(format_bool("G", false), Ok("0".to_owned())); - assert_eq!(format_bool("c", true), Ok("\x01".to_owned())); - assert_eq!(format_bool("c", false), Ok("\x00".to_owned())); - assert_eq!(format_bool("e", true), Ok("1.000000e+00".to_owned())); - assert_eq!(format_bool("e", false), Ok("0.000000e+00".to_owned())); - assert_eq!(format_bool("E", true), Ok("1.000000E+00".to_owned())); - assert_eq!(format_bool("E", false), Ok("0.000000E+00".to_owned())); - assert_eq!(format_bool("f", true), Ok("1.000000".to_owned())); - assert_eq!(format_bool("f", false), Ok("0.000000".to_owned())); - assert_eq!(format_bool("F", true), Ok("1.000000".to_owned())); - assert_eq!(format_bool("F", false), Ok("0.000000".to_owned())); - assert_eq!(format_bool("%", true), Ok("100.000000%".to_owned())); - assert_eq!(format_bool("%", false), Ok("0.000000%".to_owned())); - } - - #[test] - fn test_format_int() { - assert_eq!( - FormatSpec::parse("d") - .unwrap() - .format_int(&BigInt::from_bytes_be(Sign::Plus, b"\x10")), - Ok("16".to_owned()) - ); - assert_eq!( - FormatSpec::parse("x") - .unwrap() - .format_int(&BigInt::from_bytes_be(Sign::Plus, b"\x10")), - Ok("10".to_owned()) - ); - assert_eq!( - FormatSpec::parse("b") - .unwrap() - .format_int(&BigInt::from_bytes_be(Sign::Plus, b"\x10")), - Ok("10000".to_owned()) - ); - assert_eq!( - FormatSpec::parse("o") - .unwrap() - .format_int(&BigInt::from_bytes_be(Sign::Plus, b"\x10")), - Ok("20".to_owned()) - ); - assert_eq!( - FormatSpec::parse("+d") - .unwrap() - .format_int(&BigInt::from_bytes_be(Sign::Plus, b"\x10")), - Ok("+16".to_owned()) - ); - assert_eq!( - FormatSpec::parse("^ 5d") - .unwrap() - .format_int(&BigInt::from_bytes_be(Sign::Minus, b"\x10")), - Ok(" -16 ".to_owned()) - ); - assert_eq!( - FormatSpec::parse("0>+#10x") - .unwrap() - .format_int(&BigInt::from_bytes_be(Sign::Plus, b"\x10")), - Ok("00000+0x10".to_owned()) - ); - } - - #[test] - fn test_format_int_sep() { - let spec = FormatSpec::parse(",").expect(""); - assert_eq!(spec.grouping_option, Some(FormatGrouping::Comma)); - assert_eq!( - spec.format_int(&BigInt::from_str("1234567890123456789012345678").unwrap()), - Ok("1,234,567,890,123,456,789,012,345,678".to_owned()) - ); - } - #[test] fn test_format_parse() { let expected = Ok(FormatString { diff --git a/crates/ruff_python_parser/Cargo.toml b/crates/ruff_python_parser/Cargo.toml index 052105013a..9fa52c06c9 100644 --- a/crates/ruff_python_parser/Cargo.toml +++ b/crates/ruff_python_parser/Cargo.toml @@ -14,7 +14,7 @@ build = "build.rs" [lib] [dependencies] -ruff_python_ast = { path = "../ruff_python_ast"} +ruff_python_ast = { path = "../ruff_python_ast" } ruff_text_size = { path = "../ruff_text_size" } anyhow = { workspace = true } diff --git a/crates/ruff_python_parser/src/lexer.rs b/crates/ruff_python_parser/src/lexer.rs index a65737c04f..6bb9c79e55 100644 --- a/crates/ruff_python_parser/src/lexer.rs +++ b/crates/ruff_python_parser/src/lexer.rs @@ -34,7 +34,7 @@ use std::{char, cmp::Ordering, str::FromStr}; use num_bigint::BigInt; use num_traits::{Num, Zero}; -use ruff_python_ast::MagicKind; +use ruff_python_ast::IpyEscapeKind; use ruff_text_size::{TextLen, TextRange, TextSize}; use unic_emoji_char::is_emoji_presentation; use unic_ucd_ident::{is_xid_continue, is_xid_start}; @@ -398,8 +398,8 @@ impl<'source> Lexer<'source> { Tok::Comment(self.token_text().to_string()) } - /// Lex a single magic command. - fn lex_magic_command(&mut self, kind: MagicKind) -> Tok { + /// Lex a single IPython escape command. + fn lex_ipython_escape_command(&mut self, escape_kind: IpyEscapeKind) -> Tok { let mut value = String::new(); loop { @@ -428,8 +428,77 @@ impl<'source> Lexer<'source> { self.cursor.bump(); value.push('\\'); } + // Help end escape commands are those that end with 1 or 2 question marks. + // Here, we're only looking for a subset of help end escape commands which + // are the ones that has the escape token at the start of the line as well. + // On the other hand, we're not looking for help end escape commands that + // are strict in the sense that the escape token is only at the end. For example, + // + // * `%foo?` is recognized as a help end escape command but not as a strict one. + // * `foo?` is recognized as a strict help end escape command which is not + // lexed here but is identified at the parser level. + // + // Help end escape commands implemented in the IPython codebase using regex: + // https://github.com/ipython/ipython/blob/292e3a23459ca965b8c1bfe2c3707044c510209a/IPython/core/inputtransformer2.py#L454-L462 + '?' => { + self.cursor.bump(); + let mut question_count = 1u32; + while self.cursor.eat_char('?') { + question_count += 1; + } + + // The original implementation in the IPython codebase is based on regex which + // means that it's strict in the sense that it won't recognize a help end escape: + // * If there's any whitespace before the escape token (e.g. `%foo ?`) + // * If there are more than 2 question mark tokens (e.g. `%foo???`) + // which is what we're doing here as well. In that case, we'll continue with + // the prefixed escape token. + // + // Now, the whitespace and empty value check also makes sure that an empty + // command (e.g. `%?` or `? ??`, no value after/between the escape tokens) + // is not recognized as a help end escape command. So, `%?` and `? ??` are + // `IpyEscapeKind::Magic` and `IpyEscapeKind::Help` because of the initial `%` and `??` + // tokens. + if question_count > 2 + || value.chars().last().map_or(true, is_python_whitespace) + || !matches!(self.cursor.first(), '\n' | '\r' | EOF_CHAR) + { + // Not a help end escape command, so continue with the lexing. + value.reserve(question_count as usize); + for _ in 0..question_count { + value.push('?'); + } + continue; + } + + if escape_kind.is_help() { + // If we've recognize this as a help end escape command, then + // any question mark token / whitespaces at the start are not + // considered as part of the value. + // + // For example, `??foo?` is recognized as `IpyEscapeKind::Help` and + // `value` is `foo` instead of `??foo`. + value = value.trim_start_matches([' ', '?']).to_string(); + } else if escape_kind.is_magic() { + // Between `%` and `?` (at the end), the `?` takes priority + // over the `%` so `%foo?` is recognized as `IpyEscapeKind::Help` + // and `value` is `%foo` instead of `foo`. So, we need to + // insert the magic escape token at the start. + value.insert_str(0, escape_kind.as_str()); + } + + let kind = match question_count { + 1 => IpyEscapeKind::Help, + 2 => IpyEscapeKind::Help2, + _ => unreachable!("`question_count` is always 1 or 2"), + }; + return Tok::IpyEscapeCommand { kind, value }; + } '\n' | '\r' | EOF_CHAR => { - return Tok::MagicCommand { kind, value }; + return Tok::IpyEscapeCommand { + kind: escape_kind, + value, + }; } c => { self.cursor.bump(); @@ -697,23 +766,26 @@ impl<'source> Lexer<'source> { && self.state.is_after_equal() && self.nesting == 0 => { - // SAFETY: Safe because `c` has been matched against one of the possible magic command prefix - self.lex_magic_command(MagicKind::try_from(c).unwrap()) + // SAFETY: Safe because `c` has been matched against one of the possible escape command token + self.lex_ipython_escape_command(IpyEscapeKind::try_from(c).unwrap()) } c @ ('%' | '!' | '?' | '/' | ';' | ',') if self.mode == Mode::Jupyter && self.state.is_new_logical_line() => { - let kind = if let Ok(kind) = MagicKind::try_from([c, self.cursor.first()]) { + let kind = if let Ok(kind) = IpyEscapeKind::try_from([c, self.cursor.first()]) { self.cursor.bump(); kind } else { - // SAFETY: Safe because `c` has been matched against one of the possible magic command prefix - MagicKind::try_from(c).unwrap() + // SAFETY: Safe because `c` has been matched against one of the possible escape command token + IpyEscapeKind::try_from(c).unwrap() }; - self.lex_magic_command(kind) + self.lex_ipython_escape_command(kind) } + + '?' if self.mode == Mode::Jupyter => Tok::Question, + '/' => { if self.cursor.eat_char('=') { Tok::SlashEqual @@ -1122,10 +1194,24 @@ fn is_identifier_continuation(c: char) -> bool { } } +/// Returns `true` for [whitespace](https://docs.python.org/3/reference/lexical_analysis.html#whitespace-between-tokens) +/// characters. +/// +/// This is the same as `ruff_python_trivia::is_python_whitespace` and is copied +/// here to avoid a circular dependency as `ruff_python_trivia` has a dev-dependency +/// on `ruff_python_lexer`. +const fn is_python_whitespace(c: char) -> bool { + matches!( + c, + // Space, tab, or form-feed + ' ' | '\t' | '\x0C' + ) +} + #[cfg(test)] mod tests { use num_bigint::BigInt; - use ruff_python_ast::MagicKind; + use ruff_python_ast::IpyEscapeKind; use super::*; @@ -1159,15 +1245,15 @@ mod tests { } } - fn assert_jupyter_magic_line_continuation_with_eol(eol: &str) { + fn assert_ipython_escape_command_line_continuation_with_eol(eol: &str) { let source = format!("%matplotlib \\{eol} --inline"); let tokens = lex_jupyter_source(&source); assert_eq!( tokens, vec![ - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "matplotlib --inline".to_string(), - kind: MagicKind::Magic + kind: IpyEscapeKind::Magic }, Tok::Newline ] @@ -1175,29 +1261,29 @@ mod tests { } #[test] - fn test_jupyter_magic_line_continuation_unix_eol() { - assert_jupyter_magic_line_continuation_with_eol(UNIX_EOL); + fn test_ipython_escape_command_line_continuation_unix_eol() { + assert_ipython_escape_command_line_continuation_with_eol(UNIX_EOL); } #[test] - fn test_jupyter_magic_line_continuation_mac_eol() { - assert_jupyter_magic_line_continuation_with_eol(MAC_EOL); + fn test_ipython_escape_command_line_continuation_mac_eol() { + assert_ipython_escape_command_line_continuation_with_eol(MAC_EOL); } #[test] - fn test_jupyter_magic_line_continuation_windows_eol() { - assert_jupyter_magic_line_continuation_with_eol(WINDOWS_EOL); + fn test_ipython_escape_command_line_continuation_windows_eol() { + assert_ipython_escape_command_line_continuation_with_eol(WINDOWS_EOL); } - fn assert_jupyter_magic_line_continuation_with_eol_and_eof(eol: &str) { + fn assert_ipython_escape_command_line_continuation_with_eol_and_eof(eol: &str) { let source = format!("%matplotlib \\{eol}"); let tokens = lex_jupyter_source(&source); assert_eq!( tokens, vec![ - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "matplotlib ".to_string(), - kind: MagicKind::Magic + kind: IpyEscapeKind::Magic }, Tok::Newline ] @@ -1205,70 +1291,70 @@ mod tests { } #[test] - fn test_jupyter_magic_line_continuation_unix_eol_and_eof() { - assert_jupyter_magic_line_continuation_with_eol_and_eof(UNIX_EOL); + fn test_ipython_escape_command_line_continuation_unix_eol_and_eof() { + assert_ipython_escape_command_line_continuation_with_eol_and_eof(UNIX_EOL); } #[test] - fn test_jupyter_magic_line_continuation_mac_eol_and_eof() { - assert_jupyter_magic_line_continuation_with_eol_and_eof(MAC_EOL); + fn test_ipython_escape_command_line_continuation_mac_eol_and_eof() { + assert_ipython_escape_command_line_continuation_with_eol_and_eof(MAC_EOL); } #[test] - fn test_jupyter_magic_line_continuation_windows_eol_and_eof() { - assert_jupyter_magic_line_continuation_with_eol_and_eof(WINDOWS_EOL); + fn test_ipython_escape_command_line_continuation_windows_eol_and_eof() { + assert_ipython_escape_command_line_continuation_with_eol_and_eof(WINDOWS_EOL); } #[test] - fn test_empty_jupyter_magic() { + fn test_empty_ipython_escape_command() { let source = "%\n%%\n!\n!!\n?\n??\n/\n,\n;"; let tokens = lex_jupyter_source(source); assert_eq!( tokens, vec![ - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: String::new(), - kind: MagicKind::Magic, + kind: IpyEscapeKind::Magic, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: String::new(), - kind: MagicKind::Magic2, + kind: IpyEscapeKind::Magic2, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: String::new(), - kind: MagicKind::Shell, + kind: IpyEscapeKind::Shell, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: String::new(), - kind: MagicKind::ShCap, + kind: IpyEscapeKind::ShCap, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: String::new(), - kind: MagicKind::Help, + kind: IpyEscapeKind::Help, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: String::new(), - kind: MagicKind::Help2, + kind: IpyEscapeKind::Help2, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: String::new(), - kind: MagicKind::Paren, + kind: IpyEscapeKind::Paren, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: String::new(), - kind: MagicKind::Quote, + kind: IpyEscapeKind::Quote, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: String::new(), - kind: MagicKind::Quote2, + kind: IpyEscapeKind::Quote2, }, Tok::Newline, ] @@ -1276,7 +1362,7 @@ mod tests { } #[test] - fn test_jupyter_magic() { + fn test_ipython_escape_command() { let source = r" ?foo ??foo @@ -1297,66 +1383,177 @@ mod tests { assert_eq!( tokens, vec![ - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "foo".to_string(), - kind: MagicKind::Help, + kind: IpyEscapeKind::Help, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "foo".to_string(), - kind: MagicKind::Help2, + kind: IpyEscapeKind::Help2, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "timeit a = b".to_string(), - kind: MagicKind::Magic, + kind: IpyEscapeKind::Magic, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "timeit a % 3".to_string(), - kind: MagicKind::Magic, + kind: IpyEscapeKind::Magic, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "matplotlib --inline".to_string(), - kind: MagicKind::Magic, + kind: IpyEscapeKind::Magic, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "pwd && ls -a | sed 's/^/\\\\ /'".to_string(), - kind: MagicKind::Shell, + kind: IpyEscapeKind::Shell, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "cd /Users/foo/Library/Application\\ Support/".to_string(), - kind: MagicKind::ShCap, + kind: IpyEscapeKind::ShCap, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "foo 1 2".to_string(), - kind: MagicKind::Paren, + kind: IpyEscapeKind::Paren, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "foo 1 2".to_string(), - kind: MagicKind::Quote, + kind: IpyEscapeKind::Quote, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "foo 1 2".to_string(), - kind: MagicKind::Quote2, + kind: IpyEscapeKind::Quote2, }, Tok::Newline, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "ls".to_string(), - kind: MagicKind::Shell, + kind: IpyEscapeKind::Shell, }, Tok::Newline, ] ); } + #[test] - fn test_jupyter_magic_indentation() { + fn test_ipython_help_end_escape_command() { + let source = r" +?foo? +?? foo? +?? foo ? +?foo?? +??foo?? +???foo? +???foo?? +??foo??? +???foo??? +?? \ + foo? +?? \ +? +???? +%foo? +%foo?? +%%foo??? +!pwd?" + .trim(); + let tokens = lex_jupyter_source(source); + assert_eq!( + tokens, + [ + Tok::IpyEscapeCommand { + value: "foo".to_string(), + kind: IpyEscapeKind::Help, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "foo".to_string(), + kind: IpyEscapeKind::Help, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: " foo ?".to_string(), + kind: IpyEscapeKind::Help2, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "foo".to_string(), + kind: IpyEscapeKind::Help2, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "foo".to_string(), + kind: IpyEscapeKind::Help2, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "foo".to_string(), + kind: IpyEscapeKind::Help, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "foo".to_string(), + kind: IpyEscapeKind::Help2, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "foo???".to_string(), + kind: IpyEscapeKind::Help2, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "?foo???".to_string(), + kind: IpyEscapeKind::Help2, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "foo".to_string(), + kind: IpyEscapeKind::Help, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: " ?".to_string(), + kind: IpyEscapeKind::Help2, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "??".to_string(), + kind: IpyEscapeKind::Help2, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "%foo".to_string(), + kind: IpyEscapeKind::Help, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "%foo".to_string(), + kind: IpyEscapeKind::Help2, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "foo???".to_string(), + kind: IpyEscapeKind::Magic2, + }, + Tok::Newline, + Tok::IpyEscapeCommand { + value: "pwd".to_string(), + kind: IpyEscapeKind::Help, + }, + Tok::Newline, + ] + ); + } + + #[test] + fn test_ipython_escape_command_indentation() { let source = r" if True: %matplotlib \ @@ -1371,9 +1568,9 @@ if True: Tok::Colon, Tok::Newline, Tok::Indent, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "matplotlib --inline".to_string(), - kind: MagicKind::Magic, + kind: IpyEscapeKind::Magic, }, Tok::Newline, Tok::Dedent, @@ -1382,7 +1579,7 @@ if True: } #[test] - fn test_jupyter_magic_assignment() { + fn test_ipython_escape_command_assignment() { let source = r" pwd = !pwd foo = %timeit a = b @@ -1398,54 +1595,54 @@ baz = %matplotlib \ name: "pwd".to_string() }, Tok::Equal, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "pwd".to_string(), - kind: MagicKind::Shell, + kind: IpyEscapeKind::Shell, }, Tok::Newline, Tok::Name { name: "foo".to_string() }, Tok::Equal, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "timeit a = b".to_string(), - kind: MagicKind::Magic, + kind: IpyEscapeKind::Magic, }, Tok::Newline, Tok::Name { name: "bar".to_string() }, Tok::Equal, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "timeit a % 3".to_string(), - kind: MagicKind::Magic, + kind: IpyEscapeKind::Magic, }, Tok::Newline, Tok::Name { name: "baz".to_string() }, Tok::Equal, - Tok::MagicCommand { + Tok::IpyEscapeCommand { value: "matplotlib inline".to_string(), - kind: MagicKind::Magic, + kind: IpyEscapeKind::Magic, }, Tok::Newline, ] ); } - fn assert_no_jupyter_magic(tokens: &[Tok]) { + fn assert_no_ipython_escape_command(tokens: &[Tok]) { for tok in tokens { - if let Tok::MagicCommand { .. } = tok { - panic!("Unexpected magic command token: {tok:?}") + if let Tok::IpyEscapeCommand { .. } = tok { + panic!("Unexpected escape command token: {tok:?}") } } } #[test] - fn test_jupyter_magic_not_an_assignment() { + fn test_ipython_escape_command_not_an_assignment() { let source = r" -# Other magic kinds are not valid here (can't test `foo = ?str` because '?' is not a valid token) +# Other escape kinds are not valid here (can't test `foo = ?str` because '?' is not a valid token) foo = /func foo = ;func foo = ,func @@ -1456,7 +1653,7 @@ def f(arg=%timeit a = b): pass" .trim(); let tokens = lex_jupyter_source(source); - assert_no_jupyter_magic(&tokens); + assert_no_ipython_escape_command(&tokens); } #[test] diff --git a/crates/ruff_python_parser/src/parser.rs b/crates/ruff_python_parser/src/parser.rs index d9edbbd7b1..ff62cb26c4 100644 --- a/crates/ruff_python_parser/src/parser.rs +++ b/crates/ruff_python_parser/src/parser.rs @@ -117,7 +117,7 @@ pub fn parse_expression_starts_at( /// /// This function is the most general function to parse Python code. Based on the [`Mode`] supplied, /// it can be used to parse a single expression, a full Python program, an interactive expression -/// or a Python program containing Jupyter magics. +/// or a Python program containing IPython escape commands. /// /// # Example /// @@ -146,7 +146,7 @@ pub fn parse_expression_starts_at( /// assert!(program.is_ok()); /// ``` /// -/// Additionally, we can parse a Python program containing Jupyter magics: +/// Additionally, we can parse a Python program containing IPython escapes: /// /// ``` /// use ruff_python_parser::{Mode, parse}; @@ -775,7 +775,7 @@ type X[T] \ #[test] fn test_type_as_identifier() { - let source = r#"\ + let source = r"\ type *a + b, c # ((type * a) + b), c type *(a + b), c # (type * (a + b)), c type (*a + b, c) # type ((*(a + b)), c) @@ -806,7 +806,7 @@ type ( type = 1 type = x = 1 x = type = 1 -"#; +"; insta::assert_debug_snapshot!(parse_suite(source, "").unwrap()); } @@ -863,7 +863,7 @@ y = 100(no) #[test] fn test_match_as_identifier() { - let source = r#"\ + let source = r"\ match *a + b, c # ((match * a) + b), c match *(a + b), c # (match * (a + b)), c match (*a + b, c) # match ((*(a + b)), c) @@ -885,7 +885,7 @@ match match: pass match = lambda query: query == event print(match(12)) -"#; +"; insta::assert_debug_snapshot!(parse_suite(source, "").unwrap()); } @@ -1122,9 +1122,9 @@ class Abcd: } #[test] - fn test_jupyter_magic() { + fn test_ipython_escape_commands() { let parse_ast = parse( - r#" + r" # Normal Python code ( a @@ -1169,7 +1169,7 @@ def foo(): ;foo 1 2 ,foo 1 2 -# Indented magic +# Indented escape commands for a in range(5): !ls @@ -1180,7 +1180,16 @@ foo = %foo \ % foo foo = %foo # comment -"# + +# Help end line magics +foo? +foo.bar?? +foo.bar.baz? +foo[0]?? +foo[0][1]? +foo.bar[0].baz[1]?? +foo.bar[0].baz[2].egg?? +" .trim(), Mode::Jupyter, "", @@ -1190,7 +1199,7 @@ foo = %foo # comment } #[test] - fn test_jupyter_magic_parse_error() { + fn test_ipython_escape_command_parse_error() { let source = r#" a = 1 %timeit a == 1 @@ -1200,7 +1209,7 @@ a = 1 let parse_err = parse_tokens(lxr, Mode::Module, "").unwrap_err(); assert_eq!( parse_err.to_string(), - "line magics are only allowed in Jupyter mode at byte offset 6".to_string() + "IPython escape commands are only allowed in Jupyter mode at byte offset 6".to_string() ); } } diff --git a/crates/ruff_python_parser/src/python.lalrpop b/crates/ruff_python_parser/src/python.lalrpop index fb75124ea0..54b6832ba2 100644 --- a/crates/ruff_python_parser/src/python.lalrpop +++ b/crates/ruff_python_parser/src/python.lalrpop @@ -5,7 +5,7 @@ use num_bigint::BigInt; use ruff_text_size::TextSize; -use ruff_python_ast::{self as ast, Ranged, MagicKind}; +use ruff_python_ast::{self as ast, Ranged, IpyEscapeKind}; use crate::{ Mode, lexer::{LexicalError, LexicalErrorType}, @@ -14,6 +14,7 @@ use crate::{ string::parse_strings, token::{self, StringKind}, }; +use lalrpop_util::ParseError; grammar(mode: Mode); @@ -88,7 +89,8 @@ SmallStatement: ast::Stmt = { NonlocalStatement, AssertStatement, TypeAliasStatement, - LineMagicStatement, + IpyEscapeCommandStatement, + IpyHelpEndEscapeCommandStatement, }; PassStatement: ast::Stmt = { @@ -153,7 +155,7 @@ ExpressionStatement: ast::Stmt = { AssignSuffix: ast::Expr = { "=" => e, - "=" => e + "=" => e }; TestListOrYieldExpr: ast::Expr = { @@ -321,51 +323,123 @@ AssertStatement: ast::Stmt = { }, }; -LineMagicStatement: ast::Stmt = { - =>? { +IpyEscapeCommandStatement: ast::Stmt = { + =>? { if mode == Mode::Jupyter { - Ok(ast::Stmt::LineMagic( - ast::StmtLineMagic { - kind: m.0, - value: m.1, + Ok(ast::Stmt::IpyEscapeCommand( + ast::StmtIpyEscapeCommand { + kind: c.0, + value: c.1, range: (location..end_location).into() } )) } else { Err(LexicalError { - error: LexicalErrorType::OtherError("line magics are only allowed in Jupyter mode".to_string()), + error: LexicalErrorType::OtherError("IPython escape commands are only allowed in Jupyter mode".to_string()), location, })? } } } -LineMagicExpr: ast::Expr = { - =>? { +IpyEscapeCommandExpr: ast::Expr = { + =>? { if mode == Mode::Jupyter { // This should never occur as the lexer won't allow it. - if !matches!(m.0, MagicKind::Magic | MagicKind::Shell) { + if !matches!(c.0, IpyEscapeKind::Magic | IpyEscapeKind::Shell) { return Err(LexicalError { - error: LexicalErrorType::OtherError("expr line magics are only allowed for % and !".to_string()), + error: LexicalErrorType::OtherError("IPython escape command expr is only allowed for % and !".to_string()), location, })?; } - Ok(ast::Expr::LineMagic( - ast::ExprLineMagic { - kind: m.0, - value: m.1, + Ok(ast::Expr::IpyEscapeCommand( + ast::ExprIpyEscapeCommand { + kind: c.0, + value: c.1, range: (location..end_location).into() } )) } else { Err(LexicalError { - error: LexicalErrorType::OtherError("line magics are only allowed in Jupyter mode".to_string()), + error: LexicalErrorType::OtherError("IPython escape commands are only allowed in Jupyter mode".to_string()), location, })? } } } +IpyHelpEndEscapeCommandStatement: ast::Stmt = { + // We are permissive than the original implementation because we would allow whitespace + // between the expression and the suffix while the IPython implementation doesn't allow it. + // For example, `foo ?` would be valid in our case but invalid from IPython. + > =>? { + fn unparse_expr(expr: &ast::Expr, buffer: &mut String) -> Result<(), LexicalError> { + match expr { + ast::Expr::Name(ast::ExprName { id, .. }) => { + buffer.push_str(id.as_str()); + }, + ast::Expr::Subscript(ast::ExprSubscript { value, slice, range, .. }) => { + let ast::Expr::Constant(ast::ExprConstant { value: ast::Constant::Int(integer), .. }) = slice.as_ref() else { + return Err(LexicalError { + error: LexicalErrorType::OtherError("only integer constants are allowed in Subscript expressions in help end escape command".to_string()), + location: range.start(), + }); + }; + unparse_expr(value, buffer)?; + buffer.push('['); + buffer.push_str(&format!("{}", integer)); + buffer.push(']'); + }, + ast::Expr::Attribute(ast::ExprAttribute { value, attr, .. }) => { + unparse_expr(value, buffer)?; + buffer.push('.'); + buffer.push_str(attr.as_str()); + }, + _ => { + return Err(LexicalError { + error: LexicalErrorType::OtherError("only Name, Subscript and Attribute expressions are allowed in help end escape command".to_string()), + location: expr.range().start(), + }); + } + } + Ok(()) + } + + if mode != Mode::Jupyter { + return Err(ParseError::User { + error: LexicalError { + error: LexicalErrorType::OtherError("IPython escape commands are only allowed in Jupyter mode".to_string()), + location, + }, + }); + } + + let kind = match suffix.len() { + 1 => IpyEscapeKind::Help, + 2 => IpyEscapeKind::Help2, + _ => { + return Err(ParseError::User { + error: LexicalError { + error: LexicalErrorType::OtherError("maximum of 2 `?` tokens are allowed in help end escape command".to_string()), + location, + }, + }); + } + }; + + let mut value = String::new(); + unparse_expr(&e, &mut value)?; + + Ok(ast::Stmt::IpyEscapeCommand( + ast::StmtIpyEscapeCommand { + kind, + value, + range: (location..end_location).into() + } + )) + } +} + CompoundStatement: ast::Stmt = { MatchStatement, IfStatement, @@ -858,11 +932,7 @@ ForStatement: ast::Stmt = { .end(); let target = Box::new(set_context(target, ast::ExprContext::Store)); let iter = Box::new(iter); - if is_async.is_some() { - ast::Stmt::AsyncFor(ast::StmtAsyncFor { target, iter, body, orelse, range: (location..end_location).into() }) - } else { - ast::Stmt::For(ast::StmtFor { target, iter, body, orelse, range: (location..end_location).into() }) - } + ast::Stmt::For(ast::StmtFor { target, iter, body, orelse, is_async: is_async.is_some(), range: (location..end_location).into() }) }, }; @@ -882,6 +952,7 @@ TryStatement: ast::Stmt = { handlers, orelse, finalbody, + is_star: false, range: (location..end_location).into() }, ) @@ -895,12 +966,13 @@ TryStatement: ast::Stmt = { .map(Ranged::end) .or_else(|| handlers.last().map(Ranged::end)) .unwrap(); - ast::Stmt::TryStar( - ast::StmtTryStar { + ast::Stmt::Try( + ast::StmtTry { body, handlers, orelse, finalbody, + is_star: true, range: (location..end_location).into() }, ) @@ -915,6 +987,7 @@ TryStatement: ast::Stmt = { handlers, orelse, finalbody, + is_star: false, range: (location..end_location).into() }, ) @@ -975,11 +1048,7 @@ ExceptClause: ast::ExceptHandler = { WithStatement: ast::Stmt = { "with" ":" => { let end_location = body.last().unwrap().end(); - if is_async.is_some() { - ast::StmtAsyncWith { items, body, range: (location..end_location).into() }.into() - } else { - ast::StmtWith { items, body, range: (location..end_location).into() }.into() - } + ast::StmtWith { items, body, is_async: is_async.is_some(), range: (location..end_location).into() }.into() }, }; @@ -1014,11 +1083,7 @@ FuncDef: ast::Stmt = { let args = Box::new(args); let returns = r.map(Box::new); let end_location = body.last().unwrap().end(); - if is_async.is_some() { - ast::StmtAsyncFunctionDef { name, parameters:args, body, decorator_list, returns, type_params, range: (location..end_location).into() }.into() - } else { - ast::StmtFunctionDef { name, parameters:args, body, decorator_list, returns, type_params, range: (location..end_location).into() }.into() - } + ast::StmtFunctionDef { name, parameters:args, body, decorator_list, returns, type_params, is_async: is_async.is_some(), range: (location..end_location).into() }.into() }, }; @@ -1744,6 +1809,7 @@ extern { Dedent => token::Tok::Dedent, StartModule => token::Tok::StartModule, StartExpression => token::Tok::StartExpression, + "?" => token::Tok::Question, "+" => token::Tok::Plus, "-" => token::Tok::Minus, "~" => token::Tok::Tilde, @@ -1837,8 +1903,8 @@ extern { triple_quoted: }, name => token::Tok::Name { name: }, - line_magic => token::Tok::MagicCommand { - kind: , + ipy_escape_command => token::Tok::IpyEscapeCommand { + kind: , value: }, "\n" => token::Tok::Newline, diff --git a/crates/ruff_python_parser/src/python.rs b/crates/ruff_python_parser/src/python.rs index 8577cb525b..b45d27805c 100644 --- a/crates/ruff_python_parser/src/python.rs +++ b/crates/ruff_python_parser/src/python.rs @@ -1,8 +1,8 @@ // auto-generated: "lalrpop 0.20.0" -// sha3: f99d8cb29227bfbe1fa07719f655304a9a93fd4715726687ef40c091adbdbad5 +// sha3: d7e633596695f78340d0d083cd0561185ac7f8efadb0297003c81a41031f6e24 use num_bigint::BigInt; use ruff_text_size::TextSize; -use ruff_python_ast::{self as ast, Ranged, MagicKind}; +use ruff_python_ast::{self as ast, Ranged, IpyEscapeKind}; use crate::{ Mode, lexer::{LexicalError, LexicalErrorType}, @@ -11,6 +11,7 @@ use crate::{ string::parse_strings, token::{self, StringKind}, }; +use lalrpop_util::ParseError; #[allow(unused_extern_crates)] extern crate lalrpop_util as __lalrpop_util; #[allow(unused_imports)] @@ -24,7 +25,7 @@ mod __parse__Top { use num_bigint::BigInt; use ruff_text_size::TextSize; - use ruff_python_ast::{self as ast, Ranged, MagicKind}; + use ruff_python_ast::{self as ast, Ranged, IpyEscapeKind}; use crate::{ Mode, lexer::{LexicalError, LexicalErrorType}, @@ -33,6 +34,7 @@ mod __parse__Top { string::parse_strings, token::{self, StringKind}, }; + use lalrpop_util::ParseError; #[allow(unused_extern_crates)] extern crate lalrpop_util as __lalrpop_util; #[allow(unused_imports)] @@ -47,7 +49,7 @@ mod __parse__Top { Variant1((f64, f64)), Variant2(f64), Variant3(BigInt), - Variant4((MagicKind, String)), + Variant4((IpyEscapeKind, String)), Variant5(String), Variant6((String, StringKind, bool)), Variant7(core::option::Option), @@ -140,2322 +142,2528 @@ mod __parse__Top { } const __ACTION: &[i16] = &[ // State 0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, // State 1 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 2 - -743, 0, 0, 0, 0, 0, -743, 0, -743, 0, 0, 0, -743, 0, 0, -743, 0, 0, 0, -743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -743, 0, -743, -743, -743, -743, 0, 0, 0, 0, 0, -743, -743, -743, -743, 0, -743, -743, -743, -743, 0, 0, 0, 0, -743, -743, -743, -743, -743, 0, 0, -743, -743, -743, -743, 0, -743, -743, -743, -743, -743, -743, -743, -743, -743, 0, 0, 0, -743, 0, 0, 0, 0, -743, -743, -743, -743, -743, -743, + -792, 0, 0, 0, 0, 0, -792, 0, -792, 0, 0, 0, -792, 0, 0, -792, 0, 0, 0, -792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -792, 0, -792, -792, -792, -792, 0, 0, 0, 0, 0, -792, -792, -792, -792, 0, -792, -792, -792, -792, 0, 0, 0, 0, -792, -792, -792, -792, -792, 0, 0, -792, -792, -792, -792, 0, -792, -792, -792, -792, -792, -792, -792, -792, -792, 0, 0, 0, -792, 0, 0, 0, 0, -792, -792, -792, -792, -792, -792, // State 3 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 4 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 5 - -765, -765, 0, -765, -765, -765, 0, -765, 0, 0, -765, -765, 427, -765, -765, 428, -765, 0, 0, 0, 0, 0, -765, -765, -765, 0, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, 0, -765, 0, 0, 0, 0, -765, -765, -765, -765, -765, 0, -765, 0, 0, 0, 0, 0, 0, 0, 0, -765, 0, 0, -765, -765, 0, -765, 0, -765, -765, 0, 0, 0, -765, -765, 0, 0, 0, 0, 0, 0, 0, 0, 0, -765, -765, -765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -816, -816, 0, -816, -816, -816, 0, -816, 0, 0, -816, -816, 463, -816, -816, 464, -816, 0, 0, 0, 0, 0, -816, -816, -816, 0, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, 0, -816, 0, 0, 0, 0, -816, -816, -816, -816, -816, 0, -816, 0, 0, 0, 0, 0, 0, 0, 0, -816, 0, 0, -816, -816, 0, -816, 0, -816, -816, 0, 0, 0, -816, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, -816, -816, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - -246, -246, -246, -246, -246, -246, 23, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, 0, 24, 0, -246, -246, -246, -246, -246, 0, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, 0, 0, 0, 25, -246, -246, -246, -246, -246, 0, -246, 0, 0, 0, 0, 0, 0, 0, 0, -246, 0, 0, -246, -246, 0, -246, 0, -246, -246, 0, 0, 0, -246, -246, 0, 0, 0, 0, 0, 0, 0, 0, 0, -246, -246, -246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -288, -288, -288, -288, -288, -288, 23, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, 0, 24, 0, -288, -288, -288, -288, -288, 0, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, 0, 0, 0, 25, -288, -288, -288, -288, -288, 0, -288, 0, 0, 0, 0, 0, 0, 0, 0, -288, 0, 0, -288, -288, 0, -288, 0, -288, -288, 0, 0, 0, -288, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, -288, -288, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - -314, 430, 0, -314, 0, -314, 0, -314, 0, 0, -314, -314, 0, -314, -314, 0, -314, 0, 0, 0, 0, 0, -314, -314, -314, 0, -314, 431, 0, -314, 432, -314, 433, 434, 435, 0, -314, 0, -314, 0, 0, 0, 0, -314, 0, -314, -314, -314, 0, -314, 0, 0, 0, 0, 0, 0, 0, 0, -314, 0, 0, -314, -314, 0, -314, 0, 436, 437, 0, 0, 0, 438, -314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, -314, -314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -356, 466, 0, -356, 0, -356, 0, -356, 0, 0, -356, -356, 0, -356, -356, 0, -356, 0, 0, 0, 0, 0, -356, -356, -356, 0, -356, 467, 0, -356, 468, -356, 469, 470, 471, 0, -356, 0, 0, -356, 0, 0, 0, 0, -356, 0, -356, -356, -356, 0, -356, 0, 0, 0, 0, 0, 0, 0, 0, -356, 0, 0, -356, -356, 0, -356, 0, 472, 473, 0, 0, 0, 474, -356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, -356, -356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 9 - -153, -153, 0, -153, -153, -153, 0, -153, 0, 0, -153, -153, 0, -153, -153, 0, -153, 0, 0, 0, 0, 0, -153, -153, -153, 0, -153, -153, 442, -153, -153, -153, -153, -153, -153, 443, -153, 0, -153, 0, 0, 0, 0, -153, -153, -153, -153, -153, 0, -153, 0, 0, 0, 0, 0, 0, 0, 0, -153, 0, 0, -153, -153, 0, -153, 0, -153, -153, 0, 0, 0, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -158, -158, 0, -158, -158, -158, 0, -158, 0, 0, -158, -158, 0, -158, -158, 0, -158, 0, 0, 0, 0, 0, -158, -158, -158, 0, -158, -158, 478, -158, -158, -158, -158, -158, -158, 479, -158, -158, 0, -158, 0, 0, 0, 0, -158, -158, -158, -158, -158, 0, -158, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, -158, -158, 0, -158, 0, -158, -158, 0, 0, 0, -158, -158, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, -158, -158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - -167, -167, 444, -167, -167, -167, 0, -167, 445, 0, -167, -167, -167, -167, -167, -167, -167, 0, 0, 0, 446, 447, -167, -167, -167, 0, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 448, -167, 0, 0, 0, 0, -167, -167, -167, -167, -167, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, -167, 0, 0, -167, -167, 0, -167, 0, -167, -167, 0, 0, 0, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -174, -174, 480, -174, -174, -174, 0, -174, 481, 0, -174, -174, -174, -174, -174, -174, -174, 0, 0, 0, 482, 483, -174, -174, -174, 0, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, 484, -174, 0, 0, 0, 0, -174, -174, -174, -174, -174, 0, -174, 0, 0, 0, 0, 0, 0, 0, 0, -174, 0, 0, -174, -174, 0, -174, 0, -174, -174, 0, 0, 0, -174, -174, 0, 0, 0, 0, 0, 0, 0, 0, 0, -174, -174, -174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 11 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 12 - 0, 0, 0, 0, 0, 0, 13, 456, 14, 37, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 492, 14, 37, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 13 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 14 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 464, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 500, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 15 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 16 - 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 17 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 18 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 46, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 479, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 46, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 515, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 19 - 504, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 505, 16, 506, 0, 52, 507, 53, 54, 0, 0, 0, 0, 55, 56, 57, 58, 59, 0, 0, 17, 60, 61, 18, 0, 508, 62, 63, 509, 64, 65, 66, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 557, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 562, 61, 563, 0, 62, 564, 63, 64, 0, 0, 0, 0, 65, 66, 67, 68, 69, 0, 0, 17, 70, 71, 18, 0, 565, 72, 73, 566, 74, 75, 76, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 20 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 21 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 22 - 0, 0, 0, 0, 0, 0, 13, 515, 71, 72, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 572, 82, 83, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 23 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 24 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 25 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 26 - -313, 430, 0, -313, 0, -313, 0, -313, 0, 0, -313, -313, 0, -313, -313, 0, -313, 0, 0, 0, 0, 0, -313, -313, -313, 0, -313, 431, 0, -313, 432, -313, 433, 434, 435, 0, -313, 0, -313, 0, 0, 0, 0, -313, 0, -313, -313, -313, 0, -313, 0, 0, 0, 0, 0, 0, 0, 0, -313, 0, 0, -313, -313, 0, -313, 0, 436, 437, 0, 0, 0, 438, -313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -313, -313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -355, 466, 0, -355, 0, -355, 0, -355, 0, 0, -355, -355, 0, -355, -355, 0, -355, 0, 0, 0, 0, 0, -355, -355, -355, 0, -355, 467, 0, -355, 468, -355, 469, 470, 471, 0, -355, 0, 0, -355, 0, 0, 0, 0, -355, 0, -355, -355, -355, 0, -355, 0, 0, 0, 0, 0, 0, 0, 0, -355, 0, 0, -355, -355, 0, -355, 0, 472, 473, 0, 0, 0, 474, -355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -355, -355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 27 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 28 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 29 - -418, 0, 0, -418, 0, -418, 13, -418, 14, 0, -418, -418, 411, -418, 0, 412, -418, 0, 0, 413, 0, 0, -418, -418, -418, 0, -418, 0, 0, -418, 0, -418, 0, 0, 0, 0, -418, 0, -418, 414, 415, 416, 15, 0, 0, -418, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, -418, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -464, 0, 0, -464, 0, -464, 13, -464, 14, 0, -464, -464, 447, -464, 0, 448, -464, 0, 0, 449, 0, 0, -464, -464, -464, 0, -464, 0, 0, -464, 0, -464, 0, 0, 0, 0, -464, 0, 0, -464, 450, 451, 452, 15, 0, 0, -464, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, -464, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 30 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 31 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 32 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 33 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 34 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 35 - 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 36 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 37 - -914, 0, 0, 0, 0, 0, 13, -914, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, -914, 0, 0, 0, 0, -914, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -970, 0, 0, 0, 0, 0, 13, -970, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, -970, 0, 0, 0, 0, -970, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 38 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -534, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -581, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 39 - -245, -245, -245, -245, -245, -245, 23, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, 0, 24, 0, -245, -245, -245, -245, -245, 0, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, 0, 0, 0, 25, -245, -245, -245, -245, -245, 0, -245, 0, 0, 0, 0, 0, 0, 0, 0, -245, 0, 0, -245, -245, 0, -245, 0, -245, -245, 0, 0, 0, -245, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, -245, -245, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -287, -287, -287, -287, -287, -287, 23, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, 0, 24, 0, -287, -287, -287, -287, -287, 0, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, 0, 0, 0, 25, -287, -287, -287, -287, -287, 0, -287, 0, 0, 0, 0, 0, 0, 0, 0, -287, 0, 0, -287, -287, 0, -287, 0, -287, -287, 0, 0, 0, -287, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, -287, -287, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 40 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, -705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, -752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 41 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -449, 0, 0, 0, 0, 0, 0, 0, 0, 0, -449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 42 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 43 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 44 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 45 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 46 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 47 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 91, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -816, -816, 0, -816, -816, -816, 0, 0, 0, 0, -816, -816, 463, -816, -816, 464, -816, 0, 0, 0, 0, 0, -816, -816, -816, 0, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, 0, 0, -816, 0, 0, 0, 0, 0, -816, -816, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -816, 0, -816, -816, 0, 0, 0, -816, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, -816, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - -374, 0, 0, 557, 0, 558, 0, 0, 0, 0, 559, 560, 0, 561, 0, 0, 562, 0, 0, 0, 0, 0, 563, 564, 0, 0, -374, 0, 0, 565, 0, 95, 0, 0, 0, 0, 566, 0, 567, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -288, -288, -288, -288, -288, -288, 23, 0, -288, -288, -288, -288, -288, -288, -288, -288, -288, 0, 104, 0, -288, -288, -288, -288, -288, 0, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, 0, -288, -288, 0, 0, 0, 105, 0, -288, -288, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -288, 0, -288, -288, 0, 0, 0, -288, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, -288, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 49 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 107, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 50 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 51 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + -356, 466, 0, -356, 0, -356, 0, 0, 0, 0, -356, -356, 0, -356, -356, 0, -356, 0, 0, 0, 0, 0, -356, -356, -356, 0, -356, 467, 0, -356, 468, -356, 469, 470, 471, 0, -356, 0, 0, -356, 0, 0, 0, 0, 0, 0, -356, -356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -356, 0, 472, 473, 0, 0, 0, 474, -356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, -356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 52 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + -418, 0, 0, 617, 0, 618, 0, 0, 0, 0, 619, 620, 0, 621, 0, 0, 622, 0, 0, 0, 0, 0, 623, 624, 0, 0, -418, 0, 0, 625, 0, 112, 0, 0, 0, 0, 626, 0, 0, 627, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 53 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -158, -158, 0, -158, -158, -158, 0, 0, 0, 0, -158, -158, 0, -158, -158, 0, -158, 0, 0, 0, 0, 0, -158, -158, -158, 0, -158, -158, 478, -158, -158, -158, -158, -158, -158, 479, -158, 0, 0, -158, 0, 0, 0, 0, 0, -158, -158, -158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, -158, -158, 0, 0, 0, -158, -158, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, -158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 54 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -174, -174, 480, -174, -174, -174, 0, 0, 481, 0, -174, -174, -174, -174, -174, -174, -174, 0, 0, 0, 482, 483, -174, -174, -174, 0, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, 0, 484, -174, 0, 0, 0, 0, 0, -174, -174, -174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -174, 0, -174, -174, 0, 0, 0, -174, -174, 0, 0, 0, 0, 0, 0, 0, 0, 0, -174, -174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 55 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 56 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 635, 14, 119, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 57 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 58 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 638, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 59 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 60 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 61 - -750, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, -750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 62 - -386, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, -386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 63 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 64 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 65 - 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 628, 629, 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, // State 66 - -152, -152, 0, -152, -152, -152, 0, -152, 0, 0, -152, -152, 0, -152, -152, 0, -152, 0, 0, 0, 0, 0, -152, -152, -152, 0, -152, -152, 442, -152, -152, -152, -152, -152, -152, 443, -152, 0, -152, 0, 0, 0, 0, -152, -152, -152, -152, -152, 0, -152, 0, 0, 0, 0, 0, 0, 0, 0, -152, 0, 0, -152, -152, 0, -152, 0, -152, -152, 0, 0, 0, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 67 - -166, -166, 444, -166, -166, -166, 0, -166, 445, 0, -166, -166, -166, -166, -166, -166, -166, 0, 0, 0, 446, 447, -166, -166, -166, 0, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 448, -166, 0, 0, 0, 0, -166, -166, -166, -166, -166, 0, -166, 0, 0, 0, 0, 0, 0, 0, 0, -166, 0, 0, -166, -166, 0, -166, 0, -166, -166, 0, 0, 0, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 68 - 0, 0, 0, 0, 0, 0, 13, 631, 71, 72, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, // State 69 - 0, 0, 0, 0, 0, 0, 0, -410, 0, 0, 0, 0, 0, 0, -410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 70 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 71 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -799, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, -799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 72 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, -817, 412, 0, 0, 0, 413, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, -817, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -432, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, -432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 73 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 74 - -764, -764, 0, -764, -764, -764, 0, -764, 0, 0, -764, -764, 427, -764, -764, 428, -764, 0, 0, 0, 0, 0, -764, -764, -764, 0, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, 0, -764, 0, 0, 0, 0, -764, -764, -764, -764, -764, 0, -764, 0, 0, 0, 0, 0, 0, 0, 0, -764, 0, 0, -764, -764, 0, -764, 0, -764, -764, 0, 0, 0, -764, -764, 0, 0, 0, 0, 0, 0, 0, 0, 0, -764, -764, -764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 75 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 694, 695, 141, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 76 - 0, 0, 0, 0, 0, 0, 0, -300, 0, 0, 0, 0, 0, 0, -300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -300, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 46, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 698, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 77 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -157, -157, 0, -157, -157, -157, 0, -157, 0, 0, -157, -157, 0, -157, -157, 0, -157, 0, 0, 0, 0, 0, -157, -157, -157, 0, -157, -157, 478, -157, -157, -157, -157, -157, -157, 479, -157, -157, 0, -157, 0, 0, 0, 0, -157, -157, -157, -157, -157, 0, -157, 0, 0, 0, 0, 0, 0, 0, 0, -157, 0, 0, -157, -157, 0, -157, 0, -157, -157, 0, 0, 0, -157, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, -157, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 78 - 0, 0, 0, 0, 0, 0, 13, 646, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -173, -173, 480, -173, -173, -173, 0, -173, 481, 0, -173, -173, -173, -173, -173, -173, -173, 0, 0, 0, 482, 483, -173, -173, -173, 0, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 484, -173, 0, 0, 0, 0, -173, -173, -173, -173, -173, 0, -173, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0, 0, -173, -173, 0, -173, 0, -173, -173, 0, 0, 0, -173, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, -173, -173, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 79 - 0, 0, 0, 0, 0, 0, 13, 649, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 700, 82, 83, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 80 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -456, 0, 0, 0, 0, 0, 0, -456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 81 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, -454, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 82 - 0, 0, 0, 0, 0, 0, 0, 0, 130, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, -656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 83 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, -869, 448, 0, 0, 0, 449, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, -869, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 84 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 85 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, -704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -815, -815, 0, -815, -815, -815, 0, -815, 0, 0, -815, -815, 463, -815, -815, 464, -815, 0, 0, 0, 0, 0, -815, -815, -815, 0, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, 0, -815, 0, 0, 0, 0, -815, -815, -815, -815, -815, 0, -815, 0, 0, 0, 0, 0, 0, 0, 0, -815, 0, 0, -815, -815, 0, -815, 0, -815, -815, 0, 0, 0, -815, -815, 0, 0, 0, 0, 0, 0, 0, 0, 0, -815, -815, -815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 86 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 87 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 46, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, -345, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 88 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, -762, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 89 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 715, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 90 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 718, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 91 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 92 - -375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -375, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, -501, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 93 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 157, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, -703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 94 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 675, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 95 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 96 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, -751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 97 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 98 - 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 628, 629, 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 46, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, -387, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 99 - 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, -811, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 100 - 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 101 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 102 - -349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -349, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, -349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 103 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 104 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 105 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 106 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 107 - 0, -765, 0, 0, -765, 0, 0, 0, 0, 0, 0, 0, 427, 0, -765, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -765, -765, 0, -765, 0, -765, -765, -765, -765, 0, 0, 0, 0, 0, 0, 0, 0, -765, 0, -765, -765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -765, 0, -765, -765, 0, 0, 0, -765, -765, 0, 0, 0, 0, 0, 0, 0, 0, 0, -765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 108 - 0, -246, -246, 0, -246, 0, 23, 0, -246, -246, 0, 0, -246, 0, -246, -246, 0, 0, 163, 0, -246, -246, 0, 0, 0, 0, 0, -246, -246, 0, -246, 0, -246, -246, -246, -246, 0, -246, 0, 0, 0, 0, 164, 0, -246, 0, -246, -246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -246, 0, -246, -246, 0, 0, 0, -246, -246, 0, 0, 0, 0, 0, 0, 0, 0, 0, -246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 109 - 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 433, 434, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -314, -314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -314, 0, 436, 437, 0, 0, 0, 438, -314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -419, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 110 - 0, -153, 0, 0, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 442, 0, -153, 0, -153, -153, -153, 443, 0, 0, 0, 0, 0, 0, 0, 0, -153, 0, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 0, -153, -153, 0, 0, 0, -153, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 111 - 0, -167, 444, 0, -167, 0, 0, 0, 445, 0, 0, 0, -167, 0, -167, -167, 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, 0, -167, -167, 0, -167, 0, -167, -167, -167, -167, 0, 448, 0, 0, 0, 0, 0, 0, -167, 0, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, 0, -167, -167, 0, 0, 0, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 749, 457, 458, // State 112 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 113 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 114 - 0, 0, 0, 0, 0, 0, 13, 698, 14, 178, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 115 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 700, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 116 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 117 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 118 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 46, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 704, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 119 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -581, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 120 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, -819, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 121 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, -815, 412, 0, 0, 0, 413, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, -815, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 122 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, -820, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 694, 695, 141, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 123 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -287, -287, -287, -287, -287, -287, 23, 0, -287, -287, -287, -287, -287, -287, -287, -287, -287, 0, 24, 0, -287, -287, -287, -287, -287, 0, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -285, -287, -287, 0, 0, 0, 25, 0, -287, -287, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -287, 0, -287, -287, 0, 0, 0, -287, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, -287, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 124 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, -777, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, -777, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 125 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 126 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, // State 127 - 0, 0, 0, 0, 0, 0, 13, 716, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -391, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, -391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 128 - 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 129 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, -674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, -684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 131 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 132 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, -816, 0, 0, -816, 0, 0, 0, 0, 0, 0, 0, 463, 0, -816, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -816, -816, 0, -816, 0, -816, -816, -816, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, -816, 0, -816, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -816, 0, -816, -816, 0, 0, 0, -816, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 133 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, -288, -288, 0, -288, 0, 23, 0, -288, -288, 0, 0, -288, 0, -288, -288, 0, 0, 195, 0, -288, -288, 0, 0, 0, 0, 0, -288, -288, 0, -288, 0, -288, -288, -288, -288, 0, 0, -288, 0, 0, 0, 0, 196, 0, -288, 0, -288, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -288, 0, -288, -288, 0, 0, 0, -288, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 134 - 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 469, 470, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -356, -356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -356, 0, 472, 473, 0, 0, 0, 474, -356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 135 - 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -158, 0, 0, -158, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 478, 0, -158, 0, -158, -158, -158, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, -158, -158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, -158, -158, 0, 0, 0, -158, -158, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 136 - -378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -378, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -174, 480, 0, -174, 0, 0, 0, 481, 0, 0, 0, -174, 0, -174, -174, 0, 0, 0, 0, 482, 483, 0, 0, 0, 0, 0, -174, -174, 0, -174, 0, -174, -174, -174, -174, 0, 0, 484, 0, 0, 0, 0, 0, 0, -174, 0, -174, -174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -174, 0, -174, -174, 0, 0, 0, -174, -174, 0, 0, 0, 0, 0, 0, 0, 0, 0, -174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 137 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 138 - 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 139 - 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 782, 14, 210, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 38, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 140 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 784, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 141 - 0, 0, 0, 0, 0, 0, 0, 0, 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 142 - 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 143 - 0, 0, 0, 0, 0, 0, 0, 744, 203, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 46, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 788, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 144 - -369, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, -369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 145 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 146 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 147 - 0, 0, 0, 0, 0, 0, 205, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, -871, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 148 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, -867, 448, 0, 0, 0, 449, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, -867, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 149 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, -872, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 150 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 151 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, -828, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, -828, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 152 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 153 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 154 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 804, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 155 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 156 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, -721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 157 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, -731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 158 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 159 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 160 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -157, -157, 0, -157, -157, -157, 0, 0, 0, 0, -157, -157, 0, -157, -157, 0, -157, 0, 0, 0, 0, 0, -157, -157, -157, 0, -157, -157, 478, -157, -157, -157, -157, -157, -157, 479, -157, -155, 0, -157, 0, 0, 0, 0, 0, -157, -157, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, 0, -157, -157, 0, 0, 0, -157, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 161 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -173, -173, 480, -173, -173, -173, 0, 0, 481, 0, -173, -173, -173, -173, -173, -173, -173, 0, 0, 0, 482, 483, -173, -173, -173, 0, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -171, 484, -173, 0, 0, 0, 0, 0, -173, -173, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0, -173, -173, 0, 0, 0, -173, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, -173, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 162 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 163 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 164 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 165 - 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -313, 0, 0, 0, 0, 0, 0, 0, 0, 0, -315, 0, 0, 431, 0, 0, 432, 0, 433, 434, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -313, -313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -313, 0, 436, 437, 0, 0, 0, 438, -313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -815, -815, 0, -815, -815, -815, 0, 0, 0, 0, -815, -815, 463, -815, -815, 464, -815, 0, 0, 0, 0, 0, -815, -815, -815, 0, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -813, 0, -815, 0, 0, 0, 0, 0, -815, -815, -815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -815, 0, -815, -815, 0, 0, 0, -815, -815, 0, 0, 0, 0, 0, 0, 0, 0, 0, -815, -815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 166 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -422, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 167 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 821, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 168 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 822, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 169 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 170 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 171 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 172 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 173 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 233, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 174 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 175 - 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 839, 237, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 176 - 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -413, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, -413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 177 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 178 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -534, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 179 - 0, -245, -245, 0, -245, 0, 23, 0, -245, -245, 0, 0, -245, 0, -245, -245, 0, 0, 24, 0, -245, -245, 0, 0, -247, 0, 0, -245, -245, 0, -245, 0, -245, -245, -245, -245, 0, -245, 0, 0, 0, 0, 25, 0, -245, 0, -245, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -245, 0, -245, -245, 0, 0, 0, -245, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 180 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 181 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 182 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 183 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 184 - 0, 0, 0, 0, 0, 0, 13, 797, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, // State 185 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, -671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 186 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 187 - 0, 0, 0, 0, 0, 0, 0, 0, 227, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 188 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 189 - 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 190 - 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 191 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 192 - 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 193 - 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 194 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 195 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 196 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 197 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -355, 0, 0, 0, 0, 0, 0, 0, 0, 0, -357, 0, 0, 467, 0, 0, 468, 0, 469, 470, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -355, -355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -355, 0, 472, 473, 0, 0, 0, 474, -355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 198 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 199 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 200 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 201 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 202 - 0, 0, 0, 0, 0, 0, 0, -627, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 203 - 0, 0, 0, 0, 0, 0, 0, -447, 0, 0, 0, 0, 0, 0, -447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 204 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 205 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 206 - -424, 0, 0, 0, 0, 0, -424, 0, -424, 0, 0, 0, -424, 0, 0, -424, 0, 0, 0, -424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -424, 0, -424, -424, -424, -424, 0, 0, 0, 0, 0, -424, -424, -424, -424, 0, -424, -424, -424, -424, 248, 827, 0, 0, -424, -424, -424, -424, -424, 0, 0, -424, -424, -424, -424, 0, -424, -424, -424, -424, -424, -424, -424, -424, -424, 0, 0, 0, -424, -424, 0, 0, 0, -424, -424, -424, -424, -424, -424, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 207 - -855, 0, 0, 0, 0, 0, -855, 0, -855, 0, 0, 0, -855, 0, 0, -855, 0, 0, 0, -855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -855, 0, -855, -855, -855, -855, 0, 0, 0, 0, 0, -855, -855, -855, -855, 0, -855, -855, -855, -855, 0, 834, 252, 835, -855, -855, -855, -855, -855, 0, 0, -855, -855, -855, -855, 0, -855, -855, -855, -855, -855, -855, -855, -855, -855, 0, 0, 0, -855, -855, 0, 0, 0, -855, -855, -855, -855, -855, -855, + 0, 0, 0, 0, 0, 0, 0, 878, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 208 - -859, 0, 0, 0, 0, 0, -859, 0, -859, 0, 0, 0, -859, 0, 0, -859, 0, 0, 0, -859, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -859, 0, -859, -859, -859, -859, 0, 0, 0, 0, 0, -859, -859, -859, -859, 0, -859, -859, -859, -859, 0, 837, 838, 839, -859, -859, -859, -859, -859, 0, 0, -859, -859, -859, -859, 0, -859, -859, -859, -859, -859, -859, -859, -859, -859, 0, 0, 0, -859, -859, 0, 0, 0, -859, -859, -859, -859, -859, -859, + 0, 0, 0, 0, 0, 0, 0, 881, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 209 - 0, 0, 0, 0, 0, 0, 13, 0, 253, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 210 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 505, 16, 506, 0, 52, 507, 53, 54, 0, 0, 0, 0, 55, 56, 57, 58, 59, 0, 0, 17, 60, 61, 18, 0, 508, 62, 63, 509, 64, 65, 66, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -581, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 211 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, -287, -287, 0, -287, 0, 23, 0, -287, -287, 0, 0, -287, 0, -287, -287, 0, 0, 24, 0, -287, -287, 0, 0, -289, 0, 0, -287, -287, 0, -287, 0, -287, -287, -287, -287, 0, 0, -287, 0, 0, 0, 0, 25, 0, -287, 0, -287, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -287, 0, -287, -287, 0, 0, 0, -287, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 212 - 0, -152, 0, 0, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, 0, 0, -152, 442, 0, -152, 0, -152, -152, -152, 443, 0, 0, 0, 0, 0, 0, 0, 0, -152, 0, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 0, -152, -152, 0, 0, 0, -152, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 213 - 0, -166, 444, 0, -166, 0, 0, 0, 445, 0, 0, 0, -166, 0, -166, -166, 0, 0, 0, 0, 446, 447, 0, 0, -168, 0, 0, -166, -166, 0, -166, 0, -166, -166, -166, -166, 0, 448, 0, 0, 0, 0, 0, 0, -166, 0, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, 0, -166, -166, 0, 0, 0, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 214 - 0, -764, 0, 0, -764, 0, 0, 0, 0, 0, 0, 0, 427, 0, -764, 428, 0, 0, 0, 0, 0, 0, 0, 0, -766, 0, 0, -764, -764, 0, -764, 0, -764, -764, -764, -764, 0, 0, 0, 0, 0, 0, 0, 0, -764, 0, -764, -764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -764, 0, -764, -764, 0, 0, 0, -764, -764, 0, 0, 0, 0, 0, 0, 0, 0, 0, -764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 215 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 216 - 0, 0, 0, 0, 0, 0, 13, 849, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 894, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 217 - 0, 0, 0, 0, 0, 0, 13, 851, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, -718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 218 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 219 - 0, 0, 0, 0, 0, 0, 13, 854, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 261, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 220 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 221 - 0, 0, 0, 0, 0, 0, 0, -772, 0, 0, 0, 0, 0, 0, -772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -772, 0, 0, 0, 0, 0, -772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -772, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 222 - 0, 0, 0, 0, 0, 0, 13, 860, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 223 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 224 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 225 - 0, 0, 0, 0, 0, 0, 0, 0, 268, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 905, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 226 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, -675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 907, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 227 - 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 228 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 229 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 230 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 231 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 232 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 233 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 234 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 235 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 236 - 0, 0, 0, 0, 0, 0, 0, 0, 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, -674, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 237 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -496, 0, 0, 0, 0, 0, 0, -496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 238 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 239 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 240 - 0, 0, 0, 0, 0, 0, 0, -578, 280, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + -470, 0, 0, 0, 0, 0, -470, 0, -470, 0, 0, 0, -470, 0, 0, -470, 0, 0, 0, -470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -470, 0, -470, -470, -470, -470, 0, 0, 0, 0, 0, -470, -470, -470, -470, 0, -470, -470, -470, -470, 283, 927, 0, 0, -470, -470, -470, -470, -470, 0, 0, -470, -470, -470, -470, 0, -470, -470, -470, -470, -470, -470, -470, -470, -470, 0, 0, 0, -470, -470, 0, 0, 0, -470, -470, -470, -470, -470, -470, // State 241 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + -909, 0, 0, 0, 0, 0, -909, 0, -909, 0, 0, 0, -909, 0, 0, -909, 0, 0, 0, -909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -909, 0, -909, -909, -909, -909, 0, 0, 0, 0, 0, -909, -909, -909, -909, 0, -909, -909, -909, -909, 0, 934, 287, 935, -909, -909, -909, -909, -909, 0, 0, -909, -909, -909, -909, 0, -909, -909, -909, -909, -909, -909, -909, -909, -909, 0, 0, 0, -909, -909, 0, 0, 0, -909, -909, -909, -909, -909, -909, // State 242 - 0, 0, 0, 0, 0, 0, 0, -626, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -913, 0, 0, 0, 0, 0, -913, 0, -913, 0, 0, 0, -913, 0, 0, -913, 0, 0, 0, -913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -913, 0, -913, -913, -913, -913, 0, 0, 0, 0, 0, -913, -913, -913, -913, 0, -913, -913, -913, -913, 0, 937, 938, 939, -913, -913, -913, -913, -913, 0, 0, -913, -913, -913, -913, 0, -913, -913, -913, -913, -913, -913, -913, -913, -913, 0, 0, 0, -913, -913, 0, 0, 0, -913, -913, -913, -913, -913, -913, // State 243 - 0, 0, 0, 0, 0, 0, 0, -619, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 288, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 244 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 562, 61, 563, 0, 62, 564, 63, 64, 0, 0, 0, 0, 65, 66, 67, 68, 69, 0, 0, 17, 70, 71, 18, 0, 565, 72, 73, 566, 74, 75, 76, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 245 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 246 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, -157, 0, 0, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, -157, 478, 0, -157, 0, -157, -157, -157, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, 0, -157, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, 0, -157, -157, 0, 0, 0, -157, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 247 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, -173, 480, 0, -173, 0, 0, 0, 481, 0, 0, 0, -173, 0, -173, -173, 0, 0, 0, 0, 482, 483, 0, 0, -175, 0, 0, -173, -173, 0, -173, 0, -173, -173, -173, -173, 0, 0, 484, 0, 0, 0, 0, 0, 0, -173, 0, -173, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0, -173, -173, 0, 0, 0, -173, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 248 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, -815, 0, 0, -815, 0, 0, 0, 0, 0, 0, 0, 463, 0, -815, 464, 0, 0, 0, 0, 0, 0, 0, 0, -817, 0, 0, -815, -815, 0, -815, 0, -815, -815, -815, -815, 0, 0, 0, 0, 0, 0, 0, 0, 0, -815, 0, -815, -815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -815, 0, -815, -815, 0, 0, 0, -815, -815, 0, 0, 0, 0, 0, 0, 0, 0, 0, -815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 249 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 250 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 949, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 251 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 951, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 252 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 253 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 954, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 254 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 255 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -823, 0, 0, 0, 0, 0, 0, -823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -823, 0, 0, 0, 0, 0, -823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -823, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 256 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 505, 16, 506, 0, 52, 507, 53, 54, 0, 0, 0, 0, 55, 56, 57, 58, 59, 0, 0, 17, 60, 61, 18, 0, 508, 62, 63, 509, 64, 65, 66, 38, 19, 0, 0, 0, 417, 905, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 960, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 257 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 258 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 259 - 0, 0, 0, 0, 0, 0, 13, 908, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 303, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 260 - 0, 0, 0, 0, 0, 0, 0, 910, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, -722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 261 - 0, 0, 0, 0, 0, 0, 0, 912, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 262 - 0, 0, 0, 0, 0, 0, 13, 913, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 263 - 0, 0, 0, 0, 0, 0, 0, -770, 0, 0, 0, 0, 0, 0, -770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -770, 0, 0, 0, 0, 0, -770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -770, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 264 - 0, 0, 0, 0, 0, 0, 0, -773, 0, 0, 0, 0, 0, 0, -773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -773, 0, 0, 0, 0, 0, -773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -773, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 265 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 266 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 974, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 267 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, -676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 268 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, -672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 269 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 270 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 271 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 233, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 272 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 273 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 274 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 275 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -625, 316, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 276 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 277 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -673, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 278 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -666, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 279 - 0, 0, 0, 0, 0, 0, 0, -596, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 280 - 0, 0, 0, 0, 0, 0, 0, -606, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 281 - 0, 0, 0, 0, 0, 0, 0, -621, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 282 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 283 - 0, 0, 0, 0, 0, 0, 0, -618, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 284 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 285 - 0, 0, 0, 0, 0, 0, 0, 943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 286 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 287 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 288 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 289 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 290 - 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 291 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 562, 61, 563, 0, 62, 564, 63, 64, 0, 0, 0, 0, 65, 66, 67, 68, 69, 0, 0, 17, 70, 71, 18, 0, 565, 72, 73, 566, 74, 75, 76, 38, 77, 0, 0, 0, 453, 1007, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 292 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 971, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 293 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 294 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 1010, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 295 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 1012, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 296 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 1014, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 297 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 1015, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 298 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, -821, 0, 0, 0, 0, 0, 0, -821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -821, 0, 0, 0, 0, 0, -821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -821, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 299 - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -824, 0, 0, 0, 0, 0, 0, -824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -824, 0, 0, 0, 0, 0, -824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -824, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 300 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 301 - 0, 0, 0, 0, 0, 0, 13, 986, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 302 - 0, 0, 0, 0, 0, 0, 13, 988, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, -723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 303 - 0, 0, 0, 0, 0, 0, 0, -771, 0, 0, 0, 0, 0, 0, -771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -771, 0, 0, 0, 0, 0, -771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -771, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, -719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 304 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, -673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 305 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 306 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 307 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 308 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 309 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 310 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 1031, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 311 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 312 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 313 - 0, 0, 0, 0, 0, 0, 0, -593, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 314 - 0, 0, 0, 0, 0, 0, 0, -569, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 315 - 0, 0, 0, 0, 0, 0, 0, -579, 343, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, -643, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 316 - 0, 0, 0, 0, 0, 0, 0, -620, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, -653, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 317 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, -668, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 318 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 319 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -665, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 320 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 321 - 0, 0, 0, 0, 0, 0, 0, -461, 0, 0, 0, 0, 427, 0, -461, 428, 0, 0, 0, 0, 0, 0, 0, 0, -461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -461, 0, 0, 0, -461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -461, 0, -461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1046, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 322 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 323 - 0, 0, 0, 0, 0, 0, 324, 1013, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 324 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 325 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1050, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 326 - 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 1017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 327 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1026, 1027, 1028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1029, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 328 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1030, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 329 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 330 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 331 - 0, 0, 0, 0, 0, 0, 13, 1039, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 332 - 0, 0, 0, 0, 0, 0, 13, 1040, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 333 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 334 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 335 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 336 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 337 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 1089, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 338 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 1091, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 339 - 0, 0, 0, 0, 0, 0, 0, -575, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, -822, 0, 0, 0, 0, 0, 0, -822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -822, 0, 0, 0, 0, 0, -822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -822, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 340 - 0, 0, 0, 0, 0, 0, 0, -566, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, -720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 341 - 0, 0, 0, 0, 0, 0, 0, -580, 367, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 342 - 0, 0, 0, 0, 0, 0, 0, -597, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 343 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 344 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 345 - 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 346 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 347 - 0, 0, 0, 0, 0, 0, 324, 1066, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 348 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 349 - 0, 0, 0, 0, 0, 0, 324, 1070, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -640, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 350 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, -616, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 351 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, -626, 379, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 352 - 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, -735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -667, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 353 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 354 - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 355 - 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 356 - 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, -736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1113, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 357 - 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, -508, 0, 0, 0, 0, 463, 0, -508, 464, 0, 0, 0, 0, 0, 0, 0, 0, -508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -508, 0, 0, 0, -508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -508, 0, -508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 358 - 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 1082, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 359 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, -464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 360, 1116, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 360 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 361 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 0, 0, // State 362 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 1120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 363 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1129, 1130, 1131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1132, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 364 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1133, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 365 - 0, 0, 0, 0, 0, 0, 0, -572, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 366 - 0, 0, 0, 0, 0, 0, 0, -598, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 367 - 0, 0, 0, 0, 0, 0, 0, -594, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 1142, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 368 - 0, 0, 0, 0, 0, 0, 0, -570, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 1143, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 369 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 370 - 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 371 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1026, 1027, 1028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1114, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 372 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 373 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 374 - 688, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 415, 416, 15, 0, 0, 0, 0, 0, 51, 0, 16, 506, 0, 0, 507, 0, 54, 0, 0, 0, 0, 0, 56, 57, 0, 59, 0, 0, 17, 0, 61, 18, 0, 508, 62, 63, 0, 64, 0, 0, 38, 19, 0, 0, 0, 417, 0, 0, 0, 0, 418, 419, 420, 510, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 375 - 0, 0, 0, 0, 0, 0, 0, -595, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -622, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 376 - 0, 0, 0, 0, 0, 0, 0, -571, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, -613, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 377 - 0, 0, 0, 0, 0, 0, 0, -576, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, -627, 403, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 378 - 0, 0, 0, 0, 0, 0, 0, -567, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, -644, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 379 - 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 380 - 0, 0, 0, 0, 0, 0, 0, 1130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 381 - 0, 0, 0, 0, 0, 0, 324, 1133, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 382 - 0, 0, 0, 0, 0, 0, 0, 1134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 0, 0, // State 383 - 0, 0, 0, 0, 0, 0, 324, 1136, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 969, 970, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 420, 0, 421, 422, + 0, 0, 0, 0, 0, 0, 360, 1169, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 384 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 385 - 0, 0, 0, 0, 0, 0, 0, -577, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 360, 1173, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 386 - 0, 0, 0, 0, 0, 0, 0, -568, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 387 - 0, 0, 0, 0, 0, 0, 0, -573, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 388 - 0, 0, 0, 0, 0, 0, 0, -574, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, -782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 389 - 0, 0, 0, 0, 0, 0, 0, 1154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 390 - 0, 0, 0, 0, 0, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 452, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 391 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 392 - -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, 0, -181, 0, -181, -181, -181, -181, -181, 0, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, 0, 0, 0, -181, -181, -181, -181, -181, -181, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, -181, -181, 0, -181, 0, -181, -181, 0, 0, 0, -181, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, -181, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, + 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, -783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 393 - -910, -910, 0, -910, 21, -910, 0, -910, 0, 0, -910, -910, 0, -910, -910, 0, -910, 0, 0, 0, 0, 0, -910, -910, -910, 0, -910, -910, 0, -910, -910, -910, -910, -910, -910, 0, -910, 0, -910, 0, 0, 0, 0, -910, -910, -910, -910, -910, 0, -910, 0, 0, 0, 0, 0, 0, 0, 0, -910, 0, 0, -910, -910, 0, -910, 0, -910, -910, 0, 0, 0, -910, -910, 0, 0, 0, 0, 0, 0, 0, 0, 0, -910, -910, -910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 394 - -541, 0, 0, -541, 0, -541, 0, -541, 0, 0, -541, -541, 0, -541, -541, 0, -541, 0, 0, 0, 0, 0, -541, -541, -541, 0, -541, 0, 0, -541, 0, -541, 0, 0, 0, 0, -541, 0, -541, 0, 0, 0, 0, -541, 0, -541, 0, -541, 0, -541, 0, 0, 0, 0, 0, 0, 0, 0, -541, 0, 0, -541, -541, 0, -541, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -541, -541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 395 - -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, 0, -237, 0, -237, -237, -237, -237, -237, 0, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, 0, 0, 0, -237, -237, -237, -237, -237, -237, 0, -237, 0, 0, 0, 0, 0, 0, 0, 0, -237, 0, 0, -237, -237, 0, -237, 0, -237, -237, 0, 0, 0, -237, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, -237, -237, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, -511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 396 - -740, -740, -740, -740, -740, -740, 0, -740, -740, 26, -740, -740, -740, -740, -740, -740, -740, 0, 0, 0, -740, -740, -740, -740, -740, 0, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, 0, 0, 0, 0, -740, -740, -740, -740, -740, 0, -740, 0, 0, 0, 0, 0, 0, 0, 0, -740, 0, 0, -740, -740, 0, -740, 0, -740, -740, 0, 0, 0, -740, -740, 0, 0, 0, 0, 0, 0, 0, 0, 0, -740, -740, -740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 397 - -503, 0, 0, -503, 0, -503, 0, -503, 0, 0, -503, -503, 0, -503, -503, 0, -503, 0, 0, 0, 0, 0, -503, -503, -503, 0, -503, 0, 0, -503, 0, -503, 0, 0, 0, 0, -503, 0, -503, 0, 0, 0, 0, -503, 0, -503, -503, -503, 0, -503, 0, 0, 0, 0, 0, 0, 0, 0, -503, 0, 0, -503, -503, 0, -503, 0, 0, 0, 0, 0, 0, 0, -503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -503, -503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 398 - -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, 0, -182, 0, -182, -182, -182, -182, -182, 0, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, 0, 0, 0, -182, -182, -182, -182, -182, -182, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, -182, -182, 0, -182, 0, -182, -182, 0, 0, 0, -182, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, -182, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 399 - -828, -828, -828, -828, -828, -828, 0, -828, -828, 0, -828, -828, -828, -828, -828, -828, -828, 0, 0, 0, -828, -828, -828, -828, -828, 0, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, 0, 0, 0, 0, -828, -828, -828, -828, -828, 0, -828, 0, 0, 0, 0, 0, 0, 0, 0, -828, 0, 0, -828, -828, 0, -828, 0, -828, -828, 0, 0, 0, -828, -828, 0, 0, 0, 0, 0, 0, 0, 0, 0, -828, -828, -828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 400 - -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, 0, -183, 0, -183, -183, -183, -183, -183, 0, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, 0, 0, 0, -183, -183, -183, -183, -183, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, -183, -183, 0, -183, 0, -183, -183, 0, 0, 0, -183, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, -183, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 401 - -833, 0, 0, -833, 0, -833, 0, -833, 0, 0, -833, -833, 0, -833, -833, 0, -833, 0, 0, 0, 0, 0, -833, -833, -833, 0, -833, 0, 0, -833, 0, -833, 0, 0, 0, 0, -833, 0, -833, 0, 0, 0, 0, -833, 0, -833, 0, -833, 0, -833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -833, -833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -833, -833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -619, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 402 - -157, 0, 0, -157, 0, -157, 0, -157, 0, 0, -157, -157, 0, -157, -157, 0, -157, 0, 0, 0, 0, 0, -157, -157, -157, 0, -157, 0, 0, -157, 0, -157, 0, 0, 0, 0, -157, 0, -157, 0, 0, 0, 0, -157, 0, -157, 441, -157, 0, -157, 0, 0, 0, 0, 0, 0, 0, 0, -157, 0, 0, -157, -157, 0, -157, 0, 0, 0, 0, 0, 0, 0, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -157, -157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -645, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 403 - -419, 0, 0, -419, 0, -419, 0, -419, 0, 0, -419, -419, 0, -419, 30, 0, -419, 0, 0, 0, 0, 0, -419, -419, -419, 0, -419, 0, 0, -419, 0, -419, 0, 0, 0, 0, -419, 0, -419, 0, 0, 0, 0, 0, 0, -419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -641, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 404 - -832, 0, 0, -832, 0, -832, 0, -832, 0, 0, -832, -832, 0, -832, -832, 0, -832, 0, 0, 0, 0, 0, -832, -832, -832, 0, -832, 0, 0, -832, 0, -832, 0, 0, 0, 0, -832, 0, -832, 0, 0, 0, 0, -832, 0, -832, 0, -832, 0, -832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -832, -832, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -832, -832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -617, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 405 - -380, -380, -380, -380, -380, -380, 0, -380, -380, 0, -380, -380, -380, -380, -380, -380, -380, 0, 0, 0, -380, -380, -380, -380, -380, 0, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, 0, 0, 0, 0, -380, -380, -380, -380, -380, 0, -380, 0, 0, 0, 0, 0, 0, 0, 0, -380, 0, 0, -380, -380, 0, -380, 0, -380, -380, 0, 0, 0, -380, -380, 0, 0, 0, 0, 0, 0, 0, 0, 0, -380, -380, -380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 406 - -845, 0, 0, -845, 0, -845, 0, -845, 0, 0, -845, -845, 0, -845, -845, 0, -845, 0, 0, 0, 0, 0, -845, -845, -845, 0, -845, 0, 0, -845, 0, -845, 0, 0, 0, 0, -845, 0, -845, 0, 0, 0, 0, 0, 0, -845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 407 - -844, 0, 0, -844, 0, -844, 0, -844, 0, 0, -844, -844, 0, -844, -844, 0, -844, 0, 0, 0, 0, 0, -844, -844, -844, 0, -844, 0, 0, -844, 0, -844, 0, 0, 0, 0, -844, 0, -844, 0, 0, 0, 0, 0, 0, -844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1129, 1130, 1131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 408 - -532, 0, 0, -532, 0, -532, 0, -532, 0, 0, -532, -532, 0, -532, -532, 0, -532, 0, 0, 0, 0, 0, -532, -532, -532, 0, -532, 0, 0, -532, 0, -532, 0, 0, 0, 0, -532, 0, -532, 0, 0, 0, 0, 0, 0, -532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 409 - -365, -365, 0, -365, 0, -365, 0, -365, 0, 0, -365, -365, 0, -365, -365, 0, -365, 0, 0, 0, 0, 0, -365, -365, -365, 0, -365, -365, 0, -365, -365, -365, -365, -365, -365, 0, -365, 0, -365, 0, 0, 0, 0, -365, 34, -365, -365, -365, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, -365, 0, 0, -365, -365, 0, -365, 0, -365, -365, 0, 0, 0, -365, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, -365, -365, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 410 - 0, 0, 0, 0, 0, 0, -882, 0, 0, 0, 0, 0, -882, 0, 0, -882, 0, 0, 0, -882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -882, -882, -882, -882, 0, 0, 0, 0, 0, 0, 0, -882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -882, 0, 0, 0, -882, 0, 0, 0, 0, -882, -882, -882, 0, -882, -882, + 772, 0, 0, 0, 0, 0, 57, 0, 14, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 560, 561, 59, 0, 0, 0, 0, 0, 60, 0, 61, 563, 0, 0, 564, 0, 64, 0, 0, 0, 0, 0, 66, 67, 0, 69, 0, 0, 17, 0, 71, 18, 0, 565, 72, 73, 0, 74, 0, 0, 38, 77, 0, 0, 0, 453, 0, 0, 0, 0, 454, 455, 456, 567, 457, 458, // State 411 - 0, 0, 0, 0, 0, 0, -883, 0, 0, 0, 0, 0, -883, 0, 0, -883, 0, 0, 0, -883, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -883, -883, -883, -883, 0, 0, 0, 0, 0, 0, 0, -883, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -883, 0, 0, 0, -883, 0, 0, 0, 0, -883, -883, -883, 0, -883, -883, + 0, 0, 0, 0, 0, 0, 0, -642, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 412 - -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, 0, -209, 0, -209, -209, -209, -209, -209, 0, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, 0, 0, 0, -209, -209, -209, -209, -209, -209, 0, -209, 0, 0, 0, 0, 0, 0, 0, 0, -209, 0, 0, -209, -209, 0, -209, 0, -209, -209, 0, 0, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -618, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 413 - -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, 0, -207, 0, -207, -207, -207, -207, -207, 0, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, 0, 0, 0, -207, -207, -207, -207, -207, -207, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, -207, -207, 0, -207, 0, -207, -207, 0, 0, 0, -207, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, -207, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -623, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 414 - -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, 0, -208, 0, -208, -208, -208, -208, -208, 0, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, 0, 0, 0, -208, -208, -208, -208, -208, -208, 0, -208, 0, 0, 0, 0, 0, 0, 0, 0, -208, 0, 0, -208, -208, 0, -208, 0, -208, -208, 0, 0, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -614, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 415 - -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, 0, -206, 0, -206, -206, -206, -206, -206, 0, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, 0, 0, 0, -206, -206, -206, -206, -206, -206, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, -206, -206, 0, -206, 0, -206, -206, 0, 0, 0, -206, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, -206, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 416 - 0, 0, 0, 0, 0, 0, -884, 0, 0, 0, 0, 0, -884, 0, 0, -884, 0, 0, 0, -884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -884, -884, -884, -884, 0, 0, 0, 0, 0, 0, 0, -884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -884, 0, 0, 0, -884, 0, 0, 0, 0, -884, -884, -884, 0, -884, -884, + 0, 0, 0, 0, 0, 0, 0, 1233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 417 - -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, 0, -332, 0, -332, -332, -332, -332, -332, 0, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, 0, 0, 0, -332, -332, -332, -332, -332, -332, 0, -332, 0, 0, 0, 0, 0, 0, 0, 0, -332, 0, 0, -332, -332, 0, -332, 0, -332, -332, 0, 0, 0, -332, -332, 0, 0, 0, 0, 0, 0, 0, 0, 0, -332, -332, -332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 360, 1236, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 418 - -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, 0, -331, 0, -331, -331, -331, -331, -331, 0, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, 0, 0, 0, -331, -331, -331, -331, -331, -331, 0, -331, 0, 0, 0, 0, 0, 0, 0, 0, -331, 0, 0, -331, -331, 0, -331, 0, -331, -331, 0, 0, 0, -331, -331, 0, 0, 0, 0, 0, 0, 0, 0, 0, -331, -331, -331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 419 - -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, 0, -330, 0, -330, -330, -330, -330, -330, 0, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, 0, 0, 0, -330, -330, -330, -330, -330, -330, 0, -330, 0, 0, 0, 0, 0, 0, 0, 0, -330, 0, 0, -330, -330, 0, -330, 0, -330, -330, 0, 0, 0, -330, -330, 0, 0, 0, 0, 0, 0, 0, 0, 0, -330, -330, -330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 360, 1239, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 1073, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 0, 457, 458, // State 420 - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, 0, -422, 0, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, 0, 0, 0, -422, -422, -422, -422, -422, -422, 0, -422, 0, 0, 0, 0, 0, 0, 0, 0, -422, 0, 0, -422, -422, 0, -422, -422, -422, -422, 0, 0, 0, -422, -422, 0, 0, 0, 0, 0, 0, 0, 0, 0, -422, -422, -422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 421 - -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, 0, -136, 0, -136, -136, -136, -136, -136, 0, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, 0, 0, 0, -136, -136, -136, -136, -136, -136, 0, -136, 0, 0, 0, 0, 0, 0, 0, 0, -136, 0, 0, -136, -136, 0, -136, 0, -136, -136, 0, 0, 0, -136, -136, 0, 0, 0, 0, 0, 0, 0, 0, 0, -136, -136, -136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -136, + 0, 0, 0, 0, 0, 0, 0, -624, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 422 - -540, 0, 0, -540, 0, -540, 0, -540, 0, 0, -540, -540, 0, -540, -540, 0, -540, 0, 0, 0, 0, 0, -540, -540, -540, 0, -540, 0, 0, -540, 0, -540, 0, 0, 0, 0, -540, 0, -540, 0, 0, 0, 0, -540, 0, -540, 0, -540, 0, -540, 0, 0, 0, 0, 0, 0, 0, 0, -540, 0, 0, -540, -540, 0, -540, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -540, -540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -615, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 423 - -156, 0, 0, -156, 0, -156, 0, -156, 0, 0, -156, -156, 0, -156, -156, 0, -156, 0, 0, 0, 0, 0, -156, -156, -156, 0, -156, 0, 0, -156, 0, -156, 0, 0, 0, 0, -156, 0, -156, 0, 0, 0, 0, -156, 0, -156, 512, -156, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, -156, 0, 0, -156, -156, 0, -156, 0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -620, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 424 - -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, 0, -137, 0, -137, -137, -137, -137, -137, 0, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, 0, 0, 0, -137, -137, -137, -137, -137, -137, 0, -137, 0, 0, 0, 0, 0, 0, 0, 0, -137, 0, 0, -137, -137, 0, -137, 0, -137, -137, 0, 0, 0, -137, -137, 0, 0, 0, 0, 0, 0, 0, 0, 0, -137, -137, -137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -137, + 0, 0, 0, 0, 0, 0, 0, -621, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 425 - 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, -108, 0, 0, -108, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, -108, -108, -108, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, -108, 0, 0, 0, 0, -108, -108, -108, 0, -108, -108, + 0, 0, 0, 0, 0, 0, 0, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 426 - 0, 0, 0, 0, 0, 0, -149, 0, 0, 0, 0, 0, -149, 0, 0, -149, 0, 0, 0, -149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -149, -149, -149, -149, 0, 0, 0, 0, 0, 0, 0, -149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -149, 0, 0, 0, -149, 0, 0, 0, 0, -149, -149, -149, 0, -149, -149, + 0, 0, 0, 0, 0, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, // State 427 - 0, 0, 0, 0, 0, 0, -150, 0, 0, 0, 0, 0, -150, 0, 0, -150, 0, 0, 0, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, -150, -150, -150, 0, 0, 0, 0, 0, 0, 0, -150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -150, 0, 0, 0, -150, 0, 0, 0, 0, -150, -150, -150, 0, -150, -150, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 428 - -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, 0, -238, 0, -238, -238, -238, -238, -238, 0, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, 0, 0, 0, -238, -238, -238, -238, -238, -238, 0, -238, 0, 0, 0, 0, 0, 0, 0, 0, -238, 0, 0, -238, -238, 0, -238, 0, -238, -238, 0, 0, 0, -238, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, -238, -238, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, 0, -217, 0, -217, -217, -217, -217, -217, 0, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, 0, 0, 0, -217, -217, -217, -217, -217, -217, 0, -217, 0, 0, 0, 0, 0, 0, 0, 0, -217, 0, 0, -217, -217, 0, -217, 0, -217, -217, 0, 0, 0, -217, -217, 0, 0, 0, 0, 0, 0, 0, 0, 0, -217, -217, -217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, // State 429 - 0, 0, 0, 0, 0, 0, -304, 0, 0, 0, 0, 0, -304, 0, 0, -304, 0, 0, 0, -304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -304, -304, -304, -304, 0, 0, 0, 0, 0, 0, 0, -304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -304, 0, 0, 0, -304, 0, 0, 0, 0, -304, -304, -304, 0, -304, -304, + -966, -966, 0, -966, 21, -966, 0, -966, 0, 0, -966, -966, 0, -966, -966, 0, -966, 0, 0, 0, 0, 0, -966, -966, -966, 0, -966, -966, 0, -966, -966, -966, -966, -966, -966, 0, -966, -966, 0, -966, 0, 0, 0, 0, -966, -966, -966, -966, -966, 0, -966, 0, 0, 0, 0, 0, 0, 0, 0, -966, 0, 0, -966, -966, 0, -966, 0, -966, -966, 0, 0, 0, -966, -966, 0, 0, 0, 0, 0, 0, 0, 0, 0, -966, -966, -966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 430 - 0, 0, 0, 0, 0, 0, -305, 0, 0, 0, 0, 0, -305, 0, 0, -305, 0, 0, 0, -305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -305, -305, -305, -305, 0, 0, 0, 0, 0, 0, 0, -305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -305, 0, 0, 0, -305, 0, 0, 0, 0, -305, -305, -305, 0, -305, -305, + -588, 0, 0, -588, 0, -588, 0, -588, 0, 0, -588, -588, 0, -588, -588, 0, -588, 0, 0, 0, 0, 0, -588, -588, -588, 0, -588, 0, 0, -588, 0, -588, 0, 0, 0, 0, -588, 0, 0, -588, 0, 0, 0, 0, -588, 0, -588, 0, -588, 0, -588, 0, 0, 0, 0, 0, 0, 0, 0, -588, 0, 0, -588, -588, 0, -588, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -588, -588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 431 - 0, 0, 0, 0, 0, 0, -306, 0, 0, 0, 0, 0, -306, 0, 0, -306, 0, 0, 0, -306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -306, -306, -306, -306, 0, 0, 0, 0, 0, 0, 0, -306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -306, 0, 0, 0, -306, 0, 0, 0, 0, -306, -306, -306, 0, -306, -306, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, 0, -277, 0, -277, -277, -277, -277, -277, 0, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, 0, 0, 0, -277, -277, -277, -277, -277, -277, 0, -277, 0, 0, 0, 0, 0, 0, 0, 0, -277, 0, 0, -277, -277, 0, -277, 0, -277, -277, 0, 0, 0, -277, -277, 0, 0, 0, 0, 0, 0, 0, 0, 0, -277, -277, -277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 432 - 0, 0, 0, 0, 0, 0, -303, 0, 0, 0, 0, 0, -303, 0, 0, -303, 0, 0, 0, -303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -303, -303, -303, -303, 0, 0, 0, 0, 0, 0, 0, -303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -303, 0, 0, 0, -303, 0, 0, 0, 0, -303, -303, -303, 0, -303, -303, + -789, -789, -789, -789, -789, -789, 0, -789, -789, 26, -789, -789, -789, -789, -789, -789, -789, 0, 0, 0, -789, -789, -789, -789, -789, 0, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, 0, 0, 0, 0, -789, -789, -789, -789, -789, 0, -789, 0, 0, 0, 0, 0, 0, 0, 0, -789, 0, 0, -789, -789, 0, -789, 0, -789, -789, 0, 0, 0, -789, -789, 0, 0, 0, 0, 0, 0, 0, 0, 0, -789, -789, -789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 433 - 0, 0, 0, 0, 0, 0, -307, 0, 0, 0, 0, 0, -307, 0, 0, -307, 0, 0, 0, -307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -307, -307, -307, -307, 0, 0, 0, 0, 0, 0, 0, -307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -307, 0, 0, 0, -307, 0, 0, 0, 0, -307, -307, -307, 0, -307, -307, + -550, 0, 0, -550, 0, -550, 0, -550, 0, 0, -550, -550, 0, -550, -550, 0, -550, 0, 0, 0, 0, 0, -550, -550, -550, 0, -550, 0, 0, -550, 0, -550, 0, 0, 0, 0, -550, 0, 0, -550, 0, 0, 0, 0, -550, 0, -550, -550, -550, 0, -550, 0, 0, 0, 0, 0, 0, 0, 0, -550, 0, 0, -550, -550, 0, -550, 0, 0, 0, 0, 0, 0, 0, -550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -550, -550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 434 - 0, 0, 0, 0, 0, 0, -308, 0, 0, 0, 0, 0, -308, 0, 0, -308, 0, 0, 0, -308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -308, -308, -308, -308, 0, 0, 0, 0, 0, 0, 0, -308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -308, 0, 0, 0, -308, 0, 0, 0, 0, -308, -308, -308, 0, -308, -308, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, 0, -218, 0, -218, -218, -218, -218, -218, 0, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, 0, 0, 0, -218, -218, -218, -218, -218, -218, 0, -218, 0, 0, 0, 0, 0, 0, 0, 0, -218, 0, 0, -218, -218, 0, -218, 0, -218, -218, 0, 0, 0, -218, -218, 0, 0, 0, 0, 0, 0, 0, 0, 0, -218, -218, -218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 435 - 0, 0, 0, 0, 0, 0, -309, 0, 0, 0, 0, 0, -309, 0, 0, -309, 0, 0, 0, -309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -309, -309, -309, -309, 0, 0, 0, 0, 0, 0, 0, -309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -309, 0, 0, 0, -309, 0, 0, 0, 0, -309, -309, -309, 0, -309, -309, + -882, -882, -882, -882, -882, -882, 0, -882, -882, 0, -882, -882, -882, -882, -882, -882, -882, 0, 0, 0, -882, -882, -882, -882, -882, 0, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, 0, 0, 0, 0, -882, -882, -882, -882, -882, 0, -882, 0, 0, 0, 0, 0, 0, 0, 0, -882, 0, 0, -882, -882, 0, -882, 0, -882, -882, 0, 0, 0, -882, -882, 0, 0, 0, 0, 0, 0, 0, 0, 0, -882, -882, -882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 436 - 0, 0, 0, 0, 0, 0, -311, 0, 0, 0, 0, 0, -311, 0, 0, -311, 0, 0, 0, -311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -311, -311, -311, -311, 0, 0, 0, 0, 0, 0, 0, -311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, -311, 0, 0, 0, -311, 0, 0, 0, 0, -311, -311, -311, 0, -311, -311, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, 0, -219, 0, -219, -219, -219, -219, -219, 0, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, 0, 0, 0, -219, -219, -219, -219, -219, -219, 0, -219, 0, 0, 0, 0, 0, 0, 0, 0, -219, 0, 0, -219, -219, 0, -219, 0, -219, -219, 0, 0, 0, -219, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, -219, -219, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 437 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -887, 0, 0, -887, 0, -887, 0, -887, 0, 0, -887, -887, 0, -887, -887, 0, -887, 0, 0, 0, 0, 0, -887, -887, -887, 0, -887, 0, 0, -887, 0, -887, 0, 0, 0, 0, -887, 0, 0, -887, 0, 0, 0, 0, -887, 0, -887, 0, -887, 0, -887, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -887, -887, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -887, -887, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 438 - 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -162, 0, 0, -162, 0, -162, 0, -162, 0, 0, -162, -162, 0, -162, -162, 0, -162, 0, 0, 0, 0, 0, -162, -162, -162, 0, -162, 0, 0, -162, 0, -162, 0, 0, 0, 0, -162, 0, 0, -162, 0, 0, 0, 0, -162, 0, -162, 477, -162, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, -162, 0, 0, -162, -162, 0, -162, 0, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -162, -162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 439 - -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -465, 0, 0, -465, 0, -465, 0, -465, 0, 0, -465, -465, 0, -465, 30, 0, -465, 0, 0, 0, 0, 0, -465, -465, -465, 0, -465, 0, 0, -465, 0, -465, 0, 0, 0, 0, -465, 0, 0, -465, 0, 0, 0, 0, 0, 0, -465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 440 - 0, 0, 0, 0, 0, 0, -116, 0, 0, 0, 0, 0, -116, 0, 0, -116, 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, -116, 0, 0, 0, 0, 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, 0, 0, 0, -116, 0, 0, 0, 0, -116, -116, -116, 0, -116, -116, + -886, 0, 0, -886, 0, -886, 0, -886, 0, 0, -886, -886, 0, -886, -886, 0, -886, 0, 0, 0, 0, 0, -886, -886, -886, 0, -886, 0, 0, -886, 0, -886, 0, 0, 0, 0, -886, 0, 0, -886, 0, 0, 0, 0, -886, 0, -886, 0, -886, 0, -886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -886, -886, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -886, -886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 441 - 0, 0, 0, 0, 0, 0, -768, 0, 0, 0, 0, 0, -768, 0, 0, -768, 0, 0, 0, -768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -768, -768, -768, -768, 0, 0, 0, 0, 0, 0, 0, -768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -768, 0, 0, 0, -768, 0, 0, 0, 0, -768, -768, -768, 0, -768, -768, + -426, -426, -426, -426, -426, -426, 0, -426, -426, 0, -426, -426, -426, -426, -426, -426, -426, 0, 0, 0, -426, -426, -426, -426, -426, 0, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, 0, 0, 0, 0, -426, -426, -426, -426, -426, 0, -426, 0, 0, 0, 0, 0, 0, 0, 0, -426, 0, 0, -426, -426, 0, -426, 0, -426, -426, 0, 0, 0, -426, -426, 0, 0, 0, 0, 0, 0, 0, 0, 0, -426, -426, -426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 442 - 0, 0, 0, 0, 0, 0, -769, 0, 0, 0, 0, 0, -769, 0, 0, -769, 0, 0, 0, -769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -769, -769, -769, -769, 0, 0, 0, 0, 0, 0, 0, -769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -769, 0, 0, 0, -769, 0, 0, 0, 0, -769, -769, -769, 0, -769, -769, + -899, 0, 0, -899, 0, -899, 0, -899, 0, 0, -899, -899, 0, -899, -899, 0, -899, 0, 0, 0, 0, 0, -899, -899, -899, 0, -899, 0, 0, -899, 0, -899, 0, 0, 0, 0, -899, 0, 0, -899, 0, 0, 0, 0, 0, 0, -899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 443 - 0, 0, 0, 0, 0, 0, -494, 0, 0, 0, 0, 0, -494, 0, 0, -494, 0, 0, 0, -494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -494, -494, -494, -494, 0, 0, 0, 0, 0, 0, 0, -494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -494, 0, 0, 0, -494, 0, 0, 0, 0, -494, -494, -494, 0, -494, -494, + -898, 0, 0, -898, 0, -898, 0, -898, 0, 0, -898, -898, 0, -898, -898, 0, -898, 0, 0, 0, 0, 0, -898, -898, -898, 0, -898, 0, 0, -898, 0, -898, 0, 0, 0, 0, -898, 0, 0, -898, 0, 0, 0, 0, 0, 0, -898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 444 - 0, 0, 0, 0, 0, 0, -491, 0, 0, 0, 0, 0, -491, 0, 0, -491, 0, 0, 0, -491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -491, -491, -491, -491, 0, 0, 0, 0, 0, 0, 0, -491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -491, 0, 0, 0, -491, 0, 0, 0, 0, -491, -491, -491, 0, -491, -491, + -579, 0, 0, -579, 0, -579, 0, -579, 0, 0, -579, -579, 0, -579, -579, 0, -579, 0, 0, 0, 0, 0, -579, -579, -579, 0, -579, 0, 0, -579, 0, -579, 0, 0, 0, 0, -579, 0, 0, -579, 0, 0, 0, 0, 0, 0, -579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 445 - 0, 0, 0, 0, 0, 0, -492, 0, 0, 0, 0, 0, -492, 0, 0, -492, 0, 0, 0, -492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, -492, -492, -492, 0, 0, 0, 0, 0, 0, 0, -492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, 0, 0, 0, -492, 0, 0, 0, 0, -492, -492, -492, 0, -492, -492, + -409, -409, 0, -409, 0, -409, 0, -409, 0, 0, -409, -409, 0, -409, -409, 0, -409, 0, 0, 0, 0, 0, -409, -409, -409, 0, -409, -409, 0, -409, -409, -409, -409, -409, -409, 0, -409, 0, 0, -409, 0, 0, 0, 0, -409, 34, -409, -409, -409, 0, -409, 0, 0, 0, 0, 0, 0, 0, 0, -409, 0, 0, -409, -409, 0, -409, 0, -409, -409, 0, 0, 0, -409, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, -409, -409, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 446 - 0, 0, 0, 0, 0, 0, -493, 0, 0, 0, 0, 0, -493, 0, 0, -493, 0, 0, 0, -493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -493, -493, -493, -493, 0, 0, 0, 0, 0, 0, 0, -493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -493, 0, 0, 0, -493, 0, 0, 0, 0, -493, -493, -493, 0, -493, -493, + 0, 0, 0, 0, 0, 0, -936, 0, 0, 0, 0, 0, -936, 0, 0, -936, 0, 0, 0, -936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -936, -936, -936, -936, 0, 0, 0, 0, 0, 0, 0, -936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -936, 0, 0, 0, -936, 0, 0, 0, 0, -936, -936, -936, 0, -936, -936, // State 447 - 0, 0, 0, 0, 0, 0, -495, 0, 0, 0, 0, 0, -495, 0, 0, -495, 0, 0, 0, -495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -495, -495, -495, -495, 0, 0, 0, 0, 0, 0, 0, -495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -495, 0, 0, 0, -495, 0, 0, 0, 0, -495, -495, -495, 0, -495, -495, + 0, 0, 0, 0, 0, 0, -937, 0, 0, 0, 0, 0, -937, 0, 0, -937, 0, 0, 0, -937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -937, -937, -937, -937, 0, 0, 0, 0, 0, 0, 0, -937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -937, 0, 0, 0, -937, 0, 0, 0, 0, -937, -937, -937, 0, -937, -937, // State 448 - -379, -379, -379, -379, -379, -379, 0, -379, -379, 0, -379, -379, -379, -379, -379, -379, -379, 0, 0, 0, -379, -379, -379, -379, -379, 0, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, 0, 0, 0, 0, -379, -379, -379, -379, -379, 0, -379, 0, 0, 0, 0, 0, 0, 0, 0, -379, 0, 0, -379, -379, 0, -379, 0, -379, -379, 0, 0, 0, -379, -379, 0, 0, 0, 0, 0, 0, 0, 0, 0, -379, -379, -379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, 0, -245, 0, -245, -245, -245, -245, -245, 0, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, 0, 0, 0, -245, -245, -245, -245, -245, -245, 0, -245, 0, 0, 0, 0, 0, 0, 0, 0, -245, 0, 0, -245, -245, 0, -245, 0, -245, -245, 0, 0, 0, -245, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, -245, -245, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 449 - -183, -183, -183, 0, -183, 0, -183, -183, -183, -183, 0, 0, -183, 0, -183, -183, 0, 0, -183, 0, -183, -183, 0, 0, -183, 76, 0, -183, -183, 0, -183, 0, -183, -183, -183, -183, 0, -183, 0, 0, 0, 0, -183, -183, -183, 0, -183, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, -183, 0, -183, -183, 0, 0, 0, -183, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, 0, -243, 0, -243, -243, -243, -243, -243, 0, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, 0, 0, 0, -243, -243, -243, -243, -243, -243, 0, -243, 0, 0, 0, 0, 0, 0, 0, 0, -243, 0, 0, -243, -243, 0, -243, 0, -243, -243, 0, 0, 0, -243, -243, 0, 0, 0, 0, 0, 0, 0, 0, 0, -243, -243, -243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 450 - 0, 0, 0, 0, 0, 0, 0, -499, 0, 0, 0, 0, 0, 0, -499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, 0, -244, 0, -244, -244, -244, -244, -244, 0, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, 0, 0, 0, -244, -244, -244, -244, -244, -244, 0, -244, 0, 0, 0, 0, 0, 0, 0, 0, -244, 0, 0, -244, -244, 0, -244, 0, -244, -244, 0, 0, 0, -244, -244, 0, 0, 0, 0, 0, 0, 0, 0, 0, -244, -244, -244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 451 - 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, 0, -242, 0, -242, -242, -242, -242, -242, 0, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, 0, 0, 0, -242, -242, -242, -242, -242, -242, 0, -242, 0, 0, 0, 0, 0, 0, 0, 0, -242, 0, 0, -242, -242, 0, -242, 0, -242, -242, 0, 0, 0, -242, -242, 0, 0, 0, 0, 0, 0, 0, 0, 0, -242, -242, -242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 452 - 0, 0, 0, 0, 0, 0, 0, -500, 0, 0, 0, 0, 0, 0, -500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -938, 0, 0, 0, 0, 0, -938, 0, 0, -938, 0, 0, 0, -938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -938, -938, -938, -938, 0, 0, 0, 0, 0, 0, 0, -938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -938, 0, 0, 0, -938, 0, 0, 0, 0, -938, -938, -938, 0, -938, -938, // State 453 - 0, 0, 0, 0, 0, 0, 0, -530, 0, 0, 0, 0, 0, 0, -530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, 0, -374, 0, -374, -374, -374, -374, -374, 0, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, 0, 0, 0, -374, -374, -374, -374, -374, -374, 0, -374, 0, 0, 0, 0, 0, 0, 0, 0, -374, 0, 0, -374, -374, 0, -374, 0, -374, -374, 0, 0, 0, -374, -374, 0, 0, 0, 0, 0, 0, 0, 0, 0, -374, -374, -374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 454 - 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, 0, -373, 0, -373, -373, -373, -373, -373, 0, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, 0, 0, 0, -373, -373, -373, -373, -373, -373, 0, -373, 0, 0, 0, 0, 0, 0, 0, 0, -373, 0, 0, -373, -373, 0, -373, 0, -373, -373, 0, 0, 0, -373, -373, 0, 0, 0, 0, 0, 0, 0, 0, 0, -373, -373, -373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 455 - -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, 0, -197, 0, -197, -197, -197, -197, -197, 0, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, 0, 0, 0, -197, -197, -197, -197, -197, -197, 0, -197, 0, 0, 0, 0, 0, 0, 0, 0, -197, 0, 0, -197, -197, 0, -197, 0, -197, -197, 0, 0, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, 0, -372, 0, -372, -372, -372, -372, -372, 0, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, 0, 0, 0, -372, -372, -372, -372, -372, -372, 0, -372, 0, 0, 0, 0, 0, 0, 0, 0, -372, 0, 0, -372, -372, 0, -372, 0, -372, -372, 0, 0, 0, -372, -372, 0, 0, 0, 0, 0, 0, 0, 0, 0, -372, -372, -372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 456 - -790, 0, 0, -790, 0, -790, 0, -790, 0, 0, -790, -790, 0, -790, -790, 0, -790, 0, 0, 0, 0, 0, -790, -790, -790, 0, -790, 0, 0, -790, 0, -790, 0, 0, 0, 0, -790, 0, -790, 0, 0, 0, 0, -790, 0, -790, 0, 0, 0, -790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -790, 0, 0, 0, 0, -790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, -790, -790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, 0, -468, 0, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, 0, 0, 0, -468, -468, -468, -468, -468, -468, 0, -468, 0, 0, 0, 0, 0, 0, 0, 0, -468, 0, 0, -468, -468, 0, -468, -468, -468, -468, 0, 0, 0, -468, -468, 0, 0, 0, 0, 0, 0, 0, 0, 0, -468, -468, -468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 457 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, 0, -139, 0, -139, -139, -139, -139, -139, 0, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, 0, 0, 0, -139, -139, -139, -139, -139, -139, 0, -139, 0, 0, 0, 0, 0, 0, 0, 0, -139, 0, 0, -139, -139, 0, -139, 0, -139, -139, 0, 0, 0, -139, -139, 0, 0, 0, 0, 0, 0, 0, 0, 0, -139, -139, -139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -139, // State 458 - -497, 0, 0, 0, 0, 0, 0, -497, 0, 0, 0, 0, 0, 0, -497, 0, 0, 0, 0, 0, 0, 0, 0, 0, -497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -497, 0, 0, 0, 0, 0, -497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -587, 0, 0, -587, 0, -587, 0, -587, 0, 0, -587, -587, 0, -587, -587, 0, -587, 0, 0, 0, 0, 0, -587, -587, -587, 0, -587, 0, 0, -587, 0, -587, 0, 0, 0, 0, -587, 0, 0, -587, 0, 0, 0, 0, -587, 0, -587, 0, -587, 0, -587, 0, 0, 0, 0, 0, 0, 0, 0, -587, 0, 0, -587, -587, 0, -587, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -587, -587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 459 - 0, 0, 0, 0, 0, 0, 0, -847, 0, 0, 0, 0, 0, 0, -847, 0, 0, 0, 0, 0, 0, 0, 0, 0, -847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -847, 0, 0, 0, 0, 0, -847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -161, 0, 0, -161, 0, -161, 0, -161, 0, 0, -161, -161, 0, -161, -161, 0, -161, 0, 0, 0, 0, 0, -161, -161, -161, 0, -161, 0, 0, -161, 0, -161, 0, 0, 0, 0, -161, 0, 0, -161, 0, 0, 0, 0, -161, 0, -161, 569, -161, 0, -161, 0, 0, 0, 0, 0, 0, 0, 0, -161, 0, 0, -161, -161, 0, -161, 0, 0, 0, 0, 0, 0, 0, -161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -161, -161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 460 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, 0, -140, 0, -140, -140, -140, -140, -140, 0, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, 0, 0, 0, -140, -140, -140, -140, -140, -140, 0, -140, 0, 0, 0, 0, 0, 0, 0, 0, -140, 0, 0, -140, -140, 0, -140, 0, -140, -140, 0, 0, 0, -140, -140, 0, 0, 0, 0, 0, 0, 0, 0, 0, -140, -140, -140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -140, // State 461 - 0, 0, 0, 0, 0, 0, 0, -848, 0, 0, 0, 0, 0, 0, -848, 0, 0, 0, 0, 0, 0, 0, 0, 0, -848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -848, 0, 0, 0, 0, 0, -848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -111, 0, 0, 0, 0, 0, -111, 0, 0, -111, 0, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, -111, -111, -111, 0, 0, 0, 0, 0, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, 0, 0, -111, 0, 0, 0, 0, -111, -111, -111, 0, -111, -111, // State 462 - -498, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -152, 0, 0, 0, 0, 0, -152, 0, 0, -152, 0, 0, 0, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, -152, -152, -152, 0, 0, 0, 0, 0, 0, 0, -152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152, 0, 0, 0, -152, 0, 0, 0, 0, -152, -152, -152, 0, -152, -152, // State 463 - -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, 0, -185, 0, -185, -185, -185, -185, -185, 0, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, 0, 0, 0, -185, -185, -185, -185, -185, -185, 0, -185, 0, 0, 0, 0, 0, 0, 0, 0, -185, 0, 0, -185, -185, 0, -185, 0, -185, -185, 0, 0, 0, -185, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, -185, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -153, 0, 0, 0, 0, 0, -153, 0, 0, -153, 0, 0, 0, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, -153, -153, -153, 0, 0, 0, 0, 0, 0, 0, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -153, 0, 0, 0, -153, 0, 0, 0, 0, -153, -153, -153, 0, -153, -153, // State 464 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -885, 0, 0, 0, 0, 0, 0, 0, 0, 0, -885, 0, 0, 0, 0, 0, 0, -885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, 0, -278, 0, -278, -278, -278, -278, -278, 0, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, 0, 0, 0, -278, -278, -278, -278, -278, -278, 0, -278, 0, 0, 0, 0, 0, 0, 0, 0, -278, 0, 0, -278, -278, 0, -278, 0, -278, -278, 0, 0, 0, -278, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, -278, -278, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 465 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, -709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -346, 0, 0, 0, 0, 0, -346, 0, 0, -346, 0, 0, 0, -346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -346, -346, -346, -346, 0, 0, 0, 0, 0, 0, 0, -346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -346, 0, 0, 0, -346, 0, 0, 0, 0, -346, -346, -346, 0, -346, -346, // State 466 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, -683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -347, 0, 0, 0, 0, 0, -347, 0, 0, -347, 0, 0, 0, -347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -347, -347, -347, -347, 0, 0, 0, 0, 0, 0, 0, -347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -347, 0, 0, 0, -347, 0, 0, 0, 0, -347, -347, -347, 0, -347, -347, // State 467 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -526, 0, 0, 0, 0, 0, 0, 0, 0, 0, -526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -348, 0, 0, 0, 0, 0, -348, 0, 0, -348, 0, 0, 0, -348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -348, -348, -348, -348, 0, 0, 0, 0, 0, 0, 0, -348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -348, 0, 0, 0, -348, 0, 0, 0, 0, -348, -348, -348, 0, -348, -348, // State 468 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -345, 0, 0, 0, 0, 0, -345, 0, 0, -345, 0, 0, 0, -345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -345, -345, -345, -345, 0, 0, 0, 0, 0, 0, 0, -345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -345, 0, 0, 0, -345, 0, 0, 0, 0, -345, -345, -345, 0, -345, -345, // State 469 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -546, 0, 0, 0, 0, 0, 0, 0, 0, 0, -546, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -349, 0, 0, 0, 0, 0, -349, 0, 0, -349, 0, 0, 0, -349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -349, -349, -349, -349, 0, 0, 0, 0, 0, 0, 0, -349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -349, 0, 0, 0, -349, 0, 0, 0, 0, -349, -349, -349, 0, -349, -349, // State 470 - -502, 0, 0, -502, 0, -502, 0, -502, 0, 0, -502, -502, 0, -502, -502, 0, -502, 0, 0, 0, 0, 0, -502, -502, -502, 0, -502, 0, 0, -502, 0, -502, 0, 0, 0, 0, -502, 0, -502, 0, 0, 0, 0, -502, 0, -502, -502, -502, 0, -502, 0, 0, 0, 0, 0, 0, 0, 0, -502, 0, 0, -502, -502, 0, -502, 0, 0, 0, 0, 0, 0, 0, -502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -502, -502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -350, 0, 0, 0, 0, 0, -350, 0, 0, -350, 0, 0, 0, -350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -350, -350, -350, -350, 0, 0, 0, 0, 0, 0, 0, -350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -350, 0, 0, 0, -350, 0, 0, 0, 0, -350, -350, -350, 0, -350, -350, // State 471 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -351, 0, 0, 0, 0, 0, -351, 0, 0, -351, 0, 0, 0, -351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -351, -351, -351, -351, 0, 0, 0, 0, 0, 0, 0, -351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -351, 0, 0, 0, -351, 0, 0, 0, 0, -351, -351, -351, 0, -351, -351, // State 472 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -353, 0, 0, 0, 0, 0, -353, 0, 0, -353, 0, 0, 0, -353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -353, -353, -353, -353, 0, 0, 0, 0, 0, 0, 0, -353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, -353, 0, 0, 0, -353, 0, 0, 0, 0, -353, -353, -353, 0, -353, -353, // State 473 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 474 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 475 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 476 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -119, 0, 0, 0, 0, 0, -119, 0, 0, -119, 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, -119, 0, 0, 0, 0, 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, 0, 0, 0, -119, 0, 0, 0, 0, -119, -119, -119, 0, -119, -119, // State 477 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -819, 0, 0, 0, 0, 0, -819, 0, 0, -819, 0, 0, 0, -819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -819, -819, -819, -819, 0, 0, 0, 0, 0, 0, 0, -819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -819, 0, 0, 0, -819, 0, 0, 0, 0, -819, -819, -819, 0, -819, -819, // State 478 - -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, 0, -202, 0, -202, -202, -202, -202, -202, 0, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, 0, 0, 0, -202, -202, -202, -202, -202, -202, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, -202, -202, 0, -202, 0, -202, -202, 0, 0, 0, -202, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, -202, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -820, 0, 0, 0, 0, 0, -820, 0, 0, -820, 0, 0, 0, -820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -820, -820, -820, -820, 0, 0, 0, 0, 0, 0, 0, -820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -820, 0, 0, 0, -820, 0, 0, 0, 0, -820, -820, -820, 0, -820, -820, // State 479 - -787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -541, 0, 0, 0, 0, 0, -541, 0, 0, -541, 0, 0, 0, -541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -541, -541, -541, -541, 0, 0, 0, 0, 0, 0, 0, -541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -541, 0, 0, 0, -541, 0, 0, 0, 0, -541, -541, -541, 0, -541, -541, // State 480 - -324, 0, 0, 0, 0, 0, -324, 0, -324, 0, 0, 0, -324, 0, 0, -324, 0, 0, 0, -324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -324, 0, -324, -324, -324, -324, 0, 0, 0, 0, 0, -324, -324, -324, -324, 0, -324, -324, -324, -324, 0, 0, 0, 0, -324, -324, -324, -324, -324, 0, 0, -324, -324, -324, -324, 0, -324, -324, -324, -324, -324, -324, -324, -324, -324, 0, 0, 0, -324, -324, 0, 0, 0, -324, -324, -324, -324, -324, -324, + 0, 0, 0, 0, 0, 0, -538, 0, 0, 0, 0, 0, -538, 0, 0, -538, 0, 0, 0, -538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -538, -538, -538, -538, 0, 0, 0, 0, 0, 0, 0, -538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -538, 0, 0, 0, -538, 0, 0, 0, 0, -538, -538, -538, 0, -538, -538, // State 481 - -744, 0, 0, 0, 0, 0, -744, 0, -744, 0, 0, 0, -744, 0, 0, -744, 0, 0, 0, -744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -744, 0, -744, -744, -744, -744, 0, 0, 0, 0, 0, -744, -744, -744, -744, 0, -744, -744, -744, -744, 0, 0, 0, 0, -744, -744, -744, -744, -744, 0, 0, -744, -744, -744, -744, 0, -744, -744, -744, -744, -744, -744, -744, -744, -744, 0, 0, 0, -744, 0, 0, 0, 0, -744, -744, -744, -744, -744, -744, + 0, 0, 0, 0, 0, 0, -539, 0, 0, 0, 0, 0, -539, 0, 0, -539, 0, 0, 0, -539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -539, -539, -539, -539, 0, 0, 0, 0, 0, 0, 0, -539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -539, 0, 0, 0, -539, 0, 0, 0, 0, -539, -539, -539, 0, -539, -539, // State 482 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -339, 0, 0, 0, -339, 0, -339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -540, 0, 0, 0, 0, 0, -540, 0, 0, -540, 0, 0, 0, -540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -540, -540, -540, -540, 0, 0, 0, 0, 0, 0, 0, -540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -540, 0, 0, 0, -540, 0, 0, 0, 0, -540, -540, -540, 0, -540, -540, // State 483 - -782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -542, 0, 0, 0, 0, 0, -542, 0, 0, -542, 0, 0, 0, -542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -542, -542, -542, -542, 0, 0, 0, 0, 0, 0, 0, -542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -542, 0, 0, 0, -542, 0, 0, 0, 0, -542, -542, -542, 0, -542, -542, // State 484 - -780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -425, -425, -425, -425, -425, -425, 0, -425, -425, 0, -425, -425, -425, -425, -425, -425, -425, 0, 0, 0, -425, -425, -425, -425, -425, 0, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, 0, 0, 0, 0, -425, -425, -425, -425, -425, 0, -425, 0, 0, 0, 0, 0, 0, 0, 0, -425, 0, 0, -425, -425, 0, -425, 0, -425, -425, 0, 0, 0, -425, -425, 0, 0, 0, 0, 0, 0, 0, 0, 0, -425, -425, -425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 485 - -783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -219, -219, -219, 0, -219, 0, -219, -219, -219, -219, 0, 0, -219, 0, -219, -219, 0, 0, -219, 0, -219, -219, 0, 0, -219, 87, 0, -219, -219, 0, -219, 0, -219, -219, -219, -219, 0, 0, -219, 0, 0, 0, 0, -219, -219, -219, 0, -219, -219, 0, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -219, 0, 0, -219, 0, -219, -219, 0, 0, 0, -219, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, -219, 0, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 486 - -320, 0, 0, 0, 0, 0, -320, 0, -320, 0, 0, 0, -320, 0, 0, -320, 0, 0, 0, -320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -320, 0, -320, -320, -320, -320, 0, 0, 0, 0, 0, -320, -320, -320, -320, 0, -320, -320, -320, -320, 0, 0, 0, 0, -320, -320, -320, -320, -320, 0, 0, -320, -320, -320, -320, 0, -320, -320, -320, -320, -320, -320, -320, -320, -320, 0, 0, 0, -320, -320, 0, 0, 0, -320, -320, -320, -320, -320, -320, + 0, 0, 0, 0, 0, 0, 0, -546, 0, 0, 0, 0, 0, 0, -546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 487 - -323, 0, 0, 0, 0, 0, -323, 0, -323, 0, 0, 0, -323, 0, 0, -323, 0, 0, 0, -323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -323, 0, -323, -323, -323, -323, 0, 0, 0, 0, 0, -323, -323, -323, -323, 0, -323, -323, -323, -323, 0, 0, 0, 0, -323, -323, -323, -323, -323, 0, 0, -323, -323, -323, -323, 0, -323, -323, -323, -323, -323, -323, -323, -323, -323, 0, 0, 0, -323, -323, 0, 0, 0, -323, -323, -323, -323, -323, -323, + 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 488 - -785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -547, 0, 0, 0, 0, 0, 0, -547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 489 - -318, 0, 0, 0, 0, 0, -318, 0, -318, 0, 0, 0, -318, 0, 0, -318, 0, 0, 0, -318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -318, 0, -318, -318, -318, -318, 0, 0, 0, 0, 0, -318, -318, -318, -318, 0, -318, -318, -318, -318, 0, 0, 0, 0, -318, -318, -318, -318, -318, 0, 0, -318, -318, -318, -318, 0, -318, -318, -318, -318, -318, -318, -318, -318, -318, 0, 0, 0, -318, -318, 0, 0, 0, -318, -318, -318, -318, -318, -318, + 0, 0, 0, 0, 0, 0, 0, -577, 0, 0, 0, 0, 0, 0, -577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 490 - -784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 491 - -789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, 0, -233, 0, -233, -233, -233, -233, -233, 0, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, 0, 0, 0, -233, -233, -233, -233, -233, -233, 0, -233, 0, 0, 0, 0, 0, 0, 0, 0, -233, 0, 0, -233, -233, 0, -233, 0, -233, -233, 0, 0, 0, -233, -233, 0, 0, 0, 0, 0, 0, 0, 0, 0, -233, -233, -233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 492 - -317, 0, 0, 0, 0, 0, -317, 0, -317, 0, 0, 0, -317, 0, 0, -317, 0, 0, 0, -317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -317, 0, -317, -317, -317, -317, 0, 0, 0, 0, 0, -317, -317, -317, -317, 0, -317, -317, -317, -317, 0, 0, 0, 0, -317, -317, -317, -317, -317, 0, 0, -317, -317, -317, -317, 0, -317, -317, -317, -317, -317, -317, -317, -317, -317, 0, 0, 0, -317, -317, 0, 0, 0, -317, -317, -317, -317, -317, -317, + -842, 0, 0, -842, 0, -842, 0, -842, 0, 0, -842, -842, 0, -842, -842, 0, -842, 0, 0, 0, 0, 0, -842, -842, -842, 0, -842, 0, 0, -842, 0, -842, 0, 0, 0, 0, -842, 0, 0, -842, 0, 0, 0, 0, -842, 0, -842, 0, 0, 0, -842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -842, 0, 0, 0, 0, -842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, -842, -842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 493 - -786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 494 - -781, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -781, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -544, 0, 0, 0, 0, 0, 0, -544, 0, 0, 0, 0, 0, 0, -544, 0, 0, 0, 0, 0, 0, 0, 0, 0, -544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -544, 0, 0, 0, 0, 0, -544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 495 - -388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 496 - 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 497 - -844, 0, 0, -844, 0, -844, 0, 0, 0, 0, -844, -844, 0, -844, -844, 0, -844, 0, 0, 0, 0, 0, -844, -844, 96, 0, -844, 0, 0, -844, 0, -844, 0, 0, 0, 0, -844, 0, -844, 0, 0, 0, 0, 0, 0, -844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -902, 0, 0, 0, 0, 0, 0, -902, 0, 0, 0, 0, 0, 0, 0, 0, 0, -902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -902, 0, 0, 0, 0, 0, -902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 498 - -321, 0, 0, 0, 0, 0, -321, 0, -321, 0, 0, 0, -321, 0, 0, -321, 0, 0, 0, -321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -321, 0, -321, -321, -321, -321, 0, 0, 0, 0, 0, -321, -321, -321, -321, 0, -321, -321, -321, -321, 0, 0, 0, 0, -321, -321, -321, -321, -321, 0, 0, -321, -321, -321, -321, 0, -321, -321, -321, -321, -321, -321, -321, -321, -321, 0, 0, 0, -321, -321, 0, 0, 0, -321, -321, -321, -321, -321, -321, + -545, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 499 - -788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, 0, -221, 0, -221, -221, -221, -221, -221, 0, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, 0, 0, 0, -221, -221, -221, -221, -221, -221, 0, -221, 0, 0, 0, 0, 0, 0, 0, 0, -221, 0, 0, -221, -221, 0, -221, 0, -221, -221, 0, 0, 0, -221, -221, 0, 0, 0, 0, 0, 0, 0, 0, 0, -221, -221, -221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 500 - -319, 0, 0, 0, 0, 0, -319, 0, -319, 0, 0, 0, -319, 0, 0, -319, 0, 0, 0, -319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -319, 0, -319, -319, -319, -319, 0, 0, 0, 0, 0, -319, -319, -319, -319, 0, -319, -319, -319, -319, 0, 0, 0, 0, -319, -319, -319, -319, -319, 0, 0, -319, -319, -319, -319, 0, -319, -319, -319, -319, -319, -319, -319, -319, -319, 0, 0, 0, -319, -319, 0, 0, 0, -319, -319, -319, -319, -319, -319, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -939, 0, 0, 0, 0, 0, 0, 0, 0, 0, -939, 0, 0, 0, 0, 0, 0, -939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 501 - -322, 0, 0, 0, 0, 0, -322, 0, -322, 0, 0, 0, -322, 0, 0, -322, 0, 0, 0, -322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -322, 0, -322, -322, -322, -322, 0, 0, 0, 0, 0, -322, -322, -322, -322, 0, -322, -322, -322, -322, 0, 0, 0, 0, -322, -322, -322, -322, -322, 0, 0, -322, -322, -322, -322, 0, -322, -322, -322, -322, -322, -322, -322, -322, -322, 0, 0, 0, -322, -322, 0, 0, 0, -322, -322, -322, -322, -322, -322, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, -756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 502 - -387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, -730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 503 - -749, 0, 0, 0, 0, 0, -749, 0, -749, 0, 0, 0, -749, 0, 0, -749, 0, 0, 0, -749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -749, 0, -749, -749, -749, -749, 0, 0, 0, 0, 0, -749, -749, -749, -749, 0, -749, -749, -749, -749, 0, 0, 0, 0, -749, -749, -749, -749, -749, 0, 0, -749, -749, -749, -749, 0, -749, -749, -749, -749, -749, -749, -749, -749, -749, 0, 0, 0, -749, 0, 0, 0, 0, -749, -749, -749, -749, -749, -749, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -573, 0, 0, 0, 0, 0, 0, 0, 0, 0, -573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 504 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 505 - -383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -593, 0, 0, 0, 0, 0, 0, 0, 0, 0, -593, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 506 - -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -549, 0, 0, -549, 0, -549, 0, -549, 0, 0, -549, -549, 0, -549, -549, 0, -549, 0, 0, 0, 0, 0, -549, -549, -549, 0, -549, 0, 0, -549, 0, -549, 0, 0, 0, 0, -549, 0, 0, -549, 0, 0, 0, 0, -549, 0, -549, -549, -549, 0, -549, 0, 0, 0, 0, 0, 0, 0, 0, -549, 0, 0, -549, -549, 0, -549, 0, 0, 0, 0, 0, 0, 0, -549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -549, -549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 507 - -730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 508 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 509 - -453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 510 - 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, -109, 0, 0, -109, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, -109, -109, -109, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, -109, 0, 0, 0, 0, -109, -109, -109, 0, -109, -109, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 511 - 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, -117, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, -117, 0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, 0, -117, -117, -117, 0, -117, -117, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 512 - 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 513 - 0, -183, -183, 0, -183, 0, -183, -183, -183, -183, 0, 0, -183, 0, -183, -183, 0, 0, -183, 0, -183, -183, 0, 0, 0, 76, 0, -183, -183, 0, -183, 120, -183, -183, -183, -183, 0, -183, 0, 0, 0, 0, -183, 0, -183, 0, -183, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, -183, 0, -183, -183, 0, 0, 0, -183, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 514 - -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, 0, -161, 0, -161, -161, -161, -161, -161, 0, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, 0, 0, 0, -161, -161, -161, -161, -161, -161, 0, -161, 0, 0, 0, 0, 0, 0, 0, 0, -161, 0, 0, -161, -161, 0, -161, 0, -161, -161, 0, 0, 0, -161, -161, 0, 0, 0, 0, 0, 0, 0, 0, 0, -161, -161, -161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, 0, -238, 0, -238, -238, -238, -238, -238, 0, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, 0, 0, 0, -238, -238, -238, -238, -238, -238, 0, -238, 0, 0, 0, 0, 0, 0, 0, 0, -238, 0, 0, -238, -238, 0, -238, 0, -238, -238, 0, 0, 0, -238, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, -238, -238, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 515 - -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, 0, -240, 0, -240, -240, -240, -240, -240, 0, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, 0, 0, 0, -240, -240, -240, -240, -240, -240, 0, -240, 0, 0, 0, 0, 0, 0, 0, 0, -240, 0, 0, -240, -240, 0, -240, 0, -240, -240, 0, 0, 0, -240, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, -240, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -217, -217, -217, -217, -217, -217, -217, 0, -217, -217, -217, -217, -217, -217, -217, -217, -217, 0, -217, 0, -217, -217, -217, -217, -217, 0, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -188, -217, -217, 0, 0, 0, -217, 0, -217, -217, -217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -217, 0, -217, -217, 0, 0, 0, -217, -217, 0, 0, 0, 0, 0, 0, 0, 0, 0, -217, -217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, // State 516 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 517 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -966, -966, 0, -966, 102, -966, 0, 0, 0, 0, -966, -966, 0, -966, -966, 0, -966, 0, 0, 0, 0, 0, -966, -966, -966, 0, -966, -966, 0, -966, -966, -966, -966, -966, -966, 0, -966, 0, 0, -966, 0, 0, 0, 0, 0, -966, -966, -966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -966, 0, -966, -966, 0, 0, 0, -966, -966, 0, 0, 0, 0, 0, 0, 0, 0, 0, -966, -966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 518 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 519 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 520 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 521 - -739, -739, -739, -739, -739, -739, 0, -739, -739, 0, -739, -739, -739, -739, -739, -739, -739, 0, 0, 0, -739, -739, -739, -739, -739, 0, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, 0, 0, 0, 0, -739, -739, -739, -739, -739, 0, -739, 0, 0, 0, 0, 0, 0, 0, 0, -739, 0, 0, -739, -739, 0, -739, 0, -739, -739, 0, 0, 0, -739, -739, 0, 0, 0, 0, 0, 0, 0, 0, 0, -739, -739, -739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 522 - -139, -139, 0, -139, 0, -139, 0, -139, 0, 0, -139, -139, 0, -139, -139, 0, -139, 0, 0, 0, 0, 0, -139, -139, -139, 0, -139, -139, 0, -139, -139, -139, -139, -139, -139, 0, -139, 0, -139, 0, 0, 0, 0, -139, 0, -139, -139, -139, 0, -139, 0, 0, 0, 0, 0, 0, 0, 0, -139, 0, 0, -139, -139, 0, -139, 0, -139, -139, 0, 0, 0, -139, -139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, -139, -139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 523 - 0, 0, 0, 0, 0, 0, -312, 0, 0, 0, 0, 0, -312, 0, 0, -312, 0, 0, 0, -312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -312, -312, -312, -312, 0, 0, 0, 0, 0, 0, 0, -312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -312, 0, 0, 0, -312, 0, 0, 0, 0, -312, -312, -312, 0, -312, -312, + -789, -789, -789, -789, -789, -789, 0, 0, -789, 106, -789, -789, -789, -789, -789, -789, -789, 0, 0, 0, -789, -789, -789, -789, -789, 0, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, 0, -789, -789, 0, 0, 0, 0, 0, -789, -789, -789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -789, 0, -789, -789, 0, 0, 0, -789, -789, 0, 0, 0, 0, 0, 0, 0, 0, 0, -789, -789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 524 - 0, 0, 0, 0, 0, 0, -310, 0, 0, 0, 0, 0, -310, 0, 0, -310, 0, 0, 0, -310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -310, -310, -310, -310, 0, 0, 0, 0, 0, 0, 0, -310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -310, 0, 0, 0, -310, 0, 0, 0, 0, -310, -310, -310, 0, -310, -310, + -366, 0, 0, 0, 0, 0, -366, 0, -366, 0, 0, 0, -366, 0, 0, -366, 0, 0, 0, -366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -366, 0, -366, -366, -366, -366, 0, 0, 0, 0, 0, -366, -366, -366, -366, 0, -366, -366, -366, -366, 0, 0, 0, 0, -366, -366, -366, -366, -366, 0, 0, -366, -366, -366, -366, 0, -366, -366, -366, -366, -366, -366, -366, -366, -366, 0, 0, 0, -366, -366, 0, 0, 0, -366, -366, -366, -366, -366, -366, // State 525 - -364, -364, 0, -364, 0, -364, 0, -364, 0, 0, -364, -364, 0, -364, -364, 0, -364, 0, 0, 0, 0, 0, -364, -364, -364, 0, -364, -364, 0, -364, -364, -364, -364, -364, -364, 0, -364, 0, -364, 0, 0, 0, 0, -364, 34, -364, -364, -364, 0, -364, 0, 0, 0, 0, 0, 0, 0, 0, -364, 0, 0, -364, -364, 0, -364, 0, -364, -364, 0, 0, 0, -364, -364, 0, 0, 0, 0, 0, 0, 0, 0, 0, -364, -364, -364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -793, 0, 0, 0, 0, 0, -793, 0, -793, 0, 0, 0, -793, 0, 0, -793, 0, 0, 0, -793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -793, 0, -793, -793, -793, -793, 0, 0, 0, 0, 0, -793, -793, -793, -793, 0, -793, -793, -793, -793, 0, 0, 0, 0, -793, -793, -793, -793, -793, 0, 0, -793, -793, -793, -793, 0, -793, -793, -793, -793, -793, -793, -793, -793, -793, 0, 0, 0, -793, 0, 0, 0, 0, -793, -793, -793, -793, -793, -793, // State 526 - -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -218, -218, -218, -218, -218, -218, -218, 0, -218, -218, -218, -218, -218, -218, -218, -218, -218, 0, -218, 0, -218, -218, -218, -218, -218, 0, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -189, -218, -218, 0, 0, 0, -218, 0, -218, -218, -218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -218, 0, -218, -218, 0, 0, 0, -218, -218, 0, 0, 0, 0, 0, 0, 0, 0, 0, -218, -218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 527 - -533, 0, 0, -533, 0, -533, 0, -533, 0, 0, -533, -533, 0, -533, -533, 0, -533, 0, 0, 0, 0, 0, -533, -533, -533, 0, -533, 0, 0, -533, 0, -533, 0, 0, 0, 0, -533, 0, -533, 0, 0, 0, 0, 0, 0, -533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -381, 0, 0, 0, -381, 0, -381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 528 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 529 - -827, -827, -827, -827, -827, -827, 0, -827, -827, 0, -827, -827, -827, -827, -827, -827, -827, 0, 0, 0, -827, -827, -827, -827, -827, 0, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, 0, 0, 0, 0, -827, -827, -827, -827, -827, 0, -827, 0, 0, 0, 0, 0, 0, 0, 0, -827, 0, 0, -827, -827, 0, -827, 0, -827, -827, 0, 0, 0, -827, -827, 0, 0, 0, 0, 0, 0, 0, 0, 0, -827, -827, -827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 530 - -909, -909, 0, -909, 21, -909, 0, -909, 0, 0, -909, -909, 0, -909, -909, 0, -909, 0, 0, 0, 0, 0, -909, -909, -909, 0, -909, -909, 0, -909, -909, -909, -909, -909, -909, 0, -909, 0, -909, 0, 0, 0, 0, -909, -909, -909, -909, -909, 0, -909, 0, 0, 0, 0, 0, 0, 0, 0, -909, 0, 0, -909, -909, 0, -909, 0, -909, -909, 0, 0, 0, -909, -909, 0, 0, 0, 0, 0, 0, 0, 0, 0, -909, -909, -909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 531 - 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 532 - 0, 0, 0, 0, 0, 0, 0, -774, 0, 0, 0, 0, 0, 0, -774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -774, 0, 0, 0, 0, 0, -774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -362, 0, 0, 0, 0, 0, -362, 0, -362, 0, 0, 0, -362, 0, 0, -362, 0, 0, 0, -362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -362, 0, -362, -362, -362, -362, 0, 0, 0, 0, 0, -362, -362, -362, -362, 0, -362, -362, -362, -362, 0, 0, 0, 0, -362, -362, -362, -362, -362, 0, 0, -362, -362, -362, -362, 0, -362, -362, -362, -362, -362, -362, -362, -362, -362, 0, 0, 0, -362, -362, 0, 0, 0, -362, -362, -362, -362, -362, -362, // State 533 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -365, 0, 0, 0, 0, 0, -365, 0, -365, 0, 0, 0, -365, 0, 0, -365, 0, 0, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -365, 0, -365, -365, -365, -365, 0, 0, 0, 0, 0, -365, -365, -365, -365, 0, -365, -365, -365, -365, 0, 0, 0, 0, -365, -365, -365, -365, -365, 0, 0, -365, -365, -365, -365, 0, -365, -365, -365, -365, -365, -365, -365, -365, -365, 0, 0, 0, -365, -365, 0, 0, 0, -365, -365, -365, -365, -365, -365, // State 534 - 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 535 - -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, 0, -194, 0, -194, -194, -194, -194, -194, 0, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, 0, 0, 0, -194, -194, -194, -194, -194, -194, 0, -194, 0, 0, 0, 0, 0, 0, 0, 0, -194, 0, 0, -194, -194, 0, -194, 0, -194, -194, 0, 0, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -219, -219, -219, -219, -219, -219, -219, 0, -219, -219, -219, -219, -219, -219, -219, -219, -219, 0, -219, 0, -219, -219, -219, -219, -219, 0, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -190, -219, -219, 0, 0, 0, -219, 0, -219, -219, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -219, 0, -219, -219, 0, 0, 0, -219, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, -219, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 536 - -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, 0, -188, 0, -188, -188, -188, -188, -188, 0, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, 0, 0, 0, -188, -188, -188, -188, -188, -188, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, -188, -188, 0, -188, 0, -188, -188, 0, 0, 0, -188, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, -188, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -360, 0, 0, 0, 0, 0, -360, 0, -360, 0, 0, 0, -360, 0, 0, -360, 0, 0, 0, -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -360, 0, -360, -360, -360, -360, 0, 0, 0, 0, 0, -360, -360, -360, -360, 0, -360, -360, -360, -360, 0, 0, 0, 0, -360, -360, -360, -360, -360, 0, 0, -360, -360, -360, -360, 0, -360, -360, -360, -360, -360, -360, -360, -360, -360, 0, 0, 0, -360, -360, 0, 0, 0, -360, -360, -360, -360, -360, -360, // State 537 - -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, 0, -198, 0, -198, -198, -198, -198, -198, 0, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, 0, 0, 0, -198, -198, -198, -198, -198, -198, 0, -198, 0, 0, 0, 0, 0, 0, 0, 0, -198, 0, 0, -198, -198, 0, -198, 0, -198, -198, 0, 0, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 538 - 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -840, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -840, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 539 - -913, 0, 0, 0, 0, 0, 0, -913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -913, 0, 0, 0, 0, -913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 540 - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, 0, -184, 0, -184, -184, -184, -184, -184, 0, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, 0, 0, 0, -184, -184, -184, -184, -184, -184, 0, -184, 0, 0, 0, 0, 0, 0, 0, 0, -184, 0, 0, -184, -184, 0, -184, 0, -184, -184, 0, 0, 0, -184, -184, 0, 0, 0, 0, 0, 0, 0, 0, 0, -184, -184, -184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -359, 0, 0, 0, 0, 0, -359, 0, -359, 0, 0, 0, -359, 0, 0, -359, 0, 0, 0, -359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -359, 0, -359, -359, -359, -359, 0, 0, 0, 0, 0, -359, -359, -359, -359, 0, -359, -359, -359, -359, 0, 0, 0, 0, -359, -359, -359, -359, -359, 0, 0, -359, -359, -359, -359, 0, -359, -359, -359, -359, -359, -359, -359, -359, -359, 0, 0, 0, -359, -359, 0, 0, 0, -359, -359, -359, -359, -359, -359, // State 541 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 542 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 543 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, -707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 544 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -796, 0, 0, 0, 0, 0, 0, 0, 0, 0, -796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 545 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -448, 0, 0, 0, 0, 0, 0, 0, 0, 0, -448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 546 - -451, 0, 0, -451, 0, -451, 0, -451, 0, 0, -451, -451, 0, -451, -451, 0, -451, 0, 0, 0, 0, 0, -451, -451, -451, 0, -451, 0, 0, -451, 0, -451, 0, 0, 0, 0, -451, 0, -451, 0, 0, 0, 0, -451, 0, -451, 0, -451, 0, -451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -451, -451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -451, -451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 547 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 548 - -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, 0, -201, 0, -201, -201, -201, -201, -201, 0, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, 0, 0, 0, -201, -201, -201, -201, -201, -201, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, -201, -201, 0, -201, 0, -201, -201, 0, 0, 0, -201, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, -201, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -898, 0, 0, -898, 0, -898, 0, 0, 0, 0, -898, -898, 0, -898, -898, 0, -898, 0, 0, 0, 0, 0, -898, -898, 115, 0, -898, 0, 0, -898, 0, -898, 0, 0, 0, 0, -898, 0, 0, -898, 0, 0, 0, 0, 0, 0, -898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 549 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -363, 0, 0, 0, 0, 0, -363, 0, -363, 0, 0, 0, -363, 0, 0, -363, 0, 0, 0, -363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -363, 0, -363, -363, -363, -363, 0, 0, 0, 0, 0, -363, -363, -363, -363, 0, -363, -363, -363, -363, 0, 0, 0, 0, -363, -363, -363, -363, -363, 0, 0, -363, -363, -363, -363, 0, -363, -363, -363, -363, -363, -363, -363, -363, -363, 0, 0, 0, -363, -363, 0, 0, 0, -363, -363, -363, -363, -363, -363, // State 550 - -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, 0, -204, 0, -204, -204, -204, -204, -204, 0, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, 0, 0, 0, -204, -204, -204, -204, -204, -204, 0, -204, 0, 0, 0, 0, 0, 0, 0, 0, -204, 0, 0, -204, -204, 0, -204, 0, -204, -204, 0, 0, 0, -204, -204, 0, 0, 0, 0, 0, 0, 0, 0, 0, -204, -204, -204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 551 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, -343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -361, 0, 0, 0, 0, 0, -361, 0, -361, 0, 0, 0, -361, 0, 0, -361, 0, 0, 0, -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, -361, -361, -361, -361, 0, 0, 0, 0, 0, -361, -361, -361, -361, 0, -361, -361, -361, -361, 0, 0, 0, 0, -361, -361, -361, -361, -361, 0, 0, -361, -361, -361, -361, 0, -361, -361, -361, -361, -361, -361, -361, -361, -361, 0, 0, 0, -361, -361, 0, 0, 0, -361, -361, -361, -361, -361, -361, // State 552 - 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -364, 0, 0, 0, 0, 0, -364, 0, -364, 0, 0, 0, -364, 0, 0, -364, 0, 0, 0, -364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -364, 0, -364, -364, -364, -364, 0, 0, 0, 0, 0, -364, -364, -364, -364, 0, -364, -364, -364, -364, 0, 0, 0, 0, -364, -364, -364, -364, -364, 0, 0, -364, -364, -364, -364, 0, -364, -364, -364, -364, -364, -364, -364, -364, -364, 0, 0, 0, -364, -364, 0, 0, 0, -364, -364, -364, -364, -364, -364, // State 553 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -340, 0, 0, 0, -340, 0, -340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 554 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -409, -409, 0, -409, 0, -409, 0, 0, 0, 0, -409, -409, 0, -409, -409, 0, -409, 0, 0, 0, 0, 0, -409, -409, -409, 0, -409, -409, 0, -409, -409, -409, -409, -409, -409, 0, -409, 0, 0, -409, 0, 0, 0, 0, 0, 116, -409, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -409, 0, -409, -409, 0, 0, 0, -409, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, -409, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 555 - -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 556 - 0, 0, 0, 0, 0, 0, -254, 0, -254, 0, 0, 0, -254, 0, 0, -254, 0, 0, 0, -254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -254, -254, -254, -254, 0, 0, 0, 0, 0, 0, 0, -254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -254, 0, 0, -254, 0, 0, 0, 0, 0, 0, 0, 0, -254, -254, 0, 0, 0, -254, 0, 0, 0, 0, -254, -254, -254, 0, -254, -254, + -798, 0, 0, 0, 0, 0, -798, 0, -798, 0, 0, 0, -798, 0, 0, -798, 0, 0, 0, -798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -798, 0, -798, -798, -798, -798, 0, 0, 0, 0, 0, -798, -798, -798, -798, 0, -798, -798, -798, -798, 0, 0, 0, 0, -798, -798, -798, -798, -798, 0, 0, -798, -798, -798, -798, 0, -798, -798, -798, -798, -798, -798, -798, -798, -798, 0, 0, 0, -798, 0, 0, 0, 0, -798, -798, -798, -798, -798, -798, // State 557 - 0, 0, 0, 0, 0, 0, -255, 0, -255, 0, 0, 0, -255, 0, 0, -255, 0, 0, 0, -255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -255, -255, -255, -255, 0, 0, 0, 0, 0, 0, 0, -255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -255, 0, 0, -255, 0, 0, 0, 0, 0, 0, 0, 0, -255, -255, 0, 0, 0, -255, 0, 0, 0, 0, -255, -255, -255, 0, -255, -255, + -245, -245, -245, -245, -245, -245, -245, 0, -245, -245, -245, -245, -245, -245, -245, -245, -245, 0, -245, 0, -245, -245, -245, -245, -245, 0, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -216, -245, -245, 0, 0, 0, -245, 0, -245, -245, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -245, 0, -245, -245, 0, 0, 0, -245, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, -245, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 558 - 0, 0, 0, 0, 0, 0, -260, 0, -260, 0, 0, 0, -260, 0, 0, -260, 0, 0, 0, -260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -260, -260, -260, -260, 0, 0, 0, 0, 0, 0, 0, -260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -260, 0, 0, -260, 0, 0, 0, 0, 0, 0, 0, 0, -260, -260, 0, 0, 0, -260, 0, 0, 0, 0, -260, -260, -260, 0, -260, -260, + -243, -243, -243, -243, -243, -243, -243, 0, -243, -243, -243, -243, -243, -243, -243, -243, -243, 0, -243, 0, -243, -243, -243, -243, -243, 0, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -214, -243, -243, 0, 0, 0, -243, 0, -243, -243, -243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -243, 0, -243, -243, 0, 0, 0, -243, -243, 0, 0, 0, 0, 0, 0, 0, 0, 0, -243, -243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 559 - 0, 0, 0, 0, 0, 0, -251, 0, -251, 0, 0, 0, -251, 0, 0, -251, 0, 0, 0, -251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -251, -251, -251, -251, 0, 0, 0, 0, 0, 0, 0, -251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -251, 0, 0, -251, 0, 0, 0, 0, 0, 0, 0, 0, -251, -251, 0, 0, 0, -251, 0, 0, 0, 0, -251, -251, -251, 0, -251, -251, + -244, -244, -244, -244, -244, -244, -244, 0, -244, -244, -244, -244, -244, -244, -244, -244, -244, 0, -244, 0, -244, -244, -244, -244, -244, 0, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -215, -244, -244, 0, 0, 0, -244, 0, -244, -244, -244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -244, 0, -244, -244, 0, 0, 0, -244, -244, 0, 0, 0, 0, 0, 0, 0, 0, 0, -244, -244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 560 - 0, 0, 0, 0, 0, 0, -249, 0, -249, 0, 0, 0, -249, 0, 0, -249, 0, 0, 0, -249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -249, -249, -249, -249, 0, 0, 0, 0, 0, 0, 0, -249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -249, 0, 0, -249, 0, 0, 0, 0, 0, 0, 0, 0, -249, -249, 0, 0, 0, -249, 0, 0, 0, 0, -249, -249, -249, 0, -249, -249, + -242, -242, -242, -242, -242, -242, -242, 0, -242, -242, -242, -242, -242, -242, -242, -242, -242, 0, -242, 0, -242, -242, -242, -242, -242, 0, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -213, -242, -242, 0, 0, 0, -242, 0, -242, -242, -242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -242, 0, -242, -242, 0, 0, 0, -242, -242, 0, 0, 0, 0, 0, 0, 0, 0, 0, -242, -242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 561 - 0, 0, 0, 0, 0, 0, -250, 0, -250, 0, 0, 0, -250, 0, 0, -250, 0, 0, 0, -250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -250, -250, -250, -250, 0, 0, 0, 0, 0, 0, 0, -250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -250, 0, 0, -250, 0, 0, 0, 0, 0, 0, 0, 0, -250, -250, 0, 0, 0, -250, 0, 0, 0, 0, -250, -250, -250, 0, -250, -250, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 562 - 0, 0, 0, 0, 0, 0, -261, 0, -261, 0, 0, 0, -261, 0, 0, -261, 0, 0, 0, -261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -261, -261, -261, -261, 0, 0, 0, 0, 0, 0, 0, -261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -261, 0, 0, -261, 0, 0, 0, 0, 0, 0, 0, 0, -261, -261, 0, 0, 0, -261, 0, 0, 0, 0, -261, -261, -261, 0, -261, -261, + -429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 563 - 0, 0, 0, 0, 0, 0, -253, 0, -253, 0, 0, 0, -253, 0, 0, -253, 0, 0, 0, -253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -253, -253, -253, -253, 0, 0, 0, 0, 0, 0, 0, -253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -253, 0, 0, -253, 0, 0, 0, 0, 0, 0, 0, 0, -253, -253, 0, 0, 0, -253, 0, 0, 0, 0, -253, -253, -253, 0, -253, -253, + -430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 564 - 0, 0, 0, 0, 0, 0, -258, 0, -258, 0, 0, 0, -258, 0, 0, -258, 0, 0, 0, -258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -258, -258, -258, -258, 0, 0, 0, 0, 0, 0, 0, -258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -258, 0, 0, -258, 0, 0, 0, 0, 0, 0, 0, 0, -258, -258, 0, 0, 0, -258, 0, 0, 0, 0, -258, -258, -258, 0, -258, -258, + -777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 565 - 0, 0, 0, 0, 0, 0, -259, 0, -259, 0, 0, 0, -259, 0, 0, -259, 0, 0, 0, -259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -259, -259, -259, -259, 0, 0, 0, 0, 0, 0, 0, -259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -259, 0, 0, -259, 0, 0, 0, 0, 0, 0, 0, 0, -259, -259, 0, 0, 0, -259, 0, 0, 0, 0, -259, -259, -259, 0, -259, -259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 566 - 0, 0, 0, 0, 0, 0, -252, 0, -252, 0, 0, 0, -252, 0, 0, -252, 0, 0, 0, -252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -252, -252, -252, -252, 0, 0, 0, 0, 0, 0, 0, -252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -252, 0, 0, -252, 0, 0, 0, 0, 0, 0, 0, 0, -252, -252, 0, 0, 0, -252, 0, 0, 0, 0, -252, -252, -252, 0, -252, -252, + -493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 567 - 0, 0, 0, 0, 0, 0, -257, 0, -257, 0, 0, 0, -257, 0, 0, -257, 0, 0, 0, -257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -257, -257, -257, -257, 0, 0, 0, 0, 0, 0, 0, -257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -257, 0, 0, -257, 0, 0, 0, 0, 0, 0, 0, 0, -257, -257, 0, 0, 0, -257, 0, 0, 0, 0, -257, -257, -257, 0, -257, -257, + 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, 0, 0, -112, 0, 0, -112, 0, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, -112, -112, -112, 0, 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, -112, 0, 0, 0, 0, -112, -112, -112, 0, -112, -112, // State 568 - 0, 0, 0, 0, 0, 0, -256, 0, -256, 0, 0, 0, -256, 0, 0, -256, 0, 0, 0, -256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -256, -256, -256, -256, 0, 0, 0, 0, 0, 0, 0, -256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -256, 0, 0, -256, 0, 0, 0, 0, 0, 0, 0, 0, -256, -256, 0, 0, 0, -256, 0, 0, 0, 0, -256, -256, -256, 0, -256, -256, + 0, 0, 0, 0, 0, 0, -120, 0, 0, 0, 0, 0, -120, 0, 0, -120, 0, 0, 0, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, -120, -120, -120, 0, 0, 0, 0, 0, 0, 0, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 0, 0, 0, -120, 0, 0, 0, 0, -120, -120, -120, 0, -120, -120, // State 569 - -747, 0, 0, 0, 0, 0, -747, 0, -747, 0, 0, 0, -747, 0, 0, -747, 0, 0, 0, -747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -747, 0, -747, -747, -747, -747, 0, 0, 0, 0, 0, -747, -747, -747, -747, 0, -747, -747, -747, -747, 0, 0, 0, 0, -747, -747, -747, -747, -747, 0, 0, -747, -747, -747, -747, 0, -747, -747, -747, -747, -747, -747, -747, -747, -747, 0, 0, 0, -747, 0, 0, 0, 0, -747, -747, -747, -747, -747, -747, + 0, 0, 0, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 570 - 676, 0, 0, 0, 0, 0, -129, 0, -129, 0, 0, 0, -129, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, -129, 0, 0, 0, 0, 0, -129, 0, -129, -129, 0, 0, -129, 0, -129, 0, 0, 0, 0, 0, -129, -129, 0, -129, 0, 0, -129, 0, -129, -129, 0, -129, -129, -129, 0, -129, 0, 0, -129, -129, 0, 0, 0, -129, 0, 0, 0, 0, -129, -129, -129, -129, -129, -129, + 0, -219, -219, 0, -219, 0, -219, -219, -219, -219, 0, 0, -219, 0, -219, -219, 0, 0, -219, 0, -219, -219, 0, 0, 0, 87, 0, -219, -219, 0, -219, 147, -219, -219, -219, -219, 0, 0, -219, 0, 0, 0, 0, -219, 0, -219, 0, -219, 0, 0, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -219, 0, 0, -219, 0, -219, -219, 0, 0, 0, -219, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 571 - 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, -166, 0, -166, -166, -166, -166, -166, 0, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, 0, 0, -166, -166, -166, -166, -166, -166, 0, -166, 0, 0, 0, 0, 0, 0, 0, 0, -166, 0, 0, -166, -166, 0, -166, 0, -166, -166, 0, 0, 0, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, -166, -166, -166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 572 - -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, 0, -280, 0, -280, -280, -280, -280, -280, 0, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, 0, 0, 0, -280, -280, -280, -280, -280, -280, 0, -280, 0, 0, 0, 0, 0, 0, 0, 0, -280, 0, 0, -280, -280, 0, -280, 0, -280, -280, 0, 0, 0, -280, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, -280, -280, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 573 - -372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 574 - -341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 575 - -508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 576 - -370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 577 - -373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -873, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 578 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -788, -788, -788, -788, -788, -788, 0, -788, -788, 0, -788, -788, -788, -788, -788, -788, -788, 0, 0, 0, -788, -788, -788, -788, -788, 0, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, 0, 0, 0, 0, -788, -788, -788, -788, -788, 0, -788, 0, 0, 0, 0, 0, 0, 0, 0, -788, 0, 0, -788, -788, 0, -788, 0, -788, -788, 0, 0, 0, -788, -788, 0, 0, 0, 0, 0, 0, 0, 0, 0, -788, -788, -788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 579 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -142, -142, 0, -142, 0, -142, 0, -142, 0, 0, -142, -142, 0, -142, -142, 0, -142, 0, 0, 0, 0, 0, -142, -142, -142, 0, -142, -142, 0, -142, -142, -142, -142, -142, -142, 0, -142, 0, 0, -142, 0, 0, 0, 0, -142, 0, -142, -142, -142, 0, -142, 0, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, -142, -142, 0, -142, 0, -142, -142, 0, 0, 0, -142, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, -142, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 580 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -354, 0, 0, 0, 0, 0, -354, 0, 0, -354, 0, 0, 0, -354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -354, -354, -354, -354, 0, 0, 0, 0, 0, 0, 0, -354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -354, 0, 0, 0, -354, 0, 0, 0, 0, -354, -354, -354, 0, -354, -354, // State 581 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -352, 0, 0, 0, 0, 0, -352, 0, 0, -352, 0, 0, 0, -352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -352, -352, -352, -352, 0, 0, 0, 0, 0, 0, 0, -352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -352, 0, 0, 0, -352, 0, 0, 0, 0, -352, -352, -352, 0, -352, -352, // State 582 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -439, -439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -439, 0, + -408, -408, 0, -408, 0, -408, 0, -408, 0, 0, -408, -408, 0, -408, -408, 0, -408, 0, 0, 0, 0, 0, -408, -408, -408, 0, -408, -408, 0, -408, -408, -408, -408, -408, -408, 0, -408, 0, 0, -408, 0, 0, 0, 0, -408, 34, -408, -408, -408, 0, -408, 0, 0, 0, 0, 0, 0, 0, 0, -408, 0, 0, -408, -408, 0, -408, 0, -408, -408, 0, 0, 0, -408, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, -408, -408, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 583 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 584 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -436, -436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -436, 0, + -580, 0, 0, -580, 0, -580, 0, -580, 0, 0, -580, -580, 0, -580, -580, 0, -580, 0, 0, 0, 0, 0, -580, -580, -580, 0, -580, 0, 0, -580, 0, -580, 0, 0, 0, 0, -580, 0, 0, -580, 0, 0, 0, 0, 0, 0, -580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 585 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -435, -435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -435, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 586 - -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -881, -881, -881, -881, -881, -881, 0, -881, -881, 0, -881, -881, -881, -881, -881, -881, -881, 0, 0, 0, -881, -881, -881, -881, -881, 0, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, 0, 0, 0, 0, -881, -881, -881, -881, -881, 0, -881, 0, 0, 0, 0, 0, 0, 0, 0, -881, 0, 0, -881, -881, 0, -881, 0, -881, -881, 0, 0, 0, -881, -881, 0, 0, 0, 0, 0, 0, 0, 0, 0, -881, -881, -881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 587 - -420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -965, -965, 0, -965, 21, -965, 0, -965, 0, 0, -965, -965, 0, -965, -965, 0, -965, 0, 0, 0, 0, 0, -965, -965, -965, 0, -965, -965, 0, -965, -965, -965, -965, -965, -965, 0, -965, -965, 0, -965, 0, 0, 0, 0, -965, -965, -965, -965, -965, 0, -965, 0, 0, 0, 0, 0, 0, 0, 0, -965, 0, 0, -965, -965, 0, -965, 0, -965, -965, 0, 0, 0, -965, -965, 0, 0, 0, 0, 0, 0, 0, 0, 0, -965, -965, -965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 588 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 589 - -513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -825, 0, 0, 0, 0, 0, 0, -825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -825, 0, 0, 0, 0, 0, -825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 590 - -444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 591 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 592 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, 0, -230, 0, -230, -230, -230, -230, -230, 0, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, 0, 0, 0, -230, -230, -230, -230, -230, -230, 0, -230, 0, 0, 0, 0, 0, 0, 0, 0, -230, 0, 0, -230, -230, 0, -230, 0, -230, -230, 0, 0, 0, -230, -230, 0, 0, 0, 0, 0, 0, 0, 0, 0, -230, -230, -230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 593 - -501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, 0, -224, 0, -224, -224, -224, -224, -224, 0, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, 0, 0, 0, -224, -224, -224, -224, -224, -224, 0, -224, 0, 0, 0, 0, 0, 0, 0, 0, -224, 0, 0, -224, -224, 0, -224, 0, -224, -224, 0, 0, 0, -224, -224, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224, -224, -224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 594 - -752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, 0, -234, 0, -234, -234, -234, -234, -234, 0, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, 0, 0, 0, -234, -234, -234, -234, -234, -234, 0, -234, 0, 0, 0, 0, 0, 0, 0, 0, -234, 0, 0, -234, -234, 0, -234, 0, -234, -234, 0, 0, 0, -234, -234, 0, 0, 0, 0, 0, 0, 0, 0, 0, -234, -234, -234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 595 - -385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 596 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -969, 0, 0, 0, 0, 0, 0, -969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -969, 0, 0, 0, 0, -969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 597 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, 0, -220, 0, -220, -220, -220, -220, -220, 0, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, 0, 0, 0, -220, -220, -220, -220, -220, -220, 0, -220, 0, 0, 0, 0, 0, 0, 0, 0, -220, 0, 0, -220, -220, 0, -220, 0, -220, -220, 0, 0, 0, -220, -220, 0, 0, 0, 0, 0, 0, 0, 0, 0, -220, -220, -220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 598 - 0, -181, -181, 0, -181, 0, -181, 0, -181, -181, 0, 0, -181, 0, -181, -181, 0, 0, -181, 0, -181, -181, 0, 0, -210, 0, 0, -181, -181, 0, -181, 0, -181, -181, -181, -181, 0, -181, 0, 0, 0, 0, -181, 0, -181, 0, -181, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, -181, -181, 0, 0, 0, -181, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 599 - 0, -910, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, -910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -910, 0, 0, -910, 0, -910, -910, -910, 0, 0, 0, 0, 0, 0, 0, 0, 0, -910, 0, -910, -910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -910, 0, -910, -910, 0, 0, 0, -910, -910, 0, 0, 0, 0, 0, 0, 0, 0, 0, -910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 600 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -912, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, -754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 601 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -848, 0, 0, 0, 0, 0, 0, 0, 0, 0, -848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 602 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -497, 0, 0, 0, 0, 0, 0, 0, 0, 0, -497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 603 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -500, 0, 0, -500, 0, -500, 0, -500, 0, 0, -500, -500, 0, -500, -500, 0, -500, 0, 0, 0, 0, 0, -500, -500, -500, 0, -500, 0, 0, -500, 0, -500, 0, 0, 0, 0, -500, 0, 0, -500, 0, 0, 0, 0, -500, 0, -500, 0, -500, 0, -500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -500, -500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -500, -500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 604 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 605 - 0, -740, -740, 0, -740, 0, 0, 0, -740, 165, 0, 0, -740, 0, -740, -740, 0, 0, 0, 0, -740, -740, 0, 0, 0, 0, 0, -740, -740, 0, -740, 0, -740, -740, -740, -740, 0, -740, 0, 0, 0, 0, 0, 0, -740, 0, -740, -740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -740, 0, -740, -740, 0, 0, 0, -740, -740, 0, 0, 0, 0, 0, 0, 0, 0, 0, -740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, 0, -237, 0, -237, -237, -237, -237, -237, 0, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, 0, 0, 0, -237, -237, -237, -237, -237, -237, 0, -237, 0, 0, 0, 0, 0, 0, 0, 0, -237, 0, 0, -237, -237, 0, -237, 0, -237, -237, 0, 0, 0, -237, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, -237, -237, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 606 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 607 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, 0, -240, 0, -240, -240, -240, -240, -240, 0, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, 0, 0, 0, -240, -240, -240, -240, -240, -240, 0, -240, 0, 0, 0, 0, 0, 0, 0, 0, -240, 0, 0, -240, -240, 0, -240, 0, -240, -240, 0, 0, 0, -240, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, -240, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 608 - 0, -182, -182, 0, -182, 0, -182, 0, -182, -182, 0, 0, -182, 0, -182, -182, 0, 0, -182, 0, -182, -182, 0, 0, -211, 0, 0, -182, -182, 0, -182, 0, -182, -182, -182, -182, 0, -182, 0, 0, 0, 0, -182, 0, -182, 0, -182, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, -182, -182, 0, 0, 0, -182, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, -385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 609 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 610 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -830, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -278, -278, -278, -278, -278, -278, -278, 0, -278, -278, -278, -278, -278, -278, -278, -278, -278, 0, -278, 0, -278, -278, -278, -278, -278, 0, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -274, -278, -278, 0, 0, 0, -278, 0, -278, -278, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -278, 0, -278, -278, 0, 0, 0, -278, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, -278, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 611 - 0, -183, -183, 0, -183, 0, -183, 0, -183, -183, 0, 0, -183, 0, -183, -183, 0, 0, -183, 0, -183, -183, 0, 0, -212, 0, 0, -183, -183, 0, -183, 0, -183, -183, -183, -183, 0, -183, 0, 0, 0, 0, -183, 0, -183, 0, -183, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, -183, -183, 0, 0, 0, -183, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -382, 0, 0, 0, -382, 0, -382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 612 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -833, 0, 0, 0, 0, 0, 0, 0, 0, 0, -838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 613 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 614 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 615 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -184, 0, 0, 0, 0, -184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 616 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -296, 0, -296, 0, 0, 0, -296, 0, 0, -296, 0, 0, 0, -296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -296, -296, -296, -296, 0, 0, 0, 0, 0, 0, 0, -296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -296, 0, 0, -296, 0, 0, 0, 0, 0, 0, 0, 0, -296, -296, 0, 0, 0, -296, 0, 0, 0, 0, -296, -296, -296, 0, -296, -296, // State 617 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -297, 0, -297, 0, 0, 0, -297, 0, 0, -297, 0, 0, 0, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -297, -297, -297, -297, 0, 0, 0, 0, 0, 0, 0, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -297, 0, 0, -297, 0, 0, 0, 0, 0, 0, 0, 0, -297, -297, 0, 0, 0, -297, 0, 0, 0, 0, -297, -297, -297, 0, -297, -297, // State 618 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -302, 0, -302, 0, 0, 0, -302, 0, 0, -302, 0, 0, 0, -302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -302, -302, -302, -302, 0, 0, 0, 0, 0, 0, 0, -302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -302, 0, 0, -302, 0, 0, 0, 0, 0, 0, 0, 0, -302, -302, 0, 0, 0, -302, 0, 0, 0, 0, -302, -302, -302, 0, -302, -302, // State 619 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -293, 0, -293, 0, 0, 0, -293, 0, 0, -293, 0, 0, 0, -293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -293, -293, -293, -293, 0, 0, 0, 0, 0, 0, 0, -293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -293, 0, 0, -293, 0, 0, 0, 0, 0, 0, 0, 0, -293, -293, 0, 0, 0, -293, 0, 0, 0, 0, -293, -293, -293, 0, -293, -293, // State 620 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -291, 0, -291, 0, 0, 0, -291, 0, 0, -291, 0, 0, 0, -291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -291, -291, -291, -291, 0, 0, 0, 0, 0, 0, 0, -291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -291, 0, 0, -291, 0, 0, 0, 0, 0, 0, 0, 0, -291, -291, 0, 0, 0, -291, 0, 0, 0, 0, -291, -291, -291, 0, -291, -291, // State 621 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -292, 0, -292, 0, 0, 0, -292, 0, 0, -292, 0, 0, 0, -292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -292, -292, -292, -292, 0, 0, 0, 0, 0, 0, 0, -292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -292, 0, 0, -292, 0, 0, 0, 0, 0, 0, 0, 0, -292, -292, 0, 0, 0, -292, 0, 0, 0, 0, -292, -292, -292, 0, -292, -292, // State 622 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -303, 0, -303, 0, 0, 0, -303, 0, 0, -303, 0, 0, 0, -303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -303, -303, -303, -303, 0, 0, 0, 0, 0, 0, 0, -303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -303, 0, 0, -303, 0, 0, 0, 0, 0, 0, 0, 0, -303, -303, 0, 0, 0, -303, 0, 0, 0, 0, -303, -303, -303, 0, -303, -303, // State 623 - 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -365, 0, 0, -365, 0, -365, -365, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, -365, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -365, 0, -365, -365, 0, 0, 0, -365, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -295, 0, -295, 0, 0, 0, -295, 0, 0, -295, 0, 0, 0, -295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -295, -295, -295, -295, 0, 0, 0, 0, 0, 0, 0, -295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -295, 0, 0, -295, 0, 0, 0, 0, 0, 0, 0, 0, -295, -295, 0, 0, 0, -295, 0, 0, 0, 0, -295, -295, -295, 0, -295, -295, // State 624 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -300, 0, -300, 0, 0, 0, -300, 0, 0, -300, 0, 0, 0, -300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -300, -300, -300, -300, 0, 0, 0, 0, 0, 0, 0, -300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -300, 0, 0, -300, 0, 0, 0, 0, 0, 0, 0, 0, -300, -300, 0, 0, 0, -300, 0, 0, 0, 0, -300, -300, -300, 0, -300, -300, // State 625 - 0, -209, -209, 0, -209, 0, -209, 0, -209, -209, 0, 0, -209, 0, -209, -209, 0, 0, -209, 0, -209, -209, 0, 0, -236, 0, 0, -209, -209, 0, -209, 0, -209, -209, -209, -209, 0, -209, 0, 0, 0, 0, -209, 0, -209, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, 0, -209, -209, 0, 0, 0, -209, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, -209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -301, 0, -301, 0, 0, 0, -301, 0, 0, -301, 0, 0, 0, -301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -301, -301, -301, -301, 0, 0, 0, 0, 0, 0, 0, -301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -301, 0, 0, -301, 0, 0, 0, 0, 0, 0, 0, 0, -301, -301, 0, 0, 0, -301, 0, 0, 0, 0, -301, -301, -301, 0, -301, -301, // State 626 - 0, -207, -207, 0, -207, 0, -207, 0, -207, -207, 0, 0, -207, 0, -207, -207, 0, 0, -207, 0, -207, -207, 0, 0, -234, 0, 0, -207, -207, 0, -207, 0, -207, -207, -207, -207, 0, -207, 0, 0, 0, 0, -207, 0, -207, 0, -207, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, -207, -207, 0, 0, 0, -207, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, -207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -294, 0, -294, 0, 0, 0, -294, 0, 0, -294, 0, 0, 0, -294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -294, -294, -294, -294, 0, 0, 0, 0, 0, 0, 0, -294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -294, 0, 0, -294, 0, 0, 0, 0, 0, 0, 0, 0, -294, -294, 0, 0, 0, -294, 0, 0, 0, 0, -294, -294, -294, 0, -294, -294, // State 627 - 0, -208, -208, 0, -208, 0, -208, 0, -208, -208, 0, 0, -208, 0, -208, -208, 0, 0, -208, 0, -208, -208, 0, 0, -235, 0, 0, -208, -208, 0, -208, 0, -208, -208, -208, -208, 0, -208, 0, 0, 0, 0, -208, 0, -208, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, 0, -208, -208, 0, 0, 0, -208, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, -208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -299, 0, -299, 0, 0, 0, -299, 0, 0, -299, 0, 0, 0, -299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -299, -299, -299, -299, 0, 0, 0, 0, 0, 0, 0, -299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -299, 0, 0, -299, 0, 0, 0, 0, 0, 0, 0, 0, -299, -299, 0, 0, 0, -299, 0, 0, 0, 0, -299, -299, -299, 0, -299, -299, // State 628 - 0, -206, -206, 0, -206, 0, -206, 0, -206, -206, 0, 0, -206, 0, -206, -206, 0, 0, -206, 0, -206, -206, 0, 0, -233, 0, 0, -206, -206, 0, -206, 0, -206, -206, -206, -206, 0, -206, 0, 0, 0, 0, -206, 0, -206, 0, -206, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, -206, -206, 0, 0, 0, -206, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, -206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -298, 0, -298, 0, 0, 0, -298, 0, 0, -298, 0, 0, 0, -298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -298, -298, -298, -298, 0, 0, 0, 0, 0, 0, 0, -298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -298, 0, 0, -298, 0, 0, 0, 0, 0, 0, 0, 0, -298, -298, 0, 0, 0, -298, 0, 0, 0, 0, -298, -298, -298, 0, -298, -298, // State 629 - 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -796, 0, 0, 0, 0, 0, -796, 0, -796, 0, 0, 0, -796, 0, 0, -796, 0, 0, 0, -796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -796, 0, -796, -796, -796, -796, 0, 0, 0, 0, 0, -796, -796, -796, -796, 0, -796, -796, -796, -796, 0, 0, 0, 0, -796, -796, -796, -796, -796, 0, 0, -796, -796, -796, -796, 0, -796, -796, -796, -796, -796, -796, -796, -796, -796, 0, 0, 0, -796, 0, 0, 0, 0, -796, -796, -796, -796, -796, -796, // State 630 - -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, 0, -163, 0, -163, -163, -163, -163, -163, 0, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, 0, 0, 0, -163, -163, -163, -163, -163, -163, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, -163, 0, 0, -163, -163, 0, -163, 0, -163, -163, 0, 0, 0, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, -163, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 750, 0, 0, 0, 0, 0, -132, 0, -132, 0, 0, 0, -132, 0, 0, -132, 0, 0, 0, -132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -132, -132, -132, -132, 0, 0, 0, 0, 0, -132, 0, -132, -132, 0, 0, -132, 0, -132, 0, 0, 0, 0, 0, -132, -132, 0, -132, 0, 0, -132, 0, -132, -132, 0, -132, -132, -132, 0, -132, 0, 0, -132, -132, 0, 0, 0, -132, 0, 0, 0, 0, -132, -132, -132, -132, -132, -132, // State 631 - -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, 0, -160, 0, -160, -160, -160, -160, -160, 0, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, 0, 0, 0, -160, -160, -160, -160, -160, -160, 0, -160, 0, 0, 0, 0, 0, 0, 0, 0, -160, 0, 0, -160, -160, 0, -160, 0, -160, -160, 0, 0, 0, -160, -160, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, -160, -160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -425, -425, -425, -425, -425, -425, 0, 0, -425, 0, -425, -425, -425, -425, -425, -425, -425, 0, 0, 0, -425, -425, -425, -425, -425, 0, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -423, -425, -425, 0, 0, 0, 0, 0, -425, -425, -425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -425, 0, -425, -425, 0, 0, 0, -425, -425, 0, 0, 0, 0, 0, 0, 0, 0, 0, -425, -425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 632 - 0, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0, 0, -113, 0, 0, -113, 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0, 0, 0, 0, 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, 0, 0, 0, -113, 0, 0, 0, 0, -113, -113, -113, 0, -113, -113, + 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 633 - 0, 0, 0, 0, 0, 0, 0, -409, 0, 0, 0, 0, 0, 0, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 634 - 0, 0, 0, 0, 0, 0, 0, -412, 0, 0, 0, 0, 0, 0, -412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -233, -233, -233, -233, -233, -233, -233, 0, -233, -233, -233, -233, -233, -233, -233, -233, -233, 0, -233, 0, -233, -233, -233, -233, -233, 0, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -204, -233, -233, 0, 0, 0, -233, 0, -233, -233, -233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -233, 0, -233, -233, 0, 0, 0, -233, -233, 0, 0, 0, 0, 0, 0, 0, 0, 0, -233, -233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 635 - 0, 0, 0, 0, 0, 0, 0, -413, 0, 0, 0, 0, 0, 0, -413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 636 - -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, 0, -239, 0, -239, -239, -239, -239, -239, 0, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, 0, 0, 0, -239, -239, -239, -239, -239, -239, 0, -239, 0, 0, 0, 0, 0, 0, 0, 0, -239, 0, 0, -239, -239, 0, -239, 0, -239, -239, 0, 0, 0, -239, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, -239, -239, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 637 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -221, -221, -221, -221, -221, -221, -221, 0, -221, -221, -221, -221, -221, -221, -221, -221, -221, 0, -221, 0, -221, -221, -221, -221, -221, 0, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -192, -221, -221, 0, 0, 0, -221, 0, -221, -221, -221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -221, 0, -221, -221, 0, 0, 0, -221, -221, 0, 0, 0, 0, 0, 0, 0, 0, 0, -221, -221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 638 - -140, -140, 0, -140, 0, -140, 0, -140, 0, 0, -140, -140, 0, -140, -140, 0, -140, 0, 0, 0, 0, 0, -140, -140, -140, 0, -140, -140, 0, -140, -140, -140, -140, -140, -140, 0, -140, 0, -140, 0, 0, 0, 0, -140, 0, -140, -140, -140, 0, -140, 0, 0, 0, 0, 0, 0, 0, 0, -140, 0, 0, -140, -140, 0, -140, 0, -140, -140, 0, 0, 0, -140, -140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, -140, -140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 639 - -496, 0, 0, 0, 0, 0, 0, -496, 0, 0, 0, 0, 0, 0, -496, 0, 0, 0, 0, 0, 0, 0, 0, 0, -496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -496, 0, 0, 0, 0, 0, -496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 640 - -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, 0, -199, 0, -199, -199, -199, -199, -199, 0, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, 0, 0, 0, -199, -199, -199, -199, -199, -199, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, -199, -199, 0, -199, 0, -199, -199, 0, 0, 0, -199, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, -199, -199, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 641 - 0, 0, 0, 0, 0, 0, 0, -775, 0, 0, 0, 0, 0, 0, -775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -775, 0, 0, 0, 0, 0, -775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 642 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 643 - -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, 0, -196, 0, -196, -196, -196, -196, -196, 0, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, 0, 0, 0, -196, -196, -196, -196, -196, -196, 0, -196, 0, 0, 0, 0, 0, 0, 0, 0, -196, 0, 0, -196, -196, 0, -196, 0, -196, -196, 0, 0, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 644 - 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 645 - -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, 0, -190, 0, -190, -190, -190, -190, -190, 0, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, 0, 0, 0, -190, -190, -190, -190, -190, -190, 0, -190, 0, 0, 0, 0, 0, 0, 0, 0, -190, 0, 0, -190, -190, 0, -190, 0, -190, -190, 0, 0, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 646 - 0, 0, 0, 0, 0, 0, 0, -499, 0, 0, 0, 0, 0, 0, -499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 647 - 0, 0, 0, 0, 0, 0, 0, -531, 0, 0, 0, 0, 0, 0, -531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 648 - -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, 0, -187, 0, -187, -187, -187, -187, -187, 0, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, 0, 0, 0, -187, -187, -187, -187, -187, -187, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, -187, -187, 0, -187, 0, -187, -187, 0, 0, 0, -187, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, -187, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -485, -485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -485, 0, // State 649 - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, 0, -200, 0, -200, -200, -200, -200, -200, 0, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, 0, 0, 0, -200, -200, -200, -200, -200, -200, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, -200, -200, 0, -200, 0, -200, -200, 0, 0, 0, -200, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, -200, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 650 - -915, 0, 0, 0, 0, 0, 0, -915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -915, 0, 0, 0, 0, -915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, 0, // State 651 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, // State 652 - -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, 0, -186, 0, -186, -186, -186, -186, -186, 0, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, 0, 0, 0, -186, -186, -186, -186, -186, -186, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, -186, -186, 0, -186, 0, -186, -186, 0, 0, 0, -186, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, -186, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 653 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, -689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 654 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -527, 0, 0, 0, 0, 0, 0, 0, 0, 0, -527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 655 - -450, 0, 0, -450, 0, -450, 0, -450, 0, 0, -450, -450, 0, -450, -450, 0, -450, 0, 0, 0, 0, 0, -450, -450, -450, 0, -450, 0, 0, -450, 0, -450, 0, 0, 0, 0, -450, 0, -450, 0, 0, 0, 0, -450, 0, -450, 0, -450, 0, -450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -450, -450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -450, -450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 656 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -547, 0, 0, 0, 0, 0, 0, 0, 0, 0, -547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 657 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, -706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 658 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, -701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 659 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 660 - -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, 0, -203, 0, -203, -203, -203, -203, -203, 0, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, 0, 0, 0, -203, -203, -203, -203, -203, -203, 0, -203, 0, 0, 0, 0, 0, 0, 0, 0, -203, 0, 0, -203, -203, 0, -203, 0, -203, -203, 0, 0, 0, -203, -203, 0, 0, 0, 0, 0, 0, 0, 0, 0, -203, -203, -203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 661 - -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, 0, -205, 0, -205, -205, -205, -205, -205, 0, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, 0, 0, 0, -205, -205, -205, -205, -205, -205, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, -205, -205, 0, -205, 0, -205, -205, 0, 0, 0, -205, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, -205, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 662 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -923, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -923, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 663 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 664 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -217, -217, 0, -217, 0, -217, 0, -217, -217, 0, 0, -217, 0, -217, -217, 0, 0, -217, 0, -217, -217, 0, 0, -246, 0, 0, -217, -217, 0, -217, 0, -217, -217, -217, -217, 0, 0, -217, 0, 0, 0, 0, -217, 0, -217, 0, -217, -217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -217, 0, -217, -217, 0, 0, 0, -217, -217, 0, 0, 0, 0, 0, 0, 0, 0, 0, -217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, // State 665 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -966, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, -966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -966, 0, 0, -966, 0, -966, -966, -966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -966, 0, -966, -966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -966, 0, -966, -966, 0, 0, 0, -966, -966, 0, 0, 0, 0, 0, 0, 0, 0, 0, -966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 666 - -748, 0, 0, 0, 0, 0, -748, 0, -748, 0, 0, 0, -748, 0, 0, -748, 0, 0, 0, -748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -748, 0, -748, -748, -748, -748, 0, 0, 0, 0, 0, -748, -748, -748, -748, 0, -748, -748, -748, -748, 0, 0, 0, 0, -748, -748, -748, -748, -748, 0, 0, -748, -748, -748, -748, 0, -748, -748, -748, -748, -748, -748, -748, -748, -748, 0, 0, 0, -748, 0, 0, 0, 0, -748, -748, -748, -748, -748, -748, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 667 - 726, 0, 0, 0, 0, 0, -130, 0, -130, 0, 0, 0, -130, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, -130, 0, 0, 0, 0, 0, -130, 0, -130, -130, 0, 0, -130, 0, -130, 0, 0, 0, 0, 0, -130, -130, 0, -130, 0, 0, -130, 0, -130, -130, 0, -130, -130, -130, 0, -130, 0, 0, -130, -130, 0, 0, 0, -130, 0, 0, 0, 0, -130, -130, -130, -130, -130, -130, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 668 - -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, 0, 0, 0, 0, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 669 - -842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -842, 0, 0, 0, 0, -842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 670 - -376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 671 - -843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -843, 0, 0, 0, 0, -843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -789, -789, 0, -789, 0, 0, 0, -789, 197, 0, 0, -789, 0, -789, -789, 0, 0, 0, 0, -789, -789, 0, 0, 0, 0, 0, -789, -789, 0, -789, 0, -789, -789, -789, -789, 0, 0, -789, 0, 0, 0, 0, 0, 0, -789, 0, -789, -789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -789, 0, -789, -789, 0, 0, 0, -789, -789, 0, 0, 0, 0, 0, 0, 0, 0, 0, -789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 672 - -174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -174, 0, 0, 0, 0, -174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 673 - -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -173, 0, 0, 0, 0, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 674 - -452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -452, 0, 0, 0, 0, -452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -218, -218, 0, -218, 0, -218, 0, -218, -218, 0, 0, -218, 0, -218, -218, 0, 0, -218, 0, -218, -218, 0, 0, -247, 0, 0, -218, -218, 0, -218, 0, -218, -218, -218, -218, 0, 0, -218, 0, 0, 0, 0, -218, 0, -218, 0, -218, -218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -218, 0, -218, -218, 0, 0, 0, -218, -218, 0, 0, 0, 0, 0, 0, 0, 0, 0, -218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 675 - -745, 0, 0, 0, 0, 0, -745, 0, -745, 0, 0, 0, -745, 0, 0, -745, 0, 0, 0, -745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -745, 0, -745, -745, -745, -745, 0, 0, 0, 0, 0, -745, -745, -745, -745, 0, -745, -745, -745, -745, 0, 0, 0, 0, -745, -745, -745, -745, -745, 0, 0, -745, -745, -745, -745, 0, -745, -745, -745, -745, -745, -745, -745, -745, -745, 0, 0, 0, -745, 0, 0, 0, 0, -745, -745, -745, -745, -745, -745, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 676 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -336, 0, 0, 0, -336, 0, -336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 677 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -219, -219, 0, -219, 0, -219, 0, -219, -219, 0, 0, -219, 0, -219, -219, 0, 0, -219, 0, -219, -219, 0, 0, -248, 0, 0, -219, -219, 0, -219, 0, -219, -219, -219, -219, 0, 0, -219, 0, 0, 0, 0, -219, 0, -219, 0, -219, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -219, 0, -219, -219, 0, 0, 0, -219, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 678 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -887, 0, 0, 0, 0, 0, 0, 0, 0, 0, -892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -887, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 679 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 680 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 681 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 682 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -440, -440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -440, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 683 - -350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -350, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, -350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 684 - 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 685 - 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 686 - 763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 687 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 688 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 689 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -540, 0, 0, 0, 0, 0, 0, 0, 0, 0, -542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -540, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -409, 0, 0, -409, 0, -409, -409, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, -409, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -409, 0, -409, -409, 0, 0, 0, -409, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 690 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, -158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, -156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 691 - 0, -238, -238, 0, -238, 0, -238, 0, -238, -238, 0, 0, -238, 0, -238, -238, 0, 0, -238, 0, -238, -238, 0, 0, -242, 0, 0, -238, -238, 0, -238, 0, -238, -238, -238, -238, 0, -238, 0, 0, 0, 0, -238, 0, -238, 0, -238, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -238, 0, -238, -238, 0, 0, 0, -238, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -245, -245, 0, -245, 0, -245, 0, -245, -245, 0, 0, -245, 0, -245, -245, 0, 0, -245, 0, -245, -245, 0, 0, -272, 0, 0, -245, -245, 0, -245, 0, -245, -245, -245, -245, 0, 0, -245, 0, 0, 0, 0, -245, 0, -245, 0, -245, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -245, 0, -245, -245, 0, 0, 0, -245, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, -245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 692 - 0, -379, -379, 0, -379, 0, 0, 0, -379, 0, 0, 0, -379, 0, -379, -379, 0, 0, 0, 0, -379, -379, 0, 0, -381, 0, 0, -379, -379, 0, -379, 0, -379, -379, -379, -379, 0, -379, 0, 0, 0, 0, 0, 0, -379, 0, -379, -379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -379, 0, -379, -379, 0, 0, 0, -379, -379, 0, 0, 0, 0, 0, 0, 0, 0, 0, -379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -243, -243, 0, -243, 0, -243, 0, -243, -243, 0, 0, -243, 0, -243, -243, 0, 0, -243, 0, -243, -243, 0, 0, -270, 0, 0, -243, -243, 0, -243, 0, -243, -243, -243, -243, 0, 0, -243, 0, 0, 0, 0, -243, 0, -243, 0, -243, -243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -243, 0, -243, -243, 0, 0, 0, -243, -243, 0, 0, 0, 0, 0, 0, 0, 0, 0, -243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 693 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, -905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -244, -244, 0, -244, 0, -244, 0, -244, -244, 0, 0, -244, 0, -244, -244, 0, 0, -244, 0, -244, -244, 0, 0, -271, 0, 0, -244, -244, 0, -244, 0, -244, -244, -244, -244, 0, 0, -244, 0, 0, 0, 0, -244, 0, -244, 0, -244, -244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -244, 0, -244, -244, 0, 0, 0, -244, -244, 0, 0, 0, 0, 0, 0, 0, 0, 0, -244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 694 - 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -242, -242, 0, -242, 0, -242, 0, -242, -242, 0, 0, -242, 0, -242, -242, 0, 0, -242, 0, -242, -242, 0, 0, -269, 0, 0, -242, -242, 0, -242, 0, -242, -242, -242, -242, 0, 0, -242, 0, 0, 0, 0, -242, 0, -242, 0, -242, -242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -242, 0, -242, -242, 0, 0, 0, -242, -242, 0, 0, 0, 0, 0, 0, 0, 0, 0, -242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 695 - 0, 0, 0, 0, 0, 0, 0, -530, 0, 0, 0, 0, 0, 0, -530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 696 - 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 697 - 0, -197, -197, 0, -197, 0, -197, 0, -197, -197, 0, 0, -197, 0, -197, -197, 0, 0, -197, 0, -197, -197, 0, 0, -224, 0, 0, -197, -197, 0, -197, 0, -197, -197, -197, -197, 0, -197, 0, 0, 0, 0, -197, 0, -197, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, 0, -197, -197, 0, 0, 0, -197, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, -197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -238, -238, -238, -238, -238, -238, -238, 0, -238, -238, -238, -238, -238, -238, -238, -238, -238, 0, -238, 0, -238, -238, -238, -238, -238, 0, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -209, -238, -238, 0, 0, 0, -238, 0, -238, -238, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -238, 0, -238, -238, 0, 0, 0, -238, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, -238, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 698 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 699 - 0, -185, -185, 0, -185, 0, -185, 0, -185, -185, 0, 0, -185, 0, -185, -185, 0, 0, -185, 0, -185, -185, 0, 0, -214, 0, 0, -185, -185, 0, -185, 0, -185, -185, -185, -185, 0, -185, 0, 0, 0, 0, -185, 0, -185, 0, -185, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 0, -185, -185, 0, 0, 0, -185, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 0, -168, 0, -168, -168, -168, -168, -168, 0, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 0, 0, 0, -168, -168, -168, -168, -168, -168, 0, -168, 0, 0, 0, 0, 0, 0, 0, 0, -168, 0, 0, -168, -168, 0, -168, 0, -168, -168, 0, 0, 0, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 700 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -502, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -502, -502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -502, 0, 0, 0, 0, 0, 0, 0, -502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 0, -165, 0, -165, -165, -165, -165, -165, 0, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 0, 0, 0, -165, -165, -165, -165, -165, -165, 0, -165, 0, 0, 0, 0, 0, 0, 0, 0, -165, 0, 0, -165, -165, 0, -165, 0, -165, -165, 0, 0, 0, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, -165, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 701 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -116, -116, -116, -116, 0, 0, -116, 0, 0, -116, 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -116, -116, -116, 0, 0, 0, 0, 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, 0, 0, 0, -116, 0, 0, 0, 0, -116, -116, -116, 0, -116, -116, // State 702 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -455, 0, 0, 0, 0, 0, 0, -455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 703 - 0, -202, -202, 0, -202, 0, -202, 0, -202, -202, 0, 0, -202, 0, -202, -202, 0, 0, -202, 0, -202, -202, 0, 0, -229, 0, 0, -202, -202, 0, -202, 0, -202, -202, -202, -202, 0, -202, 0, 0, 0, 0, -202, 0, -202, 0, -202, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, -202, -202, 0, 0, 0, -202, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, -202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -458, 0, 0, 0, 0, 0, 0, -458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 704 - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, 0, -162, 0, -162, -162, -162, -162, -162, 0, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, 0, 0, 0, -162, -162, -162, -162, -162, -162, 0, -162, 0, 0, 0, 0, 0, 0, 0, 0, -162, 0, 0, -162, -162, 0, -162, 0, -162, -162, 0, 0, 0, -162, -162, 0, 0, 0, 0, 0, 0, 0, 0, 0, -162, -162, -162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -459, 0, 0, 0, 0, 0, 0, -459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 705 - 0, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0, 0, -114, 0, 0, -114, 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, -114, 0, 0, 0, 0, -114, -114, -114, 0, -114, -114, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, 0, -279, 0, -279, -279, -279, -279, -279, 0, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, 0, 0, 0, -279, -279, -279, -279, -279, -279, 0, -279, 0, 0, 0, 0, 0, 0, 0, 0, -279, 0, 0, -279, -279, 0, -279, 0, -279, -279, 0, 0, 0, -279, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, -279, -279, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 706 - 0, 0, 0, 0, 0, 0, 0, -411, 0, 0, 0, 0, 0, 0, -411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 707 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -143, -143, 0, -143, 0, -143, 0, -143, 0, 0, -143, -143, 0, -143, -143, 0, -143, 0, 0, 0, 0, 0, -143, -143, -143, 0, -143, -143, 0, -143, -143, -143, -143, -143, -143, 0, -143, 0, 0, -143, 0, 0, 0, 0, -143, 0, -143, -143, -143, 0, -143, 0, 0, 0, 0, 0, 0, 0, 0, -143, 0, 0, -143, -143, 0, -143, 0, -143, -143, 0, 0, 0, -143, -143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, -143, -143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 708 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -543, 0, 0, 0, 0, 0, 0, -543, 0, 0, 0, 0, 0, 0, -543, 0, 0, 0, 0, 0, 0, 0, 0, 0, -543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -543, 0, 0, 0, 0, 0, -543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 709 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, 0, -235, 0, -235, -235, -235, -235, -235, 0, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, 0, 0, 0, -235, -235, -235, -235, -235, -235, 0, -235, 0, 0, 0, 0, 0, 0, 0, 0, -235, 0, 0, -235, -235, 0, -235, 0, -235, -235, 0, 0, 0, -235, -235, 0, 0, 0, 0, 0, 0, 0, 0, 0, -235, -235, -235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 710 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -826, 0, 0, 0, 0, 0, 0, -826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -826, 0, 0, 0, 0, 0, -826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 711 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 712 - -831, 0, 0, -831, 0, -831, 0, -831, 0, 0, -831, -831, 0, -831, -831, 0, -831, 0, 0, 0, 0, 0, -831, -831, -831, 0, -831, 0, 0, -831, 0, -831, 0, 0, 0, 0, -831, 0, -831, 0, 0, 0, 0, -831, 0, -831, 0, -831, 0, -831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -831, -831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -831, -831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, 0, -232, 0, -232, -232, -232, -232, -232, 0, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, 0, 0, 0, -232, -232, -232, -232, -232, -232, 0, -232, 0, 0, 0, 0, 0, 0, 0, 0, -232, 0, 0, -232, -232, 0, -232, 0, -232, -232, 0, 0, 0, -232, -232, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, -232, -232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 713 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 714 - 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, 0, -226, 0, -226, -226, -226, -226, -226, 0, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, 0, 0, 0, -226, -226, -226, -226, -226, -226, 0, -226, 0, 0, 0, 0, 0, 0, 0, 0, -226, 0, 0, -226, -226, 0, -226, 0, -226, -226, 0, 0, 0, -226, -226, 0, 0, 0, 0, 0, 0, 0, 0, 0, -226, -226, -226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 715 - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, 0, -192, 0, -192, -192, -192, -192, -192, 0, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, 0, 0, 0, -192, -192, -192, -192, -192, -192, 0, -192, 0, 0, 0, 0, 0, 0, 0, 0, -192, 0, 0, -192, -192, 0, -192, 0, -192, -192, 0, 0, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -546, 0, 0, 0, 0, 0, 0, -546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 716 - 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -578, 0, 0, 0, 0, 0, 0, -578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 717 - -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, 0, -193, 0, -193, -193, -193, -193, -193, 0, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, 0, 0, 0, -193, -193, -193, -193, -193, -193, 0, -193, 0, 0, 0, 0, 0, 0, 0, 0, -193, 0, 0, -193, -193, 0, -193, 0, -193, -193, 0, 0, 0, -193, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, -193, -193, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, 0, -223, 0, -223, -223, -223, -223, -223, 0, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, 0, 0, 0, -223, -223, -223, -223, -223, -223, 0, -223, 0, 0, 0, 0, 0, 0, 0, 0, -223, 0, 0, -223, -223, 0, -223, 0, -223, -223, 0, 0, 0, -223, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, -223, -223, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 718 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, 0, -236, 0, -236, -236, -236, -236, -236, 0, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, 0, 0, 0, -236, -236, -236, -236, -236, -236, 0, -236, 0, 0, 0, 0, 0, 0, 0, 0, -236, 0, 0, -236, -236, 0, -236, 0, -236, -236, 0, 0, 0, -236, -236, 0, 0, 0, 0, 0, 0, 0, 0, 0, -236, -236, -236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 719 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, -680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -971, 0, 0, 0, 0, 0, 0, -971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -971, 0, 0, 0, 0, -971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 720 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, -685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 721 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, 0, 0, 0, 0, 0, 0, 0, 0, 0, -703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, 0, -222, 0, -222, -222, -222, -222, -222, 0, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, 0, 0, 0, -222, -222, -222, -222, -222, -222, 0, -222, 0, 0, 0, 0, 0, 0, 0, 0, -222, 0, 0, -222, -222, 0, -222, 0, -222, -222, 0, 0, 0, -222, -222, 0, 0, 0, 0, 0, 0, 0, 0, 0, -222, -222, -222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 722 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 0, 0, 0, 0, 0, -736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 723 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, -700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -574, 0, 0, 0, 0, 0, 0, 0, 0, 0, -574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 724 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -499, 0, 0, -499, 0, -499, 0, -499, 0, 0, -499, -499, 0, -499, -499, 0, -499, 0, 0, 0, 0, 0, -499, -499, -499, 0, -499, 0, 0, -499, 0, -499, 0, 0, 0, 0, -499, 0, 0, -499, 0, 0, 0, 0, -499, 0, -499, 0, -499, 0, -499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -499, -499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -499, -499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 725 - -746, 0, 0, 0, 0, 0, -746, 0, -746, 0, 0, 0, -746, 0, 0, -746, 0, 0, 0, -746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -746, 0, -746, -746, -746, -746, 0, 0, 0, 0, 0, -746, -746, -746, -746, 0, -746, -746, -746, -746, 0, 0, 0, 0, -746, -746, -746, -746, -746, 0, 0, -746, -746, -746, -746, 0, -746, -746, -746, -746, -746, -746, -746, -746, -746, 0, 0, 0, -746, 0, 0, 0, 0, -746, -746, -746, -746, -746, -746, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -594, 0, 0, 0, 0, 0, 0, 0, 0, 0, -594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 726 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, -753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 727 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 813, 0, 0, 0, 0, 0, 0, 0, 0, 0, -748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 728 - -377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 729 - -171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, 0, -239, 0, -239, -239, -239, -239, -239, 0, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, 0, 0, 0, -239, -239, -239, -239, -239, -239, 0, -239, 0, 0, 0, 0, 0, 0, 0, 0, -239, 0, 0, -239, -239, 0, -239, 0, -239, -239, 0, 0, 0, -239, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, -239, -239, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 730 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, 0, -241, 0, -241, -241, -241, -241, -241, 0, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, 0, 0, 0, -241, -241, -241, -241, -241, -241, 0, -241, 0, 0, 0, 0, 0, 0, 0, 0, -241, 0, 0, -241, -241, 0, -241, 0, -241, -241, 0, 0, 0, -241, -241, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, -241, -241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 731 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 732 - -268, 0, 0, 0, 0, 0, -268, 0, -268, 0, 0, 0, -268, 0, 0, -268, 0, 0, 0, -268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -268, 0, -268, -268, -268, -268, 0, 0, 0, 0, 0, -268, -268, -268, -268, 0, -268, -268, -268, -268, 0, 0, 0, 0, -268, -268, -268, -268, -268, 0, 0, -268, -268, -268, -268, 0, -268, -268, -268, -268, -268, -268, -268, -268, -268, 0, 0, 0, -268, -268, 0, 0, 0, -268, -268, -268, -268, -268, -268, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 733 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -873, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -873, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 734 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 735 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -797, 0, 0, 0, 0, 0, -797, 0, -797, 0, 0, 0, -797, 0, 0, -797, 0, 0, 0, -797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -797, 0, -797, -797, -797, -797, 0, 0, 0, 0, 0, -797, -797, -797, -797, 0, -797, -797, -797, -797, 0, 0, 0, 0, -797, -797, -797, -797, -797, 0, 0, -797, -797, -797, -797, 0, -797, -797, -797, -797, -797, -797, -797, -797, -797, 0, 0, 0, -797, 0, 0, 0, 0, -797, -797, -797, -797, -797, -797, // State 736 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 814, 0, 0, 0, 0, 0, -133, 0, -133, 0, 0, 0, -133, 0, 0, -133, 0, 0, 0, -133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -133, -133, -133, -133, 0, 0, 0, 0, 0, -133, 0, -133, -133, 0, 0, -133, 0, -133, 0, 0, 0, 0, 0, -133, -133, 0, -133, 0, 0, -133, 0, -133, -133, 0, -133, -133, -133, 0, -133, 0, 0, -133, -133, 0, 0, 0, -133, 0, 0, 0, 0, -133, -133, -133, -133, -133, -133, // State 737 - 0, 0, 0, 0, 0, 0, 0, -881, 0, 0, 0, 0, 0, 0, -881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, -881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -280, -280, -280, -280, -280, -280, -280, 0, -280, -280, -280, -280, -280, -280, -280, -280, -280, 0, -280, 0, -280, -280, -280, -280, -280, 0, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -276, -280, -280, 0, 0, 0, -280, 0, -280, -280, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -280, 0, -280, -280, 0, 0, 0, -280, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, -280, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 738 - 0, 0, 0, 0, 0, 0, 0, -631, 0, 0, 0, 0, 0, 0, 818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 739 - 0, 0, 0, 0, 0, 0, 0, -605, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -788, -788, -788, -788, -788, -788, 0, 0, -788, 0, -788, -788, -788, -788, -788, -788, -788, 0, 0, 0, -788, -788, -788, -788, -788, 0, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -786, -788, -788, 0, 0, 0, 0, 0, -788, -788, -788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -788, 0, -788, -788, 0, 0, 0, -788, -788, 0, 0, 0, 0, 0, 0, 0, 0, 0, -788, -788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 740 - 0, 0, 0, 0, 0, 0, 0, -524, 0, 0, 0, 0, 0, 0, -524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 741 - 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -408, -408, 0, -408, 0, -408, 0, 0, 0, 0, -408, -408, 0, -408, -408, 0, -408, 0, 0, 0, 0, 0, -408, -408, -408, 0, -408, -408, 0, -408, -408, -408, -408, -408, -408, 0, -408, -406, 0, -408, 0, 0, 0, 0, 0, 34, -408, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -408, 0, -408, -408, 0, 0, 0, -408, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, -408, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 742 - 0, 0, 0, 0, 0, 0, 0, -544, 0, 0, 0, 0, 0, 0, -544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 0, 0, 0, 0, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 743 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -729, 0, 0, 0, 0, 0, 0, -729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -896, 0, 0, 0, 0, -896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 744 - -509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 745 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -897, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -897, 0, 0, 0, 0, -897, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 746 - -517, 0, 0, 0, 0, 0, 0, -517, 0, 0, 0, 0, 0, 0, -517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -181, 0, 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 747 - -445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, 0, -180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 748 - -431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -492, 0, 0, 0, 0, -492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 749 - -434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -794, 0, 0, 0, 0, 0, -794, 0, -794, 0, 0, 0, -794, 0, 0, -794, 0, 0, 0, -794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -794, 0, -794, -794, -794, -794, 0, 0, 0, 0, 0, -794, -794, -794, -794, 0, -794, -794, -794, -794, 0, 0, 0, 0, -794, -794, -794, -794, -794, 0, 0, -794, -794, -794, -794, 0, -794, -794, -794, -794, -794, -794, -794, -794, -794, 0, 0, 0, -794, 0, 0, 0, 0, -794, -794, -794, -794, -794, -794, // State 750 - -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -881, -881, -881, -881, -881, -881, 0, 0, -881, 0, -881, -881, -881, -881, -881, -881, -881, 0, 0, 0, -881, -881, -881, -881, -881, 0, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -879, -881, -881, 0, 0, 0, 0, 0, -881, -881, -881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -881, 0, -881, -881, 0, 0, 0, -881, -881, 0, 0, 0, 0, 0, 0, 0, 0, 0, -881, -881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 751 - -511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -965, -965, 0, -965, 21, -965, 0, 0, 0, 0, -965, -965, 0, -965, -965, 0, -965, 0, 0, 0, 0, 0, -965, -965, -965, 0, -965, -965, 0, -965, -965, -965, -965, -965, -965, 0, -965, -963, 0, -965, 0, 0, 0, 0, 0, -965, -965, -965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -965, 0, -965, -965, 0, 0, 0, -965, -965, 0, 0, 0, 0, 0, 0, 0, 0, 0, -965, -965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 752 - -512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 753 - -515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 754 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -867, 0, 0, 0, 0, 0, 0, 0, 0, 0, -867, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -230, -230, -230, -230, -230, -230, -230, 0, -230, -230, -230, -230, -230, -230, -230, -230, -230, 0, -230, 0, -230, -230, -230, -230, -230, 0, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -201, -230, -230, 0, 0, 0, -230, 0, -230, -230, -230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -230, 0, -230, -230, 0, 0, 0, -230, -230, 0, 0, 0, 0, 0, 0, 0, 0, 0, -230, -230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 755 - 828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -224, -224, -224, -224, -224, -224, -224, 0, -224, -224, -224, -224, -224, -224, -224, -224, -224, 0, -224, 0, -224, -224, -224, -224, -224, 0, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -195, -224, -224, 0, 0, 0, -224, 0, -224, -224, -224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224, 0, -224, -224, 0, 0, 0, -224, -224, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224, -224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 756 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, + -234, -234, -234, -234, -234, -234, -234, 0, -234, -234, -234, -234, -234, -234, -234, -234, -234, 0, -234, 0, -234, -234, -234, -234, -234, 0, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -205, -234, -234, 0, 0, 0, -234, 0, -234, -234, -234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -234, 0, -234, -234, 0, 0, 0, -234, -234, 0, 0, 0, 0, 0, 0, 0, 0, 0, -234, -234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 757 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -868, 0, 0, 0, 0, 0, 0, 0, 0, 0, -868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 758 - 829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -378, 0, 0, 0, -378, 0, -378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 759 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, + -220, -220, -220, -220, -220, -220, -220, 0, -220, -220, -220, -220, -220, -220, -220, -220, -220, 0, -220, 0, -220, -220, -220, -220, -220, 0, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -191, -220, -220, 0, 0, 0, -220, 0, -220, -220, -220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -220, 0, -220, -220, 0, 0, 0, -220, -220, 0, 0, 0, 0, 0, 0, 0, 0, 0, -220, -220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 760 - -751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 761 - 830, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 762 - -824, 0, 0, 0, 0, 0, -824, 0, -824, 0, 0, 0, -824, 0, 0, -824, 0, 0, 0, -824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -824, 0, -824, -824, -824, -824, 0, 0, 0, 0, 0, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, 0, 0, -824, -824, -824, -824, 0, -824, -824, -824, -824, -824, -824, -824, -824, -824, 0, 0, 0, -824, -824, 0, 0, 0, -824, -824, -824, -824, -824, -824, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 763 - 832, 0, 0, 0, 0, 0, -129, 0, -129, 0, 0, 0, -129, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, -129, 0, 0, 0, 0, 0, -129, 0, -129, -129, 0, 0, -129, 0, -129, 0, 0, 0, 0, 0, -129, -129, 0, -129, 0, 0, -129, 0, -129, -129, 0, -129, -129, -129, 0, -129, 0, 0, -129, -129, 0, 0, 0, -129, 0, 0, 0, 0, -129, -129, -129, -129, -129, -129, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 764 - -358, 0, 0, 0, 0, 0, -358, 0, -358, 0, 0, 0, -358, 0, 0, -358, 0, 0, 0, -358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -358, 0, -358, -358, -358, -358, 0, 0, 0, 0, 0, -358, -358, -358, -358, 0, -358, -358, -358, -358, 0, -358, -358, -358, -358, -358, -358, -358, -358, 0, 0, -358, -358, -358, -358, 0, -358, -358, -358, -358, -358, -358, -358, -358, -358, 0, 0, 0, -358, -358, 0, 0, 0, -358, -358, -358, -358, -358, -358, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 765 - -362, 0, 0, 0, 0, 0, -362, 0, -362, 0, 0, 0, -362, 0, 0, -362, 0, 0, 0, -362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -362, 0, -362, -362, -362, -362, 0, 0, 0, 0, 0, -362, -362, -362, -362, 0, -362, -362, -362, -362, 0, -362, -362, -362, -362, -362, -362, -362, -362, 0, 0, -362, -362, -362, -362, 0, -362, -362, -362, -362, -362, -362, -362, -362, -362, 0, 0, 0, -362, -362, 0, 0, 0, -362, -362, -362, -362, -362, -362, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 766 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -486, -486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -486, 0, // State 767 - -871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -392, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, -392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 768 - -888, 0, 0, 0, 0, 0, -888, 0, -888, 0, 0, 0, -888, 0, 0, -888, 0, 0, 0, -888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -888, 0, -888, -888, -888, -888, 0, 0, 0, 0, 0, -888, -888, -888, -888, 0, -888, -888, -888, -888, 0, 844, 0, 0, -888, -888, -888, -888, -888, 0, 0, -888, -888, -888, -888, 0, -888, -888, -888, -888, -888, -888, -888, -888, -888, 0, 0, 0, -888, -888, 0, 0, 0, -888, -888, -888, -888, -888, -888, + 852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 769 - 0, -240, -240, 0, -240, 0, -240, 0, -240, -240, 0, 0, -240, 0, -240, -240, 0, 0, -240, 0, -240, -240, 0, 0, -244, 0, 0, -240, -240, 0, -240, 0, -240, -240, -240, -240, 0, -240, 0, 0, 0, 0, -240, 0, -240, 0, -240, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 0, -240, -240, 0, 0, 0, -240, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 770 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 859, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 771 - 0, -739, -739, 0, -739, 0, 0, 0, -739, 0, 0, 0, -739, 0, -739, -739, 0, 0, 0, 0, -739, -739, 0, 0, -741, 0, 0, -739, -739, 0, -739, 0, -739, -739, -739, -739, 0, -739, 0, 0, 0, 0, 0, 0, -739, 0, -739, -739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -739, 0, -739, -739, 0, 0, 0, -739, -739, 0, 0, 0, 0, 0, 0, 0, 0, 0, -739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, // State 772 - 0, -364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -364, 0, 0, 0, 0, 0, 0, 0, 0, 0, -366, 0, 0, -364, 0, 0, -364, 0, -364, -364, -364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, -364, -364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -364, 0, -364, -364, 0, 0, 0, -364, -364, 0, 0, 0, 0, 0, 0, 0, 0, 0, -364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 773 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -587, 0, 0, 0, 0, 0, 0, 0, 0, 0, -589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -587, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 774 - 0, -827, -827, 0, -827, 0, 0, 0, -827, 0, 0, 0, -827, 0, -827, -827, 0, 0, 0, 0, -827, -827, 0, 0, -829, 0, 0, -827, -827, 0, -827, 0, -827, -827, -827, -827, 0, -827, 0, 0, 0, 0, 0, 0, -827, 0, -827, -827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -827, 0, -827, -827, 0, 0, 0, -827, -827, 0, 0, 0, 0, 0, 0, 0, 0, 0, -827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -161, 0, 0, 0, 0, 0, 0, 0, 0, 0, -163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, -161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -161, 0, 0, 0, 0, 0, 0, 0, -161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 775 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -890, 0, 0, 0, 0, 0, 0, 0, 0, 0, -893, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -278, -278, 0, -278, 0, -278, 0, -278, -278, 0, 0, -278, 0, -278, -278, 0, 0, -278, 0, -278, -278, 0, 0, -282, 0, 0, -278, -278, 0, -278, 0, -278, -278, -278, -278, 0, 0, -278, 0, 0, 0, 0, -278, 0, -278, 0, -278, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -278, 0, -278, -278, 0, 0, 0, -278, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 776 - 0, 0, 0, 0, 0, 0, 0, -889, 0, 0, 0, 0, 0, 0, -889, 0, 0, 0, 0, 0, 0, 0, 0, 0, -889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -425, -425, 0, -425, 0, 0, 0, -425, 0, 0, 0, -425, 0, -425, -425, 0, 0, 0, 0, -425, -425, 0, 0, -427, 0, 0, -425, -425, 0, -425, 0, -425, -425, -425, -425, 0, 0, -425, 0, 0, 0, 0, 0, 0, -425, 0, -425, -425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -425, 0, -425, -425, 0, 0, 0, -425, -425, 0, 0, 0, 0, 0, 0, 0, 0, 0, -425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 777 - 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, -959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 778 - -908, 0, 0, 0, 0, 0, -908, 0, -908, 0, 0, 0, -908, 0, 0, -908, 0, 0, 0, -908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -908, 0, -908, -908, -908, -908, 0, 0, 0, 0, 0, -908, -908, -908, -908, 0, -908, -908, -908, -908, 0, 0, 0, 0, -908, -908, -908, -908, -908, 0, 0, -908, -908, -908, -908, 0, -908, -908, -908, -908, -908, -908, -908, -908, -908, 0, 0, 0, -908, -908, 0, 0, 0, -908, -908, -908, -908, -908, -908, + 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 779 - 0, -909, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, -909, 0, 0, 0, 0, 0, 0, 0, 0, 0, -911, 0, 0, -909, 0, 0, -909, 0, -909, -909, -909, 0, 0, 0, 0, 0, 0, 0, 0, 0, -909, 0, -909, -909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -909, 0, -909, -909, 0, 0, 0, -909, -909, 0, 0, 0, 0, 0, 0, 0, 0, 0, -909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -577, 0, 0, 0, 0, 0, 0, -577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 780 - 0, 0, 0, 0, 0, 0, 0, 847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 781 - 0, 0, 0, 0, 0, 0, 0, 848, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -233, -233, 0, -233, 0, -233, 0, -233, -233, 0, 0, -233, 0, -233, -233, 0, 0, -233, 0, -233, -233, 0, 0, -260, 0, 0, -233, -233, 0, -233, 0, -233, -233, -233, -233, 0, 0, -233, 0, 0, 0, 0, -233, 0, -233, 0, -233, -233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -233, 0, -233, -233, 0, 0, 0, -233, -233, 0, 0, 0, 0, 0, 0, 0, 0, 0, -233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 782 - 0, -194, -194, 0, -194, 0, -194, 0, -194, -194, 0, 0, -194, 0, -194, -194, 0, 0, -194, 0, -194, -194, 0, 0, -221, 0, 0, -194, -194, 0, -194, 0, -194, -194, -194, -194, 0, -194, 0, 0, 0, 0, -194, 0, -194, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, 0, -194, -194, 0, 0, 0, -194, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, -194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 783 - 0, -188, -188, 0, -188, 0, -188, 0, -188, -188, 0, 0, -188, 0, -188, -188, 0, 0, -188, 0, -188, -188, 0, 0, -895, 0, 0, -188, -188, 0, -188, 0, -188, -188, -188, -188, 0, -188, 0, 0, 0, 0, -188, 0, -188, 0, -188, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, -188, -188, 0, 0, 0, -188, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, -188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -221, -221, 0, -221, 0, -221, 0, -221, -221, 0, 0, -221, 0, -221, -221, 0, 0, -221, 0, -221, -221, 0, 0, -250, 0, 0, -221, -221, 0, -221, 0, -221, -221, -221, -221, 0, 0, -221, 0, 0, 0, 0, -221, 0, -221, 0, -221, -221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -221, 0, -221, -221, 0, 0, 0, -221, -221, 0, 0, 0, 0, 0, 0, 0, 0, 0, -221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 784 - 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -549, 0, 0, 0, 0, 0, 0, 0, 0, 0, -551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -549, -549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -549, 0, 0, 0, 0, 0, 0, 0, -549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 785 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 786 - 0, -198, -198, 0, -198, 0, -198, 0, -198, -198, 0, 0, -198, 0, -198, -198, 0, 0, -198, 0, -198, -198, 0, 0, -225, 0, 0, -198, -198, 0, -198, 0, -198, -198, -198, -198, 0, -198, 0, 0, 0, 0, -198, 0, -198, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, 0, -198, -198, 0, 0, 0, -198, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, -198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 787 - 0, 0, 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -238, -238, 0, -238, 0, -238, 0, -238, -238, 0, 0, -238, 0, -238, -238, 0, 0, -238, 0, -238, -238, 0, 0, -265, 0, 0, -238, -238, 0, -238, 0, -238, -238, -238, -238, 0, 0, -238, 0, 0, 0, 0, -238, 0, -238, 0, -238, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -238, 0, -238, -238, 0, 0, 0, -238, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 788 - 0, -184, -184, 0, -184, 0, -184, 0, -184, -184, 0, 0, -184, 0, -184, -184, 0, 0, -184, 0, -184, -184, 0, 0, -213, 0, 0, -184, -184, 0, -184, 0, -184, -184, -184, -184, 0, -184, 0, 0, 0, 0, -184, 0, -184, 0, -184, -184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -184, 0, -184, -184, 0, 0, 0, -184, -184, 0, 0, 0, 0, 0, 0, 0, 0, 0, -184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 789 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -237, -237, -237, -237, -237, -237, -237, 0, -237, -237, -237, -237, -237, -237, -237, -237, -237, 0, -237, 0, -237, -237, -237, -237, -237, 0, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -208, -237, -237, 0, 0, 0, -237, 0, -237, -237, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -237, 0, -237, -237, 0, 0, 0, -237, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, -237, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 790 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 791 - 0, -201, -201, 0, -201, 0, -201, 0, -201, -201, 0, 0, -201, 0, -201, -201, 0, 0, -201, 0, -201, -201, 0, 0, -228, 0, 0, -201, -201, 0, -201, 0, -201, -201, -201, -201, 0, -201, 0, 0, 0, 0, -201, 0, -201, 0, -201, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, -201, -201, 0, 0, 0, -201, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -240, -240, -240, -240, -240, -240, -240, 0, -240, -240, -240, -240, -240, -240, -240, -240, -240, 0, -240, 0, -240, -240, -240, -240, -240, 0, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -211, -240, -240, 0, 0, 0, -240, 0, -240, -240, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 0, -240, -240, 0, 0, 0, -240, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 792 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 0, -167, 0, -167, -167, -167, -167, -167, 0, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 0, 0, 0, -167, -167, -167, -167, -167, -167, 0, -167, 0, 0, 0, 0, 0, 0, 0, 0, -167, 0, 0, -167, -167, 0, -167, 0, -167, -167, 0, 0, 0, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, -167, -167, -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 793 - 0, -204, -204, 0, -204, 0, -204, 0, -204, -204, 0, 0, -204, 0, -204, -204, 0, 0, -204, 0, -204, -204, 0, 0, -231, 0, 0, -204, -204, 0, -204, 0, -204, -204, -204, -204, 0, -204, 0, 0, 0, 0, -204, 0, -204, 0, -204, -204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -204, 0, -204, -204, 0, 0, 0, -204, -204, 0, 0, 0, 0, 0, 0, 0, 0, 0, -204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -117, -117, -117, -117, 0, 0, -117, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, -117, -117, -117, 0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, -117, 0, 0, 0, 0, -117, -117, -117, 0, -117, -117, // State 794 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -457, 0, 0, 0, 0, 0, 0, -457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 795 - -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, 0, -195, 0, -195, -195, -195, -195, -195, 0, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, 0, 0, 0, -195, -195, -195, -195, -195, -195, 0, -195, 0, 0, 0, 0, 0, 0, 0, 0, -195, 0, 0, -195, -195, 0, -195, 0, -195, -195, 0, 0, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 796 - -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, 0, -189, 0, -189, -189, -189, -189, -189, 0, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, 0, 0, 0, -189, -189, -189, -189, -189, -189, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0, 0, -189, -189, 0, -189, 0, -189, -189, 0, 0, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 797 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, -677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 798 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 863, 0, 0, 0, 0, 0, 0, 0, 0, 0, -662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 799 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 865, 0, 0, 0, 0, 0, 0, 0, 0, 0, -690, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 800 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -885, 0, 0, -885, 0, -885, 0, -885, 0, 0, -885, -885, 0, -885, -885, 0, -885, 0, 0, 0, 0, 0, -885, -885, -885, 0, -885, 0, 0, -885, 0, -885, 0, 0, 0, 0, -885, 0, 0, -885, 0, 0, 0, 0, -885, 0, -885, 0, -885, 0, -885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -885, -885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -885, -885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 801 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 867, 0, 0, 0, 0, 0, 0, 0, 0, 0, -702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 802 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 803 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, 0, -228, 0, -228, -228, -228, -228, -228, 0, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, 0, 0, 0, -228, -228, -228, -228, -228, -228, 0, -228, 0, 0, 0, 0, 0, 0, 0, 0, -228, 0, 0, -228, -228, 0, -228, 0, -228, -228, 0, 0, 0, -228, -228, 0, 0, 0, 0, 0, 0, 0, 0, 0, -228, -228, -228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 804 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 893, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 805 - -270, 0, 0, 0, 0, 0, -270, 0, -270, 0, 0, 0, -270, 0, 0, -270, 0, 0, 0, -270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -270, 0, -270, -270, -270, -270, 0, 0, 0, 0, 0, -270, -270, -270, -270, 0, -270, -270, -270, -270, 0, 0, 0, 0, -270, -270, -270, -270, -270, 0, 0, -270, -270, -270, -270, 0, -270, -270, -270, -270, -270, -270, -270, -270, -270, 0, 0, 0, -270, -270, 0, 0, 0, -270, -270, -270, -270, -270, -270, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, 0, -229, 0, -229, -229, -229, -229, -229, 0, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, 0, 0, 0, -229, -229, -229, -229, -229, -229, 0, -229, 0, 0, 0, 0, 0, 0, 0, 0, -229, 0, 0, -229, -229, 0, -229, 0, -229, -229, 0, 0, 0, -229, -229, 0, 0, 0, 0, 0, 0, 0, 0, 0, -229, -229, -229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 806 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 807 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, -727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 808 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, -732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 809 - -907, 0, 0, 0, 0, 0, -907, 0, -907, 0, 0, 0, -907, 0, 0, -907, 0, 0, 0, -907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -907, 0, -907, -907, -907, -907, 0, 0, 0, 0, 0, -907, -907, -907, -907, 0, -907, -907, -907, -907, 0, 0, 0, 0, -907, -907, -907, -907, -907, 0, 0, -907, -907, -907, -907, 0, -907, -907, -907, -907, -907, -907, -907, -907, -907, 0, 0, 0, -907, -907, 0, 0, 0, -907, -907, -907, -907, -907, -907, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 898, 0, 0, 0, 0, 0, 0, 0, 0, 0, -750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 810 - -264, 0, 0, 0, 0, 0, -264, 0, -264, 0, 0, 0, -264, 0, 0, -264, 0, 0, 0, -264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -264, 0, -264, -264, -264, -264, 0, 0, 0, 0, 0, -264, -264, -264, -264, 0, -264, -264, -264, -264, 0, 0, 0, 0, -264, -264, -264, -264, -264, 0, 0, -264, -264, -264, -264, 0, -264, -264, -264, -264, -264, -264, -264, -264, -264, 0, 0, 0, -264, -264, 0, 0, 0, -264, -264, -264, -264, -264, -264, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 811 - -267, 0, 0, 0, 0, 0, -267, 0, -267, 0, 0, 0, -267, 0, 0, -267, 0, 0, 0, -267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -267, 0, -267, -267, -267, -267, 0, 0, 0, 0, 0, -267, -267, -267, -267, 0, -267, -267, -267, -267, 0, 0, 0, 0, -267, -267, -267, -267, -267, 0, 0, -267, -267, -267, -267, 0, -267, -267, -267, -267, -267, -267, -267, -267, -267, 0, 0, 0, -267, -267, 0, 0, 0, -267, -267, -267, -267, -267, -267, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, -747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 812 - 0, 0, 0, 0, 0, 0, -877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -877, 0, 0, 0, 0, 0, 0, -877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 813 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -795, 0, 0, 0, 0, 0, -795, 0, -795, 0, 0, 0, -795, 0, 0, -795, 0, 0, 0, -795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -795, 0, -795, -795, -795, -795, 0, 0, 0, 0, 0, -795, -795, -795, -795, 0, -795, -795, -795, -795, 0, 0, 0, 0, -795, -795, -795, -795, -795, 0, 0, -795, -795, -795, -795, 0, -795, -795, -795, -795, -795, -795, -795, -795, -795, 0, 0, 0, -795, 0, 0, 0, 0, -795, -795, -795, -795, -795, -795, // State 814 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -279, -279, -279, -279, -279, -279, -279, 0, -279, -279, -279, -279, -279, -279, -279, -279, -279, 0, -279, 0, -279, -279, -279, -279, -279, 0, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -275, -279, -279, 0, 0, 0, -279, 0, -279, -279, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -279, 0, -279, -279, 0, 0, 0, -279, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, -279, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 815 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 816 - -406, 0, 0, 0, 0, 0, -406, 0, -406, 0, 0, 0, -406, 0, 0, -406, 0, 0, 0, -406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -406, 0, -406, -406, -406, -406, 0, 0, 0, 0, 0, -406, -406, -406, -406, 0, -406, -406, -406, -406, 0, 0, 0, 0, -406, -406, -406, -406, -406, 0, 0, -406, -406, -406, -406, 0, -406, -406, -406, -406, -406, -406, -406, -406, -406, 0, 0, 0, -406, -406, 0, 0, 0, -406, -406, -406, -406, -406, -406, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 817 - 0, 0, 0, 0, 0, 0, 0, -630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 818 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -728, 0, 0, 0, 0, 0, 0, -728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -235, -235, -235, -235, -235, -235, -235, 0, -235, -235, -235, -235, -235, -235, -235, -235, -235, 0, -235, 0, -235, -235, -235, -235, -235, 0, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -206, -235, -235, 0, 0, 0, -235, 0, -235, -235, -235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -235, 0, -235, -235, 0, 0, 0, -235, -235, 0, 0, 0, 0, 0, 0, 0, 0, 0, -235, -235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 819 - 0, 0, 0, 0, 0, 0, 0, -629, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -232, -232, -232, -232, -232, -232, -232, 0, -232, -232, -232, -232, -232, -232, -232, -232, -232, 0, -232, 0, -232, -232, -232, -232, -232, 0, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -203, -232, -232, 0, 0, 0, -232, 0, -232, -232, -232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 0, -232, -232, 0, 0, 0, -232, -232, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, -232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 820 - 0, 0, 0, 0, 0, 0, 0, -793, 0, 0, 0, 0, 0, 0, -793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -226, -226, -226, -226, -226, -226, -226, 0, -226, -226, -226, -226, -226, -226, -226, -226, -226, 0, -226, 0, -226, -226, -226, -226, -226, 0, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -197, -226, -226, 0, 0, 0, -226, 0, -226, -226, -226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -226, 0, -226, -226, 0, 0, 0, -226, -226, 0, 0, 0, 0, 0, 0, 0, 0, 0, -226, -226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 821 - 0, 0, 0, 0, 0, 0, 0, -446, 0, 0, 0, 0, 0, 0, -446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -223, -223, -223, -223, -223, -223, -223, 0, -223, -223, -223, -223, -223, -223, -223, -223, -223, 0, -223, 0, -223, -223, -223, -223, -223, 0, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -194, -223, -223, 0, 0, 0, -223, 0, -223, -223, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -223, 0, -223, -223, 0, 0, 0, -223, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, -223, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 822 - 0, 0, 0, 0, 0, 0, 0, -352, 0, 0, 0, 0, 0, 0, -352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -236, -236, -236, -236, -236, -236, -236, 0, -236, -236, -236, -236, -236, -236, -236, -236, -236, 0, -236, 0, -236, -236, -236, -236, -236, 0, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -207, -236, -236, 0, 0, 0, -236, 0, -236, -236, -236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -236, 0, -236, -236, 0, 0, 0, -236, -236, 0, 0, 0, 0, 0, 0, 0, 0, 0, -236, -236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 823 - 0, 0, 0, 0, 0, 0, 0, 891, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -222, -222, -222, -222, -222, -222, -222, 0, -222, -222, -222, -222, -222, -222, -222, -222, -222, 0, -222, 0, -222, -222, -222, -222, -222, 0, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -193, -222, -222, 0, 0, 0, -222, 0, -222, -222, -222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -222, 0, -222, -222, 0, 0, 0, -222, -222, 0, 0, 0, 0, 0, 0, 0, 0, 0, -222, -222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 824 - -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 825 - -426, 0, 0, 0, 0, 0, -426, 0, -426, 0, 0, 0, -426, 0, 0, -426, 0, 0, 0, -426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -426, 0, -426, -426, -426, -426, 0, 0, 0, 0, 0, -426, -426, -426, -426, 0, -426, -426, -426, -426, 287, 892, 0, 0, -426, -426, -426, -426, -426, 0, 0, -426, -426, -426, -426, 0, -426, -426, -426, -426, -426, -426, -426, -426, -426, 0, 0, 0, -426, -426, 0, 0, 0, -426, -426, -426, -426, -426, -426, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 826 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 827 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, + -310, 0, 0, 0, 0, 0, -310, 0, -310, 0, 0, 0, -310, 0, 0, -310, 0, 0, 0, -310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -310, 0, -310, -310, -310, -310, 0, 0, 0, 0, 0, -310, -310, -310, -310, 0, -310, -310, -310, -310, 0, 0, 0, 0, -310, -310, -310, -310, -310, 0, 0, -310, -310, -310, -310, 0, -310, -310, -310, -310, -310, -310, -310, -310, -310, 0, 0, 0, -310, -310, 0, 0, 0, -310, -310, -310, -310, -310, -310, // State 828 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -927, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -927, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 829 - -825, 0, 0, 0, 0, 0, -825, 0, -825, 0, 0, 0, -825, 0, 0, -825, 0, 0, 0, -825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -825, 0, -825, -825, -825, -825, 0, 0, 0, 0, 0, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, 0, 0, -825, -825, -825, -825, 0, -825, -825, -825, -825, -825, -825, -825, -825, -825, 0, 0, 0, -825, -825, 0, 0, 0, -825, -825, -825, -825, -825, -825, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 830 - 896, 0, 0, 0, 0, 0, -130, 0, -130, 0, 0, 0, -130, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, -130, 0, 0, 0, 0, 0, -130, 0, -130, -130, 0, 0, -130, 0, -130, 0, 0, 0, 0, 0, -130, -130, 0, -130, 0, 0, -130, 0, -130, -130, 0, -130, -130, -130, 0, -130, 0, 0, -130, -130, 0, 0, 0, -130, 0, 0, 0, 0, -130, -130, -130, -130, -130, -130, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 831 - -822, 0, 0, 0, 0, 0, -822, 0, -822, 0, 0, 0, -822, 0, 0, -822, 0, 0, 0, -822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -822, 0, -822, -822, -822, -822, 0, 0, 0, 0, 0, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, 0, 0, -822, -822, -822, -822, 0, -822, -822, -822, -822, -822, -822, -822, -822, -822, 0, 0, 0, -822, -822, 0, 0, 0, -822, -822, -822, -822, -822, -822, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 832 - -359, 0, 0, 0, 0, 0, -359, 0, -359, 0, 0, 0, -359, 0, 0, -359, 0, 0, 0, -359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -359, 0, -359, -359, -359, -359, 0, 0, 0, 0, 0, -359, -359, -359, -359, 0, -359, -359, -359, -359, 0, -359, -359, -359, -359, -359, -359, -359, -359, 0, 0, -359, -359, -359, -359, 0, -359, -359, -359, -359, -359, -359, -359, -359, -359, 0, 0, 0, -359, -359, 0, 0, 0, -359, -359, -359, -359, -359, -359, + 0, 0, 0, 0, 0, 0, 0, -935, 0, 0, 0, 0, 0, 0, -935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, -935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 833 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -678, 0, 0, 0, 0, 0, 0, 918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 834 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -652, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 835 - -363, 0, 0, 0, 0, 0, -363, 0, -363, 0, 0, 0, -363, 0, 0, -363, 0, 0, 0, -363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -363, 0, -363, -363, -363, -363, 0, 0, 0, 0, 0, -363, -363, -363, -363, 0, -363, -363, -363, -363, 0, -363, -363, -363, -363, -363, -363, -363, -363, 0, 0, -363, -363, -363, -363, 0, -363, -363, -363, -363, -363, -363, -363, -363, -363, 0, 0, 0, -363, -363, 0, 0, 0, -363, -363, -363, -363, -363, -363, + 0, 0, 0, 0, 0, 0, 0, -571, 0, 0, 0, 0, 0, 0, -571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 836 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 837 - 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -591, 0, 0, 0, 0, 0, 0, -591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 838 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -776, 0, 0, 0, 0, 0, 0, -776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 839 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 840 - 0, 0, 0, 0, 0, 0, -803, 0, -803, 0, 0, 0, -803, 0, 0, -803, 0, 0, 0, -803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -803, 0, -803, -803, -803, -803, 0, 0, 0, 0, 0, -803, -803, -803, -803, 0, -803, -803, -803, -803, 0, 0, 0, 0, -803, -803, -803, -803, -803, 0, 0, -803, -803, -803, -803, 0, -803, -803, -803, -803, -803, -803, -803, -803, -803, 0, 0, 0, -803, -803, 0, 0, 0, -803, -803, -803, -803, -803, -803, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 841 - 901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -564, 0, 0, 0, 0, 0, 0, -564, 0, 0, 0, 0, 0, 0, -564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 842 - -870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 843 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 844 - 0, -239, -239, 0, -239, 0, -239, 0, -239, -239, 0, 0, -239, 0, -239, -239, 0, 0, -239, 0, -239, -239, 0, 0, -243, 0, 0, -239, -239, 0, -239, 0, -239, -239, -239, -239, 0, -239, 0, 0, 0, 0, -239, 0, -239, 0, -239, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -239, 0, -239, -239, 0, 0, 0, -239, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 845 - 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 846 - 0, -199, -199, 0, -199, 0, -199, 0, -199, -199, 0, 0, -199, 0, -199, -199, 0, 0, -199, 0, -199, -199, 0, 0, -226, 0, 0, -199, -199, 0, -199, 0, -199, -199, -199, -199, 0, -199, 0, 0, 0, 0, -199, 0, -199, 0, -199, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, -199, -199, 0, 0, 0, -199, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 847 - 0, -196, -196, 0, -196, 0, -196, 0, -196, -196, 0, 0, -196, 0, -196, -196, 0, 0, -196, 0, -196, -196, 0, 0, -223, 0, 0, -196, -196, 0, -196, 0, -196, -196, -196, -196, 0, -196, 0, 0, 0, 0, -196, 0, -196, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, 0, -196, -196, 0, 0, 0, -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 848 - 0, -190, -190, 0, -190, 0, -190, 0, -190, -190, 0, 0, -190, 0, -190, -190, 0, 0, -190, 0, -190, -190, 0, 0, -217, 0, 0, -190, -190, 0, -190, 0, -190, -190, -190, -190, 0, -190, 0, 0, 0, 0, -190, 0, -190, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, 0, -190, -190, 0, 0, 0, -190, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 849 - 0, 0, 0, 0, 0, 0, 0, -531, 0, 0, 0, 0, 0, 0, -531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -921, 0, 0, 0, 0, 0, 0, 0, 0, 0, -921, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 850 - 0, -187, -187, 0, -187, 0, -187, 0, -187, -187, 0, 0, -187, 0, -187, -187, 0, 0, -187, 0, -187, -187, 0, 0, -894, 0, 0, -187, -187, 0, -187, 0, -187, -187, -187, -187, 0, -187, 0, 0, 0, 0, -187, 0, -187, 0, -187, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, -187, -187, 0, 0, 0, -187, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, -187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 851 - 0, 0, 0, 0, 0, 0, 0, -891, 0, 0, 0, 0, 0, 0, -891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, // State 852 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -903, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -922, 0, 0, 0, 0, 0, 0, 0, 0, 0, -922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 853 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -897, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 854 - 0, -200, -200, 0, -200, 0, -200, 0, -200, -200, 0, 0, -200, 0, -200, -200, 0, 0, -200, 0, -200, -200, 0, 0, -227, 0, 0, -200, -200, 0, -200, 0, -200, -200, -200, -200, 0, -200, 0, 0, 0, 0, -200, 0, -200, 0, -200, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, -200, -200, 0, 0, 0, -200, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, // State 855 - 0, -186, -186, 0, -186, 0, -186, 0, -186, -186, 0, 0, -186, 0, -186, -186, 0, 0, -186, 0, -186, -186, 0, 0, -215, 0, 0, -186, -186, 0, -186, 0, -186, -186, -186, -186, 0, -186, 0, 0, 0, 0, -186, 0, -186, 0, -186, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, -186, -186, 0, 0, 0, -186, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, -186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 856 - 0, -203, -203, 0, -203, 0, -203, 0, -203, -203, 0, 0, -203, 0, -203, -203, 0, 0, -203, 0, -203, -203, 0, 0, -230, 0, 0, -203, -203, 0, -203, 0, -203, -203, -203, -203, 0, -203, 0, 0, 0, 0, -203, 0, -203, 0, -203, -203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -203, 0, -203, -203, 0, 0, 0, -203, -203, 0, 0, 0, 0, 0, 0, 0, 0, 0, -203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 857 - 0, -205, -205, 0, -205, 0, -205, 0, -205, -205, 0, 0, -205, 0, -205, -205, 0, 0, -205, 0, -205, -205, 0, 0, -232, 0, 0, -205, -205, 0, -205, 0, -205, -205, -205, -205, 0, -205, 0, 0, 0, 0, -205, 0, -205, 0, -205, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, -205, -205, 0, 0, 0, -205, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -876, 0, 0, 0, 0, 0, -876, 0, -876, 0, 0, 0, -876, 0, 0, -876, 0, 0, 0, -876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -876, 0, -876, -876, -876, -876, 0, 0, 0, 0, 0, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, 0, 0, -876, -876, -876, -876, 0, -876, -876, -876, -876, -876, -876, -876, -876, -876, 0, 0, 0, -876, -876, 0, 0, 0, -876, -876, -876, -876, -876, -876, // State 858 - 0, 0, 0, 0, 0, 0, 0, -328, 0, 0, 0, 0, 0, 0, -328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -328, 0, 0, 0, 0, 0, -328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -328, 0, 0, -328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 932, 0, 0, 0, 0, 0, -132, 0, -132, 0, 0, 0, -132, 0, 0, -132, 0, 0, 0, -132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -132, -132, -132, -132, 0, 0, 0, 0, 0, -132, 0, -132, -132, 0, 0, -132, 0, -132, 0, 0, 0, 0, 0, -132, -132, 0, -132, 0, 0, -132, 0, -132, -132, 0, -132, -132, -132, 0, -132, 0, 0, -132, -132, 0, 0, 0, -132, 0, 0, 0, 0, -132, -132, -132, -132, -132, -132, // State 859 - -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, 0, -191, 0, -191, -191, -191, -191, -191, 0, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, 0, 0, 0, -191, -191, -191, -191, -191, -191, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, -191, -191, 0, -191, 0, -191, -191, 0, 0, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -400, 0, 0, 0, 0, 0, -400, 0, -400, 0, 0, 0, -400, 0, 0, -400, 0, 0, 0, -400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -400, 0, -400, -400, -400, -400, 0, 0, 0, 0, 0, -400, -400, -400, -400, 0, -400, -400, -400, -400, 0, -400, -400, -400, -400, -400, -400, -400, -400, 0, 0, -400, -400, -400, -400, 0, -400, -400, -400, -400, -400, -400, -400, -400, -400, 0, 0, 0, -400, -400, 0, 0, 0, -400, -400, -400, -400, -400, -400, // State 860 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 917, 0, 0, 0, 0, 0, 0, 0, 0, 0, -668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -404, 0, 0, 0, 0, 0, -404, 0, -404, 0, 0, 0, -404, 0, 0, -404, 0, 0, 0, -404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -404, 0, -404, -404, -404, -404, 0, 0, 0, 0, 0, -404, -404, -404, -404, 0, -404, -404, -404, -404, 0, -404, -404, -404, -404, -404, -404, -404, -404, 0, 0, -404, -404, -404, -404, 0, -404, -404, -404, -404, -404, -404, -404, -404, -404, 0, 0, 0, -404, -404, 0, 0, 0, -404, -404, -404, -404, -404, -404, // State 861 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 919, 0, 0, 0, 0, 0, 0, 0, 0, 0, -659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 862 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 863 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 920, 0, 0, 0, 0, 0, 0, 0, 0, 0, -691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -942, 0, 0, 0, 0, 0, -942, 0, -942, 0, 0, 0, -942, 0, 0, -942, 0, 0, 0, -942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -942, 0, -942, -942, -942, -942, 0, 0, 0, 0, 0, -942, -942, -942, -942, 0, -942, -942, -942, -942, 0, 944, 0, 0, -942, -942, -942, -942, -942, 0, 0, -942, -942, -942, -942, 0, -942, -942, -942, -942, -942, -942, -942, -942, -942, 0, 0, 0, -942, -942, 0, 0, 0, -942, -942, -942, -942, -942, -942, // State 864 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -280, -280, 0, -280, 0, -280, 0, -280, -280, 0, 0, -280, 0, -280, -280, 0, 0, -280, 0, -280, -280, 0, 0, -284, 0, 0, -280, -280, 0, -280, 0, -280, -280, -280, -280, 0, 0, -280, 0, 0, 0, 0, -280, 0, -280, 0, -280, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -280, 0, -280, -280, 0, 0, 0, -280, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 865 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, -681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 866 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -788, -788, 0, -788, 0, 0, 0, -788, 0, 0, 0, -788, 0, -788, -788, 0, 0, 0, 0, -788, -788, 0, 0, -790, 0, 0, -788, -788, 0, -788, 0, -788, -788, -788, -788, 0, 0, -788, 0, 0, 0, 0, 0, 0, -788, 0, -788, -788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -788, 0, -788, -788, 0, 0, 0, -788, -788, 0, 0, 0, 0, 0, 0, 0, 0, 0, -788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 867 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, -410, 0, 0, -408, 0, 0, -408, 0, -408, -408, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, -408, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -408, 0, -408, -408, 0, 0, 0, -408, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 868 - -266, 0, 0, 0, 0, 0, -266, 0, -266, 0, 0, 0, -266, 0, 0, -266, 0, 0, 0, -266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -266, 0, -266, -266, -266, -266, 0, 0, 0, 0, 0, -266, -266, -266, -266, 0, -266, -266, -266, -266, 0, 0, 0, 0, -266, -266, -266, -266, -266, 0, 0, -266, -266, -266, -266, 0, -266, -266, -266, -266, -266, -266, -266, -266, -266, 0, 0, 0, -266, -266, 0, 0, 0, -266, -266, -266, -266, -266, -266, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 869 - -269, 0, 0, 0, 0, 0, -269, 0, -269, 0, 0, 0, -269, 0, 0, -269, 0, 0, 0, -269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -269, 0, -269, -269, -269, -269, 0, 0, 0, 0, 0, -269, -269, -269, -269, 0, -269, -269, -269, -269, 0, 0, 0, 0, -269, -269, -269, -269, -269, 0, 0, -269, -269, -269, -269, 0, -269, -269, -269, -269, -269, -269, -269, -269, -269, 0, 0, 0, -269, -269, 0, 0, 0, -269, -269, -269, -269, -269, -269, + 0, -881, -881, 0, -881, 0, 0, 0, -881, 0, 0, 0, -881, 0, -881, -881, 0, 0, 0, 0, -881, -881, 0, 0, -883, 0, 0, -881, -881, 0, -881, 0, -881, -881, -881, -881, 0, 0, -881, 0, 0, 0, 0, 0, 0, -881, 0, -881, -881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -881, 0, -881, -881, 0, 0, 0, -881, -881, 0, 0, 0, 0, 0, 0, 0, 0, 0, -881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 870 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -944, 0, 0, 0, 0, 0, 0, 0, 0, 0, -947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 871 - -408, 0, 0, 0, 0, 0, -408, 0, -408, 0, 0, 0, -408, 0, 0, -408, 0, 0, 0, -408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -408, 0, -408, -408, -408, -408, 0, 0, 0, 0, 0, -408, -408, -408, -408, 0, -408, -408, -408, -408, 0, 0, 0, 0, -408, -408, -408, -408, -408, 0, 0, -408, -408, -408, -408, 0, -408, -408, -408, -408, -408, -408, -408, -408, -408, 0, 0, 0, -408, -408, 0, 0, 0, -408, -408, -408, -408, -408, -408, + 0, 0, 0, 0, 0, 0, 0, -943, 0, 0, 0, 0, 0, 0, -943, 0, 0, 0, 0, 0, 0, 0, 0, 0, -943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 872 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 873 - -398, 0, 0, 0, 0, 0, -398, 0, -398, 0, 0, 0, -398, 0, 0, -398, 0, 0, 0, -398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -398, 0, -398, -398, -398, -398, 0, 0, 0, 0, 0, -398, -398, -398, -398, 0, -398, -398, -398, -398, 0, 0, 0, 0, -398, -398, -398, -398, -398, 0, 0, -398, -398, -398, -398, 0, -398, -398, -398, -398, -398, -398, -398, -398, -398, 0, 0, 0, -398, -398, 0, 0, 0, -398, -398, -398, -398, -398, -398, + -962, 0, 0, 0, 0, 0, -962, 0, -962, 0, 0, 0, -962, 0, 0, -962, 0, 0, 0, -962, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -962, 0, -962, -962, -962, -962, 0, 0, 0, 0, 0, -962, -962, -962, -962, 0, -962, -962, -962, -962, 0, 0, 0, 0, -962, -962, -962, -962, -962, 0, 0, -962, -962, -962, -962, 0, -962, -962, -962, -962, -962, -962, -962, -962, -962, 0, 0, 0, -962, -962, 0, 0, 0, -962, -962, -962, -962, -962, -962, // State 874 - -263, 0, 0, 0, 0, 0, -263, 0, -263, 0, 0, 0, -263, 0, 0, -263, 0, 0, 0, -263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -263, 0, -263, -263, -263, -263, 0, 0, 0, 0, 0, -263, -263, -263, -263, 0, -263, -263, -263, -263, 0, 0, 0, 0, -263, -263, -263, -263, -263, 0, 0, -263, -263, -263, -263, 0, -263, -263, -263, -263, -263, -263, -263, -263, -263, 0, 0, 0, -263, -263, 0, 0, 0, -263, -263, -263, -263, -263, -263, + 0, -965, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, -965, 0, 0, 0, 0, 0, 0, 0, 0, 0, -967, 0, 0, -965, 0, 0, -965, 0, -965, -965, -965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -965, 0, -965, -965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -965, 0, -965, -965, 0, 0, 0, -965, -965, 0, 0, 0, 0, 0, 0, 0, 0, 0, -965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 875 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 876 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 948, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 877 - 0, 0, 0, 0, 0, 0, -876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -876, 0, 0, 0, 0, 0, 0, -876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -230, -230, 0, -230, 0, -230, 0, -230, -230, 0, 0, -230, 0, -230, -230, 0, 0, -230, 0, -230, -230, 0, 0, -257, 0, 0, -230, -230, 0, -230, 0, -230, -230, -230, -230, 0, 0, -230, 0, 0, 0, 0, -230, 0, -230, 0, -230, -230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -230, 0, -230, -230, 0, 0, 0, -230, -230, 0, 0, 0, 0, 0, 0, 0, 0, 0, -230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 878 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -224, -224, 0, -224, 0, -224, 0, -224, -224, 0, 0, -224, 0, -224, -224, 0, 0, -224, 0, -224, -224, 0, 0, -949, 0, 0, -224, -224, 0, -224, 0, -224, -224, -224, -224, 0, 0, -224, 0, 0, 0, 0, -224, 0, -224, 0, -224, -224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224, 0, -224, -224, 0, 0, 0, -224, -224, 0, 0, 0, 0, 0, 0, 0, 0, 0, -224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 879 - -405, 0, 0, 0, 0, 0, -405, 0, -405, 0, 0, 0, -405, 0, 0, -405, 0, 0, 0, -405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -405, 0, -405, -405, -405, -405, 0, 0, 0, 0, 0, -405, -405, -405, -405, 0, -405, -405, -405, -405, 0, 0, 0, 0, -405, -405, -405, -405, -405, 0, 0, -405, -405, -405, -405, 0, -405, -405, -405, -405, -405, -405, -405, -405, -405, 0, 0, 0, -405, -405, 0, 0, 0, -405, -405, -405, -405, -405, -405, + 0, 0, 0, 0, 0, 0, 0, 953, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 880 - 0, 0, 0, 0, 0, 0, 0, -880, 0, 0, 0, 0, 0, 0, -880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 881 - 0, 0, 0, 0, 0, 0, 0, -611, 0, 0, 0, 0, 0, 0, 933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -234, -234, 0, -234, 0, -234, 0, -234, -234, 0, 0, -234, 0, -234, -234, 0, 0, -234, 0, -234, -234, 0, 0, -261, 0, 0, -234, -234, 0, -234, 0, -234, -234, -234, -234, 0, 0, -234, 0, 0, 0, 0, -234, 0, -234, 0, -234, -234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -234, 0, -234, -234, 0, 0, 0, -234, -234, 0, 0, 0, 0, 0, 0, 0, 0, 0, -234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 882 - 0, 0, 0, 0, 0, 0, 0, -525, 0, 0, 0, 0, 0, 0, -525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 883 - 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, -545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -220, -220, 0, -220, 0, -220, 0, -220, -220, 0, 0, -220, 0, -220, -220, 0, 0, -220, 0, -220, -220, 0, 0, -249, 0, 0, -220, -220, 0, -220, 0, -220, -220, -220, -220, 0, 0, -220, 0, 0, 0, 0, -220, 0, -220, 0, -220, -220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -220, 0, -220, -220, 0, 0, 0, -220, -220, 0, 0, 0, 0, 0, 0, 0, 0, 0, -220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 884 - 0, 0, 0, 0, 0, 0, 0, -628, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 885 - 0, 0, 0, 0, 0, 0, 0, -623, 0, 0, 0, 0, 0, 0, 940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 886 - 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -237, -237, 0, -237, 0, -237, 0, -237, -237, 0, 0, -237, 0, -237, -237, 0, 0, -237, 0, -237, -237, 0, 0, -264, 0, 0, -237, -237, 0, -237, 0, -237, -237, -237, -237, 0, 0, -237, 0, 0, 0, 0, -237, 0, -237, 0, -237, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -237, 0, -237, -237, 0, 0, 0, -237, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 887 - -392, 0, 0, 0, 0, 0, -392, 0, -392, 0, 0, 0, -392, 0, 0, -392, 0, 0, 0, -392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -392, 0, -392, -392, -392, -392, 0, 0, 0, 0, 0, -392, -392, -392, -392, 0, -392, -392, -392, -392, 0, 942, 0, 0, -392, -392, -392, -392, -392, 0, 0, -392, -392, -392, -392, 0, -392, -392, -392, -392, -392, -392, -392, -392, -392, 0, 0, 0, -392, -392, 0, 0, 0, -392, -392, -392, -392, -392, -392, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 888 - -516, 0, 0, 0, 0, 0, 0, -516, 0, 0, 0, 0, 0, 0, -516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -240, -240, 0, -240, 0, -240, 0, -240, -240, 0, 0, -240, 0, -240, -240, 0, 0, -240, 0, -240, -240, 0, 0, -267, 0, 0, -240, -240, 0, -240, 0, -240, -240, -240, -240, 0, 0, -240, 0, 0, 0, 0, -240, 0, -240, 0, -240, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 0, -240, -240, 0, 0, 0, -240, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 889 - -519, 0, 0, 0, 0, 0, 0, -519, 0, 0, 0, 0, 0, 0, -519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -239, -239, -239, -239, -239, -239, -239, 0, -239, -239, -239, -239, -239, -239, -239, -239, -239, 0, -239, 0, -239, -239, -239, -239, -239, 0, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -210, -239, -239, 0, 0, 0, -239, 0, -239, -239, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -239, 0, -239, -239, 0, 0, 0, -239, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, -239, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 890 - -433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -241, -241, -241, -241, -241, -241, -241, 0, -241, -241, -241, -241, -241, -241, -241, -241, -241, 0, -241, 0, -241, -241, -241, -241, -241, 0, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -212, -241, -241, 0, 0, 0, -241, 0, -241, -241, -241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 0, -241, -241, 0, 0, 0, -241, -241, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, -241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 891 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 892 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, 0, -231, 0, -231, -231, -231, -231, -231, 0, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, 0, 0, 0, -231, -231, -231, -231, -231, -231, 0, -231, 0, 0, 0, 0, 0, 0, 0, 0, -231, 0, 0, -231, -231, 0, -231, 0, -231, -231, 0, 0, 0, -231, -231, 0, 0, 0, 0, 0, 0, 0, 0, 0, -231, -231, -231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 893 - -514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, 0, -225, 0, -225, -225, -225, -225, -225, 0, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, 0, 0, 0, -225, -225, -225, -225, -225, -225, 0, -225, 0, 0, 0, 0, 0, 0, 0, 0, -225, 0, 0, -225, -225, 0, -225, 0, -225, -225, 0, 0, 0, -225, -225, 0, 0, 0, 0, 0, 0, 0, 0, 0, -225, -225, -225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 894 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -480, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, -724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 895 - -823, 0, 0, 0, 0, 0, -823, 0, -823, 0, 0, 0, -823, 0, 0, -823, 0, 0, 0, -823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -823, 0, -823, -823, -823, -823, 0, 0, 0, 0, 0, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, 0, 0, -823, -823, -823, -823, 0, -823, -823, -823, -823, -823, -823, -823, -823, -823, 0, 0, 0, -823, -823, 0, 0, 0, -823, -823, -823, -823, -823, -823, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 963, 0, 0, 0, 0, 0, 0, 0, 0, 0, -709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 896 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 965, 0, 0, 0, 0, 0, 0, 0, 0, 0, -737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 897 - -356, 0, 0, 0, 0, 0, -356, 0, -356, 0, 0, 0, -356, 0, 0, -356, 0, 0, 0, -356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -356, 0, -356, -356, -356, -356, 0, 0, 0, 0, 0, -356, -356, -356, -356, 0, -356, -356, -356, -356, 0, -356, -356, -356, -356, -356, -356, -356, -356, 0, 0, -356, -356, -356, -356, 0, -356, -356, -356, -356, -356, -356, -356, -356, -356, 0, 0, 0, -356, -356, 0, 0, 0, -356, -356, -356, -356, -356, -356, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 898 - -860, 0, 0, 0, 0, 0, -860, 0, -860, 0, 0, 0, -860, 0, 0, -860, 0, 0, 0, -860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -860, 0, -860, -860, -860, -860, 0, 0, 0, 0, 0, -860, -860, -860, -860, 0, -860, -860, -860, -860, 0, 0, 0, 0, -860, -860, -860, -860, -860, 0, 0, -860, -860, -860, -860, 0, -860, -860, -860, -860, -860, -860, -860, -860, -860, 0, 0, 0, -860, -860, 0, 0, 0, -860, -860, -860, -860, -860, -860, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 967, 0, 0, 0, 0, 0, 0, 0, 0, 0, -749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 899 - 978, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 979, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 900 - 0, 0, 0, 0, 0, 0, -801, 0, -801, 0, 0, 0, -801, 0, 0, -801, 0, 0, 0, -801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -801, 0, -801, -801, -801, -801, 0, 0, 0, 0, 0, -801, -801, -801, -801, 0, -801, -801, -801, -801, 0, 0, 0, 0, -801, -801, -801, -801, -801, 0, 0, -801, -801, -801, -801, 0, -801, -801, -801, -801, -801, -801, -801, -801, -801, 0, 0, 0, -801, -801, 0, 0, 0, -801, -801, -801, -801, -801, -801, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 901 - 980, 0, 0, 0, 0, 0, -129, 0, -129, 0, 0, 0, -129, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, -129, 0, 0, 0, 0, 0, -129, 0, -129, -129, 0, 0, -129, 0, -129, 0, 0, 0, 0, 0, -129, -129, 0, -129, 0, 0, -129, 0, -129, -129, 0, -129, -129, -129, 0, -129, 0, 0, -129, -129, 0, 0, 0, -129, 0, 0, 0, 0, -129, -129, -129, -129, -129, -129, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 902 - 0, 0, 0, 0, 0, 0, -804, 0, -804, 0, 0, 0, -804, 0, 0, -804, 0, 0, 0, -804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -804, 0, -804, -804, -804, -804, 0, 0, 0, 0, 0, -804, -804, -804, -804, 0, -804, -804, -804, -804, 0, 0, 0, 0, -804, -804, -804, -804, -804, 0, 0, -804, -804, -804, -804, 0, -804, -804, -804, -804, -804, -804, -804, -804, -804, 0, 0, 0, -804, -804, 0, 0, 0, -804, -804, -804, -804, -804, -804, + -312, 0, 0, 0, 0, 0, -312, 0, -312, 0, 0, 0, -312, 0, 0, -312, 0, 0, 0, -312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -312, 0, -312, -312, -312, -312, 0, 0, 0, 0, 0, -312, -312, -312, -312, 0, -312, -312, -312, -312, 0, 0, 0, 0, -312, -312, -312, -312, -312, 0, 0, -312, -312, -312, -312, 0, -312, -312, -312, -312, -312, -312, -312, -312, -312, 0, 0, 0, -312, -312, 0, 0, 0, -312, -312, -312, -312, -312, -312, // State 903 - 982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 904 - -826, 0, 0, 0, 0, 0, -826, 0, -826, 0, 0, 0, -826, 0, 0, -826, 0, 0, 0, -826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -826, 0, -826, -826, -826, -826, 0, 0, 0, 0, 0, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, 0, 0, -826, -826, -826, -826, 0, -826, -826, -826, -826, -826, -826, -826, -826, -826, 0, 0, 0, -826, -826, 0, 0, 0, -826, -826, -826, -826, -826, -826, + -228, -228, -228, -228, -228, -228, -228, 0, -228, -228, -228, -228, -228, -228, -228, -228, -228, 0, -228, 0, -228, -228, -228, -228, -228, 0, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -199, -228, -228, 0, 0, 0, -228, 0, -228, -228, -228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -228, 0, -228, -228, 0, 0, 0, -228, -228, 0, 0, 0, 0, 0, 0, 0, 0, 0, -228, -228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 905 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -831, 0, 0, 0, 0, 0, 0, 0, 0, 0, -836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 973, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 906 - 0, 0, 0, 0, 0, 0, 0, -890, 0, 0, 0, 0, 0, 0, -890, 0, 0, 0, 0, 0, 0, 0, 0, 0, -890, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -229, -229, -229, -229, -229, -229, -229, 0, -229, -229, -229, -229, -229, -229, -229, -229, -229, 0, -229, 0, -229, -229, -229, -229, -229, 0, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -200, -229, -229, 0, 0, 0, -229, 0, -229, -229, -229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -229, 0, -229, -229, 0, 0, 0, -229, -229, 0, 0, 0, 0, 0, 0, 0, 0, 0, -229, -229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 907 - 0, -192, -192, 0, -192, 0, -192, 0, -192, -192, 0, 0, -192, 0, -192, -192, 0, 0, -192, 0, -192, -192, 0, 0, -219, 0, 0, -192, -192, 0, -192, 0, -192, -192, -192, -192, 0, -192, 0, 0, 0, 0, -192, 0, -192, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, 0, -192, -192, 0, 0, 0, -192, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 908 - 0, 0, 0, 0, 0, 0, 0, 985, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 909 - 0, -193, -193, 0, -193, 0, -193, 0, -193, -193, 0, 0, -193, 0, -193, -193, 0, 0, -193, 0, -193, -193, 0, 0, -220, 0, 0, -193, -193, 0, -193, 0, -193, -193, -193, -193, 0, -193, 0, 0, 0, 0, -193, 0, -193, 0, -193, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -193, 0, -193, -193, 0, 0, 0, -193, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, -193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -961, 0, 0, 0, 0, 0, -961, 0, -961, 0, 0, 0, -961, 0, 0, -961, 0, 0, 0, -961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -961, 0, -961, -961, -961, -961, 0, 0, 0, 0, 0, -961, -961, -961, -961, 0, -961, -961, -961, -961, 0, 0, 0, 0, -961, -961, -961, -961, -961, 0, 0, -961, -961, -961, -961, 0, -961, -961, -961, -961, -961, -961, -961, -961, -961, 0, 0, 0, -961, -961, 0, 0, 0, -961, -961, -961, -961, -961, -961, // State 910 - 0, 0, 0, 0, 0, 0, 0, 987, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -306, 0, 0, 0, 0, 0, -306, 0, -306, 0, 0, 0, -306, 0, 0, -306, 0, 0, 0, -306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -306, 0, -306, -306, -306, -306, 0, 0, 0, 0, 0, -306, -306, -306, -306, 0, -306, -306, -306, -306, 0, 0, 0, 0, -306, -306, -306, -306, -306, 0, 0, -306, -306, -306, -306, 0, -306, -306, -306, -306, -306, -306, -306, -306, -306, 0, 0, 0, -306, -306, 0, 0, 0, -306, -306, -306, -306, -306, -306, // State 911 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -309, 0, 0, 0, 0, 0, -309, 0, -309, 0, 0, 0, -309, 0, 0, -309, 0, 0, 0, -309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -309, 0, -309, -309, -309, -309, 0, 0, 0, 0, 0, -309, -309, -309, -309, 0, -309, -309, -309, -309, 0, 0, 0, 0, -309, -309, -309, -309, -309, 0, 0, -309, -309, -309, -309, 0, -309, -309, -309, -309, -309, -309, -309, -309, -309, 0, 0, 0, -309, -309, 0, 0, 0, -309, -309, -309, -309, -309, -309, // State 912 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -931, 0, 0, 0, 0, 0, 0, -931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 913 - 0, 0, 0, 0, 0, 0, 0, -329, 0, 0, 0, 0, 0, 0, -329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -329, 0, 0, 0, 0, 0, -329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -329, 0, 0, -329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 914 - 0, 0, 0, 0, 0, 0, 0, -325, 0, 0, 0, 0, 0, 0, -325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -325, 0, 0, 0, 0, 0, -325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -325, 0, 0, -325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 915 - 0, 0, 0, 0, 0, 0, 0, -371, 0, 0, 0, 0, 0, 0, -371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -371, 0, 0, 0, 0, 0, -371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -371, 0, 0, -371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 916 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -452, 0, 0, 0, 0, 0, -452, 0, -452, 0, 0, 0, -452, 0, 0, -452, 0, 0, 0, -452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -452, 0, -452, -452, -452, -452, 0, 0, 0, 0, 0, -452, -452, -452, -452, 0, -452, -452, -452, -452, 0, 0, 0, 0, -452, -452, -452, -452, -452, 0, 0, -452, -452, -452, -452, 0, -452, -452, -452, -452, -452, -452, -452, -452, -452, 0, 0, 0, -452, -452, 0, 0, 0, -452, -452, -452, -452, -452, -452, // State 917 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 989, 0, 0, 0, 0, 0, 0, 0, 0, 0, -665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 918 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -775, 0, 0, 0, 0, 0, 0, -775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 919 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -676, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 920 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, -682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -845, 0, 0, 0, 0, 0, 0, -845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 921 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, -678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -495, 0, 0, 0, 0, 0, 0, -495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 922 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 994, 0, 0, 0, 0, 0, 0, 0, 0, 0, -663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -394, 0, 0, 0, 0, 0, 0, -394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 923 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 993, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 924 - -400, 0, 0, 0, 0, 0, -400, 0, -400, 0, 0, 0, -400, 0, 0, -400, 0, 0, 0, -400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -400, 0, -400, -400, -400, -400, 0, 0, 0, 0, 0, -400, -400, -400, -400, 0, -400, -400, -400, -400, 0, 0, 0, 0, -400, -400, -400, -400, -400, 0, 0, -400, -400, -400, -400, 0, -400, -400, -400, -400, -400, -400, -400, -400, -400, 0, 0, 0, -400, -400, 0, 0, 0, -400, -400, -400, -400, -400, -400, + -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 925 - -265, 0, 0, 0, 0, 0, -265, 0, -265, 0, 0, 0, -265, 0, 0, -265, 0, 0, 0, -265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -265, 0, -265, -265, -265, -265, 0, 0, 0, 0, 0, -265, -265, -265, -265, 0, -265, -265, -265, -265, 0, 0, 0, 0, -265, -265, -265, -265, -265, 0, 0, -265, -265, -265, -265, 0, -265, -265, -265, -265, -265, -265, -265, -265, -265, 0, 0, 0, -265, -265, 0, 0, 0, -265, -265, -265, -265, -265, -265, + -472, 0, 0, 0, 0, 0, -472, 0, -472, 0, 0, 0, -472, 0, 0, -472, 0, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -472, 0, -472, -472, -472, -472, 0, 0, 0, 0, 0, -472, -472, -472, -472, 0, -472, -472, -472, -472, 323, 994, 0, 0, -472, -472, -472, -472, -472, 0, 0, -472, -472, -472, -472, 0, -472, -472, -472, -472, -472, -472, -472, -472, -472, 0, 0, 0, -472, -472, 0, 0, 0, -472, -472, -472, -472, -472, -472, // State 926 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 927 - -407, 0, 0, 0, 0, 0, -407, 0, -407, 0, 0, 0, -407, 0, 0, -407, 0, 0, 0, -407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -407, 0, -407, -407, -407, -407, 0, 0, 0, 0, 0, -407, -407, -407, -407, 0, -407, -407, -407, -407, 0, 0, 0, 0, -407, -407, -407, -407, -407, 0, 0, -407, -407, -407, -407, 0, -407, -407, -407, -407, -407, -407, -407, -407, -407, 0, 0, 0, -407, -407, 0, 0, 0, -407, -407, -407, -407, -407, -407, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, // State 928 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, // State 929 - -397, 0, 0, 0, 0, 0, -397, 0, -397, 0, 0, 0, -397, 0, 0, -397, 0, 0, 0, -397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -397, 0, -397, -397, -397, -397, 0, 0, 0, 0, 0, -397, -397, -397, -397, 0, -397, -397, -397, -397, 0, 0, 0, 0, -397, -397, -397, -397, -397, 0, 0, -397, -397, -397, -397, 0, -397, -397, -397, -397, -397, -397, -397, -397, -397, 0, 0, 0, -397, -397, 0, 0, 0, -397, -397, -397, -397, -397, -397, + -877, 0, 0, 0, 0, 0, -877, 0, -877, 0, 0, 0, -877, 0, 0, -877, 0, 0, 0, -877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -877, 0, -877, -877, -877, -877, 0, 0, 0, 0, 0, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, 0, 0, -877, -877, -877, -877, 0, -877, -877, -877, -877, -877, -877, -877, -877, -877, 0, 0, 0, -877, -877, 0, 0, 0, -877, -877, -877, -877, -877, -877, // State 930 - -390, 0, 0, 0, 0, 0, -390, 0, -390, 0, 0, 0, -390, 0, 0, -390, 0, 0, 0, -390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -390, 0, -390, -390, -390, -390, 0, 0, 0, 0, 0, -390, -390, -390, -390, 0, -390, -390, -390, -390, 0, 999, 0, 0, -390, -390, -390, -390, -390, 0, 0, -390, -390, -390, -390, 0, -390, -390, -390, -390, -390, -390, -390, -390, -390, 0, 0, 0, -390, -390, 0, 0, 0, -390, -390, -390, -390, -390, -390, + 998, 0, 0, 0, 0, 0, -133, 0, -133, 0, 0, 0, -133, 0, 0, -133, 0, 0, 0, -133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -133, -133, -133, -133, 0, 0, 0, 0, 0, -133, 0, -133, -133, 0, 0, -133, 0, -133, 0, 0, 0, 0, 0, -133, -133, 0, -133, 0, 0, -133, 0, -133, -133, 0, -133, -133, -133, 0, -133, 0, 0, -133, -133, 0, 0, 0, -133, 0, 0, 0, 0, -133, -133, -133, -133, -133, -133, // State 931 - -402, 0, 0, 0, 0, 0, -402, 0, -402, 0, 0, 0, -402, 0, 0, -402, 0, 0, 0, -402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -402, 0, -402, -402, -402, -402, 0, 0, 0, 0, 0, -402, -402, -402, -402, 0, -402, -402, -402, -402, 0, 0, 0, 0, -402, -402, -402, -402, -402, 0, 0, -402, -402, -402, -402, 0, -402, -402, -402, -402, -402, -402, -402, -402, -402, 0, 0, 0, -402, -402, 0, 0, 0, -402, -402, -402, -402, -402, -402, + -874, 0, 0, 0, 0, 0, -874, 0, -874, 0, 0, 0, -874, 0, 0, -874, 0, 0, 0, -874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -874, 0, -874, -874, -874, -874, 0, 0, 0, 0, 0, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, 0, 0, -874, -874, -874, -874, 0, -874, -874, -874, -874, -874, -874, -874, -874, -874, 0, 0, 0, -874, -874, 0, 0, 0, -874, -874, -874, -874, -874, -874, // State 932 - 0, 0, 0, 0, 0, 0, 0, -608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -401, 0, 0, 0, 0, 0, -401, 0, -401, 0, 0, 0, -401, 0, 0, -401, 0, 0, 0, -401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -401, 0, -401, -401, -401, -401, 0, 0, 0, 0, 0, -401, -401, -401, -401, 0, -401, -401, -401, -401, 0, -401, -401, -401, -401, -401, -401, -401, -401, 0, 0, -401, -401, -401, -401, 0, -401, -401, -401, -401, -401, -401, -401, -401, -401, 0, 0, 0, -401, -401, 0, 0, 0, -401, -401, -401, -401, -401, -401, // State 933 - 0, 0, 0, 0, 0, 0, 0, -602, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 934 - 0, 0, 0, 0, 0, 0, 0, -607, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 935 - 0, 0, 0, 0, 0, 0, 0, -625, 0, 0, 0, 0, 0, 0, 1004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -405, 0, 0, 0, 0, 0, -405, 0, -405, 0, 0, 0, -405, 0, 0, -405, 0, 0, 0, -405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -405, 0, -405, -405, -405, -405, 0, 0, 0, 0, 0, -405, -405, -405, -405, 0, -405, -405, -405, -405, 0, -405, -405, -405, -405, -405, -405, -405, -405, 0, 0, -405, -405, -405, -405, 0, -405, -405, -405, -405, -405, -405, -405, -405, -405, 0, 0, 0, -405, -405, 0, 0, 0, -405, -405, -405, -405, -405, -405, // State 936 - 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 937 - 0, 0, 0, 0, 0, 0, 0, -792, 0, 0, 0, 0, 0, 0, -792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 938 - 0, 0, 0, 0, 0, 0, 0, -622, 0, 0, 0, 0, 0, 0, 1006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 939 - 0, 0, 0, 0, 0, 0, 0, -615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 940 - 0, 0, 0, 0, 0, 0, 0, -351, 0, 0, 0, 0, 0, 0, -351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -855, 0, -855, 0, 0, 0, -855, 0, 0, -855, 0, 0, 0, -855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -855, 0, -855, -855, -855, -855, 0, 0, 0, 0, 0, -855, -855, -855, -855, 0, -855, -855, -855, -855, 0, 0, 0, 0, -855, -855, -855, -855, -855, 0, 0, -855, -855, -855, -855, 0, -855, -855, -855, -855, -855, -855, -855, -855, -855, 0, 0, 0, -855, -855, 0, 0, 0, -855, -855, -855, -855, -855, -855, // State 941 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 942 - -432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 943 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 944 - -423, 0, 0, 0, 0, 0, -423, 0, -423, 0, 0, 0, -423, 0, 0, -423, 0, 0, 0, -423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -423, 0, -423, -423, -423, -423, 0, 0, 0, 0, 0, -423, -423, -423, -423, 0, -423, -423, -423, -423, 0, 0, 0, 0, -423, -423, -423, -423, -423, 0, 0, -423, -423, -423, -423, 0, -423, -423, -423, -423, -423, -423, -423, -423, -423, 0, 0, 0, -423, -423, 0, 0, 0, -423, -423, -423, -423, -423, -423, + 0, -279, -279, 0, -279, 0, -279, 0, -279, -279, 0, 0, -279, 0, -279, -279, 0, 0, -279, 0, -279, -279, 0, 0, -283, 0, 0, -279, -279, 0, -279, 0, -279, -279, -279, -279, 0, 0, -279, 0, 0, 0, 0, -279, 0, -279, 0, -279, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -279, 0, -279, -279, 0, 0, 0, -279, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 945 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -481, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 946 - -487, 0, 0, 0, 0, 0, -487, 0, -487, 0, 0, 0, -487, 0, 0, -487, 0, 0, 0, -487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -487, 0, -487, -487, -487, -487, 0, 0, 0, 0, 0, -487, -487, -487, -487, 0, -487, -487, -487, -487, 0, 0, 0, 0, -487, -487, -487, -487, -487, 0, 0, -487, -487, -487, -487, 0, -487, -487, -487, -487, -487, -487, -487, -487, -487, 0, 0, 0, -487, -487, 0, 0, 0, -487, -487, -487, -487, -487, -487, + 0, -235, -235, 0, -235, 0, -235, 0, -235, -235, 0, 0, -235, 0, -235, -235, 0, 0, -235, 0, -235, -235, 0, 0, -262, 0, 0, -235, -235, 0, -235, 0, -235, -235, -235, -235, 0, 0, -235, 0, 0, 0, 0, -235, 0, -235, 0, -235, -235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -235, 0, -235, -235, 0, 0, 0, -235, -235, 0, 0, 0, 0, 0, 0, 0, 0, 0, -235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 947 - 0, 0, 0, 0, 0, 0, 0, -463, 0, 0, 0, 0, 0, 0, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -463, 0, 0, 0, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -463, 0, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, + 0, -232, -232, 0, -232, 0, -232, 0, -232, -232, 0, 0, -232, 0, -232, -232, 0, 0, -232, 0, -232, -232, 0, 0, -259, 0, 0, -232, -232, 0, -232, 0, -232, -232, -232, -232, 0, 0, -232, 0, 0, 0, 0, -232, 0, -232, 0, -232, -232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 0, -232, -232, 0, 0, 0, -232, -232, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 948 - 0, 0, 0, 0, 0, 0, 0, -462, 0, 0, 0, 0, 0, 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -462, 0, 0, 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -462, 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -226, -226, 0, -226, 0, -226, 0, -226, -226, 0, 0, -226, 0, -226, -226, 0, 0, -226, 0, -226, -226, 0, 0, -253, 0, 0, -226, -226, 0, -226, 0, -226, -226, -226, -226, 0, 0, -226, 0, 0, 0, 0, -226, 0, -226, 0, -226, -226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -226, 0, -226, -226, 0, 0, 0, -226, -226, 0, 0, 0, 0, 0, 0, 0, 0, 0, -226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 949 - 0, 0, 0, 0, 0, 0, 0, -731, 0, 0, 0, 0, 0, 0, -731, 0, 0, 0, 0, 0, 0, 0, 0, 0, -731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -578, 0, 0, 0, 0, 0, 0, -578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 950 - 0, 0, 0, 0, 0, 0, 0, -286, 0, 0, 0, 0, 0, 0, -286, 0, 0, 0, 0, 0, 0, 0, 0, 0, -286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -286, 0, 0, 0, -286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -286, 0, -286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -223, -223, 0, -223, 0, -223, 0, -223, -223, 0, 0, -223, 0, -223, -223, 0, 0, -223, 0, -223, -223, 0, 0, -948, 0, 0, -223, -223, 0, -223, 0, -223, -223, -223, -223, 0, 0, -223, 0, 0, 0, 0, -223, 0, -223, 0, -223, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -223, 0, -223, -223, 0, 0, 0, -223, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 951 - 0, 0, 0, 0, 0, 0, 0, -291, 0, 0, 0, 0, 0, 0, -291, 0, 0, 0, 0, 0, 0, 0, 0, 0, -291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -291, 0, 0, 0, -291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -291, 0, -291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -945, 0, 0, 0, 0, 0, 0, -945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 952 - 0, 0, 0, 0, 0, 0, 0, -538, 0, 0, 0, 0, 0, 0, -538, 0, 0, 0, 0, 0, 0, 0, 0, 0, -538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -538, 0, 0, 0, -538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, -538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 953 - 0, 0, 0, 0, 0, 0, 0, -333, 0, 0, 0, 0, -333, 0, -333, -333, 0, 0, 0, 0, 0, 0, 0, 0, -333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -333, 0, 0, 0, -333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -333, 0, -333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 954 - 0, 0, 0, 0, 0, 0, 0, -334, 0, 0, 0, 0, -334, 0, -334, -334, 0, 0, 0, 0, 0, 0, 0, 0, -334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -334, 0, 0, 0, -334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -334, 0, -334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -236, -236, 0, -236, 0, -236, 0, -236, -236, 0, 0, -236, 0, -236, -236, 0, 0, -236, 0, -236, -236, 0, 0, -263, 0, 0, -236, -236, 0, -236, 0, -236, -236, -236, -236, 0, 0, -236, 0, 0, 0, 0, -236, 0, -236, 0, -236, -236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -236, 0, -236, -236, 0, 0, 0, -236, -236, 0, 0, 0, 0, 0, 0, 0, 0, 0, -236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 955 - 0, 0, 0, 0, 0, 0, -484, -262, 0, 0, 0, 0, 0, 0, -262, 0, 0, 0, -484, 0, 0, 0, 0, 0, -262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -262, 0, 0, 0, -262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -262, 0, -262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -222, -222, 0, -222, 0, -222, 0, -222, -222, 0, 0, -222, 0, -222, -222, 0, 0, -222, 0, -222, -222, 0, 0, -251, 0, 0, -222, -222, 0, -222, 0, -222, -222, -222, -222, 0, 0, -222, 0, 0, 0, 0, -222, 0, -222, 0, -222, -222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -222, 0, -222, -222, 0, 0, 0, -222, -222, 0, 0, 0, 0, 0, 0, 0, 0, 0, -222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 956 - 0, 0, 0, 0, 0, 0, 0, -285, 0, 0, 0, 0, 0, 0, -285, 0, 0, 0, 0, 0, 0, 0, 0, 0, -285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -285, 0, 0, 0, -285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -285, 0, -285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -239, -239, 0, -239, 0, -239, 0, -239, -239, 0, 0, -239, 0, -239, -239, 0, 0, -239, 0, -239, -239, 0, 0, -266, 0, 0, -239, -239, 0, -239, 0, -239, -239, -239, -239, 0, 0, -239, 0, 0, 0, 0, -239, 0, -239, 0, -239, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -239, 0, -239, -239, 0, 0, 0, -239, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, -239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 957 - 0, 0, 0, 0, 0, 0, 0, -290, 0, 0, 0, 0, 0, 0, -290, 0, 0, 0, 0, 0, 0, 0, 0, 0, -290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -290, 0, 0, 0, -290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -290, 0, -290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -241, -241, 0, -241, 0, -241, 0, -241, -241, 0, 0, -241, 0, -241, -241, 0, 0, -241, 0, -241, -241, 0, 0, -268, 0, 0, -241, -241, 0, -241, 0, -241, -241, -241, -241, 0, 0, -241, 0, 0, 0, 0, -241, 0, -241, 0, -241, -241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 0, -241, -241, 0, 0, 0, -241, -241, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 958 - 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -370, 0, 0, 0, 0, 0, 0, -370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -370, 0, 0, 0, 0, 0, -370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -370, 0, 0, -370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 959 - 0, 0, 0, 0, 0, 0, 350, -886, 0, 0, 0, 0, 0, 0, -886, 0, 0, 0, 351, 0, 0, 0, 0, 0, -886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -886, 0, 0, 0, -886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -886, 0, -886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, 0, -227, 0, -227, -227, -227, -227, -227, 0, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, 0, 0, 0, -227, -227, -227, -227, -227, -227, 0, -227, 0, 0, 0, 0, 0, 0, 0, 0, -227, 0, 0, -227, -227, 0, -227, 0, -227, -227, 0, 0, 0, -227, -227, 0, 0, 0, 0, 0, 0, 0, 0, 0, -227, -227, -227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 960 - 0, 0, 0, 0, 0, 0, 0, -732, 0, 0, 0, 0, 0, 0, -732, 0, 0, 0, 0, 0, 0, 0, 0, 0, -732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -732, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, -715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 961 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, -738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1021, 0, 0, 0, 0, 0, 0, 0, 0, 0, -706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 962 - 0, 0, 0, 0, 0, 0, 0, -289, 0, 0, 0, 0, 0, 0, -289, 0, 0, 0, 0, 0, 0, 0, 0, 0, -289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -289, 0, 0, 0, -289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -289, 0, -289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 963 - 0, 0, 0, 0, 0, 0, 0, -287, 0, 0, 0, 0, 0, 0, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -287, 0, 0, 0, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -287, 0, -287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1022, 0, 0, 0, 0, 0, 0, 0, 0, 0, -738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 964 - 0, 0, 0, 0, 0, 0, 0, -539, 0, 0, 0, 0, 0, 0, -539, 0, 0, 0, 0, 0, 0, 0, 0, 0, -539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -539, 0, 0, 0, -539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, -539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 965 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, -737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, -728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 966 - 0, 0, 0, 0, 0, 0, 0, -288, 0, 0, 0, 0, 0, 0, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -288, 0, 0, 0, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -288, 0, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 967 - 0, 0, 0, 0, 0, 0, 0, -460, 0, 0, 0, 0, 0, 0, -460, 0, 0, 0, 0, 0, 0, 0, 0, 0, -460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -460, 0, 0, 0, -460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -460, 0, -460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 968 - 0, 0, 0, 0, 0, 0, 0, -458, 0, 0, 0, 0, 0, 0, -458, 0, 0, 0, 0, 0, 0, 0, 0, 0, -458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -458, 0, 0, 0, -458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -458, 0, -458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -308, 0, 0, 0, 0, 0, -308, 0, -308, 0, 0, 0, -308, 0, 0, -308, 0, 0, 0, -308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -308, 0, -308, -308, -308, -308, 0, 0, 0, 0, 0, -308, -308, -308, -308, 0, -308, -308, -308, -308, 0, 0, 0, 0, -308, -308, -308, -308, -308, 0, 0, -308, -308, -308, -308, 0, -308, -308, -308, -308, -308, -308, -308, -308, -308, 0, 0, 0, -308, -308, 0, 0, 0, -308, -308, -308, -308, -308, -308, // State 969 - 0, 0, 0, 0, 0, 0, 0, -459, 0, 0, 0, 0, 0, 0, -459, 0, 0, 0, 0, 0, 0, 0, 0, 0, -459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -459, 0, 0, 0, -459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -459, 0, -459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -311, 0, 0, 0, 0, 0, -311, 0, -311, 0, 0, 0, -311, 0, 0, -311, 0, 0, 0, -311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -311, 0, -311, -311, -311, -311, 0, 0, 0, 0, 0, -311, -311, -311, -311, 0, -311, -311, -311, -311, 0, 0, 0, 0, -311, -311, -311, -311, -311, 0, 0, -311, -311, -311, -311, 0, -311, -311, -311, -311, -311, -311, -311, -311, -311, 0, 0, 0, -311, -311, 0, 0, 0, -311, -311, -311, -311, -311, -311, // State 970 - -490, 0, 0, 0, 0, 0, -490, 0, -490, 0, 0, 0, -490, 0, 0, -490, 0, 0, 0, -490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -490, 0, -490, -490, -490, -490, 0, 0, 0, 0, 0, -490, -490, -490, -490, 0, -490, -490, -490, -490, 0, 0, 0, 0, -490, -490, -490, -490, -490, 0, 0, -490, -490, -490, -490, 0, -490, -490, -490, -490, -490, -490, -490, -490, -490, 0, 0, 0, -490, -490, 0, 0, 0, -490, -490, -490, -490, -490, -490, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 971 - -853, 0, 0, 0, 0, 0, -853, 0, -853, 0, 0, 0, -853, 0, 0, -853, 0, 0, 0, -853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -853, 0, -853, -853, -853, -853, 0, 0, 0, 0, 0, -853, -853, -853, -853, 0, -853, -853, -853, -853, 0, 0, 0, 1031, -853, -853, -853, -853, -853, 0, 0, -853, -853, -853, -853, 0, -853, -853, -853, -853, -853, -853, -853, -853, -853, 0, 0, 0, -853, -853, 0, 0, 0, -853, -853, -853, -853, -853, -853, + -454, 0, 0, 0, 0, 0, -454, 0, -454, 0, 0, 0, -454, 0, 0, -454, 0, 0, 0, -454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -454, 0, -454, -454, -454, -454, 0, 0, 0, 0, 0, -454, -454, -454, -454, 0, -454, -454, -454, -454, 0, 0, 0, 0, -454, -454, -454, -454, -454, 0, 0, -454, -454, -454, -454, 0, -454, -454, -454, -454, -454, -454, -454, -454, -454, 0, 0, 0, -454, -454, 0, 0, 0, -454, -454, -454, -454, -454, -454, // State 972 - -854, 0, 0, 0, 0, 0, -854, 0, -854, 0, 0, 0, -854, 0, 0, -854, 0, 0, 0, -854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -854, 0, -854, -854, -854, -854, 0, 0, 0, 0, 0, -854, -854, -854, -854, 0, -854, -854, -854, -854, 0, 0, 0, 0, -854, -854, -854, -854, -854, 0, 0, -854, -854, -854, -854, 0, -854, -854, -854, -854, -854, -854, -854, -854, -854, 0, 0, 0, -854, -854, 0, 0, 0, -854, -854, -854, -854, -854, -854, + -231, -231, -231, -231, -231, -231, -231, 0, -231, -231, -231, -231, -231, -231, -231, -231, -231, 0, -231, 0, -231, -231, -231, -231, -231, 0, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -202, -231, -231, 0, 0, 0, -231, 0, -231, -231, -231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -231, 0, -231, -231, 0, 0, 0, -231, -231, 0, 0, 0, 0, 0, 0, 0, 0, 0, -231, -231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 973 - -857, 0, 0, 0, 0, 0, -857, 0, -857, 0, 0, 0, -857, 0, 0, -857, 0, 0, 0, -857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -857, 0, -857, -857, -857, -857, 0, 0, 0, 0, 0, -857, -857, -857, -857, 0, -857, -857, -857, -857, 0, 0, 0, 1032, -857, -857, -857, -857, -857, 0, 0, -857, -857, -857, -857, 0, -857, -857, -857, -857, -857, -857, -857, -857, -857, 0, 0, 0, -857, -857, 0, 0, 0, -857, -857, -857, -857, -857, -857, + -225, -225, -225, -225, -225, -225, -225, 0, -225, -225, -225, -225, -225, -225, -225, -225, -225, 0, -225, 0, -225, -225, -225, -225, -225, 0, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -196, -225, -225, 0, 0, 0, -225, 0, -225, -225, -225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -225, 0, -225, -225, 0, 0, 0, -225, -225, 0, 0, 0, 0, 0, 0, 0, 0, 0, -225, -225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 974 - -858, 0, 0, 0, 0, 0, -858, 0, -858, 0, 0, 0, -858, 0, 0, -858, 0, 0, 0, -858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -858, 0, -858, -858, -858, -858, 0, 0, 0, 0, 0, -858, -858, -858, -858, 0, -858, -858, -858, -858, 0, 0, 0, 0, -858, -858, -858, -858, -858, 0, 0, -858, -858, -858, -858, 0, -858, -858, -858, -858, -858, -858, -858, -858, -858, 0, 0, 0, -858, -858, 0, 0, 0, -858, -858, -858, -858, -858, -858, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 975 - -355, 0, 0, 0, 0, 0, -355, 0, -355, 0, 0, 0, -355, 0, 0, -355, 0, 0, 0, -355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -355, 0, -355, -355, -355, -355, 0, 0, 0, 0, 0, -355, -355, -355, -355, 0, -355, -355, -355, -355, 0, -355, -355, -355, -355, -355, -355, -355, -355, 0, 0, -355, -355, -355, -355, 0, -355, -355, -355, -355, -355, -355, -355, -355, -355, 0, 0, 0, -355, -355, 0, 0, 0, -355, -355, -355, -355, -355, -355, + -444, 0, 0, 0, 0, 0, -444, 0, -444, 0, 0, 0, -444, 0, 0, -444, 0, 0, 0, -444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -444, 0, -444, -444, -444, -444, 0, 0, 0, 0, 0, -444, -444, -444, -444, 0, -444, -444, -444, -444, 0, 0, 0, 0, -444, -444, -444, -444, -444, 0, 0, -444, -444, -444, -444, 0, -444, -444, -444, -444, -444, -444, -444, -444, -444, 0, 0, 0, -444, -444, 0, 0, 0, -444, -444, -444, -444, -444, -444, // State 976 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -305, 0, 0, 0, 0, 0, -305, 0, -305, 0, 0, 0, -305, 0, 0, -305, 0, 0, 0, -305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -305, 0, -305, -305, -305, -305, 0, 0, 0, 0, 0, -305, -305, -305, -305, 0, -305, -305, -305, -305, 0, 0, 0, 0, -305, -305, -305, -305, -305, 0, 0, -305, -305, -305, -305, 0, -305, -305, -305, -305, -305, -305, -305, -305, -305, 0, 0, 0, -305, -305, 0, 0, 0, -305, -305, -305, -305, -305, -305, // State 977 - 0, 0, 0, 0, 0, 0, -802, 0, -802, 0, 0, 0, -802, 0, 0, -802, 0, 0, 0, -802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -802, 0, -802, -802, -802, -802, 0, 0, 0, 0, 0, -802, -802, -802, -802, 0, -802, -802, -802, -802, 0, 0, 0, 0, -802, -802, -802, -802, -802, 0, 0, -802, -802, -802, -802, 0, -802, -802, -802, -802, -802, -802, -802, -802, -802, 0, 0, 0, -802, -802, 0, 0, 0, -802, -802, -802, -802, -802, -802, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -926, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -926, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 978 - 1035, 0, 0, 0, 0, 0, -130, 0, -130, 0, 0, 0, -130, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, -130, 0, 0, 0, 0, 0, -130, 0, -130, -130, 0, 0, -130, 0, -130, 0, 0, 0, 0, 0, -130, -130, 0, -130, 0, 0, -130, 0, -130, -130, 0, -130, -130, -130, 0, -130, 0, 0, -130, -130, 0, 0, 0, -130, 0, 0, 0, 0, -130, -130, -130, -130, -130, -130, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 979 - 0, 0, 0, 0, 0, 0, -799, 0, -799, 0, 0, 0, -799, 0, 0, -799, 0, 0, 0, -799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -799, 0, -799, -799, -799, -799, 0, 0, 0, 0, 0, -799, -799, -799, -799, 0, -799, -799, -799, -799, 0, 0, 0, 0, -799, -799, -799, -799, -799, 0, 0, -799, -799, -799, -799, 0, -799, -799, -799, -799, -799, -799, -799, -799, -799, 0, 0, 0, -799, -799, 0, 0, 0, -799, -799, -799, -799, -799, -799, + 0, 0, 0, 0, 0, 0, -930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -930, 0, 0, 0, 0, 0, 0, -930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 980 - 1036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1037, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 981 - 0, 0, 0, 0, 0, 0, -807, 0, -807, 0, 0, 0, -807, 0, 0, -807, 0, 0, 0, -807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -807, 0, -807, -807, -807, -807, 0, 0, 0, 0, 0, -807, -807, -807, -807, 0, -807, -807, -807, -807, 0, 0, 0, 0, -807, -807, -807, -807, -807, 0, 0, -807, -807, -807, -807, 0, -807, -807, -807, -807, -807, -807, -807, -807, -807, 0, 0, 0, -807, -807, 0, 0, 0, -807, -807, -807, -807, -807, -807, + -451, 0, 0, 0, 0, 0, -451, 0, -451, 0, 0, 0, -451, 0, 0, -451, 0, 0, 0, -451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -451, 0, -451, -451, -451, -451, 0, 0, 0, 0, 0, -451, -451, -451, -451, 0, -451, -451, -451, -451, 0, 0, 0, 0, -451, -451, -451, -451, -451, 0, 0, -451, -451, -451, -451, 0, -451, -451, -451, -451, -451, -451, -451, -451, -451, 0, 0, 0, -451, -451, 0, 0, 0, -451, -451, -451, -451, -451, -451, // State 982 - 1038, 0, 0, 0, 0, 0, -129, 0, -129, 0, 0, 0, -129, 0, 0, -129, 0, 0, 0, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -129, -129, -129, -129, 0, 0, 0, 0, 0, -129, 0, -129, -129, 0, 0, -129, 0, -129, 0, 0, 0, 0, 0, -129, -129, 0, -129, 0, 0, -129, 0, -129, -129, 0, -129, -129, -129, 0, -129, 0, 0, -129, -129, 0, 0, 0, -129, 0, 0, 0, 0, -129, -129, -129, -129, -129, -129, + 0, 0, 0, 0, 0, 0, 0, -934, 0, 0, 0, 0, 0, 0, -934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 983 - -887, 0, 0, 0, 0, 0, -887, 0, -887, 0, 0, 0, -887, 0, 0, -887, 0, 0, 0, -887, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -887, 0, -887, -887, -887, -887, 0, 0, 0, 0, 0, -887, -887, -887, -887, 0, -887, -887, -887, -887, 0, 0, 0, 0, -887, -887, -887, -887, -887, 0, 0, -887, -887, -887, -887, 0, -887, -887, -887, -887, -887, -887, -887, -887, -887, 0, 0, 0, -887, -887, 0, 0, 0, -887, -887, -887, -887, -887, -887, + 0, 0, 0, 0, 0, 0, 0, -658, 0, 0, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 984 - 0, -195, -195, 0, -195, 0, -195, 0, -195, -195, 0, 0, -195, 0, -195, -195, 0, 0, -195, 0, -195, -195, 0, 0, -222, 0, 0, -195, -195, 0, -195, 0, -195, -195, -195, -195, 0, -195, 0, 0, 0, 0, -195, 0, -195, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, 0, -195, -195, 0, 0, 0, -195, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -572, 0, 0, 0, 0, 0, 0, -572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 985 - 0, -189, -189, 0, -189, 0, -189, 0, -189, -189, 0, 0, -189, 0, -189, -189, 0, 0, -189, 0, -189, -189, 0, 0, -216, 0, 0, -189, -189, 0, -189, 0, -189, -189, -189, -189, 0, -189, 0, 0, 0, 0, -189, 0, -189, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0, -189, -189, 0, 0, 0, -189, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, -189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -592, 0, 0, 0, 0, 0, 0, -592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 986 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -675, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 987 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -670, 0, 0, 0, 0, 0, 0, 1043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 988 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 989 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, -679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -438, 0, 0, 0, 0, 0, -438, 0, -438, 0, 0, 0, -438, 0, 0, -438, 0, 0, 0, -438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -438, 0, -438, -438, -438, -438, 0, 0, 0, 0, 0, -438, -438, -438, -438, 0, -438, -438, -438, -438, 0, 1045, 0, 0, -438, -438, -438, -438, -438, 0, 0, -438, -438, -438, -438, 0, -438, -438, -438, -438, -438, -438, -438, -438, -438, 0, 0, 0, -438, -438, 0, 0, 0, -438, -438, -438, -438, -438, -438, // State 990 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1043, 0, 0, 0, 0, 0, 0, 0, 0, 0, -664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -563, 0, 0, 0, 0, 0, 0, -563, 0, 0, 0, 0, 0, 0, -563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 991 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 0, -669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -566, 0, 0, 0, 0, 0, 0, -566, 0, 0, 0, 0, 0, 0, -566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 992 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1046, 0, 0, 0, 0, 0, 0, 0, 0, 0, -660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 993 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 994 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 995 - -399, 0, 0, 0, 0, 0, -399, 0, -399, 0, 0, 0, -399, 0, 0, -399, 0, 0, 0, -399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -399, 0, -399, -399, -399, -399, 0, 0, 0, 0, 0, -399, -399, -399, -399, 0, -399, -399, -399, -399, 0, 0, 0, 0, -399, -399, -399, -399, -399, 0, 0, -399, -399, -399, -399, 0, -399, -399, -399, -399, -399, -399, -399, -399, -399, 0, 0, 0, -399, -399, 0, 0, 0, -399, -399, -399, -399, -399, -399, + -561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 996 - -404, 0, 0, 0, 0, 0, -404, 0, -404, 0, 0, 0, -404, 0, 0, -404, 0, 0, 0, -404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -404, 0, -404, -404, -404, -404, 0, 0, 0, 0, 0, -404, -404, -404, -404, 0, -404, -404, -404, -404, 0, 0, 0, 0, -404, -404, -404, -404, -404, 0, 0, -404, -404, -404, -404, 0, -404, -404, -404, -404, -404, -404, -404, -404, -404, 0, 0, 0, -404, -404, 0, 0, 0, -404, -404, -404, -404, -404, -404, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -527, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 997 - -394, 0, 0, 0, 0, 0, -394, 0, -394, 0, 0, 0, -394, 0, 0, -394, 0, 0, 0, -394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -394, 0, -394, -394, -394, -394, 0, 0, 0, 0, 0, -394, -394, -394, -394, 0, -394, -394, -394, -394, 0, 0, 0, 0, -394, -394, -394, -394, -394, 0, 0, -394, -394, -394, -394, 0, -394, -394, -394, -394, -394, -394, -394, -394, -394, 0, 0, 0, -394, -394, 0, 0, 0, -394, -394, -394, -394, -394, -394, + -875, 0, 0, 0, 0, 0, -875, 0, -875, 0, 0, 0, -875, 0, 0, -875, 0, 0, 0, -875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -875, 0, -875, -875, -875, -875, 0, 0, 0, 0, 0, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, 0, 0, -875, -875, -875, -875, 0, -875, -875, -875, -875, -875, -875, -875, -875, -875, 0, 0, 0, -875, -875, 0, 0, 0, -875, -875, -875, -875, -875, -875, // State 998 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 999 - -401, 0, 0, 0, 0, 0, -401, 0, -401, 0, 0, 0, -401, 0, 0, -401, 0, 0, 0, -401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -401, 0, -401, -401, -401, -401, 0, 0, 0, 0, 0, -401, -401, -401, -401, 0, -401, -401, -401, -401, 0, 0, 0, 0, -401, -401, -401, -401, -401, 0, 0, -401, -401, -401, -401, 0, -401, -401, -401, -401, -401, -401, -401, -401, -401, 0, 0, 0, -401, -401, 0, 0, 0, -401, -401, -401, -401, -401, -401, + -398, 0, 0, 0, 0, 0, -398, 0, -398, 0, 0, 0, -398, 0, 0, -398, 0, 0, 0, -398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -398, 0, -398, -398, -398, -398, 0, 0, 0, 0, 0, -398, -398, -398, -398, 0, -398, -398, -398, -398, 0, -398, -398, -398, -398, -398, -398, -398, -398, 0, 0, -398, -398, -398, -398, 0, -398, -398, -398, -398, -398, -398, -398, -398, -398, 0, 0, 0, -398, -398, 0, 0, 0, -398, -398, -398, -398, -398, -398, // State 1000 - 0, 0, 0, 0, 0, 0, 0, -599, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -914, 0, 0, 0, 0, 0, -914, 0, -914, 0, 0, 0, -914, 0, 0, -914, 0, 0, 0, -914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -914, 0, -914, -914, -914, -914, 0, 0, 0, 0, 0, -914, -914, -914, -914, 0, -914, -914, -914, -914, 0, 0, 0, 0, -914, -914, -914, -914, -914, 0, 0, -914, -914, -914, -914, 0, -914, -914, -914, -914, -914, -914, -914, -914, -914, 0, 0, 0, -914, -914, 0, 0, 0, -914, -914, -914, -914, -914, -914, // State 1001 - 0, 0, 0, 0, 0, 0, 0, -584, 0, 0, 0, 0, 0, 0, 1052, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1081, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1082, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1002 - 0, 0, 0, 0, 0, 0, 0, -612, 0, 0, 0, 0, 0, 0, 1054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -853, 0, -853, 0, 0, 0, -853, 0, 0, -853, 0, 0, 0, -853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -853, 0, -853, -853, -853, -853, 0, 0, 0, 0, 0, -853, -853, -853, -853, 0, -853, -853, -853, -853, 0, 0, 0, 0, -853, -853, -853, -853, -853, 0, 0, -853, -853, -853, -853, 0, -853, -853, -853, -853, -853, -853, -853, -853, -853, 0, 0, 0, -853, -853, 0, 0, 0, -853, -853, -853, -853, -853, -853, // State 1003 - 0, 0, 0, 0, 0, 0, 0, -617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1083, 0, 0, 0, 0, 0, -132, 0, -132, 0, 0, 0, -132, 0, 0, -132, 0, 0, 0, -132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -132, -132, -132, -132, 0, 0, 0, 0, 0, -132, 0, -132, -132, 0, 0, -132, 0, -132, 0, 0, 0, 0, 0, -132, -132, 0, -132, 0, 0, -132, 0, -132, -132, 0, -132, -132, -132, 0, -132, 0, 0, -132, -132, 0, 0, 0, -132, 0, 0, 0, 0, -132, -132, -132, -132, -132, -132, // State 1004 - 0, 0, 0, 0, 0, 0, 0, -624, 0, 0, 0, 0, 0, 0, 1056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -856, 0, -856, 0, 0, 0, -856, 0, 0, -856, 0, 0, 0, -856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -856, 0, -856, -856, -856, -856, 0, 0, 0, 0, 0, -856, -856, -856, -856, 0, -856, -856, -856, -856, 0, 0, 0, 0, -856, -856, -856, -856, -856, 0, 0, -856, -856, -856, -856, 0, -856, -856, -856, -856, -856, -856, -856, -856, -856, 0, 0, 0, -856, -856, 0, 0, 0, -856, -856, -856, -856, -856, -856, // State 1005 - 0, 0, 0, 0, 0, 0, 0, -614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1006 - -518, 0, 0, 0, 0, 0, 0, -518, 0, 0, 0, 0, 0, 0, -518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -878, 0, 0, 0, 0, 0, -878, 0, -878, 0, 0, 0, -878, 0, 0, -878, 0, 0, 0, -878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -878, 0, -878, -878, -878, -878, 0, 0, 0, 0, 0, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, 0, 0, -878, -878, -878, -878, 0, -878, -878, -878, -878, -878, -878, -878, -878, -878, 0, 0, 0, -878, -878, 0, 0, 0, -878, -878, -878, -878, -878, -878, // State 1007 - -425, 0, 0, 0, 0, 0, -425, 0, -425, 0, 0, 0, -425, 0, 0, -425, 0, 0, 0, -425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -425, 0, -425, -425, -425, -425, 0, 0, 0, 0, 0, -425, -425, -425, -425, 0, -425, -425, -425, -425, 0, 0, 0, 0, -425, -425, -425, -425, -425, 0, 0, -425, -425, -425, -425, 0, -425, -425, -425, -425, -425, -425, -425, -425, -425, 0, 0, 0, -425, -425, 0, 0, 0, -425, -425, -425, -425, -425, -425, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -885, 0, 0, 0, 0, 0, 0, 0, 0, 0, -890, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1008 - -102, 0, 0, 0, 0, 0, -102, 0, -102, 0, 0, 0, -102, 0, 0, -102, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, -102, -102, -102, -102, 0, 0, 0, 0, 0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, -102, 0, 0, -102, -102, -102, -102, -102, 0, 0, -102, -102, -102, -102, 0, -102, -102, -102, -102, -102, -102, -102, -102, -102, 0, 0, 0, -102, -102, 0, 0, 0, -102, -102, -102, -102, -102, -102, + 0, 0, 0, 0, 0, 0, 0, -944, 0, 0, 0, 0, 0, 0, -944, 0, 0, 0, 0, 0, 0, 0, 0, 0, -944, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1009 - -488, 0, 0, 0, 0, 0, -488, 0, -488, 0, 0, 0, -488, 0, 0, -488, 0, 0, 0, -488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -488, 0, -488, -488, -488, -488, 0, 0, 0, 0, 0, -488, -488, -488, -488, 0, -488, -488, -488, -488, 0, 0, 0, 0, -488, -488, -488, -488, -488, 0, 0, -488, -488, -488, -488, 0, -488, -488, -488, -488, -488, -488, -488, -488, -488, 0, 0, 0, -488, -488, 0, 0, 0, -488, -488, -488, -488, -488, -488, + 0, -228, -228, 0, -228, 0, -228, 0, -228, -228, 0, 0, -228, 0, -228, -228, 0, 0, -228, 0, -228, -228, 0, 0, -255, 0, 0, -228, -228, 0, -228, 0, -228, -228, -228, -228, 0, 0, -228, 0, 0, 0, 0, -228, 0, -228, 0, -228, -228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -228, 0, -228, -228, 0, 0, 0, -228, -228, 0, 0, 0, 0, 0, 0, 0, 0, 0, -228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1010 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1088, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1011 - 0, 0, 0, 0, 0, 0, 0, 1079, 0, 0, 0, 0, 0, 0, 1080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -229, -229, 0, -229, 0, -229, 0, -229, -229, 0, 0, -229, 0, -229, -229, 0, 0, -229, 0, -229, -229, 0, 0, -256, 0, 0, -229, -229, 0, -229, 0, -229, -229, -229, -229, 0, 0, -229, 0, 0, 0, 0, -229, 0, -229, 0, -229, -229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -229, 0, -229, -229, 0, 0, 0, -229, -229, 0, 0, 0, 0, 0, 0, 0, 0, 0, -229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1012 - 0, 0, 0, 0, 0, 0, 0, -754, 0, 0, 0, 0, 0, 0, -754, 0, 0, 0, 0, 0, 0, 0, 0, 0, -754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -754, 0, 0, 0, -754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -754, 0, -754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1090, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1013 - 0, 0, 0, 0, 0, 0, 0, -791, 0, 0, 0, 0, 0, 0, -791, 0, 0, 0, 0, 0, 0, 0, 0, 0, -791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -791, 0, 0, 0, -791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -791, 0, -791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1014 - 0, 0, 0, 0, 0, 0, 0, -335, 0, 0, 0, 0, -335, 0, -335, -335, 0, 0, 0, 0, 0, 0, 0, 0, -335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -335, 0, 0, 0, -335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -335, 0, -335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -953, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1015 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1084, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -371, 0, 0, 0, 0, 0, 0, -371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -371, 0, 0, 0, 0, 0, -371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -371, 0, 0, -371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1016 - 0, 0, 0, 0, 0, 0, 0, -759, 0, 0, 0, 0, 0, 0, -759, 0, 0, 0, 0, 0, 0, 0, 0, 0, -759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -759, 0, 0, 0, -759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -759, 0, -759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -367, 0, 0, 0, 0, 0, 0, -367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -367, 0, 0, 0, 0, 0, -367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -367, 0, 0, -367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1017 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, + 0, 0, 0, 0, 0, 0, 0, -415, 0, 0, 0, 0, 0, 0, -415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -415, 0, 0, 0, 0, 0, -415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -415, 0, 0, -415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1018 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1019 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1092, 0, 0, 0, 0, 0, 0, 0, 0, 0, -712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1020 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1021 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1022 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, -729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1023 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, -466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, -725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1024 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 0, 0, 0, -710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1025 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1026 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -446, 0, 0, 0, 0, 0, -446, 0, -446, 0, 0, 0, -446, 0, 0, -446, 0, 0, 0, -446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -446, 0, -446, -446, -446, -446, 0, 0, 0, 0, 0, -446, -446, -446, -446, 0, -446, -446, -446, -446, 0, 0, 0, 0, -446, -446, -446, -446, -446, 0, 0, -446, -446, -446, -446, 0, -446, -446, -446, -446, -446, -446, -446, -446, -446, 0, 0, 0, -446, -446, 0, 0, 0, -446, -446, -446, -446, -446, -446, // State 1027 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -307, 0, 0, 0, 0, 0, -307, 0, -307, 0, 0, 0, -307, 0, 0, -307, 0, 0, 0, -307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -307, 0, -307, -307, -307, -307, 0, 0, 0, 0, 0, -307, -307, -307, -307, 0, -307, -307, -307, -307, 0, 0, 0, 0, -307, -307, -307, -307, -307, 0, 0, -307, -307, -307, -307, 0, -307, -307, -307, -307, -307, -307, -307, -307, -307, 0, 0, 0, -307, -307, 0, 0, 0, -307, -307, -307, -307, -307, -307, // State 1028 - 0, 0, 0, 0, 0, 0, 0, -471, 0, 0, 0, 0, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -471, 0, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -471, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1029 - -489, 0, 0, 0, 0, 0, -489, 0, -489, 0, 0, 0, -489, 0, 0, -489, 0, 0, 0, -489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -489, 0, -489, -489, -489, -489, 0, 0, 0, 0, 0, -489, -489, -489, -489, 0, -489, -489, -489, -489, 0, 0, 0, 0, -489, -489, -489, -489, -489, 0, 0, -489, -489, -489, -489, 0, -489, -489, -489, -489, -489, -489, -489, -489, -489, 0, 0, 0, -489, -489, 0, 0, 0, -489, -489, -489, -489, -489, -489, + -453, 0, 0, 0, 0, 0, -453, 0, -453, 0, 0, 0, -453, 0, 0, -453, 0, 0, 0, -453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -453, 0, -453, -453, -453, -453, 0, 0, 0, 0, 0, -453, -453, -453, -453, 0, -453, -453, -453, -453, 0, 0, 0, 0, -453, -453, -453, -453, -453, 0, 0, -453, -453, -453, -453, 0, -453, -453, -453, -453, -453, -453, -453, -453, -453, 0, 0, 0, -453, -453, 0, 0, 0, -453, -453, -453, -453, -453, -453, // State 1030 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -227, -227, -227, -227, -227, -227, -227, 0, -227, -227, -227, -227, -227, -227, -227, -227, -227, 0, -227, 0, -227, -227, -227, -227, -227, 0, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -198, -227, -227, 0, 0, 0, -227, 0, -227, -227, -227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -227, 0, -227, -227, 0, 0, 0, -227, -227, 0, 0, 0, 0, 0, 0, 0, 0, 0, -227, -227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1031 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1032 - -360, 0, 0, 0, 0, 0, -360, 0, -360, 0, 0, 0, -360, 0, 0, -360, 0, 0, 0, -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -360, 0, -360, -360, -360, -360, 0, 0, 0, 0, 0, -360, -360, -360, -360, 0, -360, -360, -360, -360, 0, -360, -360, -360, -360, -360, -360, -360, -360, 0, 0, -360, -360, -360, -360, 0, -360, -360, -360, -360, -360, -360, -360, -360, -360, 0, 0, 0, -360, -360, 0, 0, 0, -360, -360, -360, -360, -360, -360, + -443, 0, 0, 0, 0, 0, -443, 0, -443, 0, 0, 0, -443, 0, 0, -443, 0, 0, 0, -443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -443, 0, -443, -443, -443, -443, 0, 0, 0, 0, 0, -443, -443, -443, -443, 0, -443, -443, -443, -443, 0, 0, 0, 0, -443, -443, -443, -443, -443, 0, 0, -443, -443, -443, -443, 0, -443, -443, -443, -443, -443, -443, -443, -443, -443, 0, 0, 0, -443, -443, 0, 0, 0, -443, -443, -443, -443, -443, -443, // State 1033 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -436, 0, 0, 0, 0, 0, -436, 0, -436, 0, 0, 0, -436, 0, 0, -436, 0, 0, 0, -436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -436, 0, -436, -436, -436, -436, 0, 0, 0, 0, 0, -436, -436, -436, -436, 0, -436, -436, -436, -436, 0, 1102, 0, 0, -436, -436, -436, -436, -436, 0, 0, -436, -436, -436, -436, 0, -436, -436, -436, -436, -436, -436, -436, -436, -436, 0, 0, 0, -436, -436, 0, 0, 0, -436, -436, -436, -436, -436, -436, // State 1034 - 0, 0, 0, 0, 0, 0, -800, 0, -800, 0, 0, 0, -800, 0, 0, -800, 0, 0, 0, -800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -800, 0, -800, -800, -800, -800, 0, 0, 0, 0, 0, -800, -800, -800, -800, 0, -800, -800, -800, -800, 0, 0, 0, 0, -800, -800, -800, -800, -800, 0, 0, -800, -800, -800, -800, 0, -800, -800, -800, -800, -800, -800, -800, -800, -800, 0, 0, 0, -800, -800, 0, 0, 0, -800, -800, -800, -800, -800, -800, + -448, 0, 0, 0, 0, 0, -448, 0, -448, 0, 0, 0, -448, 0, 0, -448, 0, 0, 0, -448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -448, 0, -448, -448, -448, -448, 0, 0, 0, 0, 0, -448, -448, -448, -448, 0, -448, -448, -448, -448, 0, 0, 0, 0, -448, -448, -448, -448, -448, 0, 0, -448, -448, -448, -448, 0, -448, -448, -448, -448, -448, -448, -448, -448, -448, 0, 0, 0, -448, -448, 0, 0, 0, -448, -448, -448, -448, -448, -448, // State 1035 - 0, 0, 0, 0, 0, 0, -808, 0, -808, 0, 0, 0, -808, 0, 0, -808, 0, 0, 0, -808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -808, 0, -808, -808, -808, -808, 0, 0, 0, 0, 0, -808, -808, -808, -808, 0, -808, -808, -808, -808, 0, 0, 0, 0, -808, -808, -808, -808, -808, 0, 0, -808, -808, -808, -808, 0, -808, -808, -808, -808, -808, -808, -808, -808, -808, 0, 0, 0, -808, -808, 0, 0, 0, -808, -808, -808, -808, -808, -808, + 0, 0, 0, 0, 0, 0, 0, -655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1036 - 1088, 0, 0, 0, 0, 0, -130, 0, -130, 0, 0, 0, -130, 0, 0, -130, 0, 0, 0, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -130, -130, -130, -130, 0, 0, 0, 0, 0, -130, 0, -130, -130, 0, 0, -130, 0, -130, 0, 0, 0, 0, 0, -130, -130, 0, -130, 0, 0, -130, 0, -130, -130, 0, -130, -130, -130, 0, -130, 0, 0, -130, -130, 0, 0, 0, -130, 0, 0, 0, 0, -130, -130, -130, -130, -130, -130, + 0, 0, 0, 0, 0, 0, 0, -649, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1037 - 0, 0, 0, 0, 0, 0, -805, 0, -805, 0, 0, 0, -805, 0, 0, -805, 0, 0, 0, -805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -805, 0, -805, -805, -805, -805, 0, 0, 0, 0, 0, -805, -805, -805, -805, 0, -805, -805, -805, -805, 0, 0, 0, 0, -805, -805, -805, -805, -805, 0, 0, -805, -805, -805, -805, 0, -805, -805, -805, -805, -805, -805, -805, -805, -805, 0, 0, 0, -805, -805, 0, 0, 0, -805, -805, -805, -805, -805, -805, + 0, 0, 0, 0, 0, 0, 0, -654, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1038 - 0, -191, -191, 0, -191, 0, -191, 0, -191, -191, 0, 0, -191, 0, -191, -191, 0, 0, -191, 0, -191, -191, 0, 0, -218, 0, 0, -191, -191, 0, -191, 0, -191, -191, -191, -191, 0, -191, 0, 0, 0, 0, -191, 0, -191, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, -191, -191, 0, 0, 0, -191, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -672, 0, 0, 0, 0, 0, 0, 1107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1039 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1040 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1089, 0, 0, 0, 0, 0, 0, 0, 0, 0, -670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -844, 0, 0, 0, 0, 0, 0, -844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1041 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1091, 0, 0, 0, 0, 0, 0, 0, 0, 0, -661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -669, 0, 0, 0, 0, 0, 0, 1109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1042 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1043 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -393, 0, 0, 0, 0, 0, 0, -393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1044 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1092, 0, 0, 0, 0, 0, 0, 0, 0, 0, -666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1045 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1046 - -396, 0, 0, 0, 0, 0, -396, 0, -396, 0, 0, 0, -396, 0, 0, -396, 0, 0, 0, -396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -396, 0, -396, -396, -396, -396, 0, 0, 0, 0, 0, -396, -396, -396, -396, 0, -396, -396, -396, -396, 0, 0, 0, 0, -396, -396, -396, -396, -396, 0, 0, -396, -396, -396, -396, 0, -396, -396, -396, -396, -396, -396, -396, -396, -396, 0, 0, 0, -396, -396, 0, 0, 0, -396, -396, -396, -396, -396, -396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1047 - -403, 0, 0, 0, 0, 0, -403, 0, -403, 0, 0, 0, -403, 0, 0, -403, 0, 0, 0, -403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -403, 0, -403, -403, -403, -403, 0, 0, 0, 0, 0, -403, -403, -403, -403, 0, -403, -403, -403, -403, 0, 0, 0, 0, -403, -403, -403, -403, -403, 0, 0, -403, -403, -403, -403, 0, -403, -403, -403, -403, -403, -403, -403, -403, -403, 0, 0, 0, -403, -403, 0, 0, 0, -403, -403, -403, -403, -403, -403, + -469, 0, 0, 0, 0, 0, -469, 0, -469, 0, 0, 0, -469, 0, 0, -469, 0, 0, 0, -469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -469, 0, -469, -469, -469, -469, 0, 0, 0, 0, 0, -469, -469, -469, -469, 0, -469, -469, -469, -469, 0, 0, 0, 0, -469, -469, -469, -469, -469, 0, 0, -469, -469, -469, -469, 0, -469, -469, -469, -469, -469, -469, -469, -469, -469, 0, 0, 0, -469, -469, 0, 0, 0, -469, -469, -469, -469, -469, -469, // State 1048 - -393, 0, 0, 0, 0, 0, -393, 0, -393, 0, 0, 0, -393, 0, 0, -393, 0, 0, 0, -393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -393, 0, -393, -393, -393, -393, 0, 0, 0, 0, 0, -393, -393, -393, -393, 0, -393, -393, -393, -393, 0, 0, 0, 0, -393, -393, -393, -393, -393, 0, 0, -393, -393, -393, -393, 0, -393, -393, -393, -393, -393, -393, -393, -393, -393, 0, 0, 0, -393, -393, 0, 0, 0, -393, -393, -393, -393, -393, -393, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -528, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1049 - 0, 0, 0, 0, 0, 0, 0, -590, 0, 0, 0, 0, 0, 0, 1095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -534, 0, 0, 0, 0, 0, -534, 0, -534, 0, 0, 0, -534, 0, 0, -534, 0, 0, 0, -534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -534, 0, -534, -534, -534, -534, 0, 0, 0, 0, 0, -534, -534, -534, -534, 0, -534, -534, -534, -534, 0, 0, 0, 0, -534, -534, -534, -534, -534, 0, 0, -534, -534, -534, -534, 0, -534, -534, -534, -534, -534, -534, -534, -534, -534, 0, 0, 0, -534, -534, 0, 0, 0, -534, -534, -534, -534, -534, -534, // State 1050 - 0, 0, 0, 0, 0, 0, 0, -581, 0, 0, 0, 0, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -510, 0, 0, 0, 0, 0, 0, -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -510, 0, 0, 0, -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -510, 0, -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, // State 1051 - 0, 0, 0, 0, 0, 0, 0, -557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -509, 0, 0, 0, 0, 0, 0, -509, 0, 0, 0, 0, 0, 0, 0, 0, 0, -509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -509, 0, 0, 0, -509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -509, 0, -509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1052 - 0, 0, 0, 0, 0, 0, 0, -613, 0, 0, 0, 0, 0, 0, 1098, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -778, 0, 0, 0, 0, 0, 0, -778, 0, 0, 0, 0, 0, 0, 0, 0, 0, -778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1053 - 0, 0, 0, 0, 0, 0, 0, -609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -328, 0, 0, 0, 0, 0, 0, -328, 0, 0, 0, 0, 0, 0, 0, 0, 0, -328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -328, 0, 0, 0, -328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -328, 0, -328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1054 - 0, 0, 0, 0, 0, 0, 0, -603, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -333, 0, 0, 0, 0, 0, 0, -333, 0, 0, 0, 0, 0, 0, 0, 0, 0, -333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -333, 0, 0, 0, -333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -333, 0, -333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1055 - 0, 0, 0, 0, 0, 0, 0, -616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -585, 0, 0, 0, 0, 0, 0, -585, 0, 0, 0, 0, 0, 0, 0, 0, 0, -585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -585, 0, 0, 0, -585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, -585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1056 - -391, 0, 0, 0, 0, 0, -391, 0, -391, 0, 0, 0, -391, 0, 0, -391, 0, 0, 0, -391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -391, 0, -391, -391, -391, -391, 0, 0, 0, 0, 0, -391, -391, -391, -391, 0, -391, -391, -391, -391, 0, 0, 0, 0, -391, -391, -391, -391, -391, 0, 0, -391, -391, -391, -391, 0, -391, -391, -391, -391, -391, -391, -391, -391, -391, 0, 0, 0, -391, -391, 0, 0, 0, -391, -391, -391, -391, -391, -391, + 0, 0, 0, 0, 0, 0, 0, -375, 0, 0, 0, 0, -375, 0, -375, -375, 0, 0, 0, 0, 0, 0, 0, 0, -375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -375, 0, 0, 0, -375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -375, 0, -375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1057 - -103, 0, 0, 0, 0, 0, -103, 0, -103, 0, 0, 0, -103, 0, 0, -103, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, -103, -103, -103, -103, 0, 0, 0, 0, 0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, -103, 0, 0, -103, -103, -103, -103, -103, 0, 0, -103, -103, -103, -103, 0, -103, -103, -103, -103, -103, -103, -103, -103, -103, 0, 0, 0, -103, -103, 0, 0, 0, -103, -103, -103, -103, -103, -103, + 0, 0, 0, 0, 0, 0, 0, -376, 0, 0, 0, 0, -376, 0, -376, -376, 0, 0, 0, 0, 0, 0, 0, 0, -376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -376, 0, 0, 0, -376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -376, 0, -376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1058 - 0, 0, 0, 0, 0, 0, 0, -861, 0, 0, 0, 0, 0, 0, -861, 0, 0, 0, 0, 0, 0, 0, 0, 0, -861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -861, 0, 0, 0, -861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -861, 0, -861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -531, -304, 0, 0, 0, 0, 0, 0, -304, 0, 0, 0, -531, 0, 0, 0, 0, 0, -304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -304, 0, 0, 0, -304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -304, 0, -304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1059 - 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -151, 0, -151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -327, 0, 0, 0, 0, 0, 0, -327, 0, 0, 0, 0, 0, 0, 0, 0, 0, -327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -327, 0, 0, 0, -327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -327, 0, -327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1060 - 0, 0, 0, 0, 0, 0, -484, -262, 0, 0, 0, 0, 0, 0, -262, 0, 0, 0, -484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -332, 0, 0, 0, 0, 0, 0, -332, 0, 0, 0, 0, 0, 0, 0, 0, 0, -332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -332, 0, 0, 0, -332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -332, 0, -332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1061 - 0, 0, 0, 0, 0, 0, 0, -520, 0, 0, 0, 0, 0, 0, -520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1062 - 0, 0, 0, 0, 0, 0, 0, 1102, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 386, -940, 0, 0, 0, 0, 0, 0, -940, 0, 0, 0, 387, 0, 0, 0, 0, 0, -940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -940, 0, 0, 0, -940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -940, 0, -940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1063 - 0, 0, 0, 0, 0, 0, 0, 1103, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -779, 0, 0, 0, 0, 0, 0, -779, 0, 0, 0, 0, 0, 0, 0, 0, 0, -779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -779, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1064 - 0, 0, 0, 0, 0, 0, 0, -528, 0, 0, 0, 0, 0, 0, -528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, -785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1065 - 0, 0, 0, 0, 0, 0, 0, -277, 0, 0, 0, 0, 0, 0, -277, 0, 0, 0, 0, 0, 0, 0, 0, 0, -277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -277, 0, 0, 0, -277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -277, 0, -277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -331, 0, 0, 0, 0, 0, 0, -331, 0, 0, 0, 0, 0, 0, 0, 0, 0, -331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -331, 0, 0, 0, -331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -331, 0, -331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1066 - 0, 0, 0, 0, 0, 0, -485, -485, 0, 0, 0, 0, 0, 0, -485, 0, 0, 0, -485, 0, 0, 0, 0, 0, -485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -485, 0, 0, 0, -485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -485, 0, -485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -329, 0, 0, 0, 0, 0, 0, -329, 0, 0, 0, 0, 0, 0, 0, 0, 0, -329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -329, 0, 0, 0, -329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -329, 0, -329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1067 - 0, 0, 0, 0, 0, 0, 0, 1104, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -586, 0, 0, 0, 0, 0, 0, -586, 0, 0, 0, 0, 0, 0, 0, 0, 0, -586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -586, 0, 0, 0, -586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, -586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1068 - 0, 0, 0, 0, 0, 0, 0, 1105, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, -784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1069 - 0, 0, 0, 0, 0, 0, 0, -284, 0, 0, 0, 0, 0, 0, -284, 0, 0, 0, 0, 0, 0, 0, 0, 0, -284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -284, 0, 0, 0, -284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -284, 0, -284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -330, 0, 0, 0, 0, 0, 0, -330, 0, 0, 0, 0, 0, 0, 0, 0, 0, -330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -330, 0, 0, 0, -330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -330, 0, -330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1070 - 0, 0, 0, 0, 0, 0, -486, -486, 0, 0, 0, 0, 0, 0, -486, 0, 0, 0, -486, 0, 0, 0, 0, 0, -486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -486, 0, 0, 0, -486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -486, 0, -486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -507, 0, 0, 0, 0, 0, 0, -507, 0, 0, 0, 0, 0, 0, 0, 0, 0, -507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -507, 0, 0, 0, -507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -507, 0, -507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1071 - 0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -505, 0, 0, 0, 0, 0, 0, -505, 0, 0, 0, 0, 0, 0, 0, 0, 0, -505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -505, 0, 0, 0, -505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -505, 0, -505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1072 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -863, 0, 0, 0, 0, 0, 0, 0, 0, 0, -863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -506, 0, 0, 0, 0, 0, 0, -506, 0, 0, 0, 0, 0, 0, 0, 0, 0, -506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -506, 0, 0, 0, -506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -506, 0, -506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1073 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -479, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -537, 0, 0, 0, 0, 0, -537, 0, -537, 0, 0, 0, -537, 0, 0, -537, 0, 0, 0, -537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -537, 0, -537, -537, -537, -537, 0, 0, 0, 0, 0, -537, -537, -537, -537, 0, -537, -537, -537, -537, 0, 0, 0, 0, -537, -537, -537, -537, -537, 0, 0, -537, -537, -537, -537, 0, -537, -537, -537, -537, -537, -537, -537, -537, -537, 0, 0, 0, -537, -537, 0, 0, 0, -537, -537, -537, -537, -537, -537, // State 1074 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -907, 0, 0, 0, 0, 0, -907, 0, -907, 0, 0, 0, -907, 0, 0, -907, 0, 0, 0, -907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -907, 0, -907, -907, -907, -907, 0, 0, 0, 0, 0, -907, -907, -907, -907, 0, -907, -907, -907, -907, 0, 0, 0, 1134, -907, -907, -907, -907, -907, 0, 0, -907, -907, -907, -907, 0, -907, -907, -907, -907, -907, -907, -907, -907, -907, 0, 0, 0, -907, -907, 0, 0, 0, -907, -907, -907, -907, -907, -907, // State 1075 - 0, 0, 0, 0, 0, 0, 0, -862, 0, 0, 0, 0, 0, 0, -862, 0, 0, 0, 0, 0, 0, 0, 0, 0, -862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -862, 0, 0, 0, -862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -862, 0, -862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -908, 0, 0, 0, 0, 0, -908, 0, -908, 0, 0, 0, -908, 0, 0, -908, 0, 0, 0, -908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -908, 0, -908, -908, -908, -908, 0, 0, 0, 0, 0, -908, -908, -908, -908, 0, -908, -908, -908, -908, 0, 0, 0, 0, -908, -908, -908, -908, -908, 0, 0, -908, -908, -908, -908, 0, -908, -908, -908, -908, -908, -908, -908, -908, -908, 0, 0, 0, -908, -908, 0, 0, 0, -908, -908, -908, -908, -908, -908, // State 1076 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -864, 0, 0, 0, 0, 0, 0, 0, 0, 0, -864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -911, 0, 0, 0, 0, 0, -911, 0, -911, 0, 0, 0, -911, 0, 0, -911, 0, 0, 0, -911, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -911, 0, -911, -911, -911, -911, 0, 0, 0, 0, 0, -911, -911, -911, -911, 0, -911, -911, -911, -911, 0, 0, 0, 1135, -911, -911, -911, -911, -911, 0, 0, -911, -911, -911, -911, 0, -911, -911, -911, -911, -911, -911, -911, -911, -911, 0, 0, 0, -911, -911, 0, 0, 0, -911, -911, -911, -911, -911, -911, // State 1077 - 0, 0, 0, 0, 0, 0, 0, 1107, 0, 0, 0, 0, 0, 0, 1108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -912, 0, 0, 0, 0, 0, -912, 0, -912, 0, 0, 0, -912, 0, 0, -912, 0, 0, 0, -912, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -912, 0, -912, -912, -912, -912, 0, 0, 0, 0, 0, -912, -912, -912, -912, 0, -912, -912, -912, -912, 0, 0, 0, 0, -912, -912, -912, -912, -912, 0, 0, -912, -912, -912, -912, 0, -912, -912, -912, -912, -912, -912, -912, -912, -912, 0, 0, 0, -912, -912, 0, 0, 0, -912, -912, -912, -912, -912, -912, // State 1078 - 0, 0, 0, 0, 0, 0, 0, -753, 0, 0, 0, 0, 0, 0, -753, 0, 0, 0, 0, 0, 0, 0, 0, 0, -753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -753, 0, 0, 0, -753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -753, 0, -753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -397, 0, 0, 0, 0, 0, -397, 0, -397, 0, 0, 0, -397, 0, 0, -397, 0, 0, 0, -397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -397, 0, -397, -397, -397, -397, 0, 0, 0, 0, 0, -397, -397, -397, -397, 0, -397, -397, -397, -397, 0, -397, -397, -397, -397, -397, -397, -397, -397, 0, 0, -397, -397, -397, -397, 0, -397, -397, -397, -397, -397, -397, -397, -397, -397, 0, 0, 0, -397, -397, 0, 0, 0, -397, -397, -397, -397, -397, -397, // State 1079 - 0, 0, 0, 0, 0, 0, -124, 1109, -124, 0, 0, 0, 0, 0, 0, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0, -124, -124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1080 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -854, 0, -854, 0, 0, 0, -854, 0, 0, -854, 0, 0, 0, -854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -854, 0, -854, -854, -854, -854, 0, 0, 0, 0, 0, -854, -854, -854, -854, 0, -854, -854, -854, -854, 0, 0, 0, 0, -854, -854, -854, -854, -854, 0, 0, -854, -854, -854, -854, 0, -854, -854, -854, -854, -854, -854, -854, -854, -854, 0, 0, 0, -854, -854, 0, 0, 0, -854, -854, -854, -854, -854, -854, // State 1081 - 0, 0, 0, 0, 0, 0, 0, -761, 0, 0, 0, 0, 0, 0, -761, 0, 0, 0, 0, 0, 0, 0, 0, 0, -761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -761, 0, 0, 0, -761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -761, 0, -761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1138, 0, 0, 0, 0, 0, -133, 0, -133, 0, 0, 0, -133, 0, 0, -133, 0, 0, 0, -133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -133, -133, -133, -133, 0, 0, 0, 0, 0, -133, 0, -133, -133, 0, 0, -133, 0, -133, 0, 0, 0, 0, 0, -133, -133, 0, -133, 0, 0, -133, 0, -133, -133, 0, -133, -133, -133, 0, -133, 0, 0, -133, -133, 0, 0, 0, -133, 0, 0, 0, 0, -133, -133, -133, -133, -133, -133, // State 1082 - 0, 0, 0, 0, 0, 0, -124, 0, -124, 0, 0, 0, 0, 0, 0, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, -124, -124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124, 0, 0, 0, 0, 0, 0, 0, 0, -124, -124, -124, 0, -124, -124, + 0, 0, 0, 0, 0, 0, -851, 0, -851, 0, 0, 0, -851, 0, 0, -851, 0, 0, 0, -851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -851, 0, -851, -851, -851, -851, 0, 0, 0, 0, 0, -851, -851, -851, -851, 0, -851, -851, -851, -851, 0, 0, 0, 0, -851, -851, -851, -851, -851, 0, 0, -851, -851, -851, -851, 0, -851, -851, -851, -851, -851, -851, -851, -851, -851, 0, 0, 0, -851, -851, 0, 0, 0, -851, -851, -851, -851, -851, -851, // State 1083 - 0, 0, 0, 0, 0, 0, 0, -758, 0, 0, 0, 0, 0, 0, -758, 0, 0, 0, 0, 0, 0, 0, 0, 0, -758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -758, 0, 0, 0, -758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -758, 0, -758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1084 - 0, 0, 0, 0, 0, 0, 0, -473, 0, 0, 0, 0, 0, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -473, 0, 0, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -473, 0, -473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -859, 0, -859, 0, 0, 0, -859, 0, 0, -859, 0, 0, 0, -859, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -859, 0, -859, -859, -859, -859, 0, 0, 0, 0, 0, -859, -859, -859, -859, 0, -859, -859, -859, -859, 0, 0, 0, 0, -859, -859, -859, -859, -859, 0, 0, -859, -859, -859, -859, 0, -859, -859, -859, -859, -859, -859, -859, -859, -859, 0, 0, 0, -859, -859, 0, 0, 0, -859, -859, -859, -859, -859, -859, // State 1085 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1141, 0, 0, 0, 0, 0, -132, 0, -132, 0, 0, 0, -132, 0, 0, -132, 0, 0, 0, -132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -132, -132, -132, -132, 0, 0, 0, 0, 0, -132, 0, -132, -132, 0, 0, -132, 0, -132, 0, 0, 0, 0, 0, -132, -132, 0, -132, 0, 0, -132, 0, -132, -132, 0, -132, -132, -132, 0, -132, 0, 0, -132, -132, 0, 0, 0, -132, 0, 0, 0, 0, -132, -132, -132, -132, -132, -132, // State 1086 - -357, 0, 0, 0, 0, 0, -357, 0, -357, 0, 0, 0, -357, 0, 0, -357, 0, 0, 0, -357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -357, 0, -357, -357, -357, -357, 0, 0, 0, 0, 0, -357, -357, -357, -357, 0, -357, -357, -357, -357, 0, -357, -357, -357, -357, -357, -357, -357, -357, 0, 0, -357, -357, -357, -357, 0, -357, -357, -357, -357, -357, -357, -357, -357, -357, 0, 0, 0, -357, -357, 0, 0, 0, -357, -357, -357, -357, -357, -357, + -941, 0, 0, 0, 0, 0, -941, 0, -941, 0, 0, 0, -941, 0, 0, -941, 0, 0, 0, -941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -941, 0, -941, -941, -941, -941, 0, 0, 0, 0, 0, -941, -941, -941, -941, 0, -941, -941, -941, -941, 0, 0, 0, 0, -941, -941, -941, -941, -941, 0, 0, -941, -941, -941, -941, 0, -941, -941, -941, -941, -941, -941, -941, -941, -941, 0, 0, 0, -941, -941, 0, 0, 0, -941, -941, -941, -941, -941, -941, // State 1087 - 0, 0, 0, 0, 0, 0, -806, 0, -806, 0, 0, 0, -806, 0, 0, -806, 0, 0, 0, -806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -806, 0, -806, -806, -806, -806, 0, 0, 0, 0, 0, -806, -806, -806, -806, 0, -806, -806, -806, -806, 0, 0, 0, 0, -806, -806, -806, -806, -806, 0, 0, -806, -806, -806, -806, 0, -806, -806, -806, -806, -806, -806, -806, -806, -806, 0, 0, 0, -806, -806, 0, 0, 0, -806, -806, -806, -806, -806, -806, + 0, -231, -231, 0, -231, 0, -231, 0, -231, -231, 0, 0, -231, 0, -231, -231, 0, 0, -231, 0, -231, -231, 0, 0, -258, 0, 0, -231, -231, 0, -231, 0, -231, -231, -231, -231, 0, 0, -231, 0, 0, 0, 0, -231, 0, -231, 0, -231, -231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -231, 0, -231, -231, 0, 0, 0, -231, -231, 0, 0, 0, 0, 0, 0, 0, 0, 0, -231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1088 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -225, -225, 0, -225, 0, -225, 0, -225, -225, 0, 0, -225, 0, -225, -225, 0, 0, -225, 0, -225, -225, 0, 0, -252, 0, 0, -225, -225, 0, -225, 0, -225, -225, -225, -225, 0, 0, -225, 0, 0, 0, 0, -225, 0, -225, 0, -225, -225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -225, 0, -225, -225, 0, 0, 0, -225, -225, 0, 0, 0, 0, 0, 0, 0, 0, 0, -225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1089 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1120, 0, 0, 0, 0, 0, 0, 0, 0, 0, -667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1090 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1091 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1092 - -395, 0, 0, 0, 0, 0, -395, 0, -395, 0, 0, 0, -395, 0, 0, -395, 0, 0, 0, -395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -395, 0, -395, -395, -395, -395, 0, 0, 0, 0, 0, -395, -395, -395, -395, 0, -395, -395, -395, -395, 0, 0, 0, 0, -395, -395, -395, -395, -395, 0, 0, -395, -395, -395, -395, 0, -395, -395, -395, -395, -395, -395, -395, -395, -395, 0, 0, 0, -395, -395, 0, 0, 0, -395, -395, -395, -395, -395, -395, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, -726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1093 - -389, 0, 0, 0, 0, 0, -389, 0, -389, 0, 0, 0, -389, 0, 0, -389, 0, 0, 0, -389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -389, 0, -389, -389, -389, -389, 0, 0, 0, 0, 0, -389, -389, -389, -389, 0, -389, -389, -389, -389, 0, 0, 0, 0, -389, -389, -389, -389, -389, 0, 0, -389, -389, -389, -389, 0, -389, -389, -389, -389, -389, -389, -389, -389, -389, 0, 0, 0, -389, -389, 0, 0, 0, -389, -389, -389, -389, -389, -389, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1146, 0, 0, 0, 0, 0, 0, 0, 0, 0, -711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1094 - 0, 0, 0, 0, 0, 0, 0, -563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 0, 0, -716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1095 - 0, 0, 0, 0, 0, 0, 0, -587, 0, 0, 0, 0, 0, 0, 1121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1149, 0, 0, 0, 0, 0, 0, 0, 0, 0, -707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1096 - 0, 0, 0, 0, 0, 0, 0, -554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1097 - 0, 0, 0, 0, 0, 0, 0, -610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1098 - 0, 0, 0, 0, 0, 0, 0, -604, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -445, 0, 0, 0, 0, 0, -445, 0, -445, 0, 0, 0, -445, 0, 0, -445, 0, 0, 0, -445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -445, 0, -445, -445, -445, -445, 0, 0, 0, 0, 0, -445, -445, -445, -445, 0, -445, -445, -445, -445, 0, 0, 0, 0, -445, -445, -445, -445, -445, 0, 0, -445, -445, -445, -445, 0, -445, -445, -445, -445, -445, -445, -445, -445, -445, 0, 0, 0, -445, -445, 0, 0, 0, -445, -445, -445, -445, -445, -445, // State 1099 - 0, 0, 0, 0, 0, 0, 0, -600, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -450, 0, 0, 0, 0, 0, -450, 0, -450, 0, 0, 0, -450, 0, 0, -450, 0, 0, 0, -450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -450, 0, -450, -450, -450, -450, 0, 0, 0, 0, 0, -450, -450, -450, -450, 0, -450, -450, -450, -450, 0, 0, 0, 0, -450, -450, -450, -450, -450, 0, 0, -450, -450, -450, -450, 0, -450, -450, -450, -450, -450, -450, -450, -450, -450, 0, 0, 0, -450, -450, 0, 0, 0, -450, -450, -450, -450, -450, -450, // State 1100 - 0, 0, 0, 0, 0, 0, 0, -585, 0, 0, 0, 0, 0, 0, 1126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -440, 0, 0, 0, 0, 0, -440, 0, -440, 0, 0, 0, -440, 0, 0, -440, 0, 0, 0, -440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -440, 0, -440, -440, -440, -440, 0, 0, 0, 0, 0, -440, -440, -440, -440, 0, -440, -440, -440, -440, 0, 0, 0, 0, -440, -440, -440, -440, -440, 0, 0, -440, -440, -440, -440, 0, -440, -440, -440, -440, -440, -440, -440, -440, -440, 0, 0, 0, -440, -440, 0, 0, 0, -440, -440, -440, -440, -440, -440, // State 1101 - 0, 0, 0, 0, 0, 0, 0, -276, 0, 0, 0, 0, 0, 0, -276, 0, 0, 0, 0, 0, 0, 0, 0, 0, -276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -276, 0, 0, 0, -276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -276, 0, -276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1102 - 0, 0, 0, 0, 0, 0, 0, -274, 0, 0, 0, 0, 0, 0, -274, 0, 0, 0, 0, 0, 0, 0, 0, 0, -274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -274, 0, 0, 0, -274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -274, 0, -274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -447, 0, 0, 0, 0, 0, -447, 0, -447, 0, 0, 0, -447, 0, 0, -447, 0, 0, 0, -447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -447, 0, -447, -447, -447, -447, 0, 0, 0, 0, 0, -447, -447, -447, -447, 0, -447, -447, -447, -447, 0, 0, 0, 0, -447, -447, -447, -447, -447, 0, 0, -447, -447, -447, -447, 0, -447, -447, -447, -447, -447, -447, -447, -447, -447, 0, 0, 0, -447, -447, 0, 0, 0, -447, -447, -447, -447, -447, -447, // State 1103 - 0, 0, 0, 0, 0, 0, 0, -283, 0, 0, 0, 0, 0, 0, -283, 0, 0, 0, 0, 0, 0, 0, 0, 0, -283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -283, 0, 0, 0, -283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -283, 0, -283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -646, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1104 - 0, 0, 0, 0, 0, 0, 0, -281, 0, 0, 0, 0, 0, 0, -281, 0, 0, 0, 0, 0, 0, 0, 0, 0, -281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -281, 0, 0, 0, -281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -281, 0, -281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -631, 0, 0, 0, 0, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1105 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -478, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -659, 0, 0, 0, 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1106 - 0, 0, 0, 0, 0, 0, 0, -757, 0, 0, 0, 0, 0, 0, -757, 0, 0, 0, 0, 0, 0, 0, 0, 0, -757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -757, 0, 0, 0, -757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -757, 0, -757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1107 - 0, 0, 0, 0, 0, 0, -125, 1137, -125, 0, 0, 0, 0, 0, 0, -125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -125, -125, -125, -125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -125, 0, 0, 0, 0, 0, 0, 0, 0, -125, -125, -125, 0, -125, -125, + 0, 0, 0, 0, 0, 0, 0, -671, 0, 0, 0, 0, 0, 0, 1159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1108 - 0, 0, 0, 0, 0, 0, 0, -755, 0, 0, 0, 0, 0, 0, -755, 0, 0, 0, 0, 0, 0, 0, 0, 0, -755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -755, 0, 0, 0, -755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -755, 0, -755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1109 - 0, 0, 0, 0, 0, 0, -125, 0, -125, 0, 0, 0, 0, 0, 0, -125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -125, -125, -125, -125, -125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -125, 0, 0, 0, 0, 0, 0, 0, 0, -125, -125, -125, 0, -125, -125, + -565, 0, 0, 0, 0, 0, 0, -565, 0, 0, 0, 0, 0, 0, -565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1110 - 0, 0, 0, 0, 0, 0, 0, -760, 0, 0, 0, 0, 0, 0, -760, 0, 0, 0, 0, 0, 0, 0, 0, 0, -760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -760, 0, 0, 0, -760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -760, 0, -760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -471, 0, 0, 0, 0, 0, -471, 0, -471, 0, 0, 0, -471, 0, 0, -471, 0, 0, 0, -471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -471, 0, -471, -471, -471, -471, 0, 0, 0, 0, 0, -471, -471, -471, -471, 0, -471, -471, -471, -471, 0, 0, 0, 0, -471, -471, -471, -471, -471, 0, 0, -471, -471, -471, -471, 0, -471, -471, -471, -471, -471, -471, -471, -471, -471, 0, 0, 0, -471, -471, 0, 0, 0, -471, -471, -471, -471, -471, -471, // State 1111 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -105, 0, 0, 0, 0, 0, -105, 0, -105, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, 0, -105, -105, -105, -105, 0, 0, 0, 0, 0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, -105, 0, 0, -105, -105, -105, -105, -105, 0, 0, -105, -105, -105, -105, 0, -105, -105, -105, -105, -105, -105, -105, -105, -105, 0, 0, 0, -105, -105, 0, 0, 0, -105, -105, -105, -105, -105, -105, // State 1112 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -535, 0, 0, 0, 0, 0, -535, 0, -535, 0, 0, 0, -535, 0, 0, -535, 0, 0, 0, -535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -535, 0, -535, -535, -535, -535, 0, 0, 0, 0, 0, -535, -535, -535, -535, 0, -535, -535, -535, -535, 0, 0, 0, 0, -535, -535, -535, -535, -535, 0, 0, -535, -535, -535, -535, 0, -535, -535, -535, -535, -535, -535, -535, -535, -535, 0, 0, 0, -535, -535, 0, 0, 0, -535, -535, -535, -535, -535, -535, // State 1113 - 0, 0, 0, 0, 0, 0, 0, -472, 0, 0, 0, 0, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -472, 0, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -472, 0, -472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1114 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1182, 0, 0, 0, 0, 0, 0, 1183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1115 - 0, 0, 0, 0, 0, 0, 0, -475, 0, 0, 0, 0, 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -475, 0, 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -475, 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -803, 0, 0, 0, 0, 0, 0, -803, 0, 0, 0, 0, 0, 0, 0, 0, 0, -803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -803, 0, 0, 0, -803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -803, 0, -803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1116 - -852, 0, 0, 0, 0, 0, -852, 0, -852, 0, 0, 0, -852, 0, 0, -852, 0, 0, 0, -852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -852, 0, -852, -852, -852, -852, 0, 0, 0, 0, 0, -852, -852, -852, -852, 0, -852, -852, -852, -852, 0, 0, 0, 0, -852, -852, -852, -852, -852, 0, 0, -852, -852, -852, -852, 0, -852, -852, -852, -852, -852, -852, -852, -852, -852, 0, 0, 0, -852, -852, 0, 0, 0, -852, -852, -852, -852, -852, -852, + 0, 0, 0, 0, 0, 0, 0, -843, 0, 0, 0, 0, 0, 0, -843, 0, 0, 0, 0, 0, 0, 0, 0, 0, -843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -843, 0, 0, 0, -843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -843, 0, -843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1117 - -856, 0, 0, 0, 0, 0, -856, 0, -856, 0, 0, 0, -856, 0, 0, -856, 0, 0, 0, -856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -856, 0, -856, -856, -856, -856, 0, 0, 0, 0, 0, -856, -856, -856, -856, 0, -856, -856, -856, -856, 0, 0, 0, 0, -856, -856, -856, -856, -856, 0, 0, -856, -856, -856, -856, 0, -856, -856, -856, -856, -856, -856, -856, -856, -856, 0, 0, 0, -856, -856, 0, 0, 0, -856, -856, -856, -856, -856, -856, + 0, 0, 0, 0, 0, 0, 0, -377, 0, 0, 0, 0, -377, 0, -377, -377, 0, 0, 0, 0, 0, 0, 0, 0, -377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -377, 0, 0, 0, -377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -377, 0, -377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1118 - -361, 0, 0, 0, 0, 0, -361, 0, -361, 0, 0, 0, -361, 0, 0, -361, 0, 0, 0, -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, -361, -361, -361, -361, 0, 0, 0, 0, 0, -361, -361, -361, -361, 0, -361, -361, -361, -361, 0, -361, -361, -361, -361, -361, -361, -361, -361, 0, 0, -361, -361, -361, -361, 0, -361, -361, -361, -361, -361, -361, -361, -361, -361, 0, 0, 0, -361, -361, 0, 0, 0, -361, -361, -361, -361, -361, -361, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1119 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -808, 0, 0, 0, 0, 0, 0, -808, 0, 0, 0, 0, 0, 0, 0, 0, 0, -808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -808, 0, 0, 0, -808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -808, 0, -808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1120 - 0, 0, 0, 0, 0, 0, 0, -560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, // State 1121 - 0, 0, 0, 0, 0, 0, 0, -601, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1122 - 0, 0, 0, 0, 0, 0, 0, -586, 0, 0, 0, 0, 0, 0, 1142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1123 - 0, 0, 0, 0, 0, 0, 0, -591, 0, 0, 0, 0, 0, 0, 1143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1124 - 0, 0, 0, 0, 0, 0, 0, -582, 0, 0, 0, 0, 0, 0, 1145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1125 - 0, 0, 0, 0, 0, 0, 0, -558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1126 - 0, 0, 0, 0, 0, 0, 0, -482, 0, 0, 0, 0, 0, 0, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, -513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1127 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1128 - 0, 0, 0, 0, 0, 0, 0, -521, 0, 0, 0, 0, 0, 0, -521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1129 - 0, 0, 0, 0, 0, 0, 0, -275, 0, 0, 0, 0, 0, 0, -275, 0, 0, 0, 0, 0, 0, 0, 0, 0, -275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -275, 0, 0, 0, -275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -275, 0, -275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1130 - 0, 0, 0, 0, 0, 0, 0, 1146, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1131 - 0, 0, 0, 0, 0, 0, 0, -529, 0, 0, 0, 0, 0, 0, -529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -518, 0, 0, 0, 0, 0, 0, -518, 0, 0, 0, 0, 0, 0, 0, 0, 0, -518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -518, 0, 0, 0, -518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -518, 0, -518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1132 - 0, 0, 0, 0, 0, 0, 0, -273, 0, 0, 0, 0, 0, 0, -273, 0, 0, 0, 0, 0, 0, 0, 0, 0, -273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -273, 0, 0, 0, -273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -273, 0, -273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -536, 0, 0, 0, 0, 0, -536, 0, -536, 0, 0, 0, -536, 0, 0, -536, 0, 0, 0, -536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -536, 0, -536, -536, -536, -536, 0, 0, 0, 0, 0, -536, -536, -536, -536, 0, -536, -536, -536, -536, 0, 0, 0, 0, -536, -536, -536, -536, -536, 0, 0, -536, -536, -536, -536, 0, -536, -536, -536, -536, -536, -536, -536, -536, -536, 0, 0, 0, -536, -536, 0, 0, 0, -536, -536, -536, -536, -536, -536, // State 1133 - 0, 0, 0, 0, 0, 0, 0, -282, 0, 0, 0, 0, 0, 0, -282, 0, 0, 0, 0, 0, 0, 0, 0, 0, -282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -282, 0, 0, 0, -282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -282, 0, -282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1134 - 0, 0, 0, 0, 0, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1135 - 0, 0, 0, 0, 0, 0, 0, -280, 0, 0, 0, 0, 0, 0, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -280, 0, 0, 0, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -280, 0, -280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -402, 0, 0, 0, 0, 0, -402, 0, -402, 0, 0, 0, -402, 0, 0, -402, 0, 0, 0, -402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -402, 0, -402, -402, -402, -402, 0, 0, 0, 0, 0, -402, -402, -402, -402, 0, -402, -402, -402, -402, 0, -402, -402, -402, -402, -402, -402, -402, -402, 0, 0, -402, -402, -402, -402, 0, -402, -402, -402, -402, -402, -402, -402, -402, -402, 0, 0, 0, -402, -402, 0, 0, 0, -402, -402, -402, -402, -402, -402, // State 1136 - 0, 0, 0, 0, 0, 0, 0, -756, 0, 0, 0, 0, 0, 0, -756, 0, 0, 0, 0, 0, 0, 0, 0, 0, -756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -756, 0, 0, 0, -756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -756, 0, -756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1137 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -852, 0, -852, 0, 0, 0, -852, 0, 0, -852, 0, 0, 0, -852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -852, 0, -852, -852, -852, -852, 0, 0, 0, 0, 0, -852, -852, -852, -852, 0, -852, -852, -852, -852, 0, 0, 0, 0, -852, -852, -852, -852, -852, 0, 0, -852, -852, -852, -852, 0, -852, -852, -852, -852, -852, -852, -852, -852, -852, 0, 0, 0, -852, -852, 0, 0, 0, -852, -852, -852, -852, -852, -852, // State 1138 - 0, 0, 0, 0, 0, 0, 0, -474, 0, 0, 0, 0, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -474, 0, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -474, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -860, 0, -860, 0, 0, 0, -860, 0, 0, -860, 0, 0, 0, -860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -860, 0, -860, -860, -860, -860, 0, 0, 0, 0, 0, -860, -860, -860, -860, 0, -860, -860, -860, -860, 0, 0, 0, 0, -860, -860, -860, -860, -860, 0, 0, -860, -860, -860, -860, 0, -860, -860, -860, -860, -860, -860, -860, -860, -860, 0, 0, 0, -860, -860, 0, 0, 0, -860, -860, -860, -860, -860, -860, // State 1139 - 0, 0, 0, 0, 0, 0, 0, -592, 0, 0, 0, 0, 0, 0, 1150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1191, 0, 0, 0, 0, 0, -133, 0, -133, 0, 0, 0, -133, 0, 0, -133, 0, 0, 0, -133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -133, -133, -133, -133, 0, 0, 0, 0, 0, -133, 0, -133, -133, 0, 0, -133, 0, -133, 0, 0, 0, 0, 0, -133, -133, 0, -133, 0, 0, -133, 0, -133, -133, 0, -133, -133, -133, 0, -133, 0, 0, -133, -133, 0, 0, 0, -133, 0, 0, 0, 0, -133, -133, -133, -133, -133, -133, // State 1140 - 0, 0, 0, 0, 0, 0, 0, -583, 0, 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -857, 0, -857, 0, 0, 0, -857, 0, 0, -857, 0, 0, 0, -857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -857, 0, -857, -857, -857, -857, 0, 0, 0, 0, 0, -857, -857, -857, -857, 0, -857, -857, -857, -857, 0, 0, 0, 0, -857, -857, -857, -857, -857, 0, 0, -857, -857, -857, -857, 0, -857, -857, -857, -857, -857, -857, -857, -857, -857, 0, 0, 0, -857, -857, 0, 0, 0, -857, -857, -857, -857, -857, -857, // State 1141 - 0, 0, 0, 0, 0, 0, 0, -559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -227, -227, 0, -227, 0, -227, 0, -227, -227, 0, 0, -227, 0, -227, -227, 0, 0, -227, 0, -227, -227, 0, 0, -254, 0, 0, -227, -227, 0, -227, 0, -227, -227, -227, -227, 0, 0, -227, 0, 0, 0, 0, -227, 0, -227, 0, -227, -227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -227, 0, -227, -227, 0, 0, 0, -227, -227, 0, 0, 0, 0, 0, 0, 0, 0, 0, -227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1142 - 0, 0, 0, 0, 0, 0, 0, -564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1143 - 0, 0, 0, 0, 0, 0, 0, -588, 0, 0, 0, 0, 0, 0, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 0, 0, 0, 0, 0, 0, 0, 0, 0, -717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1144 - 0, 0, 0, 0, 0, 0, 0, -555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, 0, 0, 0, 0, 0, 0, 0, 0, 0, -708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1145 - 0, 0, 0, 0, 0, 0, 0, -272, 0, 0, 0, 0, 0, 0, -272, 0, 0, 0, 0, 0, 0, 0, 0, 0, -272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -272, 0, 0, 0, -272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -272, 0, -272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1146 - 0, 0, 0, 0, 0, 0, 0, -279, 0, 0, 0, 0, 0, 0, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -279, 0, 0, 0, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -279, 0, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1147 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1195, 0, 0, 0, 0, 0, 0, 0, 0, 0, -713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1148 - 0, 0, 0, 0, 0, 0, 0, -477, 0, 0, 0, 0, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -477, 0, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -477, 0, -477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1149 - 0, 0, 0, 0, 0, 0, 0, -565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -442, 0, 0, 0, 0, 0, -442, 0, -442, 0, 0, 0, -442, 0, 0, -442, 0, 0, 0, -442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -442, 0, -442, -442, -442, -442, 0, 0, 0, 0, 0, -442, -442, -442, -442, 0, -442, -442, -442, -442, 0, 0, 0, 0, -442, -442, -442, -442, -442, 0, 0, -442, -442, -442, -442, 0, -442, -442, -442, -442, -442, -442, -442, -442, -442, 0, 0, 0, -442, -442, 0, 0, 0, -442, -442, -442, -442, -442, -442, // State 1150 - 0, 0, 0, 0, 0, 0, 0, -589, 0, 0, 0, 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -449, 0, 0, 0, 0, 0, -449, 0, -449, 0, 0, 0, -449, 0, 0, -449, 0, 0, 0, -449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -449, 0, -449, -449, -449, -449, 0, 0, 0, 0, 0, -449, -449, -449, -449, 0, -449, -449, -449, -449, 0, 0, 0, 0, -449, -449, -449, -449, -449, 0, 0, -449, -449, -449, -449, 0, -449, -449, -449, -449, -449, -449, -449, -449, -449, 0, 0, 0, -449, -449, 0, 0, 0, -449, -449, -449, -449, -449, -449, // State 1151 - 0, 0, 0, 0, 0, 0, 0, -556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -439, 0, 0, 0, 0, 0, -439, 0, -439, 0, 0, 0, -439, 0, 0, -439, 0, 0, 0, -439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -439, 0, -439, -439, -439, -439, 0, 0, 0, 0, 0, -439, -439, -439, -439, 0, -439, -439, -439, -439, 0, 0, 0, 0, -439, -439, -439, -439, -439, 0, 0, -439, -439, -439, -439, 0, -439, -439, -439, -439, -439, -439, -439, -439, -439, 0, 0, 0, -439, -439, 0, 0, 0, -439, -439, -439, -439, -439, -439, // State 1152 - 0, 0, 0, 0, 0, 0, 0, -561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -637, 0, 0, 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1153 - 0, 0, 0, 0, 0, 0, 0, -271, 0, 0, 0, 0, 0, 0, -271, 0, 0, 0, 0, 0, 0, 0, 0, 0, -271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -271, 0, 0, 0, -271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -271, 0, -271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -628, 0, 0, 0, 0, 0, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1154 - 0, 0, 0, 0, 0, 0, 0, -278, 0, 0, 0, 0, 0, 0, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -278, 0, 0, 0, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -278, 0, -278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1155 - 0, 0, 0, 0, 0, 0, 0, -476, 0, 0, 0, 0, 0, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -476, 0, 0, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -476, 0, -476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -660, 0, 0, 0, 0, 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1156 - 0, 0, 0, 0, 0, 0, 0, -562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1157 + 0, 0, 0, 0, 0, 0, 0, -650, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1158 + 0, 0, 0, 0, 0, 0, 0, -663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1159 + -437, 0, 0, 0, 0, 0, -437, 0, -437, 0, 0, 0, -437, 0, 0, -437, 0, 0, 0, -437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -437, 0, -437, -437, -437, -437, 0, 0, 0, 0, 0, -437, -437, -437, -437, 0, -437, -437, -437, -437, 0, 0, 0, 0, -437, -437, -437, -437, -437, 0, 0, -437, -437, -437, -437, 0, -437, -437, -437, -437, -437, -437, -437, -437, -437, 0, 0, 0, -437, -437, 0, 0, 0, -437, -437, -437, -437, -437, -437, + // State 1160 + -106, 0, 0, 0, 0, 0, -106, 0, -106, 0, 0, 0, -106, 0, 0, -106, 0, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, -106, -106, -106, -106, 0, 0, 0, 0, 0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, -106, 0, 0, -106, -106, -106, -106, -106, 0, 0, -106, -106, -106, -106, 0, -106, -106, -106, -106, -106, -106, -106, -106, -106, 0, 0, 0, -106, -106, 0, 0, 0, -106, -106, -106, -106, -106, -106, + // State 1161 + 0, 0, 0, 0, 0, 0, 0, -915, 0, 0, 0, 0, 0, 0, -915, 0, 0, 0, 0, 0, 0, 0, 0, 0, -915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -915, 0, 0, 0, -915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -915, 0, -915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1162 + 0, 0, 0, 0, 0, 0, 0, -154, 0, 0, 0, 0, 0, 0, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, 0, 0, 0, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -154, 0, -154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1163 + 0, 0, 0, 0, 0, 0, -531, -304, 0, 0, 0, 0, 0, 0, -304, 0, 0, 0, -531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1164 + 0, 0, 0, 0, 0, 0, 0, -567, 0, 0, 0, 0, 0, 0, -567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1165 + 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1166 + 0, 0, 0, 0, 0, 0, 0, 1206, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1167 + 0, 0, 0, 0, 0, 0, 0, -575, 0, 0, 0, 0, 0, 0, -575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1168 + 0, 0, 0, 0, 0, 0, 0, -319, 0, 0, 0, 0, 0, 0, -319, 0, 0, 0, 0, 0, 0, 0, 0, 0, -319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -319, 0, 0, 0, -319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -319, 0, -319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1169 + 0, 0, 0, 0, 0, 0, -532, -532, 0, 0, 0, 0, 0, 0, -532, 0, 0, 0, -532, 0, 0, 0, 0, 0, -532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -532, 0, 0, 0, -532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -532, 0, -532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1170 + 0, 0, 0, 0, 0, 0, 0, 1207, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1171 + 0, 0, 0, 0, 0, 0, 0, 1208, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1172 + 0, 0, 0, 0, 0, 0, 0, -326, 0, 0, 0, 0, 0, 0, -326, 0, 0, 0, 0, 0, 0, 0, 0, 0, -326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -326, 0, 0, 0, -326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -326, 0, -326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1173 + 0, 0, 0, 0, 0, 0, -533, -533, 0, 0, 0, 0, 0, 0, -533, 0, 0, 0, -533, 0, 0, 0, 0, 0, -533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -533, 0, 0, 0, -533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -533, 0, -533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1174 + 0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1175 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -917, 0, 0, 0, 0, 0, 0, 0, 0, 0, -917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1176 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -526, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1177 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1178 + 0, 0, 0, 0, 0, 0, 0, -916, 0, 0, 0, 0, 0, 0, -916, 0, 0, 0, 0, 0, 0, 0, 0, 0, -916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -916, 0, 0, 0, -916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -916, 0, -916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1179 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -918, 0, 0, 0, 0, 0, 0, 0, 0, 0, -918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1180 + 0, 0, 0, 0, 0, 0, 0, 1210, 0, 0, 0, 0, 0, 0, 1211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1181 + 0, 0, 0, 0, 0, 0, 0, -802, 0, 0, 0, 0, 0, 0, -802, 0, 0, 0, 0, 0, 0, 0, 0, 0, -802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -802, 0, 0, 0, -802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -802, 0, -802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1182 + 0, 0, 0, 0, 0, 0, -127, 1212, -127, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, 0, -127, -127, + // State 1183 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1184 + 0, 0, 0, 0, 0, 0, 0, -810, 0, 0, 0, 0, 0, 0, -810, 0, 0, 0, 0, 0, 0, 0, 0, 0, -810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -810, 0, 0, 0, -810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -810, 0, -810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1185 + 0, 0, 0, 0, 0, 0, -127, 0, -127, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, -127, -127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, 0, 0, 0, 0, 0, 0, 0, 0, -127, -127, -127, 0, -127, -127, + // State 1186 + 0, 0, 0, 0, 0, 0, 0, -807, 0, 0, 0, 0, 0, 0, -807, 0, 0, 0, 0, 0, 0, 0, 0, 0, -807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -807, 0, 0, 0, -807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -807, 0, -807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1187 + 0, 0, 0, 0, 0, 0, 0, -520, 0, 0, 0, 0, 0, 0, -520, 0, 0, 0, 0, 0, 0, 0, 0, 0, -520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -520, 0, 0, 0, -520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -520, 0, -520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1188 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1189 + -399, 0, 0, 0, 0, 0, -399, 0, -399, 0, 0, 0, -399, 0, 0, -399, 0, 0, 0, -399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -399, 0, -399, -399, -399, -399, 0, 0, 0, 0, 0, -399, -399, -399, -399, 0, -399, -399, -399, -399, 0, -399, -399, -399, -399, -399, -399, -399, -399, 0, 0, -399, -399, -399, -399, 0, -399, -399, -399, -399, -399, -399, -399, -399, -399, 0, 0, 0, -399, -399, 0, 0, 0, -399, -399, -399, -399, -399, -399, + // State 1190 + 0, 0, 0, 0, 0, 0, -858, 0, -858, 0, 0, 0, -858, 0, 0, -858, 0, 0, 0, -858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -858, 0, -858, -858, -858, -858, 0, 0, 0, 0, 0, -858, -858, -858, -858, 0, -858, -858, -858, -858, 0, 0, 0, 0, -858, -858, -858, -858, -858, 0, 0, -858, -858, -858, -858, 0, -858, -858, -858, -858, -858, -858, -858, -858, -858, 0, 0, 0, -858, -858, 0, 0, 0, -858, -858, -858, -858, -858, -858, + // State 1191 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -690, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1192 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1223, 0, 0, 0, 0, 0, 0, 0, 0, 0, -714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1193 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1194 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1195 + -441, 0, 0, 0, 0, 0, -441, 0, -441, 0, 0, 0, -441, 0, 0, -441, 0, 0, 0, -441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -441, 0, -441, -441, -441, -441, 0, 0, 0, 0, 0, -441, -441, -441, -441, 0, -441, -441, -441, -441, 0, 0, 0, 0, -441, -441, -441, -441, -441, 0, 0, -441, -441, -441, -441, 0, -441, -441, -441, -441, -441, -441, -441, -441, -441, 0, 0, 0, -441, -441, 0, 0, 0, -441, -441, -441, -441, -441, -441, + // State 1196 + -435, 0, 0, 0, 0, 0, -435, 0, -435, 0, 0, 0, -435, 0, 0, -435, 0, 0, 0, -435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -435, 0, -435, -435, -435, -435, 0, 0, 0, 0, 0, -435, -435, -435, -435, 0, -435, -435, -435, -435, 0, 0, 0, 0, -435, -435, -435, -435, -435, 0, 0, -435, -435, -435, -435, 0, -435, -435, -435, -435, -435, -435, -435, -435, -435, 0, 0, 0, -435, -435, 0, 0, 0, -435, -435, -435, -435, -435, -435, + // State 1197 + 0, 0, 0, 0, 0, 0, 0, -610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1198 + 0, 0, 0, 0, 0, 0, 0, -634, 0, 0, 0, 0, 0, 0, 1224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1199 + 0, 0, 0, 0, 0, 0, 0, -601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1200 + 0, 0, 0, 0, 0, 0, 0, -657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1201 + 0, 0, 0, 0, 0, 0, 0, -651, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1202 + 0, 0, 0, 0, 0, 0, 0, -647, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1203 + 0, 0, 0, 0, 0, 0, 0, -632, 0, 0, 0, 0, 0, 0, 1229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1204 + 0, 0, 0, 0, 0, 0, 0, -318, 0, 0, 0, 0, 0, 0, -318, 0, 0, 0, 0, 0, 0, 0, 0, 0, -318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -318, 0, 0, 0, -318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -318, 0, -318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1205 + 0, 0, 0, 0, 0, 0, 0, -316, 0, 0, 0, 0, 0, 0, -316, 0, 0, 0, 0, 0, 0, 0, 0, 0, -316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -316, 0, 0, 0, -316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -316, 0, -316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1206 + 0, 0, 0, 0, 0, 0, 0, -325, 0, 0, 0, 0, 0, 0, -325, 0, 0, 0, 0, 0, 0, 0, 0, 0, -325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -325, 0, 0, 0, -325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -325, 0, -325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1207 + 0, 0, 0, 0, 0, 0, 0, -323, 0, 0, 0, 0, 0, 0, -323, 0, 0, 0, 0, 0, 0, 0, 0, 0, -323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -323, 0, 0, 0, -323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -323, 0, -323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1208 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -525, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1209 + 0, 0, 0, 0, 0, 0, 0, -806, 0, 0, 0, 0, 0, 0, -806, 0, 0, 0, 0, 0, 0, 0, 0, 0, -806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -806, 0, 0, 0, -806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -806, 0, -806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1210 + 0, 0, 0, 0, 0, 0, -128, 1240, -128, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, 0, -128, -128, + // State 1211 + 0, 0, 0, 0, 0, 0, 0, -804, 0, 0, 0, 0, 0, 0, -804, 0, 0, 0, 0, 0, 0, 0, 0, 0, -804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -804, 0, 0, 0, -804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -804, 0, -804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1212 + 0, 0, 0, 0, 0, 0, -128, 0, -128, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, -128, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -128, 0, -128, -128, + // State 1213 + 0, 0, 0, 0, 0, 0, 0, -809, 0, 0, 0, 0, 0, 0, -809, 0, 0, 0, 0, 0, 0, 0, 0, 0, -809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -809, 0, 0, 0, -809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -809, 0, -809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1214 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1215 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1216 + 0, 0, 0, 0, 0, 0, 0, -519, 0, 0, 0, 0, 0, 0, -519, 0, 0, 0, 0, 0, 0, 0, 0, 0, -519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -519, 0, 0, 0, -519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -519, 0, -519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1217 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1218 + 0, 0, 0, 0, 0, 0, 0, -522, 0, 0, 0, 0, 0, 0, -522, 0, 0, 0, 0, 0, 0, 0, 0, 0, -522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -522, 0, 0, 0, -522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -522, 0, -522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1219 + -906, 0, 0, 0, 0, 0, -906, 0, -906, 0, 0, 0, -906, 0, 0, -906, 0, 0, 0, -906, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -906, 0, -906, -906, -906, -906, 0, 0, 0, 0, 0, -906, -906, -906, -906, 0, -906, -906, -906, -906, 0, 0, 0, 0, -906, -906, -906, -906, -906, 0, 0, -906, -906, -906, -906, 0, -906, -906, -906, -906, -906, -906, -906, -906, -906, 0, 0, 0, -906, -906, 0, 0, 0, -906, -906, -906, -906, -906, -906, + // State 1220 + -910, 0, 0, 0, 0, 0, -910, 0, -910, 0, 0, 0, -910, 0, 0, -910, 0, 0, 0, -910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -910, 0, -910, -910, -910, -910, 0, 0, 0, 0, 0, -910, -910, -910, -910, 0, -910, -910, -910, -910, 0, 0, 0, 0, -910, -910, -910, -910, -910, 0, 0, -910, -910, -910, -910, 0, -910, -910, -910, -910, -910, -910, -910, -910, -910, 0, 0, 0, -910, -910, 0, 0, 0, -910, -910, -910, -910, -910, -910, + // State 1221 + -403, 0, 0, 0, 0, 0, -403, 0, -403, 0, 0, 0, -403, 0, 0, -403, 0, 0, 0, -403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -403, 0, -403, -403, -403, -403, 0, 0, 0, 0, 0, -403, -403, -403, -403, 0, -403, -403, -403, -403, 0, -403, -403, -403, -403, -403, -403, -403, -403, 0, 0, -403, -403, -403, -403, 0, -403, -403, -403, -403, -403, -403, -403, -403, -403, 0, 0, 0, -403, -403, 0, 0, 0, -403, -403, -403, -403, -403, -403, + // State 1222 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1223 + 0, 0, 0, 0, 0, 0, 0, -607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1224 + 0, 0, 0, 0, 0, 0, 0, -648, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1225 + 0, 0, 0, 0, 0, 0, 0, -633, 0, 0, 0, 0, 0, 0, 1245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1226 + 0, 0, 0, 0, 0, 0, 0, -638, 0, 0, 0, 0, 0, 0, 1246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1227 + 0, 0, 0, 0, 0, 0, 0, -629, 0, 0, 0, 0, 0, 0, 1248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1228 + 0, 0, 0, 0, 0, 0, 0, -605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1229 + 0, 0, 0, 0, 0, 0, 0, -529, 0, 0, 0, 0, 0, 0, -529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1230 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1231 + 0, 0, 0, 0, 0, 0, 0, -568, 0, 0, 0, 0, 0, 0, -568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1232 + 0, 0, 0, 0, 0, 0, 0, -317, 0, 0, 0, 0, 0, 0, -317, 0, 0, 0, 0, 0, 0, 0, 0, 0, -317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -317, 0, 0, 0, -317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -317, 0, -317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1233 + 0, 0, 0, 0, 0, 0, 0, 1249, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1234 + 0, 0, 0, 0, 0, 0, 0, -576, 0, 0, 0, 0, 0, 0, -576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1235 + 0, 0, 0, 0, 0, 0, 0, -315, 0, 0, 0, 0, 0, 0, -315, 0, 0, 0, 0, 0, 0, 0, 0, 0, -315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -315, 0, 0, 0, -315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -315, 0, -315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1236 + 0, 0, 0, 0, 0, 0, 0, -324, 0, 0, 0, 0, 0, 0, -324, 0, 0, 0, 0, 0, 0, 0, 0, 0, -324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -324, 0, 0, 0, -324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -324, 0, -324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1237 + 0, 0, 0, 0, 0, 0, 0, 1250, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1238 + 0, 0, 0, 0, 0, 0, 0, -322, 0, 0, 0, 0, 0, 0, -322, 0, 0, 0, 0, 0, 0, 0, 0, 0, -322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -322, 0, 0, 0, -322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -322, 0, -322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1239 + 0, 0, 0, 0, 0, 0, 0, -805, 0, 0, 0, 0, 0, 0, -805, 0, 0, 0, 0, 0, 0, 0, 0, 0, -805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -805, 0, 0, 0, -805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -805, 0, -805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1240 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1241 + 0, 0, 0, 0, 0, 0, 0, -521, 0, 0, 0, 0, 0, 0, -521, 0, 0, 0, 0, 0, 0, 0, 0, 0, -521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -521, 0, 0, 0, -521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -521, 0, -521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1242 + 0, 0, 0, 0, 0, 0, 0, -639, 0, 0, 0, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1243 + 0, 0, 0, 0, 0, 0, 0, -630, 0, 0, 0, 0, 0, 0, 1255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1244 + 0, 0, 0, 0, 0, 0, 0, -606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1245 + 0, 0, 0, 0, 0, 0, 0, -611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1246 + 0, 0, 0, 0, 0, 0, 0, -635, 0, 0, 0, 0, 0, 0, 1256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1247 + 0, 0, 0, 0, 0, 0, 0, -602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1248 + 0, 0, 0, 0, 0, 0, 0, -314, 0, 0, 0, 0, 0, 0, -314, 0, 0, 0, 0, 0, 0, 0, 0, 0, -314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -314, 0, 0, 0, -314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -314, 0, -314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1249 + 0, 0, 0, 0, 0, 0, 0, -321, 0, 0, 0, 0, 0, 0, -321, 0, 0, 0, 0, 0, 0, 0, 0, 0, -321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -321, 0, 0, 0, -321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -321, 0, -321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1250 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1251 + 0, 0, 0, 0, 0, 0, 0, -524, 0, 0, 0, 0, 0, 0, -524, 0, 0, 0, 0, 0, 0, 0, 0, 0, -524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -524, 0, 0, 0, -524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -524, 0, -524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1252 + 0, 0, 0, 0, 0, 0, 0, -612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1253 + 0, 0, 0, 0, 0, 0, 0, -636, 0, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1254 + 0, 0, 0, 0, 0, 0, 0, -603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1255 + 0, 0, 0, 0, 0, 0, 0, -608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1256 + 0, 0, 0, 0, 0, 0, 0, -313, 0, 0, 0, 0, 0, 0, -313, 0, 0, 0, 0, 0, 0, 0, 0, 0, -313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -313, 0, 0, 0, -313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -313, 0, -313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1257 + 0, 0, 0, 0, 0, 0, 0, -320, 0, 0, 0, 0, 0, 0, -320, 0, 0, 0, 0, 0, 0, 0, 0, 0, -320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -320, 0, 0, 0, -320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -320, 0, -320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1258 + 0, 0, 0, 0, 0, 0, 0, -523, 0, 0, 0, 0, 0, 0, -523, 0, 0, 0, 0, 0, 0, 0, 0, 0, -523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -523, 0, 0, 0, -523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -523, 0, -523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 1259 + 0, 0, 0, 0, 0, 0, 0, -609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __action(state: i16, integer: usize) -> i16 { - __ACTION[(state as usize) * 96 + integer] + __ACTION[(state as usize) * 97 + integer] } const __EOF_ACTION: &[i16] = &[ // State 0 @@ -2463,23 +2671,23 @@ mod __parse__Top { // State 1 0, // State 2 - -743, + -792, // State 3 0, // State 4 0, // State 5 - -765, + -816, // State 6 - -246, + -288, // State 7 - -314, + -356, // State 8 - -850, + -904, // State 9 - -153, + -158, // State 10 - -167, + -174, // State 11 0, // State 12 @@ -2497,7 +2705,7 @@ mod __parse__Top { // State 18 0, // State 19 - -849, + -903, // State 20 0, // State 21 @@ -2511,13 +2719,13 @@ mod __parse__Top { // State 25 0, // State 26 - -313, + -355, // State 27 0, // State 28 0, // State 29 - -418, + -464, // State 30 0, // State 31 @@ -2537,7 +2745,7 @@ mod __parse__Top { // State 38 0, // State 39 - -245, + -287, // State 40 0, // State 41 @@ -2591,9 +2799,9 @@ mod __parse__Top { // State 65 0, // State 66 - -152, + 0, // State 67 - -166, + 0, // State 68 0, // State 69 @@ -2607,15 +2815,15 @@ mod __parse__Top { // State 73 0, // State 74 - -764, + 0, // State 75 0, // State 76 0, // State 77 - 0, + -157, // State 78 - 0, + -173, // State 79 0, // State 80 @@ -2629,7 +2837,7 @@ mod __parse__Top { // State 84 0, // State 85 - 0, + -815, // State 86 0, // State 87 @@ -2871,11 +3079,11 @@ mod __parse__Top { // State 205 0, // State 206 - -424, + 0, // State 207 - -855, + 0, // State 208 - -859, + 0, // State 209 0, // State 210 @@ -2939,11 +3147,11 @@ mod __parse__Top { // State 239 0, // State 240 - 0, + -470, // State 241 - 0, + -909, // State 242 - 0, + -913, // State 243 0, // State 244 @@ -3241,153 +3449,153 @@ mod __parse__Top { // State 390 0, // State 391 - -916, + 0, // State 392 - -181, + 0, // State 393 - -910, + 0, // State 394 - -541, + 0, // State 395 - -237, + 0, // State 396 - -740, + 0, // State 397 - -503, + 0, // State 398 - -182, + 0, // State 399 - -828, + 0, // State 400 - -183, + 0, // State 401 - -833, + 0, // State 402 - -157, + 0, // State 403 - -419, + 0, // State 404 - -832, + 0, // State 405 - -380, + 0, // State 406 - -845, + 0, // State 407 - -844, + 0, // State 408 - -532, + 0, // State 409 - -365, + 0, // State 410 0, // State 411 0, // State 412 - -209, + 0, // State 413 - -207, + 0, // State 414 - -208, + 0, // State 415 - -206, + 0, // State 416 0, // State 417 - -332, + 0, // State 418 - -331, + 0, // State 419 - -330, + 0, // State 420 - -422, + 0, // State 421 - -136, + 0, // State 422 - -540, + 0, // State 423 - -156, + 0, // State 424 - -137, + 0, // State 425 0, // State 426 0, // State 427 - 0, + -972, // State 428 - -238, + -217, // State 429 - 0, + -966, // State 430 - 0, + -588, // State 431 - 0, + -277, // State 432 - 0, + -789, // State 433 - 0, + -550, // State 434 - 0, + -218, // State 435 - 0, + -882, // State 436 - 0, + -219, // State 437 - 0, + -887, // State 438 - -851, + -162, // State 439 - -85, + -465, // State 440 - 0, + -886, // State 441 - 0, + -426, // State 442 - 0, + -899, // State 443 - 0, + -898, // State 444 - 0, + -579, // State 445 - 0, + -409, // State 446 0, // State 447 0, // State 448 - -379, + -245, // State 449 - 0, + -243, // State 450 - 0, + -244, // State 451 - 0, + -242, // State 452 0, // State 453 - 0, + -374, // State 454 - 0, + -373, // State 455 - -197, + -372, // State 456 - -790, + -468, // State 457 - 0, + -139, // State 458 - 0, + -587, // State 459 - 0, + -161, // State 460 - 0, + -140, // State 461 0, // State 462 0, // State 463 - -185, - // State 464 0, + // State 464 + -278, // State 465 0, // State 466 @@ -3399,7 +3607,7 @@ mod __parse__Top { // State 469 0, // State 470 - -502, + 0, // State 471 0, // State 472 @@ -3407,43 +3615,43 @@ mod __parse__Top { // State 473 0, // State 474 - 0, + -905, // State 475 - 0, + -88, // State 476 0, // State 477 0, // State 478 - -202, + 0, // State 479 0, // State 480 - -324, + 0, // State 481 - -744, + 0, // State 482 0, // State 483 0, // State 484 - 0, + -425, // State 485 0, // State 486 - -320, + 0, // State 487 - -323, + 0, // State 488 0, // State 489 - -318, + 0, // State 490 0, // State 491 - 0, + -233, // State 492 - -317, + -842, // State 493 0, // State 494 @@ -3455,23 +3663,23 @@ mod __parse__Top { // State 497 0, // State 498 - -321, - // State 499 0, + // State 499 + -221, // State 500 - -319, + 0, // State 501 - -322, + 0, // State 502 0, // State 503 - -749, + 0, // State 504 0, // State 505 0, // State 506 - 0, + -549, // State 507 0, // State 508 @@ -3487,9 +3695,9 @@ mod __parse__Top { // State 513 0, // State 514 - -161, + -238, // State 515 - -240, + 0, // State 516 0, // State 517 @@ -3501,45 +3709,45 @@ mod __parse__Top { // State 520 0, // State 521 - -739, + 0, // State 522 - -139, + 0, // State 523 0, // State 524 - 0, + -366, // State 525 - -364, + -793, // State 526 - -86, + 0, // State 527 - -533, + 0, // State 528 0, // State 529 - -827, + 0, // State 530 - -909, + 0, // State 531 0, // State 532 - 0, + -362, // State 533 - 0, + -365, // State 534 0, // State 535 - -194, + 0, // State 536 - -188, + -360, // State 537 - -198, + 0, // State 538 0, // State 539 0, // State 540 - -184, + -359, // State 541 0, // State 542 @@ -3551,19 +3759,19 @@ mod __parse__Top { // State 545 0, // State 546 - -451, + 0, // State 547 0, // State 548 - -201, + 0, // State 549 - 0, + -363, // State 550 - -204, + 0, // State 551 - 0, + -361, // State 552 - 0, + -364, // State 553 0, // State 554 @@ -3571,7 +3779,7 @@ mod __parse__Top { // State 555 0, // State 556 - 0, + -798, // State 557 0, // State 558 @@ -3597,13 +3805,13 @@ mod __parse__Top { // State 568 0, // State 569 - -747, + 0, // State 570 0, // State 571 - 0, + -166, // State 572 - 0, + -280, // State 573 0, // State 574 @@ -3615,25 +3823,25 @@ mod __parse__Top { // State 577 0, // State 578 - 0, + -788, // State 579 - 0, + -142, // State 580 0, // State 581 0, // State 582 - 0, + -408, // State 583 - 0, + -89, // State 584 - 0, + -580, // State 585 0, // State 586 - 0, + -881, // State 587 - 0, + -965, // State 588 0, // State 589 @@ -3643,17 +3851,17 @@ mod __parse__Top { // State 591 0, // State 592 - 0, + -230, // State 593 - 0, + -224, // State 594 - 0, + -234, // State 595 0, // State 596 0, // State 597 - 0, + -220, // State 598 0, // State 599 @@ -3665,15 +3873,15 @@ mod __parse__Top { // State 602 0, // State 603 - 0, + -500, // State 604 0, // State 605 - 0, + -237, // State 606 0, // State 607 - 0, + -240, // State 608 0, // State 609 @@ -3717,11 +3925,11 @@ mod __parse__Top { // State 628 0, // State 629 - 0, + -796, // State 630 - -163, + 0, // State 631 - -160, + 0, // State 632 0, // State 633 @@ -3731,45 +3939,45 @@ mod __parse__Top { // State 635 0, // State 636 - -239, + 0, // State 637 0, // State 638 - -140, + 0, // State 639 0, // State 640 - -199, + 0, // State 641 0, // State 642 0, // State 643 - -196, + 0, // State 644 0, // State 645 - -190, + 0, // State 646 0, // State 647 0, // State 648 - -187, + 0, // State 649 - -200, + 0, // State 650 0, // State 651 0, // State 652 - -186, + 0, // State 653 0, // State 654 0, // State 655 - -450, + 0, // State 656 0, // State 657 @@ -3779,9 +3987,9 @@ mod __parse__Top { // State 659 0, // State 660 - -203, + 0, // State 661 - -205, + 0, // State 662 0, // State 663 @@ -3791,7 +3999,7 @@ mod __parse__Top { // State 665 0, // State 666 - -748, + 0, // State 667 0, // State 668 @@ -3809,7 +4017,7 @@ mod __parse__Top { // State 674 0, // State 675 - -745, + 0, // State 676 0, // State 677 @@ -3857,9 +4065,9 @@ mod __parse__Top { // State 698 0, // State 699 - 0, + -168, // State 700 - 0, + -165, // State 701 0, // State 702 @@ -3867,49 +4075,49 @@ mod __parse__Top { // State 703 0, // State 704 - -162, - // State 705 0, + // State 705 + -279, // State 706 0, // State 707 - 0, + -143, // State 708 0, // State 709 - 0, + -235, // State 710 0, // State 711 0, // State 712 - -831, + -232, // State 713 0, // State 714 - 0, + -226, // State 715 - -192, + 0, // State 716 0, // State 717 - -193, + -223, // State 718 - 0, + -236, // State 719 0, // State 720 0, // State 721 - 0, + -222, // State 722 0, // State 723 0, // State 724 - 0, + -499, // State 725 - -746, + 0, // State 726 0, // State 727 @@ -3917,19 +4125,19 @@ mod __parse__Top { // State 728 0, // State 729 - 0, + -239, // State 730 - 0, + -241, // State 731 0, // State 732 - -268, + 0, // State 733 0, // State 734 0, // State 735 - 0, + -797, // State 736 0, // State 737 @@ -3957,7 +4165,7 @@ mod __parse__Top { // State 748 0, // State 749 - 0, + -794, // State 750 0, // State 751 @@ -3983,19 +4191,19 @@ mod __parse__Top { // State 761 0, // State 762 - -824, + 0, // State 763 0, // State 764 - -358, + 0, // State 765 - -362, + 0, // State 766 0, // State 767 0, // State 768 - -888, + 0, // State 769 0, // State 770 @@ -4015,7 +4223,7 @@ mod __parse__Top { // State 777 0, // State 778 - -908, + 0, // State 779 0, // State 780 @@ -4043,15 +4251,15 @@ mod __parse__Top { // State 791 0, // State 792 - 0, + -167, // State 793 0, // State 794 0, // State 795 - -195, + 0, // State 796 - -189, + 0, // State 797 0, // State 798 @@ -4059,17 +4267,17 @@ mod __parse__Top { // State 799 0, // State 800 - 0, + -885, // State 801 0, // State 802 0, // State 803 - 0, + -228, // State 804 0, // State 805 - -270, + -229, // State 806 0, // State 807 @@ -4077,21 +4285,21 @@ mod __parse__Top { // State 808 0, // State 809 - -907, + 0, // State 810 - -264, + 0, // State 811 - -267, + 0, // State 812 0, // State 813 - 0, + -795, // State 814 0, // State 815 0, // State 816 - -406, + 0, // State 817 0, // State 818 @@ -4109,27 +4317,27 @@ mod __parse__Top { // State 824 0, // State 825 - -426, + 0, // State 826 0, // State 827 - 0, + -310, // State 828 0, // State 829 - -825, + 0, // State 830 0, // State 831 - -822, + 0, // State 832 - -359, + 0, // State 833 0, // State 834 0, // State 835 - -363, + 0, // State 836 0, // State 837 @@ -4173,19 +4381,19 @@ mod __parse__Top { // State 856 0, // State 857 - 0, + -876, // State 858 0, // State 859 - -191, + -400, // State 860 - 0, + -404, // State 861 0, // State 862 0, // State 863 - 0, + -942, // State 864 0, // State 865 @@ -4195,19 +4403,19 @@ mod __parse__Top { // State 867 0, // State 868 - -266, + 0, // State 869 - -269, + 0, // State 870 0, // State 871 - -408, + 0, // State 872 0, // State 873 - -398, + -962, // State 874 - -263, + 0, // State 875 0, // State 876 @@ -4217,7 +4425,7 @@ mod __parse__Top { // State 878 0, // State 879 - -405, + 0, // State 880 0, // State 881 @@ -4233,7 +4441,7 @@ mod __parse__Top { // State 886 0, // State 887 - -392, + 0, // State 888 0, // State 889 @@ -4243,19 +4451,19 @@ mod __parse__Top { // State 891 0, // State 892 - 0, + -231, // State 893 - 0, + -225, // State 894 0, // State 895 - -823, + 0, // State 896 0, // State 897 - -356, + 0, // State 898 - -860, + 0, // State 899 0, // State 900 @@ -4263,11 +4471,11 @@ mod __parse__Top { // State 901 0, // State 902 - 0, + -312, // State 903 0, // State 904 - -826, + 0, // State 905 0, // State 906 @@ -4277,11 +4485,11 @@ mod __parse__Top { // State 908 0, // State 909 - 0, + -961, // State 910 - 0, + -306, // State 911 - 0, + -309, // State 912 0, // State 913 @@ -4291,7 +4499,7 @@ mod __parse__Top { // State 915 0, // State 916 - 0, + -452, // State 917 0, // State 918 @@ -4307,29 +4515,29 @@ mod __parse__Top { // State 923 0, // State 924 - -400, + 0, // State 925 - -265, + -472, // State 926 0, // State 927 - -407, + 0, // State 928 0, // State 929 - -397, + -877, // State 930 - -390, - // State 931 - -402, - // State 932 0, + // State 931 + -874, + // State 932 + -401, // State 933 0, // State 934 0, // State 935 - 0, + -405, // State 936 0, // State 937 @@ -4347,11 +4555,11 @@ mod __parse__Top { // State 943 0, // State 944 - -423, + 0, // State 945 0, // State 946 - -487, + 0, // State 947 0, // State 948 @@ -4377,7 +4585,7 @@ mod __parse__Top { // State 958 0, // State 959 - 0, + -227, // State 960 0, // State 961 @@ -4395,23 +4603,23 @@ mod __parse__Top { // State 967 0, // State 968 - 0, + -308, // State 969 - 0, + -311, // State 970 - -490, - // State 971 - -853, - // State 972 - -854, - // State 973 - -857, - // State 974 - -858, - // State 975 - -355, - // State 976 0, + // State 971 + -454, + // State 972 + 0, + // State 973 + 0, + // State 974 + 0, + // State 975 + -444, + // State 976 + -305, // State 977 0, // State 978 @@ -4421,11 +4629,11 @@ mod __parse__Top { // State 980 0, // State 981 - 0, + -451, // State 982 0, // State 983 - -887, + 0, // State 984 0, // State 985 @@ -4437,7 +4645,7 @@ mod __parse__Top { // State 988 0, // State 989 - 0, + -438, // State 990 0, // State 991 @@ -4449,17 +4657,17 @@ mod __parse__Top { // State 994 0, // State 995 - -399, + 0, // State 996 - -404, + 0, // State 997 - -394, + -875, // State 998 0, // State 999 - -401, + -398, // State 1000 - 0, + -914, // State 1001 0, // State 1002 @@ -4471,13 +4679,13 @@ mod __parse__Top { // State 1005 0, // State 1006 - 0, + -878, // State 1007 - -425, + 0, // State 1008 - -102, + 0, // State 1009 - -488, + 0, // State 1010 0, // State 1011 @@ -4511,23 +4719,23 @@ mod __parse__Top { // State 1025 0, // State 1026 - 0, + -446, // State 1027 - 0, + -307, // State 1028 0, // State 1029 - -489, + -453, // State 1030 0, // State 1031 0, // State 1032 - -360, + -443, // State 1033 - 0, + -436, // State 1034 - 0, + -448, // State 1035 0, // State 1036 @@ -4551,13 +4759,13 @@ mod __parse__Top { // State 1045 0, // State 1046 - -396, - // State 1047 - -403, - // State 1048 - -393, - // State 1049 0, + // State 1047 + -469, + // State 1048 + 0, + // State 1049 + -534, // State 1050 0, // State 1051 @@ -4571,9 +4779,9 @@ mod __parse__Top { // State 1055 0, // State 1056 - -391, + 0, // State 1057 - -103, + 0, // State 1058 0, // State 1059 @@ -4605,17 +4813,17 @@ mod __parse__Top { // State 1072 0, // State 1073 - 0, + -537, // State 1074 - 0, + -907, // State 1075 - 0, + -908, // State 1076 - 0, + -911, // State 1077 - 0, + -912, // State 1078 - 0, + -397, // State 1079 0, // State 1080 @@ -4631,7 +4839,7 @@ mod __parse__Top { // State 1085 0, // State 1086 - -357, + -941, // State 1087 0, // State 1088 @@ -4643,9 +4851,9 @@ mod __parse__Top { // State 1091 0, // State 1092 - -395, + 0, // State 1093 - -389, + 0, // State 1094 0, // State 1095 @@ -4655,15 +4863,15 @@ mod __parse__Top { // State 1097 0, // State 1098 - 0, + -445, // State 1099 - 0, + -450, // State 1100 - 0, + -440, // State 1101 0, // State 1102 - 0, + -447, // State 1103 0, // State 1104 @@ -4679,11 +4887,11 @@ mod __parse__Top { // State 1109 0, // State 1110 - 0, + -471, // State 1111 - 0, + -105, // State 1112 - 0, + -535, // State 1113 0, // State 1114 @@ -4691,11 +4899,11 @@ mod __parse__Top { // State 1115 0, // State 1116 - -852, + 0, // State 1117 - -856, + 0, // State 1118 - -361, + 0, // State 1119 0, // State 1120 @@ -4723,13 +4931,13 @@ mod __parse__Top { // State 1131 0, // State 1132 - 0, + -536, // State 1133 0, // State 1134 0, // State 1135 - 0, + -402, // State 1136 0, // State 1137 @@ -4757,11 +4965,11 @@ mod __parse__Top { // State 1148 0, // State 1149 - 0, + -442, // State 1150 - 0, + -449, // State 1151 - 0, + -439, // State 1152 0, // State 1153 @@ -4772,801 +4980,1065 @@ mod __parse__Top { 0, // State 1156 0, + // State 1157 + 0, + // State 1158 + 0, + // State 1159 + -437, + // State 1160 + -106, + // State 1161 + 0, + // State 1162 + 0, + // State 1163 + 0, + // State 1164 + 0, + // State 1165 + 0, + // State 1166 + 0, + // State 1167 + 0, + // State 1168 + 0, + // State 1169 + 0, + // State 1170 + 0, + // State 1171 + 0, + // State 1172 + 0, + // State 1173 + 0, + // State 1174 + 0, + // State 1175 + 0, + // State 1176 + 0, + // State 1177 + 0, + // State 1178 + 0, + // State 1179 + 0, + // State 1180 + 0, + // State 1181 + 0, + // State 1182 + 0, + // State 1183 + 0, + // State 1184 + 0, + // State 1185 + 0, + // State 1186 + 0, + // State 1187 + 0, + // State 1188 + 0, + // State 1189 + -399, + // State 1190 + 0, + // State 1191 + 0, + // State 1192 + 0, + // State 1193 + 0, + // State 1194 + 0, + // State 1195 + -441, + // State 1196 + -435, + // State 1197 + 0, + // State 1198 + 0, + // State 1199 + 0, + // State 1200 + 0, + // State 1201 + 0, + // State 1202 + 0, + // State 1203 + 0, + // State 1204 + 0, + // State 1205 + 0, + // State 1206 + 0, + // State 1207 + 0, + // State 1208 + 0, + // State 1209 + 0, + // State 1210 + 0, + // State 1211 + 0, + // State 1212 + 0, + // State 1213 + 0, + // State 1214 + 0, + // State 1215 + 0, + // State 1216 + 0, + // State 1217 + 0, + // State 1218 + 0, + // State 1219 + -906, + // State 1220 + -910, + // State 1221 + -403, + // State 1222 + 0, + // State 1223 + 0, + // State 1224 + 0, + // State 1225 + 0, + // State 1226 + 0, + // State 1227 + 0, + // State 1228 + 0, + // State 1229 + 0, + // State 1230 + 0, + // State 1231 + 0, + // State 1232 + 0, + // State 1233 + 0, + // State 1234 + 0, + // State 1235 + 0, + // State 1236 + 0, + // State 1237 + 0, + // State 1238 + 0, + // State 1239 + 0, + // State 1240 + 0, + // State 1241 + 0, + // State 1242 + 0, + // State 1243 + 0, + // State 1244 + 0, + // State 1245 + 0, + // State 1246 + 0, + // State 1247 + 0, + // State 1248 + 0, + // State 1249 + 0, + // State 1250 + 0, + // State 1251 + 0, + // State 1252 + 0, + // State 1253 + 0, + // State 1254 + 0, + // State 1255 + 0, + // State 1256 + 0, + // State 1257 + 0, + // State 1258 + 0, + // State 1259 + 0, ]; fn __goto(state: i16, nt: usize) -> i16 { match nt { 9 => match state { - 242 => 884, - 279 => 933, - 280 => 934, - 313 => 1000, - 342 => 1054, - 366 => 1098, - 367 => 1099, - 375 => 1121, - _ => 819, + 277 => 986, + 315 => 1036, + 316 => 1037, + 349 => 1103, + 378 => 1157, + 402 => 1201, + 403 => 1202, + 411 => 1224, + _ => 919, }, 12 => match state { - 85 => 657, - 129 => 719, - 130 => 720, - 185 => 797, - 226 => 865, - 267 => 920, - 268 => 921, - 304 => 989, - _ => 543, + 96 => 726, + 156 => 807, + 157 => 808, + 217 => 894, + 260 => 965, + 302 => 1022, + 303 => 1023, + 340 => 1092, + _ => 600, }, 21 => match state { - 128 => 716, - 175 => 781, - 260 => 908, - _ => 534, + 117 => 753, + 155 => 804, + 207 => 876, + 226 => 905, + 295 => 1010, + _ => 591, }, 24 => match state { - 176 => 784, - 261 => 910, - _ => 693, - }, - 28 => 683, - 35 => 438, - 46 => 825, - 50 => match state { - 65 | 98 => 105, - _ => 3, - }, - 53 => 68, - 55 => match state { - 65 | 98 => 106, - _ => 4, - }, - 60 => match state { - 326 => 358, - _ => 357, - }, - 63 => match state { - 19 => 46, - 210 => 255, - 256 => 299, - _ => 156, - }, - 68 => match state { - 65 | 98 => 598, - 290 | 323 | 326 | 345 | 347 | 349 | 352 | 355..=358 | 370 | 379 | 381 | 383 => 947, - 327 | 371 => 1017, - _ => 392, - }, - 70 => match state { - 109 => 165, - _ => 26, - }, - 77 => match state { - 107 => 161, - 321 | 359 => 346, - _ => 21, - }, - 78 => match state { - 327 | 371 => 1018, - _ => 948, - }, - 79 => match state { - 33 => 530, - 65 | 98 => 599, - 173 => 779, - _ => 393, - }, - 80 => 600, - 81 => match state { - 3 => 422, - 105 => 689, - _ => 394, - }, - 82 => 601, - 83 => match state { - 99 => 679, - 108 => 691, - 134 => 726, - 139 => 731, - 190 => 804, - _ => 428, - }, - 85 => match state { - 31 => 74, - 65 | 98 => 107, - 168 => 214, - _ => 5, - }, - 86 => 602, - 87 => 949, - 88 => 479, - 89 => match state { - 92 => 668, - 136 => 728, - _ => 555, - }, - 91 => 92, - 93 => 395, - 94 => 603, - 95 => match state { - 15 => 39, - 65 | 98 => 108, - 116 => 179, - _ => 6, - }, - 96 => 604, - 97 => match state { - 65 | 98 => 605, - _ => 396, - }, - 98 => 606, - 99 => 93, - 100 => 950, - 101 => 480, - 102 => 951, - 103 => match state { - 345 => 1058, - 355 => 1075, - _ => 952, - }, - 106 => match state { - 38 => 541, - 43 => 547, - 44 => 549, - 69 => 633, - 174 => 780, - 178 => 789, - 180 => 790, - 181 => 792, - _ => 531, - }, - 108 => match state { - 26 | 165 => 73, - _ => 27, - }, - 109 => 397, - 110 => 607, - 111 => match state { - 210 => 840, - 256 => 902, - _ => 481, - }, - 112 => match state { - 264 | 303 => 913, - _ => 858, - }, - 114 => match state { - 263 => 303, - _ => 264, - }, - 115 => match state { - 65 | 98 => 608, - 290 | 323 | 325..=327 | 345..=347 | 349 | 352 | 355..=358 | 370..=371 | 379 | 381 | 383 => 953, - _ => 398, - }, - 116 => match state { - 325 => 1014, - 346 => 1059, - _ => 954, - }, - 117 => match state { - 327 | 371 => 359, - _ => 321, - }, - 118 => match state { - 47 => 553, - _ => 482, - }, - 120 => 47, - 121 => 483, - 122 => match state { - 87 => 662, - _ => 471, - }, - 123 => match state { - 118 => 180, - 87 => 663, - _ => 43, - }, - 124 => match state { - 118 => 701, - _ => 472, - }, - 126 => match state { - 58 => 589, - 101 => 681, - 152 => 753, - _ => 581, - }, - 127 => 821, - 129 => match state { - 207 => 832, - _ => 764, - }, - 130 => 207, - 131 => match state { - 208 => 835, - _ => 765, - }, - 132 => 208, - 133 => match state { - 65 | 98 => 109, - 13 => 456, - 27 => 522, - 36 => 538, - 45 => 551, - 53..=54 | 77 | 97 | 126 | 144 | 146 => 573, - 73 => 638, - 170 => 775, - 177 => 787, - 218 => 851, - 258 => 906, - _ => 7, - }, - 134 => 609, - 135 => match state { - 77 => 642, - 97 => 677, - 126 => 713, - _ => 578, - }, - 136 => 574, - 137 => 914, - 138 => match state { - 144 | 146 => 744, - _ => 575, - }, - 139 => 484, - 140 => match state { - 11 => 448, - 25 => 521, - 32 => 529, - 112 => 692, - 164 => 771, - 169 => 774, - _ => 399, - }, - 141 => 610, - 142 => 485, - 143 => 486, - 144 => 487, - 145 => match state { - 68 => 629, - _ => 512, - }, - 147 => 579, - 148 => match state { - 1 => 8, - 37 => 539, - 62 => 595, - 93..=94 => 669, - 145 => 745, - 194 => 808, - _ => 48, - }, - 149 => 488, - 150 => 1010, - 151 => match state { - 51 => 99, - 52 => 100, - 90 => 134, - 91 => 135, - 96 => 138, - 133 => 189, - 12 | 14 | 18 | 24 | 49 | 57 | 59 | 64 | 78..=79 | 81 | 88 | 114..=115 | 118 | 120 | 122 | 127 | 153..=154 | 163 | 184 | 216..=217 | 222 | 247 | 259 | 286 | 301 | 331 | 354 => 449, - 16 | 82 | 86 | 131..=132 | 186..=188 | 223..=225 | 266 | 269 | 305..=307 | 333..=335 | 362 => 464, - 22 | 68 => 513, - 23 => 515, - 40..=41 | 129 | 226 | 267 => 544, - 56 | 60 => 586, - 63 => 596, - 65 | 98 => 611, - 141 | 236 => 733, - 143 | 240 | 243 | 281 | 283 | 314..=316 | 339..=341 | 365 | 368 | 376..=378 | 385..=388 => 737, - 147 | 204 => 746, - 148 => 750, - 149 => 751, - 151 => 752, - 162 => 769, - 198 => 813, - 199 => 814, - 202 | 279 | 342 | 366 => 820, - 203 => 822, - 205 => 824, - 245 => 888, - 246 | 285 => 889, - 248 => 893, - 290 | 323 | 326 | 345 | 352 | 355..=358 | 370 | 379 => 955, - 298 => 976, - 317 => 1006, - 324 => 1013, - 327 | 371 => 1019, - 330 => 1033, - 347 | 349 | 381 | 383 => 1060, - 348 => 1066, - 350 => 1070, - 351 => 1071, - 360 => 1085, - 380 | 382 | 389..=390 => 1127, - 384 => 1137, - _ => 400, - }, - 152 => 489, - 155 => 747, - 156 => match state { - 101 => 682, - _ => 582, - }, - 158 => 101, - 159 => 583, - 160 => 490, - 161 => match state { - 240 => 881, - 243 => 885, - 281 => 935, - 283 => 938, - 314 => 1001, - 315 => 1002, - 316 => 1004, - 339 => 1049, - 340 => 1050, - 341 => 1052, - 365 => 1095, - 368 => 1100, - 376 => 1122, - 377 => 1123, - 378 => 1124, - 385 => 1139, - 386 => 1140, - 387 => 1143, - 388 => 1150, - _ => 738, - }, - 162 => match state { - 82 => 653, - 86 => 658, - 131 => 721, - 132 => 723, - 186 => 798, - 187 => 799, - 188 => 801, - 223 => 860, - 224 => 861, - 225 => 863, - 266 => 917, - 269 => 922, - 305 => 990, - 306 => 991, - 307 => 992, - 333 => 1040, - 334 => 1041, - 335 => 1044, - 362 => 1089, - _ => 465, - }, - 163 => match state { - 65 | 98 => 612, - _ => 401, - }, - 164 => 672, - 165 => 491, - 166 => match state { - 115 => 698, - _ => 457, - }, - 168 => 956, - 169 => 1020, - 170 => 957, - 171 => match state { - 249..=250 | 288 | 291 => 894, - _ => 945, - }, - 172 => match state { - 250 => 292, - 288 => 320, - 291 => 328, - _ => 289, - }, - 173 => match state { - 380 | 382 | 389..=390 => 1128, - _ => 1061, - }, - 174 => match state { - 371 => 1112, - _ => 1021, - }, - 175 => match state { - 327 | 371 => 1022, - _ => 958, - }, - 176 => match state { - 327 | 371 => 1023, - _ => 959, - }, - 177 => 492, - 178 => match state { - 111 => 169, - _ => 32, - }, - 179 => match state { - 12 | 114 => 450, - 79 | 217 => 646, - _ => 458, - }, - 180 => match state { - 12 => 34, - 18 => 44, - 22 | 68 => 69, - 114 => 174, - 118 => 181, - 49 => 571, - 57 => 588, - 64 => 597, - 247 => 892, - 286 => 943, - 354 => 1074, - _ => 459, - }, - 181 => match state { - 79 => 128, - 114 => 175, - 217 => 260, - _ => 35, - }, - 182 => 493, - 183 => match state { - 4 => 423, - 17 => 470, - 106 => 690, - 117 => 700, - _ => 402, - }, - 184 => 613, - 185 => 473, - 186 => match state { - 53 => 576, - _ => 580, - }, - 187 => match state { - 60 => 593, - _ => 587, - }, - 188 => 590, - 189 => match state { - 204 => 823, - _ => 748, - }, - 190 => match state { - 349 => 1067, - 381 => 1130, - 383 => 1134, - _ => 1062, - }, - 191 => 1024, - 192 => 739, - 193 => 466, - 194 => match state { - 349 => 1068, - _ => 1063, - }, - 195 => match state { - 114 => 694, - _ => 451, - }, - 196 => 403, - 197 => match state { - 18 | 118 => 474, - _ => 460, - }, - 198 => 734, - 199 => 960, - 200 => match state { - 183 => 221, - 220 => 263, - 30 => 528, - 65 | 98 => 614, - 167 => 773, - 265 => 915, - _ => 404, - }, - 201 => 615, - 202 => match state { - 143 => 740, - 240 => 882, - 281 | 316 | 339 | 341 | 365 | 377 | 385 | 387..=388 => 936, - _ => 886, - }, - 203 => match state { - 16 => 467, - 82 => 654, - 86 | 132 | 186..=187 | 224 | 269 | 305 | 307 | 334 => 659, - _ => 722, - }, - 206 => 741, - 207 => 468, - 211 => match state { - 135 => 727, - 138 => 730, - 142 => 736, - 189 => 803, - 192 => 806, - 193 => 807, - 227 => 867, - _ => 680, - }, - 212 => 494, - 213 => match state { - 290 => 961, - 323 => 1011, - 326 => 1015, - 352 => 1072, - 356 => 1076, - 357 => 1077, - 358 => 1080, - 370 => 1111, - 379 => 1126, - 381 | 383 => 1131, - _ => 1064, - }, - 215 => 322, - 216 => 405, - 217 => 616, - 218 => 19, - 219 => 495, - 220 => 962, - 221 => match state { - 118 => 702, - _ => 475, - }, - 222 => match state { - 20 => 66, - 65 | 98 => 110, - 160 => 212, - _ => 9, - }, - 223 => 617, - 224 => match state { - 110 => 168, - _ => 31, - }, - 225 => match state { - 76 => 641, - _ => 532, - }, - 226 => 76, - 227 => match state { - 121 => 708, - 123 => 710, - 182 => 794, - _ => 637, - }, - 229 => match state { - 19 => 496, - 46 => 552, - 156 => 761, - 210 => 841, - 255 => 899, - 256 => 903, - 299 => 980, - _ => 686, - }, - 230 => match state { - 12 | 79 | 114 | 217 => 452, - 14 | 18 | 24 | 59 | 78 | 81 | 88 | 115 | 118 | 120 | 122 | 127 | 153..=154 | 163 | 184 | 216 | 222 | 259 | 301 | 331 => 461, - 53..=54 | 77 | 97 | 126 | 144 | 146 => 577, - _ => 406, - }, - 231 => 963, - 232 => match state { - 279 => 313, - 342 => 367, - 366 => 375, - _ => 242, - }, - 234 => match state { - 129 => 185, - 226 => 268, - 267 => 304, - 41 => 545, - _ => 85, - }, - 236 => 256, - 237 => match state { - 120 => 707, - 122 => 709, - _ => 516, - }, - 238 => match state { - 163 => 770, - _ => 517, - }, - 239 => match state { - 150 => 206, - 140 => 732, - 159 => 768, - 172 => 778, - 191 => 805, - 195 => 809, - 196 => 810, - 197 => 811, - 201 => 816, - 228 => 868, - 229 => 869, - 231 => 871, - 233 => 873, - 234 => 874, - 238 => 879, - 244 => 887, - 253 => 897, - 254 => 898, - 271 => 924, - 272 => 925, - 274 => 927, - 276 => 929, - 277 => 930, - 278 => 931, - 287 => 944, - 293 => 971, - 294 => 972, - 295 => 973, - 296 => 974, - 297 => 975, - 300 => 983, - 309 => 995, - 310 => 996, - 311 => 997, - 312 => 999, - 318 => 1007, - 319 => 1008, - 329 => 1032, - 336 => 1046, - 337 => 1047, - 338 => 1048, - 343 => 1056, - 344 => 1057, - 353 => 1073, - 361 => 1086, - 363 => 1092, - 364 => 1093, - 369 => 1105, - 372 => 1116, - 373 => 1117, - 374 => 1118, - _ => 157, - }, - 240 => match state { - 21 => 67, - 65 | 98 => 111, - 161 => 213, - _ => 10, - }, - 241 => 618, - 242 => match state { - 72 => 123, - 95 => 136, - 121 => 182, - 1 | 29 | 37 | 62 | 93..=94 | 145 | 194 | 282 => 407, - 12 => 453, - 14 | 22 | 49 | 57 | 59 | 64 | 68 | 78 | 81 | 88 | 115 | 127 | 153..=154 | 184 | 216 | 222 | 247 | 259 | 286 | 301 | 331 | 354 => 462, - 18 | 118 => 476, - 24 | 120 | 122 | 163 => 518, - 42 => 546, - 50 => 572, - 61 => 594, - 65 | 98 => 619, - 70 => 634, - 71 => 635, - 75 => 639, - 79 => 647, - 80 => 650, - 83 => 655, - 84 => 656, - 87 => 664, - 89 => 665, - 114 => 695, - 119 => 706, - 124 => 711, - 125 => 712, - 137 => 729, - 155 => 760, - 158 => 767, - 171 | 215 | 219 | 262 | 302 | 332 => 776, - 200 => 815, - 209 | 251 => 839, - 211 => 842, - 217 => 849, - 230 => 870, - 232 => 872, - 235 => 875, - 237 => 878, - 239 => 880, - 241 => 883, - 252 => 896, - 257 => 905, - 270 => 923, - 273 => 926, - 275 => 928, - 284 => 940, - 308 => 994, - _ => 497, - }, - 244 => 620, - 247 => match state { - 94 => 673, - _ => 670, - }, - 248 => match state { - 29 => 527, - 282 => 937, - _ => 408, - }, - 250 => match state { - 14 => 38, - 115 => 178, - 18 | 118 => 477, - 59 => 591, - 78 | 184 | 216 | 301 => 644, - 81 | 88 => 651, - 127 | 222 | 259 | 331 => 714, - 153 => 754, - 154 => 757, - _ => 519, - }, - 251 => 391, - 252 => 498, - 253 => 964, - 254 => 965, - 255 => 520, - 256 => 592, - 257 => 104, - 258 => 499, - 259 => match state { - 236 => 876, - _ => 735, - }, - 260 => match state { - 100 => 142, - 134 => 190, - 135 => 192, - 138 => 193, - 189 => 227, - 104 => 688, - _ => 139, - }, - 262 => 742, - 263 => match state { - 65 | 98 => 112, - _ => 11, - }, - 264 => 469, - 265 => 966, - 266 => 500, - 267 => match state { - 65 | 98 => 113, - 215 | 262 | 332 => 845, + 208 => 879, + 296 => 1012, _ => 777, }, - 268 => match state { - 217 => 261, - _ => 176, + 28 => 767, + 34 => 613, + 37 => 474, + 48 => 925, + 52 => match state { + 75 | 122 => 130, + _ => 3, }, - 269 => 621, - 270 => match state { - 98 => 678, - _ => 622, + 55 => 79, + 57 => match state { + 75 | 122 => 131, + _ => 4, + }, + 62 => match state { + 362 => 394, + _ => 393, + }, + 65 => match state { + 19 => 46, + 244 => 290, + 291 => 335, + _ => 188, + }, + 70 => match state { + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 515, + 75 | 122 => 664, + 326 | 359 | 362 | 381 | 383 | 385 | 388 | 391..=394 | 406 | 415 | 417 | 419 => 1050, + 363 | 407 => 1120, + _ => 428, + }, + 72 => match state { + 134 => 197, + _ => 26, + }, + 79 => match state { + 47 => 102, + 132 => 193, + 357 | 395 => 382, + _ => 21, + }, + 80 => match state { + 363 | 407 => 1121, + _ => 1051, + }, + 81 => 516, + 82 => match state { + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 517, + 33 => 587, + 75 | 122 => 665, + 115 => 751, + 205 => 874, + _ => 429, + }, + 83 => 666, + 84 => match state { + 3 => 458, + 130 => 773, + _ => 430, + }, + 85 => 667, + 86 => match state { + 48 => 610, + 124 => 763, + 133 => 775, + 163 => 815, + 171 => 826, + 222 => 901, + _ => 464, + }, + 88 => 518, + 89 => match state { + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 47, + 31 => 85, + 75 | 122 => 132, + 112 => 165, + 200 => 248, + _ => 5, + }, + 90 => 668, + 91 => 1052, + 92 => 519, + 93 => match state { + 109 => 742, + 166 => 817, + _ => 615, + }, + 95 => 109, + 97 => 520, + 98 => 431, + 99 => 669, + 100 => 521, + 101 => match state { + 15 => 39, + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 48, + 60 => 123, + 75 | 122 => 133, + 141 => 211, + _ => 6, + }, + 102 => 670, + 103 => 522, + 104 => match state { + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 523, + 75 | 122 => 671, + _ => 432, + }, + 105 => 672, + 106 => 110, + 107 => 1053, + 108 => 524, + 109 => 1054, + 110 => match state { + 381 => 1161, + 391 => 1178, + _ => 1055, + }, + 113 => match state { + 38 => 598, + 43 => 604, + 44 => 606, + 80 => 702, + 116 => 752, + 119 => 760, + 144 => 788, + 145 => 790, + 206 => 875, + 210 => 884, + 212 => 885, + 213 => 887, + _ => 588, + }, + 115 => match state { + 26 | 197 => 84, + _ => 27, + }, + 116 => 433, + 117 => 673, + 118 => match state { + 244 => 940, + 291 => 1004, + _ => 525, + }, + 119 => match state { + 299 | 339 => 1015, + _ => 958, + }, + 121 => match state { + 298 => 339, + _ => 299, + }, + 122 => match state { + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 526, + 75 | 122 => 674, + 326 | 359 | 361..=363 | 381..=383 | 385 | 388 | 391..=394 | 406..=407 | 415 | 417 | 419 => 1056, + _ => 434, + }, + 123 => match state { + 361 => 1117, + 382 => 1162, + _ => 1057, + }, + 124 => match state { + 363 | 407 => 395, + _ => 357, + }, + 125 => match state { + 49 => 611, + _ => 527, + }, + 127 => 49, + 128 => 528, + 129 => match state { + 98 => 731, + _ => 507, + }, + 130 => match state { + 76 => 144, + 143 => 212, + 98 => 732, + _ => 43, + }, + 131 => match state { + 76 => 695, + 143 => 785, + _ => 508, + }, + 133 => match state { + 68 => 655, + 126 => 765, + 184 => 848, + _ => 647, + }, + 134 => 921, + 136 => match state { + 241 => 932, + _ => 859, + }, + 137 => 241, + 138 => match state { + 242 => 935, + _ => 860, + }, + 139 => 242, + 140 => 50, + 141 => match state { + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 51, + 75 | 122 => 134, + 13 => 492, + 27 => 579, + 36 => 595, + 45 => 608, + 63..=64 | 88 | 121 | 153 | 176 | 178 => 639, + 84 => 707, + 118 => 757, + 202 => 870, + 209 => 882, + 252 => 951, + 293 => 1008, + _ => 7, + }, + 142 => 675, + 143 => match state { + 88 => 711, + 121 => 761, + 153 => 801, + _ => 644, + }, + 144 => 640, + 145 => 1016, + 146 => match state { + 176 | 178 => 839, + _ => 641, + }, + 147 => 529, + 148 => 530, + 149 => match state { + 11 => 484, + 25 => 578, + 32 => 586, + 55 => 631, + 105 => 739, + 113 => 750, + 137 => 776, + 196 => 866, + 201 => 869, + _ => 435, + }, + 150 => 676, + 151 => 531, + 152 => 532, + 153 => 533, + 154 => match state { + 79 => 698, + _ => 569, + }, + 156 => 645, + 157 => match state { + 1 => 8, + 37 => 596, + 72 => 661, + 110..=111 => 743, + 177 => 840, + 228 => 908, + _ => 52, + }, + 158 => 534, + 159 => 1113, + 160 => match state { + 61 => 124, + 62 => 125, + 106 => 163, + 107 => 164, + 120 => 170, + 162 => 221, + 12 | 14 | 18 | 24 | 56..=58 | 67 | 69 | 74 | 76 | 89..=90 | 92 | 99 | 104 | 139..=140 | 143 | 147 | 149 | 154 | 167..=168 | 185..=186 | 195 | 216 | 225 | 250..=251 | 256 | 266 | 282 | 294 | 310 | 322 | 337 | 367 | 390 => 485, + 16 | 93 | 97 | 158..=159 | 218..=220 | 257..=259 | 301 | 304 | 341..=343 | 369..=371 | 398 => 500, + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 535, + 22 | 79 => 570, + 23 => 572, + 40..=41 | 156 | 260 | 302 => 601, + 66 | 70 => 652, + 73 => 662, + 75 | 122 => 677, + 103 => 737, + 173 | 271 => 828, + 175 | 275 | 278 | 317 | 319 | 350..=352 | 375..=377 | 401 | 404 | 412..=414 | 421..=424 => 832, + 179 | 238 => 841, + 180 => 845, + 181 => 846, + 183 => 847, + 194 => 864, + 232 => 913, + 233 => 914, + 236 | 315 | 378 | 402 => 920, + 237 => 922, + 239 => 924, + 280 => 990, + 281 | 321 => 991, + 283 => 995, + 326 | 359 | 362 | 381 | 388 | 391..=394 | 406 | 415 => 1058, + 334 => 1079, + 353 => 1109, + 360 => 1116, + 363 | 407 => 1122, + 366 => 1136, + 383 | 385 | 417 | 419 => 1163, + 384 => 1169, + 386 => 1173, + 387 => 1174, + 396 => 1188, + 416 | 418 | 425..=426 => 1230, + 420 => 1240, + _ => 436, + }, + 161 => 536, + 164 => 842, + 165 => match state { + 126 => 766, + _ => 648, + }, + 167 => 126, + 168 => 649, + 169 => 537, + 170 => 746, + 171 => 538, + 172 => 539, + 173 => match state { + 275 => 983, + 278 => 987, + 317 => 1038, + 319 => 1041, + 350 => 1104, + 351 => 1105, + 352 => 1107, + 375 => 1152, + 376 => 1153, + 377 => 1155, + 401 => 1198, + 404 => 1203, + 412 => 1225, + 413 => 1226, + 414 => 1227, + 421 => 1242, + 422 => 1243, + 423 => 1246, + 424 => 1253, + _ => 833, + }, + 174 => match state { + 93 => 722, + 97 => 727, + 158 => 809, + 159 => 811, + 218 => 895, + 219 => 896, + 220 => 898, + 257 => 960, + 258 => 961, + 259 => 963, + 301 => 1019, + 304 => 1024, + 341 => 1093, + 342 => 1094, + 343 => 1095, + 369 => 1143, + 370 => 1144, + 371 => 1147, + 398 => 1192, + _ => 501, + }, + 175 => match state { + 75 | 122 => 678, + _ => 437, + }, + 176 => match state { + 58 => 636, + 140 => 782, + _ => 493, + }, + 178 => 1059, + 179 => 1123, + 180 => 1060, + 181 => match state { + 284..=285 | 324 | 327 => 996, + _ => 1048, + }, + 182 => match state { + 285 => 328, + 324 => 356, + 327 => 364, + _ => 325, + }, + 183 => match state { + 416 | 418 | 425..=426 => 1231, + _ => 1164, + }, + 184 => match state { + 407 => 1215, + _ => 1124, + }, + 185 => match state { + 363 | 407 => 1125, + _ => 1061, + }, + 186 => match state { + 363 | 407 => 1126, + _ => 1062, + }, + 187 => 540, + 188 => match state { + 54 => 113, + 136 => 201, + _ => 32, + }, + 189 => match state { + 12 | 56 | 139 => 486, + 90 | 168 | 251 => 715, + _ => 494, + }, + 190 => match state { + 12 => 34, + 18 => 44, + 22 | 79 => 80, + 56 => 116, + 76 => 145, + 139 => 206, + 143 => 213, + 57 => 635, + 67 => 654, + 74 => 663, + 282 => 994, + 322 => 1046, + 390 => 1177, + _ => 495, + }, + 191 => match state { + 56 => 117, + 90 => 155, + 139 => 207, + 168 => 226, + 251 => 295, + _ => 35, + }, + 192 => 541, + 193 => match state { + 4 => 459, + 17 => 506, + 131 => 774, + 142 => 784, + _ => 438, + }, + 194 => 679, + 195 => 509, + 196 => match state { + 63 => 642, + _ => 646, + }, + 197 => match state { + 70 => 659, + _ => 653, + }, + 198 => 656, + 199 => match state { + 238 => 923, + _ => 843, + }, + 200 => match state { + 385 => 1170, + 417 => 1233, + 419 => 1237, + _ => 1165, + }, + 201 => 1127, + 202 => 834, + 203 => 502, + 204 => match state { + 385 => 1171, + _ => 1166, + }, + 205 => match state { + 56 => 632, + 139 => 778, + _ => 487, + }, + 206 => 439, + 207 => match state { + 18 | 76 | 143 => 510, + _ => 496, + }, + 208 => 829, + 209 => 1063, + 210 => match state { + 215 => 255, + 254 => 298, + 30 => 585, + 75 | 122 => 680, + 199 => 868, + 300 => 1017, + _ => 440, + }, + 211 => 681, + 212 => match state { + 175 => 835, + 275 => 984, + 317 | 352 | 375 | 377 | 401 | 413 | 421 | 423..=424 => 1039, + _ => 988, + }, + 213 => match state { + 16 => 503, + 93 => 723, + 97 | 159 | 218..=219 | 258 | 304 | 341 | 343 | 370 => 728, + _ => 810, + }, + 216 => 836, + 217 => 504, + 221 => match state { + 164 => 816, + 170 => 825, + 174 => 831, + 221 => 900, + 224 => 903, + 227 => 907, + 261 => 967, + _ => 764, + }, + 222 => 542, + 223 => match state { + 326 => 1064, + 359 => 1114, + 362 => 1118, + 388 => 1175, + 392 => 1179, + 393 => 1180, + 394 => 1183, + 406 => 1214, + 415 => 1229, + 417 | 419 => 1234, + _ => 1167, + }, + 225 => 358, + 226 => 543, + 227 => 441, + 228 => 682, + 229 => 19, + 230 => 544, + 231 => 1065, + 232 => match state { + 76 => 696, + 143 => 786, + _ => 511, + }, + 233 => 545, + 234 => match state { + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 53, + 20 => 77, + 75 | 122 => 135, + 101 => 160, + 192 => 246, + _ => 9, + }, + 235 => 683, + 236 => match state { + 53 => 112, + 135 => 200, + _ => 31, + }, + 237 => match state { + 87 => 710, + _ => 589, + }, + 238 => 87, + 239 => match state { + 148 => 796, + 150 => 798, + 214 => 891, + _ => 706, + }, + 241 => match state { + 19 => 546, + 46 => 609, + 188 => 856, + 244 => 941, + 290 => 1001, + 291 => 1005, + 335 => 1083, + _ => 770, + }, + 242 => match state { + 12 | 56 | 90 | 139 | 168 | 251 => 488, + 14 | 18 | 24 | 58 | 69 | 76 | 89 | 92 | 99 | 104 | 140 | 143 | 147 | 149 | 154 | 167 | 185..=186 | 195 | 216 | 225 | 250 | 256 | 266 | 294 | 310 | 337 | 367 => 497, + 63..=64 | 88 | 121 | 153 | 176 | 178 => 643, + _ => 442, + }, + 243 => 1066, + 244 => match state { + 315 => 349, + 378 => 403, + 402 => 411, + _ => 277, + }, + 246 => match state { + 156 => 217, + 260 => 303, + 302 => 340, + 41 => 602, + _ => 96, + }, + 248 => 291, + 249 => match state { + 147 => 795, + 149 => 797, + _ => 573, + }, + 250 => match state { + 104 => 738, + 195 => 865, + _ => 574, + }, + 251 => match state { + 182 => 240, + 172 => 827, + 191 => 863, + 204 => 873, + 223 => 902, + 229 => 909, + 230 => 910, + 231 => 911, + 235 => 916, + 262 => 968, + 263 => 969, + 265 => 971, + 268 => 975, + 269 => 976, + 273 => 981, + 279 => 989, + 288 => 999, + 289 => 1000, + 306 => 1026, + 307 => 1027, + 309 => 1029, + 312 => 1032, + 313 => 1033, + 314 => 1034, + 323 => 1047, + 329 => 1074, + 330 => 1075, + 331 => 1076, + 332 => 1077, + 333 => 1078, + 336 => 1086, + 345 => 1098, + 346 => 1099, + 347 => 1100, + 348 => 1102, + 354 => 1110, + 355 => 1111, + 365 => 1135, + 372 => 1149, + 373 => 1150, + 374 => 1151, + 379 => 1159, + 380 => 1160, + 389 => 1176, + 397 => 1189, + 399 => 1195, + 400 => 1196, + 405 => 1208, + 408 => 1219, + 409 => 1220, + 410 => 1221, + _ => 189, + }, + 252 => 547, + 253 => match state { + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 54, + 21 => 78, + 75 | 122 => 136, + 102 => 161, + 193 => 247, + _ => 10, + }, + 254 => 684, + 255 => match state { + 83 => 150, + 114 => 166, + 148 => 214, + 1 | 29 | 37 | 72 | 110..=111 | 177 | 228 | 318 => 443, + 12 | 56 => 489, + 14 | 22 | 57..=58 | 67 | 69 | 74 | 79 | 89 | 92 | 99 | 140 | 154 | 167 | 185..=186 | 216 | 225 | 250 | 256 | 266 | 282 | 294 | 310 | 322 | 337 | 367 | 390 => 498, + 18 | 76 | 143 => 512, + 24 | 104 | 147 | 149 | 195 => 575, + 42 => 603, + 59 => 638, + 71 => 660, + 75 | 122 => 685, + 81 => 703, + 82 => 704, + 86 => 708, + 90 | 168 => 716, + 91 => 719, + 94 => 724, + 95 => 725, + 98 => 733, + 100 => 734, + 139 => 779, + 146 => 794, + 151 => 799, + 152 => 800, + 169 => 824, + 187 => 855, + 190 => 862, + 203 | 249 | 253 | 297 | 338 | 368 => 871, + 234 => 915, + 243 | 286 => 939, + 245 => 942, + 251 => 949, + 264 => 970, + 267 => 974, + 270 => 977, + 272 => 980, + 274 => 982, + 276 => 985, + 287 => 998, + 292 => 1007, + 305 => 1025, + 308 => 1028, + 311 => 1031, + 320 => 1043, + 344 => 1097, + _ => 548, + }, + 257 => 686, + 260 => match state { + 111 => 747, + _ => 744, + }, + 261 => match state { + 29 => 584, + 318 => 1040, + _ => 444, + }, + 263 => match state { + 14 => 38, + 58 => 119, + 140 => 210, + 18 | 76 | 143 => 513, + 24 | 104 | 147 | 149 | 195 => 576, + 69 => 657, + 92 | 99 => 720, + 154 | 225 | 256 | 294 | 310 | 367 => 802, + 185 => 849, + 186 => 852, + _ => 713, + }, + 264 => 427, + 265 => 549, + 266 => 1067, + 267 => 1068, + 268 => 577, + 269 => 658, + 270 => 129, + 271 => 550, + 272 => match state { + 271 => 978, + _ => 830, }, - 272 => 501, 273 => match state { - 28 => 525, - 65 | 98 => 623, - 166 => 772, - _ => 409, + 125 => 174, + 163 => 222, + 164 => 224, + 170 => 227, + 221 => 261, + 129 => 772, + _ => 171, }, - 274 => 624, - 275 => match state { - 12 => 454, - 93..=94 => 671, - 114 => 696, - _ => 502, + 275 => 837, + 276 => match state { + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 55, + 75 | 122 => 137, + _ => 11, + }, + 277 => 505, + 278 => 1069, + 279 => 551, + 280 => match state { + 75 | 122 => 138, + 249 | 297 | 368 => 945, + _ => 872, + }, + 281 => match state { + 251 => 296, + _ => 208, + }, + 282 => 687, + 283 => match state { + 122 => 762, + _ => 688, + }, + 285 => 552, + 286 => 553, + 287 => match state { + 19 | 46 | 128 | 172 | 182 | 188 | 191 | 204 | 223 | 229..=231 | 235 | 244 | 262..=263 | 265 | 268..=269 | 273 | 279 | 288..=291 | 306..=307 | 309 | 312..=314 | 323 | 329..=333 | 335..=336 | 345..=348 | 354..=355 | 365 | 372..=374 | 379..=380 | 389 | 397 | 399..=400 | 405 | 408..=410 => 554, + 28 => 582, + 75 | 122 => 689, + 108 => 741, + 198 => 867, + _ => 445, + }, + 288 => 690, + 289 => match state { + 12 => 490, + 56 => 633, + 110..=111 => 745, + 139 => 780, + _ => 555, }, _ => 0, } @@ -5609,6 +6081,7 @@ mod __parse__Top { r###"">=""###, r###"">>""###, r###"">>=""###, + r###""?""###, r###""@""###, r###""@=""###, r###""False""###, @@ -5665,7 +6138,7 @@ mod __parse__Top { r###"complex"###, r###"float"###, r###"int"###, - r###"line_magic"###, + r###"ipy_escape_command"###, r###"name"###, r###"string"###, ]; @@ -5735,7 +6208,7 @@ mod __parse__Top { #[inline] fn error_action(&self, state: i16) -> i16 { - __action(state, 96 - 1) + __action(state, 97 - 1) } #[inline] @@ -5838,65 +6311,66 @@ mod __parse__Top { token::Tok::GreaterEqual if true => Some(34), token::Tok::RightShift if true => Some(35), token::Tok::RightShiftEqual if true => Some(36), - token::Tok::At if true => Some(37), - token::Tok::AtEqual if true => Some(38), - token::Tok::False if true => Some(39), - token::Tok::None if true => Some(40), - token::Tok::True if true => Some(41), - token::Tok::Lsqb if true => Some(42), - token::Tok::Rsqb if true => Some(43), - token::Tok::CircumFlex if true => Some(44), - token::Tok::CircumflexEqual if true => Some(45), - token::Tok::And if true => Some(46), - token::Tok::As if true => Some(47), - token::Tok::Assert if true => Some(48), - token::Tok::Async if true => Some(49), - token::Tok::Await if true => Some(50), - token::Tok::Break if true => Some(51), - token::Tok::Case if true => Some(52), - token::Tok::Class if true => Some(53), - token::Tok::Continue if true => Some(54), - token::Tok::Def if true => Some(55), - token::Tok::Del if true => Some(56), - token::Tok::Elif if true => Some(57), - token::Tok::Else if true => Some(58), - token::Tok::Except if true => Some(59), - token::Tok::Finally if true => Some(60), - token::Tok::For if true => Some(61), - token::Tok::From if true => Some(62), - token::Tok::Global if true => Some(63), - token::Tok::If if true => Some(64), - token::Tok::Import if true => Some(65), - token::Tok::In if true => Some(66), - token::Tok::Is if true => Some(67), - token::Tok::Lambda if true => Some(68), - token::Tok::Match if true => Some(69), - token::Tok::Nonlocal if true => Some(70), - token::Tok::Not if true => Some(71), - token::Tok::Or if true => Some(72), - token::Tok::Pass if true => Some(73), - token::Tok::Raise if true => Some(74), - token::Tok::Return if true => Some(75), - token::Tok::Try if true => Some(76), - token::Tok::Type if true => Some(77), - token::Tok::While if true => Some(78), - token::Tok::With if true => Some(79), - token::Tok::Yield if true => Some(80), - token::Tok::Lbrace if true => Some(81), - token::Tok::Vbar if true => Some(82), - token::Tok::VbarEqual if true => Some(83), - token::Tok::Rbrace if true => Some(84), - token::Tok::Tilde if true => Some(85), - token::Tok::Dedent if true => Some(86), - token::Tok::Indent if true => Some(87), - token::Tok::StartExpression if true => Some(88), - token::Tok::StartModule if true => Some(89), - token::Tok::Complex { real: _, imag: _ } if true => Some(90), - token::Tok::Float { value: _ } if true => Some(91), - token::Tok::Int { value: _ } if true => Some(92), - token::Tok::MagicCommand { kind: _, value: _ } if true => Some(93), - token::Tok::Name { name: _ } if true => Some(94), - token::Tok::String { value: _, kind: _, triple_quoted: _ } if true => Some(95), + token::Tok::Question if true => Some(37), + token::Tok::At if true => Some(38), + token::Tok::AtEqual if true => Some(39), + token::Tok::False if true => Some(40), + token::Tok::None if true => Some(41), + token::Tok::True if true => Some(42), + token::Tok::Lsqb if true => Some(43), + token::Tok::Rsqb if true => Some(44), + token::Tok::CircumFlex if true => Some(45), + token::Tok::CircumflexEqual if true => Some(46), + token::Tok::And if true => Some(47), + token::Tok::As if true => Some(48), + token::Tok::Assert if true => Some(49), + token::Tok::Async if true => Some(50), + token::Tok::Await if true => Some(51), + token::Tok::Break if true => Some(52), + token::Tok::Case if true => Some(53), + token::Tok::Class if true => Some(54), + token::Tok::Continue if true => Some(55), + token::Tok::Def if true => Some(56), + token::Tok::Del if true => Some(57), + token::Tok::Elif if true => Some(58), + token::Tok::Else if true => Some(59), + token::Tok::Except if true => Some(60), + token::Tok::Finally if true => Some(61), + token::Tok::For if true => Some(62), + token::Tok::From if true => Some(63), + token::Tok::Global if true => Some(64), + token::Tok::If if true => Some(65), + token::Tok::Import if true => Some(66), + token::Tok::In if true => Some(67), + token::Tok::Is if true => Some(68), + token::Tok::Lambda if true => Some(69), + token::Tok::Match if true => Some(70), + token::Tok::Nonlocal if true => Some(71), + token::Tok::Not if true => Some(72), + token::Tok::Or if true => Some(73), + token::Tok::Pass if true => Some(74), + token::Tok::Raise if true => Some(75), + token::Tok::Return if true => Some(76), + token::Tok::Try if true => Some(77), + token::Tok::Type if true => Some(78), + token::Tok::While if true => Some(79), + token::Tok::With if true => Some(80), + token::Tok::Yield if true => Some(81), + token::Tok::Lbrace if true => Some(82), + token::Tok::Vbar if true => Some(83), + token::Tok::VbarEqual if true => Some(84), + token::Tok::Rbrace if true => Some(85), + token::Tok::Tilde if true => Some(86), + token::Tok::Dedent if true => Some(87), + token::Tok::Indent if true => Some(88), + token::Tok::StartExpression if true => Some(89), + token::Tok::StartModule if true => Some(90), + token::Tok::Complex { real: _, imag: _ } if true => Some(91), + token::Tok::Float { value: _ } if true => Some(92), + token::Tok::Int { value: _ } if true => Some(93), + token::Tok::IpyEscapeCommand { kind: _, value: _ } if true => Some(94), + token::Tok::Name { name: _ } if true => Some(95), + token::Tok::String { value: _, kind: _, triple_quoted: _ } if true => Some(96), _ => None, } } @@ -5908,28 +6382,28 @@ mod __parse__Top { ) -> __Symbol<> { match __token_index { - 0 | 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 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 => __Symbol::Variant0(__token), - 90 => match __token { + 0 | 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 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 => __Symbol::Variant0(__token), + 91 => match __token { token::Tok::Complex { real: __tok0, imag: __tok1 } if true => __Symbol::Variant1((__tok0, __tok1)), _ => unreachable!(), }, - 91 => match __token { + 92 => match __token { token::Tok::Float { value: __tok0 } if true => __Symbol::Variant2(__tok0), _ => unreachable!(), }, - 92 => match __token { + 93 => match __token { token::Tok::Int { value: __tok0 } if true => __Symbol::Variant3(__tok0), _ => unreachable!(), }, - 93 => match __token { - token::Tok::MagicCommand { kind: __tok0, value: __tok1 } if true => __Symbol::Variant4((__tok0, __tok1)), - _ => unreachable!(), - }, 94 => match __token { - token::Tok::Name { name: __tok0 } if true => __Symbol::Variant5(__tok0), + token::Tok::IpyEscapeCommand { kind: __tok0, value: __tok1 } if true => __Symbol::Variant4((__tok0, __tok1)), _ => unreachable!(), }, 95 => match __token { + token::Tok::Name { name: __tok0 } if true => __Symbol::Variant5(__tok0), + _ => unreachable!(), + }, + 96 => match __token { token::Tok::String { value: __tok0, kind: __tok1, triple_quoted: __tok2 } if true => __Symbol::Variant6((__tok0, __tok1, __tok2)), _ => unreachable!(), }, @@ -6437,13 +6911,13 @@ mod __parse__Top { } 82 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 34, } } 83 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 34, } } @@ -6455,37 +6929,37 @@ mod __parse__Top { } 85 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 35, + states_to_pop: 0, + nonterminal_produced: 36, } } 86 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 36, } } 87 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 37, } } 88 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 2, nonterminal_produced: 37, } } 89 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 2, nonterminal_produced: 38, } } 90 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 2, nonterminal_produced: 39, } } @@ -6515,13 +6989,13 @@ mod __parse__Top { } 95 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 3, nonterminal_produced: 42, } } 96 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 3, nonterminal_produced: 43, } } @@ -6533,19 +7007,19 @@ mod __parse__Top { } 98 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, + states_to_pop: 2, nonterminal_produced: 44, } } 99 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 2, nonterminal_produced: 45, } } 100 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 45, } } @@ -6557,43 +7031,43 @@ mod __parse__Top { } 102 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 46, + states_to_pop: 0, + nonterminal_produced: 47, } } 103 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 1, nonterminal_produced: 47, } } 104 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 4, nonterminal_produced: 48, } } 105 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 5, nonterminal_produced: 48, } } 106 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 3, nonterminal_produced: 49, } } 107 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 3, nonterminal_produced: 50, } } 108 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 0, nonterminal_produced: 50, } } @@ -6605,13 +7079,13 @@ mod __parse__Top { } 110 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 2, nonterminal_produced: 52, } } 111 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 3, nonterminal_produced: 52, } } @@ -6623,13 +7097,13 @@ mod __parse__Top { } 113 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 53, + states_to_pop: 0, + nonterminal_produced: 54, } } 114 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 54, } } @@ -6659,7 +7133,7 @@ mod __parse__Top { } 119 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 3, nonterminal_produced: 57, } } @@ -6671,13 +7145,13 @@ mod __parse__Top { } 121 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 2, nonterminal_produced: 59, } } 122 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 59, } } @@ -6689,25 +7163,25 @@ mod __parse__Top { } 124 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 60, + states_to_pop: 0, + nonterminal_produced: 61, } } 125 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 61, } } 126 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 2, nonterminal_produced: 62, } } 127 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 3, nonterminal_produced: 62, } } @@ -6719,13 +7193,13 @@ mod __parse__Top { } 129 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 63, + states_to_pop: 0, + nonterminal_produced: 64, } } 130 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 1, nonterminal_produced: 64, } } @@ -6737,67 +7211,67 @@ mod __parse__Top { } 132 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 66, + states_to_pop: 3, + nonterminal_produced: 65, } } 133 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 3, nonterminal_produced: 66, } } 134 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 67, } } 135 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 68, } } 136 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 0, nonterminal_produced: 68, } } 137 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 69, } } 138 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 70, } } 139 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 2, nonterminal_produced: 70, } } 140 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 71, } } 141 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 72, } } 142 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 3, nonterminal_produced: 72, } } @@ -6821,37 +7295,37 @@ mod __parse__Top { } 146 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 75, } } 147 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 76, } } 148 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 77, + states_to_pop: 0, + nonterminal_produced: 76, } } 149 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 77, } } 150 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 0, nonterminal_produced: 78, } } 151 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 1, nonterminal_produced: 79, } } @@ -6869,80 +7343,80 @@ mod __parse__Top { } 154 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 80, + states_to_pop: 3, + nonterminal_produced: 81, } } 155 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 81, } } 156 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 81, + states_to_pop: 3, + nonterminal_produced: 82, } } 157 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 82, } } 158 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 82, + states_to_pop: 3, + nonterminal_produced: 83, } } 159 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 1, nonterminal_produced: 83, } } 160 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 83, + nonterminal_produced: 84, } } 161 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 83, + states_to_pop: 1, + nonterminal_produced: 84, } } 162 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 83, + states_to_pop: 2, + nonterminal_produced: 85, } } 163 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 84, + nonterminal_produced: 85, } } 164 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 84, + states_to_pop: 3, + nonterminal_produced: 86, } } 165 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 85, + states_to_pop: 2, + nonterminal_produced: 86, } } 166 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 85, + states_to_pop: 4, + nonterminal_produced: 86, } } 167 => { @@ -6954,42 +7428,42 @@ mod __parse__Top { 168 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 86, + nonterminal_produced: 87, } } 169 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 0, nonterminal_produced: 87, } } 170 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, + states_to_pop: 3, nonterminal_produced: 88, } } 171 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 88, } } 172 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 3, nonterminal_produced: 89, } } 173 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 89, } } 174 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 3, nonterminal_produced: 90, } } @@ -7001,637 +7475,637 @@ mod __parse__Top { } 176 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 3, nonterminal_produced: 91, } } 177 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 91, + states_to_pop: 4, + nonterminal_produced: 92, } } 178 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 92, } } 179 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 92, + states_to_pop: 2, + nonterminal_produced: 93, } } 180 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 93, } } 181 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 93, + states_to_pop: 0, + nonterminal_produced: 94, } } 182 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 93, + nonterminal_produced: 94, } } 183 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 93, + states_to_pop: 1, + nonterminal_produced: 95, } } 184 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 93, + nonterminal_produced: 95, } } 185 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 93, + states_to_pop: 1, + nonterminal_produced: 96, } } 186 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 93, + states_to_pop: 0, + nonterminal_produced: 96, } } 187 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 93, + states_to_pop: 1, + nonterminal_produced: 97, } } 188 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 93, + states_to_pop: 1, + nonterminal_produced: 97, } } 189 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 93, + states_to_pop: 1, + nonterminal_produced: 97, } } 190 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 93, + states_to_pop: 3, + nonterminal_produced: 97, } } 191 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 93, + states_to_pop: 2, + nonterminal_produced: 97, } } 192 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 93, + states_to_pop: 4, + nonterminal_produced: 97, } } 193 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 93, + states_to_pop: 4, + nonterminal_produced: 97, } } 194 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 93, + states_to_pop: 3, + nonterminal_produced: 97, } } 195 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 93, + states_to_pop: 6, + nonterminal_produced: 97, } } 196 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 93, + states_to_pop: 4, + nonterminal_produced: 97, } } 197 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 93, + states_to_pop: 7, + nonterminal_produced: 97, } } 198 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 93, + states_to_pop: 5, + nonterminal_produced: 97, } } 199 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 93, + states_to_pop: 5, + nonterminal_produced: 97, } } 200 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 93, + nonterminal_produced: 97, } } 201 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 93, + states_to_pop: 6, + nonterminal_produced: 97, } } 202 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 4, - nonterminal_produced: 93, + nonterminal_produced: 97, } } 203 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 93, + states_to_pop: 2, + nonterminal_produced: 97, } } 204 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 93, + states_to_pop: 3, + nonterminal_produced: 97, } } 205 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 93, + states_to_pop: 4, + nonterminal_produced: 97, } } 206 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 93, + states_to_pop: 4, + nonterminal_produced: 97, } } 207 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 93, + states_to_pop: 3, + nonterminal_produced: 97, } } 208 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 93, + states_to_pop: 2, + nonterminal_produced: 97, } } 209 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 94, + states_to_pop: 4, + nonterminal_produced: 97, } } 210 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 94, + states_to_pop: 3, + nonterminal_produced: 97, } } 211 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 94, + states_to_pop: 4, + nonterminal_produced: 97, } } 212 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 94, + states_to_pop: 1, + nonterminal_produced: 97, } } 213 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 94, + states_to_pop: 1, + nonterminal_produced: 97, } } 214 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 94, + states_to_pop: 1, + nonterminal_produced: 97, } } 215 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 94, + states_to_pop: 1, + nonterminal_produced: 97, } } 216 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 94, + states_to_pop: 1, + nonterminal_produced: 98, } } 217 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 94, + states_to_pop: 1, + nonterminal_produced: 98, } } 218 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 94, + states_to_pop: 1, + nonterminal_produced: 98, } } 219 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 94, + states_to_pop: 3, + nonterminal_produced: 98, } } 220 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 94, + states_to_pop: 2, + nonterminal_produced: 98, } } 221 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 94, + states_to_pop: 4, + nonterminal_produced: 98, } } 222 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 4, - nonterminal_produced: 94, + nonterminal_produced: 98, } } 223 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 94, + states_to_pop: 3, + nonterminal_produced: 98, } } 224 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 94, + states_to_pop: 6, + nonterminal_produced: 98, } } 225 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 4, - nonterminal_produced: 94, + nonterminal_produced: 98, } } 226 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 94, + states_to_pop: 7, + nonterminal_produced: 98, } } 227 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 94, + states_to_pop: 5, + nonterminal_produced: 98, } } 228 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 94, + states_to_pop: 5, + nonterminal_produced: 98, } } 229 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 94, + states_to_pop: 3, + nonterminal_produced: 98, } } 230 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 94, + states_to_pop: 6, + nonterminal_produced: 98, } } 231 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 4, - nonterminal_produced: 94, + nonterminal_produced: 98, } } 232 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 94, + states_to_pop: 2, + nonterminal_produced: 98, } } 233 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 94, + states_to_pop: 3, + nonterminal_produced: 98, } } 234 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 94, + states_to_pop: 4, + nonterminal_produced: 98, } } 235 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 94, + states_to_pop: 4, + nonterminal_produced: 98, } } 236 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 95, + states_to_pop: 3, + nonterminal_produced: 98, } } 237 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 95, + nonterminal_produced: 98, } } 238 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 4, - nonterminal_produced: 95, + nonterminal_produced: 98, } } 239 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 95, + nonterminal_produced: 98, } } 240 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 96, + states_to_pop: 4, + nonterminal_produced: 98, } } 241 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 96, + states_to_pop: 1, + nonterminal_produced: 98, } } 242 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 96, + states_to_pop: 1, + nonterminal_produced: 98, } } 243 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 96, + states_to_pop: 1, + nonterminal_produced: 98, } } 244 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 97, + states_to_pop: 1, + nonterminal_produced: 98, } } 245 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 97, + nonterminal_produced: 99, } } 246 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 98, + states_to_pop: 1, + nonterminal_produced: 99, } } 247 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 98, + nonterminal_produced: 99, } } 248 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 3, nonterminal_produced: 99, } } 249 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 99, } } 250 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 4, nonterminal_produced: 99, } } 251 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 6, nonterminal_produced: 99, } } 252 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 4, nonterminal_produced: 99, } } 253 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 7, nonterminal_produced: 99, } } 254 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 5, nonterminal_produced: 99, } } 255 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 5, nonterminal_produced: 99, } } 256 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 3, nonterminal_produced: 99, } } 257 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 6, nonterminal_produced: 99, } } 258 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 4, nonterminal_produced: 99, } } 259 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 99, } } 260 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 3, nonterminal_produced: 99, } } 261 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 100, + states_to_pop: 4, + nonterminal_produced: 99, } } 262 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 101, + states_to_pop: 4, + nonterminal_produced: 99, } } 263 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 101, + states_to_pop: 3, + nonterminal_produced: 99, } } 264 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 101, + states_to_pop: 2, + nonterminal_produced: 99, } } 265 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 101, + states_to_pop: 4, + nonterminal_produced: 99, } } 266 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 101, + states_to_pop: 3, + nonterminal_produced: 99, } } 267 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 4, - nonterminal_produced: 101, + nonterminal_produced: 99, } } 268 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 101, + states_to_pop: 1, + nonterminal_produced: 99, } } 269 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 101, + states_to_pop: 1, + nonterminal_produced: 99, } } 270 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 102, + states_to_pop: 1, + nonterminal_produced: 99, } } 271 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 102, + states_to_pop: 1, + nonterminal_produced: 99, } } 272 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 102, + states_to_pop: 1, + nonterminal_produced: 100, } } 273 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 102, + states_to_pop: 2, + nonterminal_produced: 100, } } 274 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 102, + states_to_pop: 4, + nonterminal_produced: 100, } } 275 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 102, + states_to_pop: 3, + nonterminal_produced: 100, } } 276 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 102, + states_to_pop: 1, + nonterminal_produced: 101, } } 277 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 102, + states_to_pop: 2, + nonterminal_produced: 101, } } 278 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 102, + states_to_pop: 4, + nonterminal_produced: 101, } } 279 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 102, + states_to_pop: 3, + nonterminal_produced: 101, } } 280 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, + states_to_pop: 1, nonterminal_produced: 102, } } 281 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, + states_to_pop: 2, nonterminal_produced: 102, } } @@ -7649,7 +8123,7 @@ mod __parse__Top { } 284 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 103, } } @@ -7661,80 +8135,80 @@ mod __parse__Top { } 286 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 103, + states_to_pop: 2, + nonterminal_produced: 104, } } 287 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 103, + nonterminal_produced: 104, } } 288 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 103, + states_to_pop: 2, + nonterminal_produced: 105, } } 289 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 103, + nonterminal_produced: 105, } } 290 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 103, + nonterminal_produced: 106, } } 291 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 104, + nonterminal_produced: 106, } } 292 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 104, + states_to_pop: 1, + nonterminal_produced: 106, } } 293 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 104, + states_to_pop: 1, + nonterminal_produced: 106, } } 294 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 104, + nonterminal_produced: 106, } } 295 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 105, + nonterminal_produced: 106, } } 296 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 105, + states_to_pop: 1, + nonterminal_produced: 106, } } 297 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 105, + states_to_pop: 1, + nonterminal_produced: 106, } } 298 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 105, + nonterminal_produced: 106, } } 299 => { @@ -7746,3694 +8220,4030 @@ mod __parse__Top { 300 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 107, + nonterminal_produced: 106, } } 301 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 107, + states_to_pop: 1, + nonterminal_produced: 106, } } 302 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 108, + nonterminal_produced: 106, } } 303 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 108, + nonterminal_produced: 107, } } 304 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 6, nonterminal_produced: 108, } } 305 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 5, nonterminal_produced: 108, } } 306 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 7, nonterminal_produced: 108, } } 307 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 6, nonterminal_produced: 108, } } 308 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 5, nonterminal_produced: 108, } } 309 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 4, nonterminal_produced: 108, } } 310 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 6, nonterminal_produced: 108, } } 311 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 5, nonterminal_produced: 108, } } 312 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 7, nonterminal_produced: 109, } } 313 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 6, nonterminal_produced: 109, } } 314 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 110, + states_to_pop: 5, + nonterminal_produced: 109, } } 315 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 110, + states_to_pop: 4, + nonterminal_produced: 109, } } 316 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 111, + states_to_pop: 5, + nonterminal_produced: 109, } } 317 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 111, + states_to_pop: 4, + nonterminal_produced: 109, } } 318 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 111, + states_to_pop: 3, + nonterminal_produced: 109, } } 319 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 111, + states_to_pop: 7, + nonterminal_produced: 109, } } 320 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 111, + states_to_pop: 6, + nonterminal_produced: 109, } } 321 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 111, + states_to_pop: 5, + nonterminal_produced: 109, } } 322 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 111, + states_to_pop: 4, + nonterminal_produced: 109, } } 323 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 111, + states_to_pop: 5, + nonterminal_produced: 109, } } 324 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 112, + states_to_pop: 4, + nonterminal_produced: 109, } } 325 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 113, + states_to_pop: 3, + nonterminal_produced: 109, } } 326 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 113, + nonterminal_produced: 110, } } 327 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 114, + nonterminal_produced: 110, } } 328 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 114, + states_to_pop: 1, + nonterminal_produced: 110, } } 329 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 115, + nonterminal_produced: 110, } } 330 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 115, + nonterminal_produced: 110, } } 331 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 115, + nonterminal_produced: 110, } } 332 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 116, + nonterminal_produced: 110, } } 333 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 117, + nonterminal_produced: 111, } } 334 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 117, + states_to_pop: 0, + nonterminal_produced: 111, } } 335 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 118, + states_to_pop: 2, + nonterminal_produced: 111, } } 336 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 119, + states_to_pop: 1, + nonterminal_produced: 111, } } 337 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 119, + nonterminal_produced: 112, } } 338 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 120, + states_to_pop: 0, + nonterminal_produced: 112, } } 339 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 120, + nonterminal_produced: 112, } } 340 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 121, + states_to_pop: 1, + nonterminal_produced: 112, } } 341 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 122, + nonterminal_produced: 113, } } 342 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 122, + states_to_pop: 1, + nonterminal_produced: 114, } } 343 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 123, + states_to_pop: 0, + nonterminal_produced: 114, } } 344 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 124, + states_to_pop: 1, + nonterminal_produced: 115, } } 345 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 124, + nonterminal_produced: 115, } } 346 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 125, + nonterminal_produced: 115, } } 347 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 125, + states_to_pop: 1, + nonterminal_produced: 115, } } 348 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 126, + nonterminal_produced: 115, } } 349 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 126, + states_to_pop: 1, + nonterminal_produced: 115, } } 350 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 127, + states_to_pop: 1, + nonterminal_produced: 115, } } 351 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 127, + states_to_pop: 2, + nonterminal_produced: 115, } } 352 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 128, + nonterminal_produced: 115, } } 353 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 128, + states_to_pop: 2, + nonterminal_produced: 115, } } 354 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 129, + states_to_pop: 2, + nonterminal_produced: 116, } } 355 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 129, + states_to_pop: 1, + nonterminal_produced: 116, } } 356 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 129, + states_to_pop: 2, + nonterminal_produced: 117, } } 357 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 130, + nonterminal_produced: 117, } } 358 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 130, + states_to_pop: 1, + nonterminal_produced: 118, } } 359 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 131, + states_to_pop: 1, + nonterminal_produced: 118, } } 360 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 131, + states_to_pop: 1, + nonterminal_produced: 118, } } 361 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 132, + nonterminal_produced: 118, } } 362 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 132, + states_to_pop: 1, + nonterminal_produced: 118, } } 363 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 133, + states_to_pop: 1, + nonterminal_produced: 118, } } 364 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 133, + nonterminal_produced: 118, } } 365 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 134, + states_to_pop: 1, + nonterminal_produced: 118, } } 366 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 134, + states_to_pop: 2, + nonterminal_produced: 119, } } 367 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 135, + states_to_pop: 0, + nonterminal_produced: 120, } } 368 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 136, + states_to_pop: 1, + nonterminal_produced: 120, } } 369 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 136, + nonterminal_produced: 121, } } 370 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 137, + states_to_pop: 2, + nonterminal_produced: 121, } } 371 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 138, + nonterminal_produced: 122, } } 372 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 138, + nonterminal_produced: 122, } } 373 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 139, + nonterminal_produced: 122, } } 374 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 139, + states_to_pop: 1, + nonterminal_produced: 123, } } 375 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 139, + states_to_pop: 1, + nonterminal_produced: 124, } } 376 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 139, + states_to_pop: 2, + nonterminal_produced: 124, } } 377 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 139, + nonterminal_produced: 125, } } 378 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 140, + states_to_pop: 0, + nonterminal_produced: 126, } } 379 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 140, + nonterminal_produced: 126, } } 380 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 141, + states_to_pop: 1, + nonterminal_produced: 127, } } 381 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 141, + states_to_pop: 2, + nonterminal_produced: 127, } } 382 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 142, + states_to_pop: 2, + nonterminal_produced: 128, } } 383 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 142, + nonterminal_produced: 129, } } 384 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 142, + nonterminal_produced: 129, } } 385 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 142, + states_to_pop: 3, + nonterminal_produced: 130, } } 386 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 142, + states_to_pop: 2, + nonterminal_produced: 131, } } 387 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 142, + nonterminal_produced: 131, } } 388 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 143, + states_to_pop: 1, + nonterminal_produced: 132, } } 389 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 143, + states_to_pop: 0, + nonterminal_produced: 132, } } 390 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 143, + states_to_pop: 1, + nonterminal_produced: 133, } } 391 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 143, + states_to_pop: 2, + nonterminal_produced: 133, } } 392 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 144, + states_to_pop: 3, + nonterminal_produced: 134, } } 393 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 144, + states_to_pop: 1, + nonterminal_produced: 134, } } 394 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 144, + states_to_pop: 1, + nonterminal_produced: 135, } } 395 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 144, + states_to_pop: 0, + nonterminal_produced: 135, } } 396 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 144, + states_to_pop: 4, + nonterminal_produced: 136, } } 397 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 144, + states_to_pop: 3, + nonterminal_produced: 136, } } 398 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 144, + states_to_pop: 6, + nonterminal_produced: 136, } } 399 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 144, + states_to_pop: 1, + nonterminal_produced: 137, } } 400 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 144, + states_to_pop: 2, + nonterminal_produced: 137, } } 401 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 144, + states_to_pop: 5, + nonterminal_produced: 138, } } 402 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 144, + states_to_pop: 7, + nonterminal_produced: 138, } } 403 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 144, + states_to_pop: 1, + nonterminal_produced: 139, } } 404 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 144, + states_to_pop: 2, + nonterminal_produced: 139, } } 405 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 144, + states_to_pop: 3, + nonterminal_produced: 140, } } 406 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 144, + states_to_pop: 1, + nonterminal_produced: 140, } } 407 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 144, + states_to_pop: 3, + nonterminal_produced: 141, } } 408 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 145, + states_to_pop: 1, + nonterminal_produced: 141, } } 409 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 145, + states_to_pop: 3, + nonterminal_produced: 142, } } 410 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 145, + states_to_pop: 1, + nonterminal_produced: 142, } } 411 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 145, + states_to_pop: 1, + nonterminal_produced: 143, } } 412 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 145, + nonterminal_produced: 144, } } 413 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 146, + nonterminal_produced: 144, } } 414 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 146, + states_to_pop: 1, + nonterminal_produced: 145, } } 415 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 147, + states_to_pop: 1, + nonterminal_produced: 146, } } 416 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 147, + nonterminal_produced: 146, } } 417 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 147, + } + } + 418 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 147, + } + } + 419 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 147, + } + } + 420 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 147, + } + } + 421 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 147, + } + } + 422 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 148, } } - 418 => { + 423 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 148, } } - 419 => { + 424 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 149, } } - 420 => { + 425 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 149, + } + } + 426 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 150, } } - 421 => { + 427 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 150, + } + } + 428 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 151, } } - 422 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 152, - } - } - 423 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 152, - } - } - 424 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 152, - } - } - 425 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 152, - } - } - 426 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 153, - } - } - 427 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 153, - } - } - 428 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 154, - } - } 429 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 154, + nonterminal_produced: 151, } } 430 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 155, + states_to_pop: 2, + nonterminal_produced: 151, } } 431 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 155, + states_to_pop: 1, + nonterminal_produced: 151, } } 432 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 155, + states_to_pop: 1, + nonterminal_produced: 151, } } 433 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 155, + nonterminal_produced: 151, } } 434 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 156, + states_to_pop: 10, + nonterminal_produced: 152, } } 435 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 156, + states_to_pop: 7, + nonterminal_produced: 152, } } 436 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 157, + states_to_pop: 9, + nonterminal_produced: 152, } } 437 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 157, + states_to_pop: 6, + nonterminal_produced: 152, } } 438 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 158, + states_to_pop: 9, + nonterminal_produced: 153, } } 439 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 158, + states_to_pop: 8, + nonterminal_produced: 153, } } 440 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 159, + states_to_pop: 10, + nonterminal_produced: 153, } } 441 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 159, + states_to_pop: 9, + nonterminal_produced: 153, } } 442 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 159, + states_to_pop: 7, + nonterminal_produced: 153, } } 443 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 160, + states_to_pop: 6, + nonterminal_produced: 153, } } 444 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 160, + states_to_pop: 8, + nonterminal_produced: 153, } } 445 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 161, + states_to_pop: 7, + nonterminal_produced: 153, } } 446 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 161, + states_to_pop: 8, + nonterminal_produced: 153, } } 447 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 162, + states_to_pop: 7, + nonterminal_produced: 153, } } 448 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 162, + states_to_pop: 9, + nonterminal_produced: 153, } } 449 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 163, + states_to_pop: 8, + nonterminal_produced: 153, } } 450 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 163, + states_to_pop: 6, + nonterminal_produced: 153, } } 451 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 164, + states_to_pop: 5, + nonterminal_produced: 153, } } 452 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 165, + states_to_pop: 7, + nonterminal_produced: 153, } } 453 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 166, + states_to_pop: 6, + nonterminal_produced: 153, } } 454 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 166, + states_to_pop: 2, + nonterminal_produced: 154, } } 455 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 167, + nonterminal_produced: 154, } } 456 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 167, + states_to_pop: 3, + nonterminal_produced: 154, } } 457 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 168, + states_to_pop: 2, + nonterminal_produced: 154, } } 458 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 168, + states_to_pop: 2, + nonterminal_produced: 154, } } 459 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 168, + nonterminal_produced: 155, } } 460 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 168, + states_to_pop: 0, + nonterminal_produced: 155, } } 461 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 168, + states_to_pop: 2, + nonterminal_produced: 156, } } 462 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 168, + nonterminal_produced: 156, } } 463 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 169, + states_to_pop: 2, + nonterminal_produced: 157, } } 464 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 169, + nonterminal_produced: 157, } } 465 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 169, + states_to_pop: 2, + nonterminal_produced: 158, } } 466 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 169, + states_to_pop: 2, + nonterminal_produced: 159, } } 467 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 169, + nonterminal_produced: 160, } } 468 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 169, + states_to_pop: 7, + nonterminal_produced: 161, } } 469 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 169, + states_to_pop: 4, + nonterminal_produced: 161, } } 470 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 170, + states_to_pop: 8, + nonterminal_produced: 161, } } 471 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 170, + states_to_pop: 5, + nonterminal_produced: 161, } } 472 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 170, + nonterminal_produced: 162, } } 473 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 170, + states_to_pop: 1, + nonterminal_produced: 162, } } 474 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 170, + states_to_pop: 3, + nonterminal_produced: 163, } } 475 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 170, + states_to_pop: 1, + nonterminal_produced: 163, } } 476 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 170, + states_to_pop: 1, + nonterminal_produced: 164, } } 477 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 171, + states_to_pop: 4, + nonterminal_produced: 164, } } 478 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 171, + states_to_pop: 3, + nonterminal_produced: 164, } } 479 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 172, + nonterminal_produced: 164, } } 480 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 172, + states_to_pop: 1, + nonterminal_produced: 165, } } 481 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 173, + states_to_pop: 1, + nonterminal_produced: 165, } } 482 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 174, + states_to_pop: 0, + nonterminal_produced: 166, } } 483 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 175, + nonterminal_produced: 166, } } 484 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 176, + states_to_pop: 1, + nonterminal_produced: 167, } } 485 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 176, + states_to_pop: 2, + nonterminal_produced: 167, } } 486 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 177, + states_to_pop: 1, + nonterminal_produced: 168, } } 487 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 177, + states_to_pop: 2, + nonterminal_produced: 168, } } 488 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 177, + states_to_pop: 1, + nonterminal_produced: 168, } } 489 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 177, + states_to_pop: 2, + nonterminal_produced: 169, } } 490 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 178, + states_to_pop: 4, + nonterminal_produced: 169, } } 491 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 178, + nonterminal_produced: 170, } } 492 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 178, + nonterminal_produced: 171, } } 493 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 178, + states_to_pop: 2, + nonterminal_produced: 172, } } 494 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 178, + states_to_pop: 2, + nonterminal_produced: 173, } } 495 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 179, + states_to_pop: 1, + nonterminal_produced: 173, } } 496 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 180, + states_to_pop: 2, + nonterminal_produced: 174, } } 497 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 180, + nonterminal_produced: 174, } } 498 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 181, + states_to_pop: 4, + nonterminal_produced: 175, } } 499 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 181, + states_to_pop: 3, + nonterminal_produced: 175, } } 500 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 182, + nonterminal_produced: 176, } } 501 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 183, + states_to_pop: 1, + nonterminal_produced: 176, } } 502 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 183, + nonterminal_produced: 177, } } 503 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 184, + states_to_pop: 0, + nonterminal_produced: 177, } } 504 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 184, + nonterminal_produced: 178, } } 505 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 185, + nonterminal_produced: 178, } } 506 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 185, + states_to_pop: 1, + nonterminal_produced: 178, } } 507 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 186, + nonterminal_produced: 178, } } 508 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 186, + states_to_pop: 1, + nonterminal_produced: 178, } } 509 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 187, + nonterminal_produced: 178, } } 510 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 187, + states_to_pop: 1, + nonterminal_produced: 179, } } 511 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 188, + states_to_pop: 1, + nonterminal_produced: 179, } } 512 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 188, + nonterminal_produced: 179, } } 513 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 188, + states_to_pop: 1, + nonterminal_produced: 179, } } 514 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 188, + states_to_pop: 1, + nonterminal_produced: 179, } } 515 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 189, + states_to_pop: 1, + nonterminal_produced: 179, } } 516 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 189, + nonterminal_produced: 179, } } 517 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 189, + states_to_pop: 2, + nonterminal_produced: 180, } } 518 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 189, + states_to_pop: 4, + nonterminal_produced: 180, } } 519 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 190, + states_to_pop: 3, + nonterminal_produced: 180, } } 520 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 190, + states_to_pop: 5, + nonterminal_produced: 180, } } 521 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 191, + states_to_pop: 4, + nonterminal_produced: 180, } } 522 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 191, + states_to_pop: 7, + nonterminal_produced: 180, } } 523 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 192, + states_to_pop: 6, + nonterminal_produced: 180, } } 524 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 192, + states_to_pop: 5, + nonterminal_produced: 181, } } 525 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 193, + states_to_pop: 4, + nonterminal_produced: 181, } } 526 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 193, + states_to_pop: 1, + nonterminal_produced: 182, } } 527 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 194, + states_to_pop: 2, + nonterminal_produced: 182, } } 528 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 194, + nonterminal_produced: 183, } } 529 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 195, + states_to_pop: 3, + nonterminal_produced: 184, } } 530 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 195, + states_to_pop: 1, + nonterminal_produced: 185, } } 531 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 196, + states_to_pop: 3, + nonterminal_produced: 186, } } 532 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 196, + nonterminal_produced: 186, } } 533 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 197, + states_to_pop: 7, + nonterminal_produced: 187, } } 534 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 197, + states_to_pop: 8, + nonterminal_produced: 187, } } 535 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 198, + states_to_pop: 8, + nonterminal_produced: 187, } } 536 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 198, + states_to_pop: 7, + nonterminal_produced: 187, } } 537 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 199, + nonterminal_produced: 188, } } 538 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 199, + nonterminal_produced: 188, } } 539 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 200, + states_to_pop: 1, + nonterminal_produced: 188, } } 540 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 200, + nonterminal_produced: 188, } } 541 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 201, + states_to_pop: 1, + nonterminal_produced: 188, } } 542 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 201, + states_to_pop: 3, + nonterminal_produced: 189, } } 543 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 202, + nonterminal_produced: 190, } } 544 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 202, + states_to_pop: 1, + nonterminal_produced: 190, } } 545 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 203, + nonterminal_produced: 191, } } 546 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 203, + states_to_pop: 1, + nonterminal_produced: 191, } } 547 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 204, + states_to_pop: 2, + nonterminal_produced: 192, } } 548 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 204, + states_to_pop: 2, + nonterminal_produced: 193, } } 549 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 204, + states_to_pop: 1, + nonterminal_produced: 193, } } 550 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 194, + } + } + 551 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 194, + } + } + 552 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 195, + } + } + 553 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 195, + } + } + 554 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 196, + } + } + 555 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 196, + } + } + 556 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 197, + } + } + 557 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 197, + } + } + 558 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 198, + } + } + 559 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 198, + } + } + 560 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 198, + } + } + 561 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 198, + } + } + 562 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 199, + } + } + 563 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 199, + } + } + 564 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 199, + } + } + 565 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 199, + } + } + 566 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 200, + } + } + 567 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 200, + } + } + 568 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 201, + } + } + 569 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 201, + } + } + 570 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 202, + } + } + 571 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 202, + } + } + 572 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 203, + } + } + 573 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 203, + } + } + 574 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 204, + } + } + 575 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 204, + } + } + 576 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 205, } } - 551 => { + 577 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 205, } } - 552 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 205, - } - } - 553 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 206, - } - } - 554 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 206, - } - } - 555 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 206, - } - } - 556 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 206, - } - } - 557 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 206, - } - } - 558 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 206, - } - } - 559 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 206, - } - } - 560 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 206, - } - } - 561 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 11, - nonterminal_produced: 206, - } - } - 562 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 206, - } - } - 563 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 206, - } - } - 564 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 206, - } - } - 565 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 206, - } - } - 566 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 206, - } - } - 567 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 206, - } - } - 568 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 206, - } - } - 569 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 206, - } - } - 570 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 206, - } - } - 571 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 206, - } - } - 572 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 206, - } - } - 573 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 206, - } - } - 574 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 206, - } - } - 575 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 206, - } - } - 576 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 206, - } - } - 577 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 206, - } - } 578 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, + states_to_pop: 1, nonterminal_produced: 206, } } 579 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, + states_to_pop: 3, nonterminal_produced: 206, } } 580 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 206, + states_to_pop: 1, + nonterminal_produced: 207, } } 581 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 206, + states_to_pop: 3, + nonterminal_produced: 207, } } 582 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 206, + states_to_pop: 1, + nonterminal_produced: 208, } } 583 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 206, + states_to_pop: 3, + nonterminal_produced: 208, } } 584 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 206, + states_to_pop: 1, + nonterminal_produced: 209, } } 585 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 206, + states_to_pop: 1, + nonterminal_produced: 209, } } 586 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 206, + states_to_pop: 2, + nonterminal_produced: 210, } } 587 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 206, + states_to_pop: 1, + nonterminal_produced: 210, } } 588 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 206, + states_to_pop: 2, + nonterminal_produced: 211, } } 589 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 206, + states_to_pop: 1, + nonterminal_produced: 211, } } 590 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 206, - } - } - 591 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 206, - } - } - 592 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 206, - } - } - 593 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 206, - } - } - 594 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 206, - } - } - 595 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 206, - } - } - 596 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 206, - } - } - 597 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 206, - } - } - 598 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 206, - } - } - 599 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 206, - } - } - 600 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 206, - } - } - 601 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 206, - } - } - 602 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 206, - } - } - 603 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 206, - } - } - 604 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 206, - } - } - 605 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 206, - } - } - 606 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 206, - } - } - 607 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 206, - } - } - 608 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 206, - } - } - 609 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 206, - } - } - 610 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 206, - } - } - 611 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 206, - } - } - 612 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 206, - } - } - 613 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 206, - } - } - 614 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 206, - } - } - 615 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 206, - } - } - 616 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 206, - } - } - 617 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 206, - } - } - 618 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 206, - } - } - 619 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 206, - } - } - 620 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 206, - } - } - 621 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 206, - } - } - 622 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 206, - } - } - 623 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 206, - } - } - 624 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 206, - } - } - 625 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 206, - } - } - 626 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 206, - } - } - 627 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 206, - } - } - 628 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 206, - } - } - 629 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 206, - } - } - 630 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 206, - } - } - 631 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 207, - } - } - 632 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 207, - } - } - 633 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 207, - } - } - 634 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 207, - } - } - 635 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 207, - } - } - 636 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 207, - } - } - 637 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 207, - } - } - 638 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 207, - } - } - 639 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 11, - nonterminal_produced: 207, - } - } - 640 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 207, - } - } - 641 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 207, - } - } - 642 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 207, - } - } - 643 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 207, - } - } - 644 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 207, - } - } - 645 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 207, - } - } - 646 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 207, - } - } - 647 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 207, - } - } - 648 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 207, - } - } - 649 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 207, - } - } - 650 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 207, - } - } - 651 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 207, - } - } - 652 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 207, - } - } - 653 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 207, - } - } - 654 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 207, - } - } - 655 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 207, - } - } - 656 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 207, - } - } - 657 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 207, - } - } - 658 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 207, - } - } - 659 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 207, - } - } - 660 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 207, - } - } - 661 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 207, - } - } - 662 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 207, - } - } - 663 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 207, - } - } - 664 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 207, - } - } - 665 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 207, - } - } - 666 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 207, - } - } - 667 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 207, - } - } - 668 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 207, - } - } - 669 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 207, - } - } - 670 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 207, - } - } - 671 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 207, - } - } - 672 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 207, - } - } - 673 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 207, - } - } - 674 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 207, - } - } - 675 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 207, - } - } - 676 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 207, - } - } - 677 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 207, - } - } - 678 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 207, - } - } - 679 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 207, - } - } - 680 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 207, - } - } - 681 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 207, - } - } - 682 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 207, - } - } - 683 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 207, - } - } - 684 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 207, - } - } - 685 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 207, - } - } - 686 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 207, - } - } - 687 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 207, - } - } - 688 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 207, - } - } - 689 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 207, - } - } - 690 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 207, - } - } - 691 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 207, - } - } - 692 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 207, - } - } - 693 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 207, - } - } - 694 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 207, - } - } - 695 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 207, - } - } - 696 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 207, - } - } - 697 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 207, - } - } - 698 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 207, - } - } - 699 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 207, - } - } - 700 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 207, - } - } - 701 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 207, - } - } - 702 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 207, - } - } - 703 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 207, - } - } - 704 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 207, - } - } - 705 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 207, - } - } - 706 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 207, - } - } - 707 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 207, - } - } - 708 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 207, - } - } - 709 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 208, - } - } - 710 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 208, - } - } - 711 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 209, - } - } - 712 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 209, - } - } - 713 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 209, - } - } - 714 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 209, - } - } - 715 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 209, - } - } - 716 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 209, - } - } - 717 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 209, - } - } - 718 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 209, - } - } - 719 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 210, - } - } - 720 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 210, - } - } - 721 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 210, - } - } - 722 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 210, - } - } - 723 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 210, - } - } - 724 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 210, - } - } - 725 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 210, - } - } - 726 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 210, - } - } - 727 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 211, - } - } - 728 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 211, - } - } - 729 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 212, } } - 730 => { + 591 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 212, + } + } + 592 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 213, } } + 593 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 213, + } + } + 594 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 214, + } + } + 595 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 214, + } + } + 596 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 214, + } + } + 597 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 215, + } + } + 598 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 215, + } + } + 599 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 215, + } + } + 600 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 216, + } + } + 601 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 216, + } + } + 602 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 10, + nonterminal_produced: 216, + } + } + 603 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 216, + } + } + 604 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 216, + } + } + 605 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 216, + } + } + 606 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 216, + } + } + 607 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 10, + nonterminal_produced: 216, + } + } + 608 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 11, + nonterminal_produced: 216, + } + } + 609 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 216, + } + } + 610 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 216, + } + } + 611 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 10, + nonterminal_produced: 216, + } + } + 612 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 216, + } + } + 613 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 216, + } + } + 614 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 216, + } + } + 615 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 216, + } + } + 616 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 216, + } + } + 617 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 216, + } + } + 618 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 216, + } + } + 619 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 216, + } + } + 620 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 216, + } + } + 621 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 216, + } + } + 622 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 216, + } + } + 623 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 216, + } + } + 624 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 216, + } + } + 625 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 216, + } + } + 626 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 216, + } + } + 627 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 216, + } + } + 628 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 216, + } + } + 629 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 216, + } + } + 630 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 216, + } + } + 631 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 216, + } + } + 632 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 216, + } + } + 633 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 216, + } + } + 634 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 216, + } + } + 635 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 10, + nonterminal_produced: 216, + } + } + 636 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 216, + } + } + 637 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 216, + } + } + 638 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 216, + } + } + 639 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 216, + } + } + 640 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 216, + } + } + 641 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 216, + } + } + 642 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 216, + } + } + 643 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 216, + } + } + 644 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 216, + } + } + 645 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 216, + } + } + 646 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 216, + } + } + 647 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 216, + } + } + 648 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 216, + } + } + 649 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 216, + } + } + 650 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 216, + } + } + 651 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 216, + } + } + 652 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 216, + } + } + 653 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 216, + } + } + 654 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 216, + } + } + 655 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 216, + } + } + 656 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 216, + } + } + 657 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 216, + } + } + 658 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 216, + } + } + 659 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 216, + } + } + 660 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 216, + } + } + 661 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 216, + } + } + 662 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 216, + } + } + 663 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 216, + } + } + 664 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 216, + } + } + 665 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 216, + } + } + 666 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 216, + } + } + 667 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 216, + } + } + 668 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 216, + } + } + 669 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 216, + } + } + 670 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 216, + } + } + 671 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 216, + } + } + 672 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 216, + } + } + 673 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 216, + } + } + 674 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 216, + } + } + 675 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 216, + } + } + 676 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 216, + } + } + 677 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 216, + } + } + 678 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 217, + } + } + 679 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 217, + } + } + 680 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 10, + nonterminal_produced: 217, + } + } + 681 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 217, + } + } + 682 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 217, + } + } + 683 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 217, + } + } + 684 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 217, + } + } + 685 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 10, + nonterminal_produced: 217, + } + } + 686 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 11, + nonterminal_produced: 217, + } + } + 687 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 217, + } + } + 688 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 217, + } + } + 689 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 10, + nonterminal_produced: 217, + } + } + 690 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 217, + } + } + 691 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 217, + } + } + 692 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 217, + } + } + 693 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 217, + } + } + 694 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 217, + } + } + 695 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 217, + } + } + 696 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 217, + } + } + 697 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 217, + } + } + 698 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 217, + } + } + 699 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 217, + } + } + 700 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 217, + } + } + 701 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 217, + } + } + 702 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 217, + } + } + 703 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 217, + } + } + 704 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 217, + } + } + 705 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 217, + } + } + 706 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 217, + } + } + 707 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 217, + } + } + 708 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 217, + } + } + 709 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 217, + } + } + 710 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 217, + } + } + 711 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 217, + } + } + 712 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 217, + } + } + 713 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 10, + nonterminal_produced: 217, + } + } + 714 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 217, + } + } + 715 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 217, + } + } + 716 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 9, + nonterminal_produced: 217, + } + } + 717 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 217, + } + } + 718 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 217, + } + } + 719 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 217, + } + } + 720 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 217, + } + } + 721 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 217, + } + } + 722 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 217, + } + } + 723 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 217, + } + } + 724 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 217, + } + } + 725 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 8, + nonterminal_produced: 217, + } + } + 726 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 217, + } + } + 727 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 217, + } + } + 728 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 217, + } + } + 729 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 217, + } + } + 730 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 217, + } + } 731 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 213, + states_to_pop: 4, + nonterminal_produced: 217, } } 732 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 214, + states_to_pop: 4, + nonterminal_produced: 217, } } 733 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 214, + states_to_pop: 6, + nonterminal_produced: 217, } } 734 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 215, + states_to_pop: 7, + nonterminal_produced: 217, } } 735 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 215, + states_to_pop: 3, + nonterminal_produced: 217, } } 736 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 215, + states_to_pop: 5, + nonterminal_produced: 217, } } 737 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 215, + states_to_pop: 6, + nonterminal_produced: 217, } } 738 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 216, + states_to_pop: 5, + nonterminal_produced: 217, } } 739 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 216, + states_to_pop: 4, + nonterminal_produced: 217, } } 740 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 6, nonterminal_produced: 217, } } 741 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 5, nonterminal_produced: 217, } } 742 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 218, + states_to_pop: 3, + nonterminal_produced: 217, } } 743 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 218, + nonterminal_produced: 217, } } 744 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 4, - nonterminal_produced: 218, + nonterminal_produced: 217, } } 745 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 218, + states_to_pop: 3, + nonterminal_produced: 217, } } 746 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 218, + states_to_pop: 4, + nonterminal_produced: 217, } } 747 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 218, + states_to_pop: 3, + nonterminal_produced: 217, } } 748 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 218, + states_to_pop: 5, + nonterminal_produced: 217, } } 749 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 219, + states_to_pop: 4, + nonterminal_produced: 217, } } 750 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 219, + states_to_pop: 2, + nonterminal_produced: 217, } } 751 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 219, + states_to_pop: 1, + nonterminal_produced: 217, } } 752 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 220, + nonterminal_produced: 217, } } 753 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 220, + nonterminal_produced: 217, } } 754 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 220, + states_to_pop: 2, + nonterminal_produced: 217, } } 755 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 220, + states_to_pop: 1, + nonterminal_produced: 217, } } 756 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 220, + states_to_pop: 1, + nonterminal_produced: 218, } } 757 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 220, + states_to_pop: 0, + nonterminal_produced: 218, } } 758 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 220, + states_to_pop: 4, + nonterminal_produced: 219, } } 759 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 220, + states_to_pop: 3, + nonterminal_produced: 219, } } 760 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 220, + states_to_pop: 5, + nonterminal_produced: 219, } } 761 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 221, + states_to_pop: 4, + nonterminal_produced: 219, } } 762 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 221, + states_to_pop: 2, + nonterminal_produced: 219, } } 763 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 222, + states_to_pop: 1, + nonterminal_produced: 219, } } 764 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 222, + states_to_pop: 3, + nonterminal_produced: 219, } } 765 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 223, + states_to_pop: 2, + nonterminal_produced: 219, } } 766 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 223, + states_to_pop: 4, + nonterminal_produced: 220, } } 767 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 224, + states_to_pop: 3, + nonterminal_produced: 220, } } 768 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 224, + states_to_pop: 5, + nonterminal_produced: 220, } } 769 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 225, + states_to_pop: 4, + nonterminal_produced: 220, } } 770 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 225, + states_to_pop: 2, + nonterminal_produced: 220, } } 771 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 225, + states_to_pop: 1, + nonterminal_produced: 220, } } 772 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 225, + states_to_pop: 3, + nonterminal_produced: 220, } } 773 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 226, + states_to_pop: 2, + nonterminal_produced: 220, } } 774 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 226, + states_to_pop: 3, + nonterminal_produced: 221, } } 775 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 227, + nonterminal_produced: 221, } } 776 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 227, + nonterminal_produced: 222, } } 777 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 228, + nonterminal_produced: 223, } } 778 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 228, + states_to_pop: 1, + nonterminal_produced: 223, } } 779 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 229, + nonterminal_produced: 224, } } 780 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 229, + states_to_pop: 0, + nonterminal_produced: 224, } } 781 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 229, + states_to_pop: 2, + nonterminal_produced: 225, } } 782 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 229, + states_to_pop: 2, + nonterminal_produced: 225, } } 783 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 229, + nonterminal_produced: 225, } } 784 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 229, + nonterminal_produced: 225, } } 785 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 229, + states_to_pop: 3, + nonterminal_produced: 226, } } 786 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 229, + nonterminal_produced: 226, } } 787 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 229, + states_to_pop: 3, + nonterminal_produced: 227, } } 788 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 229, + nonterminal_produced: 227, } } 789 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 230, + states_to_pop: 3, + nonterminal_produced: 228, } } 790 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 231, + states_to_pop: 1, + nonterminal_produced: 228, } } 791 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 232, + states_to_pop: 0, + nonterminal_produced: 229, } } 792 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 232, + states_to_pop: 2, + nonterminal_produced: 229, } } 793 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 233, + states_to_pop: 4, + nonterminal_produced: 229, } } 794 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 233, + states_to_pop: 5, + nonterminal_produced: 229, } } 795 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 234, + states_to_pop: 3, + nonterminal_produced: 229, } } 796 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 235, + states_to_pop: 4, + nonterminal_produced: 229, } } 797 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 235, + states_to_pop: 2, + nonterminal_produced: 229, } } 798 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 236, + states_to_pop: 1, + nonterminal_produced: 230, } } 799 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 4, - nonterminal_produced: 236, + nonterminal_produced: 230, } } 800 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 236, + nonterminal_produced: 230, } } 801 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 236, + nonterminal_produced: 231, } } 802 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 236, + states_to_pop: 2, + nonterminal_produced: 231, } } 803 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 236, + states_to_pop: 4, + nonterminal_produced: 231, } } 804 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 236, + states_to_pop: 5, + nonterminal_produced: 231, } } 805 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 236, + states_to_pop: 4, + nonterminal_produced: 231, } } 806 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 236, + nonterminal_produced: 231, } } 807 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 236, + states_to_pop: 2, + nonterminal_produced: 231, } } 808 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 237, + states_to_pop: 4, + nonterminal_produced: 231, } } 809 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 237, + states_to_pop: 3, + nonterminal_produced: 231, } } 810 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 237, + states_to_pop: 2, + nonterminal_produced: 232, } } 811 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 237, + states_to_pop: 1, + nonterminal_produced: 232, } } 812 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 237, + states_to_pop: 3, + nonterminal_produced: 233, } } 813 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 237, + states_to_pop: 1, + nonterminal_produced: 233, } } 814 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 237, + states_to_pop: 3, + nonterminal_produced: 234, } } 815 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 237, + states_to_pop: 1, + nonterminal_produced: 234, } } 816 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 237, + states_to_pop: 3, + nonterminal_produced: 235, } } 817 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 238, + nonterminal_produced: 235, } } 818 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 238, + states_to_pop: 1, + nonterminal_produced: 236, } } 819 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 238, + states_to_pop: 1, + nonterminal_produced: 236, } } 820 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 238, + states_to_pop: 5, + nonterminal_produced: 237, } } 821 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 239, + states_to_pop: 6, + nonterminal_produced: 237, } } 822 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 4, - nonterminal_produced: 239, + nonterminal_produced: 237, } } 823 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 239, + states_to_pop: 5, + nonterminal_produced: 237, } } 824 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 239, + states_to_pop: 1, + nonterminal_produced: 238, } } 825 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 239, + states_to_pop: 2, + nonterminal_produced: 238, } } 826 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 240, + states_to_pop: 2, + nonterminal_produced: 239, } } 827 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 240, + nonterminal_produced: 239, } } 828 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 241, + states_to_pop: 1, + nonterminal_produced: 240, } } 829 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 241, + states_to_pop: 0, + nonterminal_produced: 240, } } 830 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 242, + states_to_pop: 1, + nonterminal_produced: 241, } } 831 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 242, + nonterminal_produced: 241, } } 832 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 242, + nonterminal_produced: 241, } } 833 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 243, + nonterminal_produced: 241, } } 834 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 243, + states_to_pop: 1, + nonterminal_produced: 241, } } 835 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 244, + states_to_pop: 1, + nonterminal_produced: 241, } } 836 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 244, + nonterminal_produced: 241, } } 837 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 244, + nonterminal_produced: 241, } } 838 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 245, + nonterminal_produced: 241, } } 839 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 246, + nonterminal_produced: 241, } } 840 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 246, + states_to_pop: 1, + nonterminal_produced: 241, } } 841 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 247, + states_to_pop: 2, + nonterminal_produced: 242, } } 842 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 247, + states_to_pop: 2, + nonterminal_produced: 243, } } 843 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 248, + states_to_pop: 3, + nonterminal_produced: 244, } } 844 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 248, + nonterminal_produced: 244, } } 845 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 249, + nonterminal_produced: 245, } } 846 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 250, + states_to_pop: 0, + nonterminal_produced: 245, } } 847 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 250, + nonterminal_produced: 246, } } 848 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 251, + states_to_pop: 1, + nonterminal_produced: 247, } } 849 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 251, + states_to_pop: 0, + nonterminal_produced: 247, } } 850 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 251, + nonterminal_produced: 248, } } 851 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 252, + states_to_pop: 4, + nonterminal_produced: 248, } } 852 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 252, + states_to_pop: 2, + nonterminal_produced: 248, } } 853 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 252, + states_to_pop: 3, + nonterminal_produced: 248, } } 854 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 252, + states_to_pop: 1, + nonterminal_produced: 248, } } 855 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 252, + states_to_pop: 2, + nonterminal_produced: 248, } } 856 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 252, + states_to_pop: 4, + nonterminal_produced: 248, } } 857 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 252, + states_to_pop: 5, + nonterminal_produced: 248, } } 858 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 252, + states_to_pop: 3, + nonterminal_produced: 248, } } 859 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 252, + states_to_pop: 4, + nonterminal_produced: 248, } } 860 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 253, + states_to_pop: 1, + nonterminal_produced: 249, } } 861 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 253, + states_to_pop: 4, + nonterminal_produced: 249, } } 862 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 254, + nonterminal_produced: 249, } } 863 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 254, + nonterminal_produced: 249, } } 864 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 255, + states_to_pop: 2, + nonterminal_produced: 249, } } 865 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 255, + nonterminal_produced: 249, } } 866 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 256, + states_to_pop: 2, + nonterminal_produced: 249, } } 867 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 256, + states_to_pop: 2, + nonterminal_produced: 249, } } 868 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 257, + nonterminal_produced: 249, } } 869 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 258, + states_to_pop: 1, + nonterminal_produced: 250, } } 870 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 258, + states_to_pop: 2, + nonterminal_produced: 250, } } 871 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 259, + states_to_pop: 2, + nonterminal_produced: 250, } } 872 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 259, + nonterminal_produced: 250, } } 873 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 259, + states_to_pop: 3, + nonterminal_produced: 251, } } 874 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 259, + states_to_pop: 4, + nonterminal_produced: 251, } } 875 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 260, + states_to_pop: 2, + nonterminal_produced: 251, } } 876 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 260, + nonterminal_produced: 251, } } 877 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 261, + states_to_pop: 4, + nonterminal_produced: 251, } } 878 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 261, + states_to_pop: 3, + nonterminal_produced: 252, } } 879 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 262, + states_to_pop: 1, + nonterminal_produced: 252, } } 880 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 262, + states_to_pop: 3, + nonterminal_produced: 253, } } 881 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 263, + nonterminal_produced: 253, } } 882 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 263, + states_to_pop: 3, + nonterminal_produced: 254, } } 883 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 263, + nonterminal_produced: 254, } } 884 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 264, + states_to_pop: 5, + nonterminal_produced: 255, } } 885 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 265, + nonterminal_produced: 255, } } 886 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 266, + states_to_pop: 1, + nonterminal_produced: 255, } } 887 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 266, + states_to_pop: 1, + nonterminal_produced: 256, } } 888 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 267, + states_to_pop: 0, + nonterminal_produced: 256, } } 889 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 267, + states_to_pop: 5, + nonterminal_produced: 257, } } 890 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 268, + states_to_pop: 1, + nonterminal_produced: 257, } } 891 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 269, + nonterminal_produced: 257, } } 892 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 269, + states_to_pop: 1, + nonterminal_produced: 258, } } 893 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 270, + states_to_pop: 1, + nonterminal_produced: 259, } } 894 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 270, + states_to_pop: 0, + nonterminal_produced: 259, } } 895 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 270, + states_to_pop: 1, + nonterminal_produced: 260, } } 896 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 270, + states_to_pop: 1, + nonterminal_produced: 260, } } 897 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 270, + states_to_pop: 1, + nonterminal_produced: 261, } } 898 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 270, + states_to_pop: 1, + nonterminal_produced: 261, } } 899 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 270, + states_to_pop: 1, + nonterminal_produced: 262, } } 900 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 270, + states_to_pop: 1, + nonterminal_produced: 263, } } 901 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 270, + states_to_pop: 1, + nonterminal_produced: 263, } } 902 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 270, + states_to_pop: 2, + nonterminal_produced: 264, } } 903 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 270, + states_to_pop: 2, + nonterminal_produced: 264, } } 904 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 270, + states_to_pop: 3, + nonterminal_produced: 264, } } 905 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 271, + states_to_pop: 10, + nonterminal_produced: 265, } } 906 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 272, + states_to_pop: 7, + nonterminal_produced: 265, } } 907 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 272, + states_to_pop: 7, + nonterminal_produced: 265, } } 908 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 273, + states_to_pop: 4, + nonterminal_produced: 265, } } 909 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 273, + states_to_pop: 10, + nonterminal_produced: 265, } } 910 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 274, + states_to_pop: 7, + nonterminal_produced: 265, } } 911 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 274, + states_to_pop: 7, + nonterminal_produced: 265, } } 912 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 275, + states_to_pop: 4, + nonterminal_produced: 265, } } 913 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 275, + states_to_pop: 6, + nonterminal_produced: 265, } } 914 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 266, + } + } + 915 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 266, + } + } + 916 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 267, + } + } + 917 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 267, + } + } + 918 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 268, + } + } + 919 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 268, + } + } + 920 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 269, + } + } + 921 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 269, + } + } + 922 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 270, + } + } + 923 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 271, + } + } + 924 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 271, + } + } + 925 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 272, + } + } + 926 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 272, + } + } + 927 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 272, + } + } + 928 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 272, + } + } + 929 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 273, + } + } + 930 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 273, + } + } + 931 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 274, + } + } + 932 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 0, + nonterminal_produced: 274, + } + } + 933 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 275, } } - 915 => __state_machine::SimulatedReduce::Accept, + 934 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 275, + } + } + 935 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 276, + } + } + 936 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 276, + } + } + 937 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 276, + } + } + 938 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 277, + } + } + 939 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 278, + } + } + 940 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 279, + } + } + 941 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 279, + } + } + 942 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 280, + } + } + 943 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 280, + } + } + 944 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 281, + } + } + 945 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 282, + } + } + 946 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 282, + } + } + 947 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 283, + } + } + 948 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 283, + } + } + 949 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 283, + } + } + 950 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 283, + } + } + 951 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 7, + nonterminal_produced: 283, + } + } + 952 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 283, + } + } + 953 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 283, + } + } + 954 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 283, + } + } + 955 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 6, + nonterminal_produced: 283, + } + } + 956 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 283, + } + } + 957 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 283, + } + } + 958 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 283, + } + } + 959 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 284, + } + } + 960 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 5, + nonterminal_produced: 285, + } + } + 961 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 285, + } + } + 962 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 286, + } + } + 963 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 286, + } + } + 964 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 287, + } + } + 965 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 287, + } + } + 966 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 288, + } + } + 967 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 288, + } + } + 968 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 289, + } + } + 969 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 289, + } + } + 970 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 289, + } + } + 971 => __state_machine::SimulatedReduce::Accept, _ => panic!("invalid reduction index {}", __reduce_index) } } @@ -11579,7 +12389,7 @@ mod __parse__Top { __reduce21(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 22 => { - // ("," >) = ",", "*", StarTypedParameter, ",", KwargParameter => ActionFn(943); + // ("," >) = ",", "*", StarTypedParameter, ",", KwargParameter => ActionFn(1026); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -11588,7 +12398,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action943::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1026::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11596,7 +12406,7 @@ mod __parse__Top { (5, 13) } 23 => { - // ("," >) = ",", "*", ",", KwargParameter => ActionFn(944); + // ("," >) = ",", "*", ",", KwargParameter => ActionFn(1027); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant8(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -11604,7 +12414,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action944::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1027::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11612,7 +12422,7 @@ mod __parse__Top { (4, 13) } 24 => { - // ("," >) = ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(945); + // ("," >) = ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1028); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -11622,7 +12432,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action945::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1028::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11630,7 +12440,7 @@ mod __parse__Top { (6, 13) } 25 => { - // ("," >) = ",", "*", ("," >)+, ",", KwargParameter => ActionFn(946); + // ("," >) = ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1029); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -11639,7 +12449,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action946::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1029::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11647,14 +12457,14 @@ mod __parse__Top { (5, 13) } 26 => { - // ("," >) = ",", "*", StarTypedParameter => ActionFn(947); + // ("," >) = ",", "*", StarTypedParameter => ActionFn(1030); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action947::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1030::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11662,13 +12472,13 @@ mod __parse__Top { (3, 13) } 27 => { - // ("," >) = ",", "*" => ActionFn(948); + // ("," >) = ",", "*" => ActionFn(1031); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = match super::__action948::<>(mode, __sym0, __sym1) { + let __nt = match super::__action1031::<>(mode, __sym0, __sym1) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11676,7 +12486,7 @@ mod __parse__Top { (2, 13) } 28 => { - // ("," >) = ",", "*", StarTypedParameter, ("," >)+ => ActionFn(949); + // ("," >) = ",", "*", StarTypedParameter, ("," >)+ => ActionFn(1032); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant11(__symbols); let __sym2 = __pop_Variant63(__symbols); @@ -11684,7 +12494,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action949::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1032::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11692,14 +12502,14 @@ mod __parse__Top { (4, 13) } 29 => { - // ("," >) = ",", "*", ("," >)+ => ActionFn(950); + // ("," >) = ",", "*", ("," >)+ => ActionFn(1033); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant11(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action950::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1033::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11707,7 +12517,7 @@ mod __parse__Top { (3, 13) } 30 => { - // ("," >)? = ",", "*", StarTypedParameter, ",", KwargParameter => ActionFn(967); + // ("," >)? = ",", "*", StarTypedParameter, ",", KwargParameter => ActionFn(1050); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -11716,7 +12526,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action967::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1050::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11724,7 +12534,7 @@ mod __parse__Top { (5, 14) } 31 => { - // ("," >)? = ",", "*", ",", KwargParameter => ActionFn(968); + // ("," >)? = ",", "*", ",", KwargParameter => ActionFn(1051); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant8(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -11732,7 +12542,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action968::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1051::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11740,7 +12550,7 @@ mod __parse__Top { (4, 14) } 32 => { - // ("," >)? = ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(969); + // ("," >)? = ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1052); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -11750,7 +12560,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action969::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1052::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11758,7 +12568,7 @@ mod __parse__Top { (6, 14) } 33 => { - // ("," >)? = ",", "*", ("," >)+, ",", KwargParameter => ActionFn(970); + // ("," >)? = ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1053); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -11767,7 +12577,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action970::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1053::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11775,14 +12585,14 @@ mod __parse__Top { (5, 14) } 34 => { - // ("," >)? = ",", "*", StarTypedParameter => ActionFn(971); + // ("," >)? = ",", "*", StarTypedParameter => ActionFn(1054); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action971::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1054::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11790,13 +12600,13 @@ mod __parse__Top { (3, 14) } 35 => { - // ("," >)? = ",", "*" => ActionFn(972); + // ("," >)? = ",", "*" => ActionFn(1055); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = match super::__action972::<>(mode, __sym0, __sym1) { + let __nt = match super::__action1055::<>(mode, __sym0, __sym1) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11804,7 +12614,7 @@ mod __parse__Top { (2, 14) } 36 => { - // ("," >)? = ",", "*", StarTypedParameter, ("," >)+ => ActionFn(973); + // ("," >)? = ",", "*", StarTypedParameter, ("," >)+ => ActionFn(1056); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant11(__symbols); let __sym2 = __pop_Variant63(__symbols); @@ -11812,7 +12622,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action973::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1056::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11820,14 +12630,14 @@ mod __parse__Top { (4, 14) } 37 => { - // ("," >)? = ",", "*", ("," >)+ => ActionFn(974); + // ("," >)? = ",", "*", ("," >)+ => ActionFn(1057); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant11(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action974::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1057::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11838,7 +12648,7 @@ mod __parse__Top { __reduce38(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 39 => { - // ("," >) = ",", "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1003); + // ("," >) = ",", "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1086); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -11847,7 +12657,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1003::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1086::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11855,7 +12665,7 @@ mod __parse__Top { (5, 15) } 40 => { - // ("," >) = ",", "*", ",", KwargParameter => ActionFn(1004); + // ("," >) = ",", "*", ",", KwargParameter => ActionFn(1087); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant8(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -11863,7 +12673,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1004::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1087::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11871,7 +12681,7 @@ mod __parse__Top { (4, 15) } 41 => { - // ("," >) = ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1005); + // ("," >) = ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1088); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -11881,7 +12691,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1005::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1088::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11889,7 +12699,7 @@ mod __parse__Top { (6, 15) } 42 => { - // ("," >) = ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1006); + // ("," >) = ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1089); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -11898,7 +12708,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1006::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1089::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11906,14 +12716,14 @@ mod __parse__Top { (5, 15) } 43 => { - // ("," >) = ",", "*", StarUntypedParameter => ActionFn(1007); + // ("," >) = ",", "*", StarUntypedParameter => ActionFn(1090); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1007::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1090::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11921,13 +12731,13 @@ mod __parse__Top { (3, 15) } 44 => { - // ("," >) = ",", "*" => ActionFn(1008); + // ("," >) = ",", "*" => ActionFn(1091); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = match super::__action1008::<>(mode, __sym0, __sym1) { + let __nt = match super::__action1091::<>(mode, __sym0, __sym1) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11935,7 +12745,7 @@ mod __parse__Top { (2, 15) } 45 => { - // ("," >) = ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1009); + // ("," >) = ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1092); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant11(__symbols); let __sym2 = __pop_Variant63(__symbols); @@ -11943,7 +12753,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1009::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1092::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11951,14 +12761,14 @@ mod __parse__Top { (4, 15) } 46 => { - // ("," >) = ",", "*", ("," >)+ => ActionFn(1010); + // ("," >) = ",", "*", ("," >)+ => ActionFn(1093); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant11(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1010::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1093::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11966,7 +12776,7 @@ mod __parse__Top { (3, 15) } 47 => { - // ("," >)? = ",", "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1027); + // ("," >)? = ",", "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1110); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -11975,7 +12785,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1027::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1110::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11983,7 +12793,7 @@ mod __parse__Top { (5, 16) } 48 => { - // ("," >)? = ",", "*", ",", KwargParameter => ActionFn(1028); + // ("," >)? = ",", "*", ",", KwargParameter => ActionFn(1111); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant8(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -11991,7 +12801,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1028::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1111::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -11999,7 +12809,7 @@ mod __parse__Top { (4, 16) } 49 => { - // ("," >)? = ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1029); + // ("," >)? = ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1112); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -12009,7 +12819,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1029::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1112::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -12017,7 +12827,7 @@ mod __parse__Top { (6, 16) } 50 => { - // ("," >)? = ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1030); + // ("," >)? = ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1113); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -12026,7 +12836,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1030::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1113::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -12034,14 +12844,14 @@ mod __parse__Top { (5, 16) } 51 => { - // ("," >)? = ",", "*", StarUntypedParameter => ActionFn(1031); + // ("," >)? = ",", "*", StarUntypedParameter => ActionFn(1114); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1031::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1114::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -12049,13 +12859,13 @@ mod __parse__Top { (3, 16) } 52 => { - // ("," >)? = ",", "*" => ActionFn(1032); + // ("," >)? = ",", "*" => ActionFn(1115); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = match super::__action1032::<>(mode, __sym0, __sym1) { + let __nt = match super::__action1115::<>(mode, __sym0, __sym1) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -12063,7 +12873,7 @@ mod __parse__Top { (2, 16) } 53 => { - // ("," >)? = ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1033); + // ("," >)? = ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1116); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant11(__symbols); let __sym2 = __pop_Variant63(__symbols); @@ -12071,7 +12881,7 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1033::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1116::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -12079,14 +12889,14 @@ mod __parse__Top { (4, 16) } 54 => { - // ("," >)? = ",", "*", ("," >)+ => ActionFn(1034); + // ("," >)? = ",", "*", ("," >)+ => ActionFn(1117); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant11(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1034::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1117::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; @@ -12406,36 +13216,51 @@ mod __parse__Top { __reduce158(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 159 => { - // Arguments = "(", FunctionArgument, ")" => ActionFn(1510); + __reduce159(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 160 => { + __reduce160(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 161 => { + __reduce161(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 162 => { + __reduce162(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 163 => { + __reduce163(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 164 => { + // Arguments = "(", FunctionArgument, ")" => ActionFn(1645); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant30(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1510::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1645::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant49(__nt), __end)); - (3, 83) + (3, 86) } - 160 => { - // Arguments = "(", ")" => ActionFn(1511); + 165 => { + // Arguments = "(", ")" => ActionFn(1646); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = match super::__action1511::<>(mode, __sym0, __sym1) { + let __nt = match super::__action1646::<>(mode, __sym0, __sym1) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant49(__nt), __end)); - (2, 83) + (2, 86) } - 161 => { - // Arguments = "(", ( ",")+, FunctionArgument, ")" => ActionFn(1512); + 166 => { + // Arguments = "(", ( ",")+, FunctionArgument, ")" => ActionFn(1647); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant30(__symbols); @@ -12443,60 +13268,33 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1512::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1647::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant49(__nt), __end)); - (4, 83) + (4, 86) } - 162 => { - // Arguments = "(", ( ",")+, ")" => ActionFn(1513); + 167 => { + // Arguments = "(", ( ",")+, ")" => ActionFn(1648); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant31(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1513::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1648::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant49(__nt), __end)); - (3, 83) - } - 163 => { - __reduce163(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 164 => { - __reduce164(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 165 => { - __reduce165(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 166 => { - __reduce166(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 167 => { - __reduce167(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + (3, 86) } 168 => { __reduce168(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 169 => { - // AsPattern = OrPattern, "as", Identifier => ActionFn(1189); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant34(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1189::<>(mode, __sym0, __sym1, __sym2) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (3, 87) + __reduce169(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 170 => { __reduce170(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -12517,7 +13315,19 @@ mod __parse__Top { __reduce175(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 176 => { - __reduce176(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // AsPattern = OrPattern, "as", Identifier => ActionFn(1288); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant34(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1288::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (3, 91) } 177 => { __reduce177(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -12529,16 +13339,7 @@ mod __parse__Top { __reduce179(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 180 => { - // Atom<"all"> = (@L string @R)+ => ActionFn(710); - let __sym0 = __pop_Variant42(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action710::<>(mode, __sym0) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 93) + __reduce180(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 181 => { __reduce181(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -12559,10 +13360,40 @@ mod __parse__Top { __reduce186(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 187 => { - __reduce187(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"All"> = (@L string @R)+ => ActionFn(762); + let __sym0 = __pop_Variant42(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action762::<>(mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 97) } 188 => { - // Atom<"all"> = "(", OneOrMore>, ",", NamedOrStarExpr, ",", ")" => ActionFn(1198); + __reduce188(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 189 => { + __reduce189(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 190 => { + __reduce190(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 191 => { + __reduce191(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 192 => { + __reduce192(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 193 => { + __reduce193(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 194 => { + __reduce194(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 195 => { + // Atom<"All"> = "(", OneOrMore>, ",", NamedOrStarExpr, ",", ")" => ActionFn(1297); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -12572,15 +13403,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1198::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1297::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (6, 93) + (6, 97) } - 189 => { - // Atom<"all"> = "(", NamedOrStarExpr, ",", ")" => ActionFn(1199); + 196 => { + // Atom<"All"> = "(", NamedOrStarExpr, ",", ")" => ActionFn(1298); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -12588,15 +13419,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1199::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1298::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 93) + (4, 97) } - 190 => { - // Atom<"all"> = "(", OneOrMore>, ",", NamedOrStarExpr, ("," )+, ",", ")" => ActionFn(1200); + 197 => { + // Atom<"All"> = "(", OneOrMore>, ",", NamedOrStarExpr, ("," )+, ",", ")" => ActionFn(1299); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -12607,15 +13438,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1200::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1299::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (7, 93) + (7, 97) } - 191 => { - // Atom<"all"> = "(", NamedOrStarExpr, ("," )+, ",", ")" => ActionFn(1201); + 198 => { + // Atom<"All"> = "(", NamedOrStarExpr, ("," )+, ",", ")" => ActionFn(1300); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -12624,15 +13455,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1201::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1300::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (5, 93) + (5, 97) } - 192 => { - // Atom<"all"> = "(", OneOrMore>, ",", NamedOrStarExpr, ")" => ActionFn(1202); + 199 => { + // Atom<"All"> = "(", OneOrMore>, ",", NamedOrStarExpr, ")" => ActionFn(1301); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant14(__symbols); @@ -12641,30 +13472,30 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1202::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1301::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (5, 93) + (5, 97) } - 193 => { - // Atom<"all"> = "(", NamedOrStarExpr, ")" => ActionFn(1203); + 200 => { + // Atom<"All"> = "(", NamedOrStarExpr, ")" => ActionFn(1302); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1203::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1302::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 93) + (3, 97) } - 194 => { - // Atom<"all"> = "(", OneOrMore>, ",", NamedOrStarExpr, ("," )+, ")" => ActionFn(1204); + 201 => { + // Atom<"All"> = "(", OneOrMore>, ",", NamedOrStarExpr, ("," )+, ")" => ActionFn(1303); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant16(__symbols); @@ -12674,15 +13505,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1204::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1303::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (6, 93) + (6, 97) } - 195 => { - // Atom<"all"> = "(", NamedOrStarExpr, ("," )+, ")" => ActionFn(1205); + 202 => { + // Atom<"All"> = "(", NamedOrStarExpr, ("," )+, ")" => ActionFn(1304); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant16(__symbols); @@ -12690,46 +13521,12 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1205::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1304::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 93) - } - 196 => { - __reduce196(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 197 => { - __reduce197(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 198 => { - __reduce198(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 199 => { - // Atom<"all"> = "(", "**", Expression<"all">, ")" => ActionFn(1208); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1208::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 93) - } - 200 => { - __reduce200(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 201 => { - __reduce201(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 202 => { - __reduce202(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + (4, 97) } 203 => { __reduce203(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -12741,7 +13538,20 @@ mod __parse__Top { __reduce205(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 206 => { - __reduce206(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"All"> = "(", "**", Expression<"all">, ")" => ActionFn(1307); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1307::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 97) } 207 => { __reduce207(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -12750,16 +13560,7 @@ mod __parse__Top { __reduce208(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 209 => { - // Atom<"no-withitems"> = (@L string @R)+ => ActionFn(730); - let __sym0 = __pop_Variant42(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action730::<>(mode, __sym0) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 94) + __reduce209(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 210 => { __reduce210(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -12777,7 +13578,43 @@ mod __parse__Top { __reduce214(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 215 => { - // Atom<"no-withitems"> = "(", OneOrMore>, ",", NamedOrStarExpr, ",", ")" => ActionFn(1221); + __reduce215(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 216 => { + // Atom<"all"> = (@L string @R)+ => ActionFn(782); + let __sym0 = __pop_Variant42(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action782::<>(mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 98) + } + 217 => { + __reduce217(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 218 => { + __reduce218(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 219 => { + __reduce219(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 220 => { + __reduce220(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 221 => { + __reduce221(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 222 => { + __reduce222(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 223 => { + __reduce223(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 224 => { + // Atom<"all"> = "(", OneOrMore>, ",", NamedOrStarExpr, ",", ")" => ActionFn(1322); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -12787,15 +13624,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1221::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1322::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (6, 94) + (6, 98) } - 216 => { - // Atom<"no-withitems"> = "(", NamedOrStarExpr, ",", ")" => ActionFn(1222); + 225 => { + // Atom<"all"> = "(", NamedOrStarExpr, ",", ")" => ActionFn(1323); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -12803,15 +13640,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1222::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1323::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 94) + (4, 98) } - 217 => { - // Atom<"no-withitems"> = "(", OneOrMore>, ",", NamedOrStarExpr, ("," )+, ",", ")" => ActionFn(1223); + 226 => { + // Atom<"all"> = "(", OneOrMore>, ",", NamedOrStarExpr, ("," )+, ",", ")" => ActionFn(1324); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -12822,15 +13659,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1223::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1324::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (7, 94) + (7, 98) } - 218 => { - // Atom<"no-withitems"> = "(", NamedOrStarExpr, ("," )+, ",", ")" => ActionFn(1224); + 227 => { + // Atom<"all"> = "(", NamedOrStarExpr, ("," )+, ",", ")" => ActionFn(1325); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -12839,15 +13676,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1224::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1325::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (5, 94) + (5, 98) } - 219 => { - // Atom<"no-withitems"> = "(", OneOrMore>, ",", NamedOrStarExpr, ")" => ActionFn(1225); + 228 => { + // Atom<"all"> = "(", OneOrMore>, ",", NamedOrStarExpr, ")" => ActionFn(1326); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant14(__symbols); @@ -12856,30 +13693,30 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1225::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1326::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (5, 94) + (5, 98) } - 220 => { - // Atom<"no-withitems"> = "(", NamedOrStarExpr, ")" => ActionFn(1226); + 229 => { + // Atom<"all"> = "(", NamedOrStarExpr, ")" => ActionFn(1327); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1226::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1327::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 94) + (3, 98) } - 221 => { - // Atom<"no-withitems"> = "(", OneOrMore>, ",", NamedOrStarExpr, ("," )+, ")" => ActionFn(1227); + 230 => { + // Atom<"all"> = "(", OneOrMore>, ",", NamedOrStarExpr, ("," )+, ")" => ActionFn(1328); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant16(__symbols); @@ -12889,15 +13726,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1227::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1328::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (6, 94) + (6, 98) } - 222 => { - // Atom<"no-withitems"> = "(", NamedOrStarExpr, ("," )+, ")" => ActionFn(1228); + 231 => { + // Atom<"all"> = "(", NamedOrStarExpr, ("," )+, ")" => ActionFn(1329); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant16(__symbols); @@ -12905,52 +13742,12 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1228::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1329::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 94) - } - 223 => { - __reduce223(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 224 => { - __reduce224(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 225 => { - __reduce225(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 226 => { - // Atom<"no-withitems"> = "(", "**", Expression<"all">, ")" => ActionFn(1231); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1231::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 94) - } - 227 => { - __reduce227(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 228 => { - __reduce228(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 229 => { - __reduce229(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 230 => { - __reduce230(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 231 => { - __reduce231(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + (4, 98) } 232 => { __reduce232(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -12962,7 +13759,20 @@ mod __parse__Top { __reduce234(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 235 => { - __reduce235(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"all"> = "(", "**", Expression<"all">, ")" => ActionFn(1332); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1332::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 98) } 236 => { __reduce236(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -12992,7 +13802,16 @@ mod __parse__Top { __reduce244(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 245 => { - __reduce245(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"no-withitems"> = (@L string @R)+ => ActionFn(802); + let __sym0 = __pop_Variant42(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action802::<>(mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 99) } 246 => { __reduce246(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13010,28 +13829,140 @@ mod __parse__Top { __reduce250(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 251 => { - __reduce251(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"no-withitems"> = "(", OneOrMore>, ",", NamedOrStarExpr, ",", ")" => ActionFn(1345); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant14(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = match super::__action1345::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (6, 99) } 252 => { - __reduce252(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"no-withitems"> = "(", NamedOrStarExpr, ",", ")" => ActionFn(1346); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1346::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 99) } 253 => { - __reduce253(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"no-withitems"> = "(", OneOrMore>, ",", NamedOrStarExpr, ("," )+, ",", ")" => ActionFn(1347); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant16(__symbols); + let __sym3 = __pop_Variant14(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = match super::__action1347::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (7, 99) } 254 => { - __reduce254(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"no-withitems"> = "(", NamedOrStarExpr, ("," )+, ",", ")" => ActionFn(1348); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant16(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = match super::__action1348::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (5, 99) } 255 => { - __reduce255(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"no-withitems"> = "(", OneOrMore>, ",", NamedOrStarExpr, ")" => ActionFn(1349); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant14(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = match super::__action1349::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (5, 99) } 256 => { - __reduce256(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"no-withitems"> = "(", NamedOrStarExpr, ")" => ActionFn(1350); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1350::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 99) } 257 => { - __reduce257(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"no-withitems"> = "(", OneOrMore>, ",", NamedOrStarExpr, ("," )+, ")" => ActionFn(1351); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant16(__symbols); + let __sym3 = __pop_Variant14(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = match super::__action1351::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (6, 99) } 258 => { - __reduce258(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"no-withitems"> = "(", NamedOrStarExpr, ("," )+, ")" => ActionFn(1352); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant16(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1352::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 99) } 259 => { __reduce259(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13043,7 +13974,20 @@ mod __parse__Top { __reduce261(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 262 => { - __reduce262(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Atom<"no-withitems"> = "(", "**", Expression<"all">, ")" => ActionFn(1355); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1355::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 99) } 263 => { __reduce263(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13604,59 +14548,16 @@ mod __parse__Top { __reduce448(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 449 => { - // LambdaDef = "lambda", ParameterList, ":", Test<"all"> => ActionFn(1680); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant14(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant45(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1680::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 163) + __reduce449(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 450 => { - // LambdaDef = "lambda", ":", Test<"all"> => ActionFn(1681); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1681::<>(mode, __sym0, __sym1, __sym2) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 163) + __reduce450(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 451 => { - // LineMagicExpr = line_magic => ActionFn(1305); - let __sym0 = __pop_Variant4(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action1305::<>(mode, __sym0) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 164) + __reduce451(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 452 => { - // LineMagicStatement = line_magic => ActionFn(1306); - let __sym0 = __pop_Variant4(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action1306::<>(mode, __sym0) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 165) + __reduce452(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 453 => { __reduce453(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13686,16 +14587,7 @@ mod __parse__Top { __reduce461(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 462 => { - // LiteralPattern = (@L string @R)+ => ActionFn(1312); - let __sym0 = __pop_Variant42(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action1312::<>(mode, __sym0) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 168) + __reduce462(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 463 => { __reduce463(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13716,16 +14608,7 @@ mod __parse__Top { __reduce468(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 469 => { - // MappingKey = (@L string @R)+ => ActionFn(831); - let __sym0 = __pop_Variant42(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action831::<>(mode, __sym0) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 169) + __reduce469(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 470 => { __reduce470(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13791,13 +14674,42 @@ mod __parse__Top { __reduce490(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 491 => { - __reduce491(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // IpyEscapeCommandExpr = ipy_escape_command => ActionFn(1434); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action1434::<>(mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 170) } 492 => { - __reduce492(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // IpyEscapeCommandStatement = ipy_escape_command => ActionFn(1435); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action1435::<>(mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (1, 171) } 493 => { - __reduce493(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // IpyHelpEndEscapeCommandStatement = Expression<"All">, ("?")+ => ActionFn(1436); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant21(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = match super::__action1436::<>(mode, __sym0, __sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (2, 172) } 494 => { __reduce494(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13812,10 +14724,35 @@ mod __parse__Top { __reduce497(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 498 => { - __reduce498(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // LambdaDef = "lambda", ParameterList, ":", Test<"all"> => ActionFn(1819); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant14(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant45(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1819::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 175) } 499 => { - __reduce499(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // LambdaDef = "lambda", ":", Test<"all"> => ActionFn(1820); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1820::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 175) } 500 => { __reduce500(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13845,7 +14782,16 @@ mod __parse__Top { __reduce508(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 509 => { - __reduce509(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // LiteralPattern = (@L string @R)+ => ActionFn(1443); + let __sym0 = __pop_Variant42(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action1443::<>(mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 178) } 510 => { __reduce510(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13866,7 +14812,16 @@ mod __parse__Top { __reduce515(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 516 => { - __reduce516(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // MappingKey = (@L string @R)+ => ActionFn(910); + let __sym0 = __pop_Variant42(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action910::<>(mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 179) } 517 => { __reduce517(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13977,1373 +14932,148 @@ mod __parse__Top { __reduce552(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 553 => { - // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ",", KwargParameter, "," => ActionFn(1560); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant8(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant63(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = match super::__action1560::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 206) + __reduce553(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 554 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ",", KwargParameter, "," => ActionFn(1561); - assert!(__symbols.len() >= 9); - let __sym8 = __pop_Variant0(__symbols); - let __sym7 = __pop_Variant8(__symbols); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant63(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym8.2; - let __nt = match super::__action1561::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 206) + __reduce554(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 555 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ",", KwargParameter, "," => ActionFn(1562); - assert!(__symbols.len() >= 10); - let __sym9 = __pop_Variant0(__symbols); - let __sym8 = __pop_Variant8(__symbols); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant63(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym9.2; - let __nt = match super::__action1562::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (10, 206) + __reduce555(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 556 => { - // ParameterList = OneOrMore>, ",", "*", ",", KwargParameter, "," => ActionFn(1563); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant8(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = match super::__action1563::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 206) + __reduce556(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 557 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ",", KwargParameter, "," => ActionFn(1564); - assert!(__symbols.len() >= 8); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant8(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym7.2; - let __nt = match super::__action1564::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 206) + __reduce557(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 558 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ",", KwargParameter, "," => ActionFn(1565); - assert!(__symbols.len() >= 9); - let __sym8 = __pop_Variant0(__symbols); - let __sym7 = __pop_Variant8(__symbols); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym8.2; - let __nt = match super::__action1565::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 206) + __reduce558(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 559 => { - // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1566); - assert!(__symbols.len() >= 8); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant8(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant11(__symbols); - let __sym3 = __pop_Variant63(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym7.2; - let __nt = match super::__action1566::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 206) + __reduce559(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 560 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1567); - assert!(__symbols.len() >= 10); - let __sym9 = __pop_Variant0(__symbols); - let __sym8 = __pop_Variant8(__symbols); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant11(__symbols); - let __sym5 = __pop_Variant63(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym9.2; - let __nt = match super::__action1567::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (10, 206) + __reduce560(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 561 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1568); - assert!(__symbols.len() >= 11); - let __sym10 = __pop_Variant0(__symbols); - let __sym9 = __pop_Variant8(__symbols); - let __sym8 = __pop_Variant0(__symbols); - let __sym7 = __pop_Variant11(__symbols); - let __sym6 = __pop_Variant63(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym10.2; - let __nt = match super::__action1568::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (11, 206) + __reduce561(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 562 => { - // ParameterList = OneOrMore>, ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1569); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant8(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = match super::__action1569::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 206) + __reduce562(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 563 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1570); - assert!(__symbols.len() >= 9); - let __sym8 = __pop_Variant0(__symbols); - let __sym7 = __pop_Variant8(__symbols); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant11(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym8.2; - let __nt = match super::__action1570::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 206) + __reduce563(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 564 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1571); - assert!(__symbols.len() >= 10); - let __sym9 = __pop_Variant0(__symbols); - let __sym8 = __pop_Variant8(__symbols); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant11(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym9.2; - let __nt = match super::__action1571::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (10, 206) + __reduce564(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 565 => { - // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, "," => ActionFn(1572); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant63(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action1572::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 206) + __reduce565(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 566 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, "," => ActionFn(1573); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant63(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = match super::__action1573::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 206) + __reduce566(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 567 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, "," => ActionFn(1574); - assert!(__symbols.len() >= 8); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant63(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym7.2; - let __nt = match super::__action1574::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 206) + __reduce567(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 568 => { - // ParameterList = OneOrMore>, ",", "*", "," => ActionFn(1575); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1575::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 206) + __reduce568(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 569 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", "," => ActionFn(1576); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = match super::__action1576::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 206) + __reduce569(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 570 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", "," => ActionFn(1577); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = match super::__action1577::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 206) + __reduce570(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 571 => { - // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ("," >)+, "," => ActionFn(1578); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant11(__symbols); - let __sym3 = __pop_Variant63(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = match super::__action1578::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 206) + __reduce571(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 572 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ("," >)+, "," => ActionFn(1579); - assert!(__symbols.len() >= 8); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant11(__symbols); - let __sym5 = __pop_Variant63(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym7.2; - let __nt = match super::__action1579::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 206) + __reduce572(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 573 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ("," >)+, "," => ActionFn(1580); - assert!(__symbols.len() >= 9); - let __sym8 = __pop_Variant0(__symbols); - let __sym7 = __pop_Variant11(__symbols); - let __sym6 = __pop_Variant63(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym8.2; - let __nt = match super::__action1580::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 206) + __reduce573(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 574 => { - // ParameterList = OneOrMore>, ",", "*", ("," >)+, "," => ActionFn(1581); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action1581::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 206) + __reduce574(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 575 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, "," => ActionFn(1582); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant11(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = match super::__action1582::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 206) + __reduce575(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 576 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, "," => ActionFn(1583); - assert!(__symbols.len() >= 8); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant11(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym7.2; - let __nt = match super::__action1583::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 206) + __reduce576(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 577 => { - // ParameterList = OneOrMore>, "," => ActionFn(1584); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = match super::__action1584::<>(mode, __sym0, __sym1) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (2, 206) + __reduce577(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 578 => { - // ParameterList = OneOrMore>, ",", "/", "," => ActionFn(1585); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1585::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 206) + __reduce578(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 579 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, "," => ActionFn(1586); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action1586::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 206) + __reduce579(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 580 => { - // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ",", KwargParameter => ActionFn(1587); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant8(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant63(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = match super::__action1587::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 206) + __reduce580(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 581 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ",", KwargParameter => ActionFn(1588); - assert!(__symbols.len() >= 8); - let __sym7 = __pop_Variant8(__symbols); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant63(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym7.2; - let __nt = match super::__action1588::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 206) + __reduce581(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 582 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ",", KwargParameter => ActionFn(1589); - assert!(__symbols.len() >= 9); - let __sym8 = __pop_Variant8(__symbols); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant63(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym8.2; - let __nt = match super::__action1589::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 206) + __reduce582(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 583 => { - // ParameterList = OneOrMore>, ",", "*", ",", KwargParameter => ActionFn(1590); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant8(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action1590::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 206) + __reduce583(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 584 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ",", KwargParameter => ActionFn(1591); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant8(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = match super::__action1591::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 206) + __reduce584(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 585 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ",", KwargParameter => ActionFn(1592); - assert!(__symbols.len() >= 8); - let __sym7 = __pop_Variant8(__symbols); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym7.2; - let __nt = match super::__action1592::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 206) + __reduce585(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 586 => { - // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1593); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant8(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant11(__symbols); - let __sym3 = __pop_Variant63(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = match super::__action1593::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 206) + __reduce586(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 587 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1594); - assert!(__symbols.len() >= 9); - let __sym8 = __pop_Variant8(__symbols); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant11(__symbols); - let __sym5 = __pop_Variant63(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym8.2; - let __nt = match super::__action1594::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 206) + __reduce587(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 588 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1595); - assert!(__symbols.len() >= 10); - let __sym9 = __pop_Variant8(__symbols); - let __sym8 = __pop_Variant0(__symbols); - let __sym7 = __pop_Variant11(__symbols); - let __sym6 = __pop_Variant63(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym9.2; - let __nt = match super::__action1595::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (10, 206) + __reduce588(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 589 => { - // ParameterList = OneOrMore>, ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1596); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant8(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = match super::__action1596::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 206) + __reduce589(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 590 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1597); - assert!(__symbols.len() >= 8); - let __sym7 = __pop_Variant8(__symbols); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant11(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym7.2; - let __nt = match super::__action1597::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 206) + __reduce590(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 591 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1598); - assert!(__symbols.len() >= 9); - let __sym8 = __pop_Variant8(__symbols); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant11(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym8.2; - let __nt = match super::__action1598::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 206) + __reduce591(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 592 => { - // ParameterList = OneOrMore>, ",", "*", StarTypedParameter => ActionFn(1599); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant63(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1599::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 206) + __reduce592(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 593 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter => ActionFn(1600); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant63(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = match super::__action1600::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 206) + __reduce593(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 594 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter => ActionFn(1601); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant63(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = match super::__action1601::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 206) + __reduce594(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 595 => { - // ParameterList = OneOrMore>, ",", "*" => ActionFn(1602); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1602::<>(mode, __sym0, __sym1, __sym2) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 206) + __reduce595(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 596 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*" => ActionFn(1603); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action1603::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 206) + __reduce596(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 597 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*" => ActionFn(1604); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = match super::__action1604::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 206) + __reduce597(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 598 => { - // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ("," >)+ => ActionFn(1605); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant11(__symbols); - let __sym3 = __pop_Variant63(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action1605::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 206) + __reduce598(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 599 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ("," >)+ => ActionFn(1606); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant11(__symbols); - let __sym5 = __pop_Variant63(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = match super::__action1606::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 206) + __reduce599(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 600 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ("," >)+ => ActionFn(1607); - assert!(__symbols.len() >= 8); - let __sym7 = __pop_Variant11(__symbols); - let __sym6 = __pop_Variant63(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym7.2; - let __nt = match super::__action1607::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 206) - } - 601 => { - // ParameterList = OneOrMore>, ",", "*", ("," >)+ => ActionFn(1608); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1608::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 206) - } - 602 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+ => ActionFn(1609); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant11(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = match super::__action1609::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 206) - } - 603 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+ => ActionFn(1610); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant11(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = match super::__action1610::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 206) - } - 604 => { - // ParameterList = OneOrMore> => ActionFn(1611); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action1611::<>(mode, __sym0) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (1, 206) - } - 605 => { - // ParameterList = OneOrMore>, ",", "/" => ActionFn(1612); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1612::<>(mode, __sym0, __sym1, __sym2) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 206) - } - 606 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+ => ActionFn(1613); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1613::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 206) - } - 607 => { - // ParameterList = OneOrMore>, ",", KwargParameter, "," => ActionFn(1614); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant8(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1614::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 206) - } - 608 => { - // ParameterList = OneOrMore>, ",", "/", ",", KwargParameter, "," => ActionFn(1615); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant8(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = match super::__action1615::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 206) - } - 609 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", KwargParameter, "," => ActionFn(1616); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant8(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = match super::__action1616::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 206) - } - 610 => { - // ParameterList = OneOrMore>, ",", KwargParameter => ActionFn(1617); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant8(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1617::<>(mode, __sym0, __sym1, __sym2) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 206) - } - 611 => { - // ParameterList = OneOrMore>, ",", "/", ",", KwargParameter => ActionFn(1618); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant8(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action1618::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 206) - } - 612 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", KwargParameter => ActionFn(1619); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant8(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = match super::__action1619::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 206) - } - 613 => { - // ParameterList = "*", StarTypedParameter, ",", KwargParameter, "," => ActionFn(1355); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant8(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action1355::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 206) - } - 614 => { - // ParameterList = "*", ",", KwargParameter, "," => ActionFn(1356); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant8(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1356::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 206) - } - 615 => { - // ParameterList = "*", StarTypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1357); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant8(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant11(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = match super::__action1357::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 206) - } - 616 => { - // ParameterList = "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1358); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant8(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action1358::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 206) - } - 617 => { - // ParameterList = "*", StarTypedParameter, "," => ActionFn(1359); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1359::<>(mode, __sym0, __sym1, __sym2) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 206) - } - 618 => { - // ParameterList = "*", "," => ActionFn(1360); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = match super::__action1360::<>(mode, __sym0, __sym1) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (2, 206) - } - 619 => { - // ParameterList = "*", StarTypedParameter, ("," >)+, "," => ActionFn(1361); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant11(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1361::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 206) - } - 620 => { - // ParameterList = "*", ("," >)+, "," => ActionFn(1362); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1362::<>(mode, __sym0, __sym1, __sym2) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 206) - } - 621 => { - // ParameterList = "*", StarTypedParameter, ",", KwargParameter => ActionFn(1363); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant8(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1363::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 206) - } - 622 => { - // ParameterList = "*", ",", KwargParameter => ActionFn(1364); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant8(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1364::<>(mode, __sym0, __sym1, __sym2) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 206) - } - 623 => { - // ParameterList = "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1365); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant8(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant11(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action1365::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 206) - } - 624 => { - // ParameterList = "*", ("," >)+, ",", KwargParameter => ActionFn(1366); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant8(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1366::<>(mode, __sym0, __sym1, __sym2, __sym3) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 206) - } - 625 => { - // ParameterList = "*", StarTypedParameter => ActionFn(1367); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = match super::__action1367::<>(mode, __sym0, __sym1) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (2, 206) - } - 626 => { - // ParameterList = "*" => ActionFn(1368); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action1368::<>(mode, __sym0) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (1, 206) - } - 627 => { - // ParameterList = "*", StarTypedParameter, ("," >)+ => ActionFn(1369); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant11(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1369::<>(mode, __sym0, __sym1, __sym2) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 206) - } - 628 => { - // ParameterList = "*", ("," >)+ => ActionFn(1370); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant11(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = match super::__action1370::<>(mode, __sym0, __sym1) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (2, 206) - } - 629 => { - __reduce629(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 630 => { - __reduce630(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 631 => { - // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ",", KwargParameter, "," => ActionFn(1620); + // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ",", KwargParameter, "," => ActionFn(1699); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant8(__symbols); @@ -15354,15 +15084,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1620::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1699::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 207) + (7, 216) } - 632 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ",", KwargParameter, "," => ActionFn(1621); + 601 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ",", KwargParameter, "," => ActionFn(1700); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant8(__symbols); @@ -15375,15 +15105,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = match super::__action1621::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + let __nt = match super::__action1700::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 207) + (9, 216) } - 633 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ",", KwargParameter, "," => ActionFn(1622); + 602 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ",", KwargParameter, "," => ActionFn(1701); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant8(__symbols); @@ -15397,15 +15127,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = match super::__action1622::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { + let __nt = match super::__action1701::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (10, 207) + (10, 216) } - 634 => { - // ParameterList = OneOrMore>, ",", "*", ",", KwargParameter, "," => ActionFn(1623); + 603 => { + // ParameterList = OneOrMore>, ",", "*", ",", KwargParameter, "," => ActionFn(1702); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant8(__symbols); @@ -15415,15 +15145,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1623::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1702::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 207) + (6, 216) } - 635 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ",", KwargParameter, "," => ActionFn(1624); + 604 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", ",", KwargParameter, "," => ActionFn(1703); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant8(__symbols); @@ -15435,15 +15165,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = match super::__action1624::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + let __nt = match super::__action1703::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 207) + (8, 216) } - 636 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ",", KwargParameter, "," => ActionFn(1625); + 605 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ",", KwargParameter, "," => ActionFn(1704); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant8(__symbols); @@ -15456,15 +15186,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = match super::__action1625::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + let __nt = match super::__action1704::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 207) + (9, 216) } - 637 => { - // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1626); + 606 => { + // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1705); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant8(__symbols); @@ -15476,15 +15206,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = match super::__action1626::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + let __nt = match super::__action1705::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 207) + (8, 216) } - 638 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1627); + 607 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1706); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant8(__symbols); @@ -15498,15 +15228,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = match super::__action1627::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { + let __nt = match super::__action1706::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (10, 207) + (10, 216) } - 639 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1628); + 608 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1707); assert!(__symbols.len() >= 11); let __sym10 = __pop_Variant0(__symbols); let __sym9 = __pop_Variant8(__symbols); @@ -15521,15 +15251,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym10.2; - let __nt = match super::__action1628::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10) { + let __nt = match super::__action1707::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (11, 207) + (11, 216) } - 640 => { - // ParameterList = OneOrMore>, ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1629); + 609 => { + // ParameterList = OneOrMore>, ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1708); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant8(__symbols); @@ -15540,15 +15270,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1629::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1708::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 207) + (7, 216) } - 641 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1630); + 610 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1709); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant8(__symbols); @@ -15561,15 +15291,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = match super::__action1630::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + let __nt = match super::__action1709::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 207) + (9, 216) } - 642 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1631); + 611 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1710); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant8(__symbols); @@ -15583,15 +15313,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = match super::__action1631::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { + let __nt = match super::__action1710::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (10, 207) + (10, 216) } - 643 => { - // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, "," => ActionFn(1632); + 612 => { + // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, "," => ActionFn(1711); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant63(__symbols); @@ -15600,15 +15330,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1632::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1711::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 207) + (5, 216) } - 644 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, "," => ActionFn(1633); + 613 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, "," => ActionFn(1712); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant63(__symbols); @@ -15619,15 +15349,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1633::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1712::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 207) + (7, 216) } - 645 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, "," => ActionFn(1634); + 614 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, "," => ActionFn(1713); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant63(__symbols); @@ -15639,15 +15369,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = match super::__action1634::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + let __nt = match super::__action1713::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 207) + (8, 216) } - 646 => { - // ParameterList = OneOrMore>, ",", "*", "," => ActionFn(1635); + 615 => { + // ParameterList = OneOrMore>, ",", "*", "," => ActionFn(1714); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -15655,15 +15385,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1635::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1714::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 207) + (4, 216) } - 647 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", "," => ActionFn(1636); + 616 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", "," => ActionFn(1715); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -15673,15 +15403,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1636::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1715::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 207) + (6, 216) } - 648 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", "," => ActionFn(1637); + 617 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", "," => ActionFn(1716); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -15692,15 +15422,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1637::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1716::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 207) + (7, 216) } - 649 => { - // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ("," >)+, "," => ActionFn(1638); + 618 => { + // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ("," >)+, "," => ActionFn(1717); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant11(__symbols); @@ -15710,15 +15440,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1638::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1717::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 207) + (6, 216) } - 650 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ("," >)+, "," => ActionFn(1639); + 619 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ("," >)+, "," => ActionFn(1718); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant11(__symbols); @@ -15730,15 +15460,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = match super::__action1639::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + let __nt = match super::__action1718::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 207) + (8, 216) } - 651 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ("," >)+, "," => ActionFn(1640); + 620 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ("," >)+, "," => ActionFn(1719); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant11(__symbols); @@ -15751,15 +15481,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = match super::__action1640::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + let __nt = match super::__action1719::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 207) + (9, 216) } - 652 => { - // ParameterList = OneOrMore>, ",", "*", ("," >)+, "," => ActionFn(1641); + 621 => { + // ParameterList = OneOrMore>, ",", "*", ("," >)+, "," => ActionFn(1720); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant11(__symbols); @@ -15768,15 +15498,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1641::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1720::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 207) + (5, 216) } - 653 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, "," => ActionFn(1642); + 622 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, "," => ActionFn(1721); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant11(__symbols); @@ -15787,15 +15517,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1642::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1721::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 207) + (7, 216) } - 654 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, "," => ActionFn(1643); + 623 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, "," => ActionFn(1722); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant11(__symbols); @@ -15807,29 +15537,29 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = match super::__action1643::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + let __nt = match super::__action1722::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 207) + (8, 216) } - 655 => { - // ParameterList = OneOrMore>, "," => ActionFn(1644); + 624 => { + // ParameterList = OneOrMore>, "," => ActionFn(1723); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = match super::__action1644::<>(mode, __sym0, __sym1) { + let __nt = match super::__action1723::<>(mode, __sym0, __sym1) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (2, 207) + (2, 216) } - 656 => { - // ParameterList = OneOrMore>, ",", "/", "," => ActionFn(1645); + 625 => { + // ParameterList = OneOrMore>, ",", "/", "," => ActionFn(1724); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -15837,15 +15567,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1645::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1724::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 207) + (4, 216) } - 657 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, "," => ActionFn(1646); + 626 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, "," => ActionFn(1725); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant11(__symbols); @@ -15854,15 +15584,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1646::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1725::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 207) + (5, 216) } - 658 => { - // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1647); + 627 => { + // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ",", KwargParameter => ActionFn(1726); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -15872,15 +15602,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1647::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1726::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 207) + (6, 216) } - 659 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1648); + 628 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ",", KwargParameter => ActionFn(1727); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant8(__symbols); let __sym6 = __pop_Variant0(__symbols); @@ -15892,15 +15622,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = match super::__action1648::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + let __nt = match super::__action1727::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 207) + (8, 216) } - 660 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1649); + 629 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ",", KwargParameter => ActionFn(1728); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant8(__symbols); let __sym7 = __pop_Variant0(__symbols); @@ -15913,15 +15643,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = match super::__action1649::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + let __nt = match super::__action1728::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 207) + (9, 216) } - 661 => { - // ParameterList = OneOrMore>, ",", "*", ",", KwargParameter => ActionFn(1650); + 630 => { + // ParameterList = OneOrMore>, ",", "*", ",", KwargParameter => ActionFn(1729); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -15930,15 +15660,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1650::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1729::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 207) + (5, 216) } - 662 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ",", KwargParameter => ActionFn(1651); + 631 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", ",", KwargParameter => ActionFn(1730); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant8(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -15949,15 +15679,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1651::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1730::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 207) + (7, 216) } - 663 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ",", KwargParameter => ActionFn(1652); + 632 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ",", KwargParameter => ActionFn(1731); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant8(__symbols); let __sym6 = __pop_Variant0(__symbols); @@ -15969,15 +15699,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = match super::__action1652::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + let __nt = match super::__action1731::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 207) + (8, 216) } - 664 => { - // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1653); + 633 => { + // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1732); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant8(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -15988,15 +15718,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1653::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1732::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 207) + (7, 216) } - 665 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1654); + 634 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1733); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant8(__symbols); let __sym7 = __pop_Variant0(__symbols); @@ -16009,15 +15739,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = match super::__action1654::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + let __nt = match super::__action1733::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 207) + (9, 216) } - 666 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1655); + 635 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1734); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant8(__symbols); let __sym8 = __pop_Variant0(__symbols); @@ -16031,15 +15761,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = match super::__action1655::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { + let __nt = match super::__action1734::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (10, 207) + (10, 216) } - 667 => { - // ParameterList = OneOrMore>, ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1656); + 636 => { + // ParameterList = OneOrMore>, ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1735); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -16049,15 +15779,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1656::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1735::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 207) + (6, 216) } - 668 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1657); + 637 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1736); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant8(__symbols); let __sym6 = __pop_Variant0(__symbols); @@ -16069,15 +15799,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = match super::__action1657::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + let __nt = match super::__action1736::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 207) + (8, 216) } - 669 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1658); + 638 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1737); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant8(__symbols); let __sym7 = __pop_Variant0(__symbols); @@ -16090,15 +15820,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = match super::__action1658::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + let __nt = match super::__action1737::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (9, 207) + (9, 216) } - 670 => { - // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter => ActionFn(1659); + 639 => { + // ParameterList = OneOrMore>, ",", "*", StarTypedParameter => ActionFn(1738); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16106,15 +15836,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1659::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1738::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 207) + (4, 216) } - 671 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter => ActionFn(1660); + 640 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter => ActionFn(1739); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -16124,15 +15854,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1660::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1739::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 207) + (6, 216) } - 672 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter => ActionFn(1661); + 641 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter => ActionFn(1740); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -16143,30 +15873,30 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1661::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1740::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 207) + (7, 216) } - 673 => { - // ParameterList = OneOrMore>, ",", "*" => ActionFn(1662); + 642 => { + // ParameterList = OneOrMore>, ",", "*" => ActionFn(1741); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1662::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1741::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 207) + (3, 216) } - 674 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*" => ActionFn(1663); + 643 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*" => ActionFn(1742); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -16175,15 +15905,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1663::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1742::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 207) + (5, 216) } - 675 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*" => ActionFn(1664); + 644 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*" => ActionFn(1743); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -16193,15 +15923,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1664::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1743::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 207) + (6, 216) } - 676 => { - // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1665); + 645 => { + // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ("," >)+ => ActionFn(1744); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant11(__symbols); let __sym3 = __pop_Variant63(__symbols); @@ -16210,15 +15940,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1665::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1744::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 207) + (5, 216) } - 677 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1666); + 646 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ("," >)+ => ActionFn(1745); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant11(__symbols); let __sym5 = __pop_Variant63(__symbols); @@ -16229,15 +15959,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1666::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1745::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 207) + (7, 216) } - 678 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1667); + 647 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ("," >)+ => ActionFn(1746); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant11(__symbols); let __sym6 = __pop_Variant63(__symbols); @@ -16249,15 +15979,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = match super::__action1667::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + let __nt = match super::__action1746::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (8, 207) + (8, 216) } - 679 => { - // ParameterList = OneOrMore>, ",", "*", ("," >)+ => ActionFn(1668); + 648 => { + // ParameterList = OneOrMore>, ",", "*", ("," >)+ => ActionFn(1747); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant11(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16265,15 +15995,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1668::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1747::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 207) + (4, 216) } - 680 => { - // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+ => ActionFn(1669); + 649 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+ => ActionFn(1748); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant11(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -16283,15 +16013,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1669::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1748::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 207) + (6, 216) } - 681 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+ => ActionFn(1670); + 650 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+ => ActionFn(1749); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant11(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -16302,42 +16032,42 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1670::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1749::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 207) + (7, 216) } - 682 => { - // ParameterList = OneOrMore> => ActionFn(1671); + 651 => { + // ParameterList = OneOrMore> => ActionFn(1750); let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = match super::__action1671::<>(mode, __sym0) { + let __nt = match super::__action1750::<>(mode, __sym0) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (1, 207) + (1, 216) } - 683 => { - // ParameterList = OneOrMore>, ",", "/" => ActionFn(1672); + 652 => { + // ParameterList = OneOrMore>, ",", "/" => ActionFn(1751); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1672::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1751::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 207) + (3, 216) } - 684 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+ => ActionFn(1673); + 653 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+ => ActionFn(1752); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant11(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16345,15 +16075,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1673::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1752::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 207) + (4, 216) } - 685 => { - // ParameterList = OneOrMore>, ",", KwargParameter, "," => ActionFn(1674); + 654 => { + // ParameterList = OneOrMore>, ",", KwargParameter, "," => ActionFn(1753); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant8(__symbols); @@ -16361,15 +16091,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1674::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1753::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 207) + (4, 216) } - 686 => { - // ParameterList = OneOrMore>, ",", "/", ",", KwargParameter, "," => ActionFn(1675); + 655 => { + // ParameterList = OneOrMore>, ",", "/", ",", KwargParameter, "," => ActionFn(1754); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant8(__symbols); @@ -16379,15 +16109,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1675::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1754::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 207) + (6, 216) } - 687 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", KwargParameter, "," => ActionFn(1676); + 656 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", KwargParameter, "," => ActionFn(1755); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant8(__symbols); @@ -16398,30 +16128,30 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = match super::__action1676::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + let __nt = match super::__action1755::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (7, 207) + (7, 216) } - 688 => { - // ParameterList = OneOrMore>, ",", KwargParameter => ActionFn(1677); + 657 => { + // ParameterList = OneOrMore>, ",", KwargParameter => ActionFn(1756); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1677::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1756::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 207) + (3, 216) } - 689 => { - // ParameterList = OneOrMore>, ",", "/", ",", KwargParameter => ActionFn(1678); + 658 => { + // ParameterList = OneOrMore>, ",", "/", ",", KwargParameter => ActionFn(1757); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -16430,15 +16160,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1678::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1757::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 207) + (5, 216) } - 690 => { - // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", KwargParameter => ActionFn(1679); + 659 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", KwargParameter => ActionFn(1758); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant8(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -16448,15 +16178,15 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1679::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1758::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 207) + (6, 216) } - 691 => { - // ParameterList = "*", StarUntypedParameter, ",", KwargParameter, "," => ActionFn(1393); + 660 => { + // ParameterList = "*", StarTypedParameter, ",", KwargParameter, "," => ActionFn(1486); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant8(__symbols); @@ -16465,15 +16195,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1393::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1486::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 207) + (5, 216) } - 692 => { - // ParameterList = "*", ",", KwargParameter, "," => ActionFn(1394); + 661 => { + // ParameterList = "*", ",", KwargParameter, "," => ActionFn(1487); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant8(__symbols); @@ -16481,15 +16211,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action1394::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1487::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 207) + (4, 216) } - 693 => { - // ParameterList = "*", StarUntypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1395); + 662 => { + // ParameterList = "*", StarTypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1488); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant8(__symbols); @@ -16499,15 +16229,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = match super::__action1395::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + let __nt = match super::__action1488::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (6, 207) + (6, 216) } - 694 => { - // ParameterList = "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1396); + 663 => { + // ParameterList = "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1489); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant8(__symbols); @@ -16516,325 +16246,1441 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action1396::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1489::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 207) + (5, 216) + } + 664 => { + // ParameterList = "*", StarTypedParameter, "," => ActionFn(1490); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1490::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 216) + } + 665 => { + // ParameterList = "*", "," => ActionFn(1491); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = match super::__action1491::<>(mode, __sym0, __sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (2, 216) + } + 666 => { + // ParameterList = "*", StarTypedParameter, ("," >)+, "," => ActionFn(1492); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1492::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 216) + } + 667 => { + // ParameterList = "*", ("," >)+, "," => ActionFn(1493); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1493::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 216) + } + 668 => { + // ParameterList = "*", StarTypedParameter, ",", KwargParameter => ActionFn(1494); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant8(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1494::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 216) + } + 669 => { + // ParameterList = "*", ",", KwargParameter => ActionFn(1495); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1495::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 216) + } + 670 => { + // ParameterList = "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1496); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant8(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = match super::__action1496::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (5, 216) + } + 671 => { + // ParameterList = "*", ("," >)+, ",", KwargParameter => ActionFn(1497); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant8(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1497::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 216) + } + 672 => { + // ParameterList = "*", StarTypedParameter => ActionFn(1498); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = match super::__action1498::<>(mode, __sym0, __sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (2, 216) + } + 673 => { + // ParameterList = "*" => ActionFn(1499); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action1499::<>(mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (1, 216) + } + 674 => { + // ParameterList = "*", StarTypedParameter, ("," >)+ => ActionFn(1500); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1500::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 216) + } + 675 => { + // ParameterList = "*", ("," >)+ => ActionFn(1501); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant11(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = match super::__action1501::<>(mode, __sym0, __sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (2, 216) + } + 676 => { + __reduce676(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 677 => { + __reduce677(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 678 => { + // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ",", KwargParameter, "," => ActionFn(1759); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant63(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = match super::__action1759::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (7, 217) + } + 679 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ",", KwargParameter, "," => ActionFn(1760); + assert!(__symbols.len() >= 9); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant8(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant63(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym8.2; + let __nt = match super::__action1760::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (9, 217) + } + 680 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ",", KwargParameter, "," => ActionFn(1761); + assert!(__symbols.len() >= 10); + let __sym9 = __pop_Variant0(__symbols); + let __sym8 = __pop_Variant8(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant63(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym9.2; + let __nt = match super::__action1761::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (10, 217) + } + 681 => { + // ParameterList = OneOrMore>, ",", "*", ",", KwargParameter, "," => ActionFn(1762); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant8(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = match super::__action1762::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (6, 217) + } + 682 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", ",", KwargParameter, "," => ActionFn(1763); + assert!(__symbols.len() >= 8); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant8(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym7.2; + let __nt = match super::__action1763::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (8, 217) + } + 683 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ",", KwargParameter, "," => ActionFn(1764); + assert!(__symbols.len() >= 9); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant8(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym8.2; + let __nt = match super::__action1764::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (9, 217) + } + 684 => { + // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1765); + assert!(__symbols.len() >= 8); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant8(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant11(__symbols); + let __sym3 = __pop_Variant63(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym7.2; + let __nt = match super::__action1765::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (8, 217) + } + 685 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1766); + assert!(__symbols.len() >= 10); + let __sym9 = __pop_Variant0(__symbols); + let __sym8 = __pop_Variant8(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant11(__symbols); + let __sym5 = __pop_Variant63(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym9.2; + let __nt = match super::__action1766::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (10, 217) + } + 686 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1767); + assert!(__symbols.len() >= 11); + let __sym10 = __pop_Variant0(__symbols); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant11(__symbols); + let __sym6 = __pop_Variant63(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym10.2; + let __nt = match super::__action1767::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9, __sym10) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (11, 217) + } + 687 => { + // ParameterList = OneOrMore>, ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1768); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = match super::__action1768::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (7, 217) + } + 688 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1769); + assert!(__symbols.len() >= 9); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant8(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant11(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym8.2; + let __nt = match super::__action1769::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (9, 217) + } + 689 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1770); + assert!(__symbols.len() >= 10); + let __sym9 = __pop_Variant0(__symbols); + let __sym8 = __pop_Variant8(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant11(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym9.2; + let __nt = match super::__action1770::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (10, 217) + } + 690 => { + // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, "," => ActionFn(1771); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant63(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = match super::__action1771::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (5, 217) + } + 691 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, "," => ActionFn(1772); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant63(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = match super::__action1772::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (7, 217) + } + 692 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, "," => ActionFn(1773); + assert!(__symbols.len() >= 8); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant63(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym7.2; + let __nt = match super::__action1773::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (8, 217) + } + 693 => { + // ParameterList = OneOrMore>, ",", "*", "," => ActionFn(1774); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1774::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 217) + } + 694 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", "," => ActionFn(1775); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = match super::__action1775::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (6, 217) } 695 => { - // ParameterList = "*", StarUntypedParameter, "," => ActionFn(1397); - assert!(__symbols.len() >= 3); + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", "," => ActionFn(1776); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1397::<>(mode, __sym0, __sym1, __sym2) { + let __end = __sym6.2; + let __nt = match super::__action1776::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 207) + (7, 217) } 696 => { - // ParameterList = "*", "," => ActionFn(1398); - assert!(__symbols.len() >= 2); + // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ("," >)+, "," => ActionFn(1777); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant11(__symbols); + let __sym3 = __pop_Variant63(__symbols); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = match super::__action1398::<>(mode, __sym0, __sym1) { + let __end = __sym5.2; + let __nt = match super::__action1777::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (2, 207) + (6, 217) } 697 => { - // ParameterList = "*", StarUntypedParameter, ("," >)+, "," => ActionFn(1399); - assert!(__symbols.len() >= 4); + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ("," >)+, "," => ActionFn(1778); + assert!(__symbols.len() >= 8); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant11(__symbols); + let __sym5 = __pop_Variant63(__symbols); + let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant11(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1399::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __end = __sym7.2; + let __nt = match super::__action1778::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 207) + (8, 217) } 698 => { - // ParameterList = "*", ("," >)+, "," => ActionFn(1400); - assert!(__symbols.len() >= 3); + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ("," >)+, "," => ActionFn(1779); + assert!(__symbols.len() >= 9); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant11(__symbols); + let __sym6 = __pop_Variant63(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1400::<>(mode, __sym0, __sym1, __sym2) { + let __end = __sym8.2; + let __nt = match super::__action1779::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 207) + (9, 217) } 699 => { - // ParameterList = "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1401); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant8(__symbols); + // ParameterList = OneOrMore>, ",", "*", ("," >)+, "," => ActionFn(1780); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1401::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __end = __sym4.2; + let __nt = match super::__action1780::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 207) + (5, 217) } 700 => { - // ParameterList = "*", ",", KwargParameter => ActionFn(1402); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant8(__symbols); + // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, "," => ActionFn(1781); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant11(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1402::<>(mode, __sym0, __sym1, __sym2) { + let __end = __sym6.2; + let __nt = match super::__action1781::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 207) + (7, 217) } 701 => { - // ParameterList = "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1403); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant8(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant11(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, "," => ActionFn(1782); + assert!(__symbols.len() >= 8); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant11(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action1403::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __end = __sym7.2; + let __nt = match super::__action1782::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (5, 207) + (8, 217) } 702 => { - // ParameterList = "*", ("," >)+, ",", KwargParameter => ActionFn(1404); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant8(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant11(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ParameterList = OneOrMore>, "," => ActionFn(1783); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action1404::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __end = __sym1.2; + let __nt = match super::__action1783::<>(mode, __sym0, __sym1) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (4, 207) + (2, 217) } 703 => { - // ParameterList = "*", StarUntypedParameter => ActionFn(1405); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ParameterList = OneOrMore>, ",", "/", "," => ActionFn(1784); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = match super::__action1405::<>(mode, __sym0, __sym1) { + let __end = __sym3.2; + let __nt = match super::__action1784::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (2, 207) + (4, 217) } 704 => { - // ParameterList = "*" => ActionFn(1406); - let __sym0 = __pop_Variant0(__symbols); + // ParameterList = OneOrMore>, ",", "/", ("," >)+, "," => ActionFn(1785); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action1406::<>(mode, __sym0) { + let __end = __sym4.2; + let __nt = match super::__action1785::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (1, 207) + (5, 217) } 705 => { - // ParameterList = "*", StarUntypedParameter, ("," >)+ => ActionFn(1407); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant11(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1786); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant63(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1407::<>(mode, __sym0, __sym1, __sym2) { + let __end = __sym5.2; + let __nt = match super::__action1786::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 207) + (6, 217) } 706 => { - // ParameterList = "*", ("," >)+ => ActionFn(1408); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant11(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1787); + assert!(__symbols.len() >= 8); + let __sym7 = __pop_Variant8(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant63(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = match super::__action1408::<>(mode, __sym0, __sym1) { + let __end = __sym7.2; + let __nt = match super::__action1787::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (2, 207) + (8, 217) } 707 => { - __reduce707(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1788); + assert!(__symbols.len() >= 9); + let __sym8 = __pop_Variant8(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant63(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym8.2; + let __nt = match super::__action1788::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (9, 217) } 708 => { - __reduce708(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterList = OneOrMore>, ",", "*", ",", KwargParameter => ActionFn(1789); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant8(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = match super::__action1789::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (5, 217) } 709 => { - __reduce709(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterList = OneOrMore>, ",", "/", ",", "*", ",", KwargParameter => ActionFn(1790); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant8(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = match super::__action1790::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (7, 217) } 710 => { - __reduce710(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ",", KwargParameter => ActionFn(1791); + assert!(__symbols.len() >= 8); + let __sym7 = __pop_Variant8(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym7.2; + let __nt = match super::__action1791::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (8, 217) } 711 => { - // ParameterListStarArgs = "*", StarTypedParameter, ",", KwargParameter => ActionFn(870); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant8(__symbols); + // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1792); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant8(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant11(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action870::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __end = __sym6.2; + let __nt = match super::__action1792::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (4, 209) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (7, 217) } 712 => { - // ParameterListStarArgs = "*", ",", KwargParameter => ActionFn(871); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant8(__symbols); + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1793); + assert!(__symbols.len() >= 9); + let __sym8 = __pop_Variant8(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant11(__symbols); + let __sym5 = __pop_Variant63(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action871::<>(mode, __sym0, __sym1, __sym2) { + let __end = __sym8.2; + let __nt = match super::__action1793::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (3, 209) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (9, 217) } 713 => { - // ParameterListStarArgs = "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(872); + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1794); + assert!(__symbols.len() >= 10); + let __sym9 = __pop_Variant8(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant11(__symbols); + let __sym6 = __pop_Variant63(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym9.2; + let __nt = match super::__action1794::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (10, 217) + } + 714 => { + // ParameterList = OneOrMore>, ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1795); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = match super::__action1795::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (6, 217) + } + 715 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1796); + assert!(__symbols.len() >= 8); + let __sym7 = __pop_Variant8(__symbols); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant11(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym7.2; + let __nt = match super::__action1796::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (8, 217) + } + 716 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+, ",", KwargParameter => ActionFn(1797); + assert!(__symbols.len() >= 9); + let __sym8 = __pop_Variant8(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant11(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym8.2; + let __nt = match super::__action1797::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (9, 217) + } + 717 => { + // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter => ActionFn(1798); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant63(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1798::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 217) + } + 718 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter => ActionFn(1799); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant63(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = match super::__action1799::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (6, 217) + } + 719 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter => ActionFn(1800); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant63(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = match super::__action1800::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (7, 217) + } + 720 => { + // ParameterList = OneOrMore>, ",", "*" => ActionFn(1801); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1801::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 217) + } + 721 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*" => ActionFn(1802); assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = match super::__action1802::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (5, 217) + } + 722 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*" => ActionFn(1803); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = match super::__action1803::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (6, 217) + } + 723 => { + // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1804); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant11(__symbols); + let __sym3 = __pop_Variant63(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = match super::__action1804::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (5, 217) + } + 724 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1805); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant11(__symbols); + let __sym5 = __pop_Variant63(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = match super::__action1805::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (7, 217) + } + 725 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1806); + assert!(__symbols.len() >= 8); + let __sym7 = __pop_Variant11(__symbols); + let __sym6 = __pop_Variant63(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym7.2; + let __nt = match super::__action1806::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (8, 217) + } + 726 => { + // ParameterList = OneOrMore>, ",", "*", ("," >)+ => ActionFn(1807); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1807::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 217) + } + 727 => { + // ParameterList = OneOrMore>, ",", "/", ",", "*", ("," >)+ => ActionFn(1808); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant11(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = match super::__action1808::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (6, 217) + } + 728 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", ("," >)+ => ActionFn(1809); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant11(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = match super::__action1809::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (7, 217) + } + 729 => { + // ParameterList = OneOrMore> => ActionFn(1810); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action1810::<>(mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (1, 217) + } + 730 => { + // ParameterList = OneOrMore>, ",", "/" => ActionFn(1811); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1811::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 217) + } + 731 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+ => ActionFn(1812); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1812::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 217) + } + 732 => { + // ParameterList = OneOrMore>, ",", KwargParameter, "," => ActionFn(1813); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1813::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 217) + } + 733 => { + // ParameterList = OneOrMore>, ",", "/", ",", KwargParameter, "," => ActionFn(1814); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant8(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = match super::__action1814::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (6, 217) + } + 734 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", KwargParameter, "," => ActionFn(1815); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = match super::__action1815::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (7, 217) + } + 735 => { + // ParameterList = OneOrMore>, ",", KwargParameter => ActionFn(1816); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1816::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 217) + } + 736 => { + // ParameterList = OneOrMore>, ",", "/", ",", KwargParameter => ActionFn(1817); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant8(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = match super::__action1817::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (5, 217) + } + 737 => { + // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", KwargParameter => ActionFn(1818); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant8(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = match super::__action1818::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (6, 217) + } + 738 => { + // ParameterList = "*", StarUntypedParameter, ",", KwargParameter, "," => ActionFn(1524); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant8(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = match super::__action1524::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (5, 217) + } + 739 => { + // ParameterList = "*", ",", KwargParameter, "," => ActionFn(1525); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1525::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 217) + } + 740 => { + // ParameterList = "*", StarUntypedParameter, ("," >)+, ",", KwargParameter, "," => ActionFn(1526); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant11(__symbols); let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = match super::__action872::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __end = __sym5.2; + let __nt = match super::__action1526::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (5, 209) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (6, 217) } - 714 => { - // ParameterListStarArgs = "*", ("," >)+, ",", KwargParameter => ActionFn(873); - assert!(__symbols.len() >= 4); + 741 => { + // ParameterList = "*", ("," >)+, ",", KwargParameter, "," => ActionFn(1527); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant8(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = match super::__action873::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __end = __sym4.2; + let __nt = match super::__action1527::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (4, 209) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (5, 217) } - 715 => { - // ParameterListStarArgs = "*", StarTypedParameter => ActionFn(874); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = match super::__action874::<>(mode, __sym0, __sym1) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (2, 209) - } - 716 => { - // ParameterListStarArgs = "*" => ActionFn(875); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action875::<>(mode, __sym0) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 209) - } - 717 => { - // ParameterListStarArgs = "*", StarTypedParameter, ("," >)+ => ActionFn(876); + 742 => { + // ParameterList = "*", StarUntypedParameter, "," => ActionFn(1528); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action876::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1528::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (3, 209) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 217) } - 718 => { - // ParameterListStarArgs = "*", ("," >)+ => ActionFn(877); + 743 => { + // ParameterList = "*", "," => ActionFn(1529); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = match super::__action877::<>(mode, __sym0, __sym1) { + let __nt = match super::__action1529::<>(mode, __sym0, __sym1) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (2, 209) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (2, 217) } - 719 => { - // ParameterListStarArgs = "*", StarUntypedParameter, ",", KwargParameter => ActionFn(995); + 744 => { + // ParameterList = "*", StarUntypedParameter, ("," >)+, "," => ActionFn(1530); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1530::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 217) + } + 745 => { + // ParameterList = "*", ("," >)+, "," => ActionFn(1531); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1531::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 217) + } + 746 => { + // ParameterList = "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1532); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant8(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16842,30 +17688,30 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action995::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1532::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (4, 210) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 217) } - 720 => { - // ParameterListStarArgs = "*", ",", KwargParameter => ActionFn(996); + 747 => { + // ParameterList = "*", ",", KwargParameter => ActionFn(1533); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant8(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action996::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1533::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (3, 210) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 217) } - 721 => { - // ParameterListStarArgs = "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(997); + 748 => { + // ParameterList = "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1534); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant8(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -16874,15 +17720,15 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = match super::__action997::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + let __nt = match super::__action1534::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (5, 210) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (5, 217) } - 722 => { - // ParameterListStarArgs = "*", ("," >)+, ",", KwargParameter => ActionFn(998); + 749 => { + // ParameterList = "*", ("," >)+, ",", KwargParameter => ActionFn(1535); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant8(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16890,171 +17736,67 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = match super::__action998::<>(mode, __sym0, __sym1, __sym2, __sym3) { + let __nt = match super::__action1535::<>(mode, __sym0, __sym1, __sym2, __sym3) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (4, 210) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (4, 217) } - 723 => { - // ParameterListStarArgs = "*", StarUntypedParameter => ActionFn(999); + 750 => { + // ParameterList = "*", StarUntypedParameter => ActionFn(1536); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = match super::__action999::<>(mode, __sym0, __sym1) { + let __nt = match super::__action1536::<>(mode, __sym0, __sym1) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (2, 210) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (2, 217) } - 724 => { - // ParameterListStarArgs = "*" => ActionFn(1000); + 751 => { + // ParameterList = "*" => ActionFn(1537); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = match super::__action1000::<>(mode, __sym0) { + let __nt = match super::__action1537::<>(mode, __sym0) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 210) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (1, 217) } - 725 => { - // ParameterListStarArgs = "*", StarUntypedParameter, ("," >)+ => ActionFn(1001); + 752 => { + // ParameterList = "*", StarUntypedParameter, ("," >)+ => ActionFn(1538); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant11(__symbols); let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = match super::__action1001::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1538::<>(mode, __sym0, __sym1, __sym2) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (3, 210) + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 217) } - 726 => { - // ParameterListStarArgs = "*", ("," >)+ => ActionFn(1002); + 753 => { + // ParameterList = "*", ("," >)+ => ActionFn(1539); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant11(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = match super::__action1002::<>(mode, __sym0, __sym1) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (2, 210) - } - 727 => { - // Parameters = "(", ParameterList, ")" => ActionFn(1498); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant45(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = match super::__action1498::<>(mode, __sym0, __sym1, __sym2) { + let __nt = match super::__action1539::<>(mode, __sym0, __sym1) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (3, 211) - } - 728 => { - // Parameters = "(", ")" => ActionFn(1499); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = match super::__action1499::<>(mode, __sym0, __sym1) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (2, 211) - } - 729 => { - __reduce729(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 730 => { - __reduce730(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 731 => { - __reduce731(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 732 => { - __reduce732(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 733 => { - __reduce733(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 734 => { - __reduce734(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 735 => { - __reduce735(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 736 => { - __reduce736(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 737 => { - __reduce737(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 738 => { - __reduce738(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 739 => { - __reduce739(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 740 => { - __reduce740(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 741 => { - __reduce741(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 742 => { - __reduce742(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 743 => { - __reduce743(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 744 => { - __reduce744(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 745 => { - __reduce745(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 746 => { - __reduce746(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 747 => { - __reduce747(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 748 => { - __reduce748(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 749 => { - __reduce749(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 750 => { - __reduce750(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 751 => { - __reduce751(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 752 => { - __reduce752(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 753 => { - __reduce753(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + (2, 217) } 754 => { __reduce754(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -17069,58 +17811,271 @@ mod __parse__Top { __reduce757(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 758 => { - __reduce758(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", StarTypedParameter, ",", KwargParameter => ActionFn(949); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant8(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action949::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (4, 219) } 759 => { - __reduce759(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", ",", KwargParameter => ActionFn(950); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action950::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (3, 219) } 760 => { - __reduce760(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", StarTypedParameter, ("," >)+, ",", KwargParameter => ActionFn(951); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant8(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = match super::__action951::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (5, 219) } 761 => { - __reduce761(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", ("," >)+, ",", KwargParameter => ActionFn(952); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant8(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action952::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (4, 219) } 762 => { - __reduce762(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", StarTypedParameter => ActionFn(953); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = match super::__action953::<>(mode, __sym0, __sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (2, 219) } 763 => { - __reduce763(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*" => ActionFn(954); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action954::<>(mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (1, 219) } 764 => { - __reduce764(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", StarTypedParameter, ("," >)+ => ActionFn(955); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action955::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (3, 219) } 765 => { - __reduce765(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", ("," >)+ => ActionFn(956); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant11(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = match super::__action956::<>(mode, __sym0, __sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (2, 219) } 766 => { - __reduce766(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", StarUntypedParameter, ",", KwargParameter => ActionFn(1078); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant8(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1078::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (4, 220) } 767 => { - __reduce767(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", ",", KwargParameter => ActionFn(1079); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1079::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (3, 220) } 768 => { - __reduce768(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", StarUntypedParameter, ("," >)+, ",", KwargParameter => ActionFn(1080); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant8(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = match super::__action1080::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (5, 220) } 769 => { - __reduce769(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", ("," >)+, ",", KwargParameter => ActionFn(1081); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant8(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant11(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = match super::__action1081::<>(mode, __sym0, __sym1, __sym2, __sym3) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (4, 220) } 770 => { - __reduce770(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", StarUntypedParameter => ActionFn(1082); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = match super::__action1082::<>(mode, __sym0, __sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (2, 220) } 771 => { - __reduce771(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*" => ActionFn(1083); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action1083::<>(mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (1, 220) } 772 => { - __reduce772(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", StarUntypedParameter, ("," >)+ => ActionFn(1084); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant11(__symbols); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1084::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (3, 220) } 773 => { - __reduce773(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // ParameterListStarArgs = "*", ("," >)+ => ActionFn(1085); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant11(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = match super::__action1085::<>(mode, __sym0, __sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (2, 220) } 774 => { - __reduce774(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Parameters = "(", ParameterList, ")" => ActionFn(1633); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant45(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = match super::__action1633::<>(mode, __sym0, __sym1, __sym2) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (3, 221) } 775 => { - __reduce775(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // Parameters = "(", ")" => ActionFn(1634); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = match super::__action1634::<>(mode, __sym0, __sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (2, 221) } 776 => { __reduce776(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -17540,6 +18495,174 @@ mod __parse__Top { __reduce914(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 915 => { + __reduce915(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 916 => { + __reduce916(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 917 => { + __reduce917(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 918 => { + __reduce918(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 919 => { + __reduce919(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 920 => { + __reduce920(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 921 => { + __reduce921(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 922 => { + __reduce922(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 923 => { + __reduce923(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 924 => { + __reduce924(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 925 => { + __reduce925(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 926 => { + __reduce926(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 927 => { + __reduce927(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 928 => { + __reduce928(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 929 => { + __reduce929(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 930 => { + __reduce930(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 931 => { + __reduce931(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 932 => { + __reduce932(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 933 => { + __reduce933(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 934 => { + __reduce934(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 935 => { + __reduce935(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 936 => { + __reduce936(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 937 => { + __reduce937(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 938 => { + __reduce938(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 939 => { + __reduce939(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 940 => { + __reduce940(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 941 => { + __reduce941(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 942 => { + __reduce942(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 943 => { + __reduce943(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 944 => { + __reduce944(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 945 => { + __reduce945(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 946 => { + __reduce946(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 947 => { + __reduce947(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 948 => { + __reduce948(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 949 => { + __reduce949(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 950 => { + __reduce950(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 951 => { + __reduce951(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 952 => { + __reduce952(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 953 => { + __reduce953(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 954 => { + __reduce954(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 955 => { + __reduce955(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 956 => { + __reduce956(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 957 => { + __reduce957(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 958 => { + __reduce958(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 959 => { + __reduce959(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 960 => { + __reduce960(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 961 => { + __reduce961(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 962 => { + __reduce962(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 963 => { + __reduce963(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 964 => { + __reduce964(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 965 => { + __reduce965(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 966 => { + __reduce966(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 967 => { + __reduce967(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 968 => { + __reduce968(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 969 => { + __reduce969(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 970 => { + __reduce970(mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 971 => { // __Top = Top => ActionFn(0); let __sym0 = __pop_Variant89(__symbols); let __start = __sym0.0; @@ -17563,7 +18686,7 @@ mod __parse__Top { fn __pop_Variant4< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> - ) -> (TextSize, (MagicKind, String), TextSize) + ) -> (TextSize, (IpyEscapeKind, String), TextSize) { match __symbols.pop() { Some((__l, __Symbol::Variant4(__v), __r)) => (__l, __v, __r), @@ -18508,11 +19631,11 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ","? = "," => ActionFn(356); + // ","? = "," => ActionFn(363); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action356::<>(mode, __sym0); + let __nt = super::__action363::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 0) } @@ -18524,10 +19647,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ","? = => ActionFn(357); + // ","? = => ActionFn(364); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action357::<>(mode, &__start, &__end); + let __nt = super::__action364::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (0, 0) } @@ -18539,11 +19662,11 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ";"? = ";" => ActionFn(380); + // ";"? = ";" => ActionFn(387); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action380::<>(mode, __sym0); + let __nt = super::__action387::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 1) } @@ -18555,10 +19678,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ";"? = => ActionFn(381); + // ";"? = => ActionFn(388); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action381::<>(mode, &__start, &__end); + let __nt = super::__action388::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (0, 1) } @@ -18570,11 +19693,11 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // "async"? = "async" => ActionFn(313); + // "async"? = "async" => ActionFn(315); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action313::<>(mode, __sym0); + let __nt = super::__action315::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 2) } @@ -18586,10 +19709,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // "async"? = => ActionFn(314); + // "async"? = => ActionFn(316); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action314::<>(mode, &__start, &__end); + let __nt = super::__action316::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (0, 2) } @@ -18601,13 +19724,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >) = ",", KwargParameter => ActionFn(410); + // ("," >) = ",", KwargParameter => ActionFn(419); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action410::<>(mode, __sym0, __sym1); + let __nt = super::__action419::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (2, 3) } @@ -18619,13 +19742,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)? = ",", KwargParameter => ActionFn(663); + // ("," >)? = ",", KwargParameter => ActionFn(713); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action663::<>(mode, __sym0, __sym1); + let __nt = super::__action713::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (2, 4) } @@ -18637,10 +19760,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)? = => ActionFn(465); + // ("," >)? = => ActionFn(472); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action465::<>(mode, &__start, &__end); + let __nt = super::__action472::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (0, 4) } @@ -18652,13 +19775,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >) = ",", KwargParameter => ActionFn(418); + // ("," >) = ",", KwargParameter => ActionFn(427); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action418::<>(mode, __sym0, __sym1); + let __nt = super::__action427::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (2, 5) } @@ -18670,13 +19793,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)? = ",", KwargParameter => ActionFn(668); + // ("," >)? = ",", KwargParameter => ActionFn(718); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action668::<>(mode, __sym0, __sym1); + let __nt = super::__action718::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (2, 6) } @@ -18688,10 +19811,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)? = => ActionFn(454); + // ("," >)? = => ActionFn(461); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action454::<>(mode, &__start, &__end); + let __nt = super::__action461::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (0, 6) } @@ -18703,13 +19826,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >) = ",", ParameterDef => ActionFn(468); + // ("," >) = ",", ParameterDef => ActionFn(475); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant10(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action468::<>(mode, __sym0, __sym1); + let __nt = super::__action475::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (2, 7) } @@ -18721,10 +19844,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)* = => ActionFn(466); + // ("," >)* = => ActionFn(473); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action466::<>(mode, &__start, &__end); + let __nt = super::__action473::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (0, 8) } @@ -18736,11 +19859,11 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)* = ("," >)+ => ActionFn(467); + // ("," >)* = ("," >)+ => ActionFn(474); let __sym0 = __pop_Variant11(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action467::<>(mode, __sym0); + let __nt = super::__action474::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 8) } @@ -18752,13 +19875,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)+ = ",", ParameterDef => ActionFn(673); + // ("," >)+ = ",", ParameterDef => ActionFn(723); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant10(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action673::<>(mode, __sym0, __sym1); + let __nt = super::__action723::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (2, 9) } @@ -18770,14 +19893,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)+ = ("," >)+, ",", ParameterDef => ActionFn(674); + // ("," >)+ = ("," >)+, ",", ParameterDef => ActionFn(724); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant10(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant11(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action674::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action724::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (3, 9) } @@ -18789,13 +19912,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >) = ",", ParameterDef => ActionFn(457); + // ("," >) = ",", ParameterDef => ActionFn(464); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant10(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action457::<>(mode, __sym0, __sym1); + let __nt = super::__action464::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (2, 10) } @@ -18807,10 +19930,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)* = => ActionFn(455); + // ("," >)* = => ActionFn(462); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action455::<>(mode, &__start, &__end); + let __nt = super::__action462::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (0, 11) } @@ -18822,11 +19945,11 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)* = ("," >)+ => ActionFn(456); + // ("," >)* = ("," >)+ => ActionFn(463); let __sym0 = __pop_Variant11(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action456::<>(mode, __sym0); + let __nt = super::__action463::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 11) } @@ -18838,13 +19961,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)+ = ",", ParameterDef => ActionFn(681); + // ("," >)+ = ",", ParameterDef => ActionFn(731); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant10(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action681::<>(mode, __sym0, __sym1); + let __nt = super::__action731::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (2, 12) } @@ -18856,14 +19979,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)+ = ("," >)+, ",", ParameterDef => ActionFn(682); + // ("," >)+ = ("," >)+, ",", ParameterDef => ActionFn(732); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant10(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant11(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action682::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action732::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (3, 12) } @@ -18875,10 +19998,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)? = => ActionFn(413); + // ("," >)? = => ActionFn(422); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action413::<>(mode, &__start, &__end); + let __nt = super::__action422::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (0, 14) } @@ -18890,10 +20013,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)? = => ActionFn(421); + // ("," >)? = => ActionFn(430); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action421::<>(mode, &__start, &__end); + let __nt = super::__action430::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (0, 16) } @@ -18905,13 +20028,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >) = ",", Test<"all"> => ActionFn(350); + // ("," >) = ",", Test<"all"> => ActionFn(357); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action350::<>(mode, __sym0, __sym1); + let __nt = super::__action357::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (2, 17) } @@ -18923,13 +20046,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)? = ",", Test<"all"> => ActionFn(1053); + // ("," >)? = ",", Test<"all"> => ActionFn(1136); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1053::<>(mode, __sym0, __sym1); + let __nt = super::__action1136::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (2, 18) } @@ -18941,10 +20064,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)? = => ActionFn(349); + // ("," >)? = => ActionFn(356); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action349::<>(mode, &__start, &__end); + let __nt = super::__action356::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (0, 18) } @@ -18956,13 +20079,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," ) = ",", TestOrStarNamedExpr => ActionFn(543); + // ("," ) = ",", TestOrStarNamedExpr => ActionFn(587); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action543::<>(mode, __sym0, __sym1); + let __nt = super::__action587::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (2, 19) } @@ -18974,10 +20097,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," )* = => ActionFn(541); + // ("," )* = => ActionFn(585); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action541::<>(mode, &__start, &__end); + let __nt = super::__action585::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (0, 20) } @@ -18989,11 +20112,11 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," )* = ("," )+ => ActionFn(542); + // ("," )* = ("," )+ => ActionFn(586); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action542::<>(mode, __sym0); + let __nt = super::__action586::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (1, 20) } @@ -19005,13 +20128,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," )+ = ",", TestOrStarNamedExpr => ActionFn(1056); + // ("," )+ = ",", TestOrStarNamedExpr => ActionFn(1139); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1056::<>(mode, __sym0, __sym1); + let __nt = super::__action1139::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (2, 21) } @@ -19023,14 +20146,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," )+ = ("," )+, ",", TestOrStarNamedExpr => ActionFn(1057); + // ("," )+ = ("," )+, ",", TestOrStarNamedExpr => ActionFn(1140); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1057::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1140::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (3, 21) } @@ -19042,13 +20165,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >) = ",", WithItem<"all"> => ActionFn(296); + // ("," >) = ",", WithItem<"all"> => ActionFn(298); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant17(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action296::<>(mode, __sym0, __sym1); + let __nt = super::__action298::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); (2, 22) } @@ -19060,10 +20183,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)* = => ActionFn(294); + // ("," >)* = => ActionFn(296); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action294::<>(mode, &__start, &__end); + let __nt = super::__action296::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); (0, 23) } @@ -19075,11 +20198,11 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)* = ("," >)+ => ActionFn(295); + // ("," >)* = ("," >)+ => ActionFn(297); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action295::<>(mode, __sym0); + let __nt = super::__action297::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); (1, 23) } @@ -19091,13 +20214,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)+ = ",", WithItem<"all"> => ActionFn(1066); + // ("," >)+ = ",", WithItem<"all"> => ActionFn(1153); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant17(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1066::<>(mode, __sym0, __sym1); + let __nt = super::__action1153::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); (2, 24) } @@ -19109,14 +20232,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("," >)+ = ("," >)+, ",", WithItem<"all"> => ActionFn(1067); + // ("," >)+ = ("," >)+, ",", WithItem<"all"> => ActionFn(1154); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant17(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant18(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1067::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1154::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant18(__nt), __end)); (3, 24) } @@ -19128,13 +20251,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("->" >) = "->", Test<"all"> => ActionFn(283); + // ("->" >) = "->", Test<"all"> => ActionFn(285); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action283::<>(mode, __sym0, __sym1); + let __nt = super::__action285::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (2, 25) } @@ -19146,13 +20269,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("->" >)? = "->", Test<"all"> => ActionFn(1072); + // ("->" >)? = "->", Test<"all"> => ActionFn(1159); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1072::<>(mode, __sym0, __sym1); + let __nt = super::__action1159::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (2, 26) } @@ -19164,10 +20287,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("->" >)? = => ActionFn(282); + // ("->" >)? = => ActionFn(284); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action282::<>(mode, &__start, &__end); + let __nt = super::__action284::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (0, 26) } @@ -19179,13 +20302,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("." Identifier) = ".", Identifier => ActionFn(355); + // ("." Identifier) = ".", Identifier => ActionFn(362); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant22(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action355::<>(mode, __sym0, __sym1); + let __nt = super::__action362::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); (2, 27) } @@ -19197,13 +20320,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("." Identifier)+ = ".", Identifier => ActionFn(1077); + // ("." Identifier)+ = ".", Identifier => ActionFn(1164); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant22(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1077::<>(mode, __sym0, __sym1); + let __nt = super::__action1164::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); (2, 28) } @@ -19215,14 +20338,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("." Identifier)+ = ("." Identifier)+, ".", Identifier => ActionFn(1078); + // ("." Identifier)+ = ("." Identifier)+, ".", Identifier => ActionFn(1165); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant22(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant20(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1078::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1165::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); (3, 28) } @@ -19234,13 +20357,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (":" >) = ":", Test<"all"> => ActionFn(273); + // (":" >) = ":", Test<"all"> => ActionFn(275); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action273::<>(mode, __sym0, __sym1); + let __nt = super::__action275::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (2, 29) } @@ -19252,13 +20375,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (":" >)? = ":", Test<"all"> => ActionFn(1079); + // (":" >)? = ":", Test<"all"> => ActionFn(1166); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1079::<>(mode, __sym0, __sym1); + let __nt = super::__action1166::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (2, 30) } @@ -19270,10 +20393,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (":" >)? = => ActionFn(272); + // (":" >)? = => ActionFn(274); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action272::<>(mode, &__start, &__end); + let __nt = super::__action274::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (0, 30) } @@ -19285,13 +20408,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (":" ) = ":", TestOrStarExpr => ActionFn(270); + // (":" ) = ":", TestOrStarExpr => ActionFn(272); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action270::<>(mode, __sym0, __sym1); + let __nt = super::__action272::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (2, 31) } @@ -19303,13 +20426,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (":" )? = ":", TestOrStarExpr => ActionFn(1086); + // (":" )? = ":", TestOrStarExpr => ActionFn(1173); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1086::<>(mode, __sym0, __sym1); + let __nt = super::__action1173::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (2, 32) } @@ -19321,10 +20444,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (":" )? = => ActionFn(269); + // (":" )? = => ActionFn(271); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action269::<>(mode, &__start, &__end); + let __nt = super::__action271::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (0, 32) } @@ -19336,11 +20459,11 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("\n") = "\n" => ActionFn(387); + // ("?") = "?" => ActionFn(352); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action387::<>(mode, __sym0); + let __nt = super::__action352::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant0(__nt), __end)); (1, 33) } @@ -19352,12 +20475,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("\n")* = => ActionFn(385); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action385::<>(mode, &__start, &__end); + // ("?")+ = "?" => ActionFn(1176); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1176::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (0, 34) + (1, 34) } pub(crate) fn __reduce83< >( @@ -19367,13 +20491,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("\n")* = ("\n")+ => ActionFn(386); + // ("?")+ = ("?")+, "?" => ActionFn(1177); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant21(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action386::<>(mode, __sym0); + let __end = __sym1.2; + let __nt = super::__action1177::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (1, 34) + (2, 34) } pub(crate) fn __reduce84< >( @@ -19383,12 +20509,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("\n")+ = "\n" => ActionFn(1089); + // ("\n") = "\n" => ActionFn(394); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1089::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant21(__nt), __end)); + let __nt = super::__action394::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant0(__nt), __end)); (1, 35) } pub(crate) fn __reduce85< @@ -19399,15 +20525,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("\n")+ = ("\n")+, "\n" => ActionFn(1090); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant21(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1090::<>(mode, __sym0, __sym1); + // ("\n")* = => ActionFn(392); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action392::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant21(__nt), __end)); - (2, 35) + (0, 36) } pub(crate) fn __reduce86< >( @@ -19417,15 +20540,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("as" ) = "as", Identifier => ActionFn(398); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant22(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ("\n")* = ("\n")+ => ActionFn(393); + let __sym0 = __pop_Variant21(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action398::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (2, 36) + let __end = __sym0.2; + let __nt = super::__action393::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant21(__nt), __end)); + (1, 36) } pub(crate) fn __reduce87< >( @@ -19435,15 +20556,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("as" )? = "as", Identifier => ActionFn(1093); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant22(__symbols); + // ("\n")+ = "\n" => ActionFn(1178); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1093::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (2, 37) + let __end = __sym0.2; + let __nt = super::__action1178::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant21(__nt), __end)); + (1, 37) } pub(crate) fn __reduce88< >( @@ -19453,12 +20572,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("as" )? = => ActionFn(397); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action397::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (0, 37) + // ("\n")+ = ("\n")+, "\n" => ActionFn(1179); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant21(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1179::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant21(__nt), __end)); + (2, 37) } pub(crate) fn __reduce89< >( @@ -19468,16 +20590,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("else" ":" ) = "else", ":", Suite => ActionFn(317); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); + // ("as" ) = "as", Identifier => ActionFn(405); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant22(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action317::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 38) + let __end = __sym1.2; + let __nt = super::__action405::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant22(__nt), __end)); + (2, 38) } pub(crate) fn __reduce90< >( @@ -19487,16 +20608,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("else" ":" )? = "else", ":", Suite => ActionFn(1098); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); + // ("as" )? = "as", Identifier => ActionFn(1182); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant22(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1098::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant25(__nt), __end)); - (3, 39) + let __end = __sym1.2; + let __nt = super::__action1182::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant23(__nt), __end)); + (2, 39) } pub(crate) fn __reduce91< >( @@ -19506,11 +20626,11 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("else" ":" )? = => ActionFn(316); + // ("as" )? = => ActionFn(404); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action316::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant25(__nt), __end)); + let __nt = super::__action404::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant23(__nt), __end)); (0, 39) } pub(crate) fn __reduce92< @@ -19521,14 +20641,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("finally" ":" ) = "finally", ":", Suite => ActionFn(310); + // ("else" ":" ) = "else", ":", Suite => ActionFn(319); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action310::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action319::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); (3, 40) } @@ -19540,14 +20660,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("finally" ":" )? = "finally", ":", Suite => ActionFn(1109); + // ("else" ":" )? = "else", ":", Suite => ActionFn(1187); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1109::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1187::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant25(__nt), __end)); (3, 41) } @@ -19559,10 +20679,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("finally" ":" )? = => ActionFn(309); + // ("else" ":" )? = => ActionFn(318); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action309::<>(mode, &__start, &__end); + let __nt = super::__action318::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant25(__nt), __end)); (0, 41) } @@ -19574,15 +20694,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("from" >) = "from", Test<"all"> => ActionFn(370); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); + // ("finally" ":" ) = "finally", ":", Suite => ActionFn(312); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action370::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 42) + let __end = __sym2.2; + let __nt = super::__action312::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant24(__nt), __end)); + (3, 42) } pub(crate) fn __reduce96< >( @@ -19592,15 +20713,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("from" >)? = "from", Test<"all"> => ActionFn(1119); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); + // ("finally" ":" )? = "finally", ":", Suite => ActionFn(1198); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1119::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (2, 43) + let __end = __sym2.2; + let __nt = super::__action1198::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant25(__nt), __end)); + (3, 43) } pub(crate) fn __reduce97< >( @@ -19610,11 +20732,11 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ("from" >)? = => ActionFn(369); + // ("finally" ":" )? = => ActionFn(311); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action369::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + let __nt = super::__action311::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant25(__nt), __end)); (0, 43) } pub(crate) fn __reduce98< @@ -19625,17 +20747,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (<@L> "elif" ":" ) = "elif", NamedExpressionTest, ":", Suite => ActionFn(697); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant24(__symbols); - let __sym2 = __pop_Variant0(__symbols); + // ("from" >) = "from", Test<"all"> => ActionFn(377); + assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action697::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant26(__nt), __end)); - (4, 44) + let __end = __sym1.2; + let __nt = super::__action377::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 44) } pub(crate) fn __reduce99< >( @@ -19645,12 +20765,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (<@L> "elif" ":" )* = => ActionFn(321); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action321::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant27(__nt), __end)); - (0, 45) + // ("from" >)? = "from", Test<"all"> => ActionFn(1208); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1208::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (2, 45) } pub(crate) fn __reduce100< >( @@ -19660,13 +20783,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (<@L> "elif" ":" )* = (<@L> "elif" ":" )+ => ActionFn(322); - let __sym0 = __pop_Variant27(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action322::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant27(__nt), __end)); - (1, 45) + // ("from" >)? = => ActionFn(376); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action376::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (0, 45) } pub(crate) fn __reduce101< >( @@ -19676,7 +20798,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (<@L> "elif" ":" )+ = "elif", NamedExpressionTest, ":", Suite => ActionFn(1122); + // (<@L> "elif" ":" ) = "elif", NamedExpressionTest, ":", Suite => ActionFn(747); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant24(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -19684,8 +20806,8 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1122::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant27(__nt), __end)); + let __nt = super::__action747::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant26(__nt), __end)); (4, 46) } pub(crate) fn __reduce102< @@ -19696,18 +20818,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (<@L> "elif" ":" )+ = (<@L> "elif" ":" )+, "elif", NamedExpressionTest, ":", Suite => ActionFn(1123); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant24(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant27(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1123::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + // (<@L> "elif" ":" )* = => ActionFn(323); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action323::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant27(__nt), __end)); - (5, 46) + (0, 47) } pub(crate) fn __reduce103< >( @@ -19717,16 +20833,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (<@L> "else" ":" ) = "else", ":", Suite => ActionFn(698); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // (<@L> "elif" ":" )* = (<@L> "elif" ":" )+ => ActionFn(324); + let __sym0 = __pop_Variant27(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action698::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant28(__nt), __end)); - (3, 47) + let __end = __sym0.2; + let __nt = super::__action324::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant27(__nt), __end)); + (1, 47) } pub(crate) fn __reduce104< >( @@ -19736,16 +20849,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (<@L> "else" ":" )? = "else", ":", Suite => ActionFn(1126); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); + // (<@L> "elif" ":" )+ = "elif", NamedExpressionTest, ":", Suite => ActionFn(1211); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1126::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant29(__nt), __end)); - (3, 48) + let __end = __sym3.2; + let __nt = super::__action1211::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant27(__nt), __end)); + (4, 48) } pub(crate) fn __reduce105< >( @@ -19755,12 +20869,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (<@L> "else" ":" )? = => ActionFn(319); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action319::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant29(__nt), __end)); - (0, 48) + // (<@L> "elif" ":" )+ = (<@L> "elif" ":" )+, "elif", NamedExpressionTest, ":", Suite => ActionFn(1212); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant24(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant27(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = super::__action1212::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant27(__nt), __end)); + (5, 48) } pub(crate) fn __reduce106< >( @@ -19770,15 +20890,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (> "or") = AndTest<"all">, "or" => ActionFn(432); - assert!(__symbols.len() >= 2); + // (<@L> "else" ":" ) = "else", ":", Suite => ActionFn(748); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action432::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 49) + let __end = __sym2.2; + let __nt = super::__action748::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant28(__nt), __end)); + (3, 49) } pub(crate) fn __reduce107< >( @@ -19788,15 +20909,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (> "or")+ = AndTest<"all">, "or" => ActionFn(1131); - assert!(__symbols.len() >= 2); + // (<@L> "else" ":" )? = "else", ":", Suite => ActionFn(1215); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant24(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1131::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (2, 50) + let __end = __sym2.2; + let __nt = super::__action1215::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant29(__nt), __end)); + (3, 50) } pub(crate) fn __reduce108< >( @@ -19806,16 +20928,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (> "or")+ = (> "or")+, AndTest<"all">, "or" => ActionFn(1132); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant16(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1132::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (3, 50) + // (<@L> "else" ":" )? = => ActionFn(321); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action321::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant29(__nt), __end)); + (0, 50) } pub(crate) fn __reduce109< >( @@ -19825,14 +20943,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",") = FunctionArgument, "," => ActionFn(441); + // (> "or") = AndTest<"all">, "or" => ActionFn(441); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant30(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action441::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant30(__nt), __end)); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (2, 51) } pub(crate) fn __reduce110< @@ -19843,12 +20961,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(439); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action439::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant31(__nt), __end)); - (0, 52) + // (> "or")+ = AndTest<"all">, "or" => ActionFn(1220); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1220::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (2, 52) } pub(crate) fn __reduce111< >( @@ -19858,13 +20979,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(440); - let __sym0 = __pop_Variant31(__symbols); + // (> "or")+ = (> "or")+, AndTest<"all">, "or" => ActionFn(1221); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action440::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant31(__nt), __end)); - (1, 52) + let __end = __sym2.2; + let __nt = super::__action1221::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (3, 52) } pub(crate) fn __reduce112< >( @@ -19874,14 +20998,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")+ = FunctionArgument, "," => ActionFn(1133); + // ( ",") = FunctionArgument, "," => ActionFn(450); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant30(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1133::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant31(__nt), __end)); + let __nt = super::__action450::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant30(__nt), __end)); (2, 53) } pub(crate) fn __reduce113< @@ -19892,16 +21016,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, FunctionArgument, "," => ActionFn(1134); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant30(__symbols); - let __sym0 = __pop_Variant31(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1134::<>(mode, __sym0, __sym1, __sym2); + // ( ",")* = => ActionFn(448); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action448::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant31(__nt), __end)); - (3, 53) + (0, 54) } pub(crate) fn __reduce114< >( @@ -19911,15 +21031,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (> "and") = NotTest<"all">, "and" => ActionFn(446); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + // ( ",")* = ( ",")+ => ActionFn(449); + let __sym0 = __pop_Variant31(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action446::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 54) + let __end = __sym0.2; + let __nt = super::__action449::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant31(__nt), __end)); + (1, 54) } pub(crate) fn __reduce115< >( @@ -19929,14 +21047,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (> "and")+ = NotTest<"all">, "and" => ActionFn(1137); + // ( ",")+ = FunctionArgument, "," => ActionFn(1222); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant30(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1137::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + let __nt = super::__action1222::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant31(__nt), __end)); (2, 55) } pub(crate) fn __reduce116< @@ -19947,15 +21065,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (> "and")+ = (> "and")+, NotTest<"all">, "and" => ActionFn(1138); + // ( ",")+ = ( ",")+, FunctionArgument, "," => ActionFn(1223); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant16(__symbols); + let __sym1 = __pop_Variant30(__symbols); + let __sym0 = __pop_Variant31(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1138::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + let __nt = super::__action1223::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant31(__nt), __end)); (3, 55) } pub(crate) fn __reduce117< @@ -19966,14 +21084,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (>> ",") = OneOrMore>, "," => ActionFn(546); + // (> "and") = NotTest<"all">, "and" => ActionFn(455); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action546::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + let __nt = super::__action455::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (2, 56) } pub(crate) fn __reduce118< @@ -19984,14 +21102,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (>> ",")? = OneOrMore>, "," => ActionFn(1139); + // (> "and")+ = NotTest<"all">, "and" => ActionFn(1226); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1139::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant33(__nt), __end)); + let __nt = super::__action1226::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (2, 57) } pub(crate) fn __reduce119< @@ -20002,12 +21120,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (>> ",")? = => ActionFn(545); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action545::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant33(__nt), __end)); - (0, 57) + // (> "and")+ = (> "and")+, NotTest<"all">, "and" => ActionFn(1227); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant16(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1227::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (3, 57) } pub(crate) fn __reduce120< >( @@ -20017,14 +21139,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",") = Pattern, "," => ActionFn(336); + // (>> ",") = OneOrMore>, "," => ActionFn(590); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant34(__symbols); + let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action336::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + let __nt = super::__action590::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); (2, 58) } pub(crate) fn __reduce121< @@ -20035,12 +21157,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(401); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action401::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (0, 59) + // (>> ",")? = OneOrMore>, "," => ActionFn(1228); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1228::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant33(__nt), __end)); + (2, 59) } pub(crate) fn __reduce122< >( @@ -20050,13 +21175,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(402); - let __sym0 = __pop_Variant35(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action402::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (1, 59) + // (>> ",")? = => ActionFn(589); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action589::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant33(__nt), __end)); + (0, 59) } pub(crate) fn __reduce123< >( @@ -20066,14 +21190,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")+ = Pattern, "," => ActionFn(1156); + // ( ",") = Pattern, "," => ActionFn(338); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant34(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1156::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant35(__nt), __end)); + let __nt = super::__action338::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); (2, 60) } pub(crate) fn __reduce124< @@ -20084,16 +21208,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Pattern, "," => ActionFn(1157); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant34(__symbols); - let __sym0 = __pop_Variant35(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1157::<>(mode, __sym0, __sym1, __sym2); + // ( ",")* = => ActionFn(410); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action410::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (3, 60) + (0, 61) } pub(crate) fn __reduce125< >( @@ -20103,15 +21223,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ";") = SmallStatement, ";" => ActionFn(384); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant36(__symbols); + // ( ",")* = ( ",")+ => ActionFn(411); + let __sym0 = __pop_Variant35(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action384::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (2, 61) + let __end = __sym0.2; + let __nt = super::__action411::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant35(__nt), __end)); + (1, 61) } pub(crate) fn __reduce126< >( @@ -20121,12 +21239,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ";")* = => ActionFn(382); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action382::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (0, 62) + // ( ",")+ = Pattern, "," => ActionFn(1253); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant34(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1253::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant35(__nt), __end)); + (2, 62) } pub(crate) fn __reduce127< >( @@ -20136,13 +21257,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ";")* = ( ";")+ => ActionFn(383); - let __sym0 = __pop_Variant37(__symbols); + // ( ",")+ = ( ",")+, Pattern, "," => ActionFn(1254); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant34(__symbols); + let __sym0 = __pop_Variant35(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action383::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (1, 62) + let __end = __sym2.2; + let __nt = super::__action1254::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant35(__nt), __end)); + (3, 62) } pub(crate) fn __reduce128< >( @@ -20152,14 +21276,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ";")+ = SmallStatement, ";" => ActionFn(1160); + // ( ";") = SmallStatement, ";" => ActionFn(391); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant36(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1160::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant37(__nt), __end)); + let __nt = super::__action391::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); (2, 63) } pub(crate) fn __reduce129< @@ -20170,16 +21294,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ";")+ = ( ";")+, SmallStatement, ";" => ActionFn(1161); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant36(__symbols); - let __sym0 = __pop_Variant37(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1161::<>(mode, __sym0, __sym1, __sym2); + // ( ";")* = => ActionFn(389); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action389::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (3, 63) + (0, 64) } pub(crate) fn __reduce130< >( @@ -20189,16 +21309,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (> "as" ) = Test<"all">, "as", Identifier => ActionFn(305); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + // ( ";")* = ( ";")+ => ActionFn(390); + let __sym0 = __pop_Variant37(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action305::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant38(__nt), __end)); - (3, 64) + let __end = __sym0.2; + let __nt = super::__action390::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant37(__nt), __end)); + (1, 64) } pub(crate) fn __reduce131< >( @@ -20208,14 +21325,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",") = OneOrMore>, "," => ActionFn(1478); + // ( ";")+ = SmallStatement, ";" => ActionFn(1257); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant36(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1478::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant39(__nt), __end)); + let __nt = super::__action1257::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant37(__nt), __end)); (2, 65) } pub(crate) fn __reduce132< @@ -20226,15 +21343,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")? = OneOrMore>, "," => ActionFn(1481); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); + // ( ";")+ = ( ";")+, SmallStatement, ";" => ActionFn(1258); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant36(__symbols); + let __sym0 = __pop_Variant37(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1481::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant40(__nt), __end)); - (2, 66) + let __end = __sym2.2; + let __nt = super::__action1258::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant37(__nt), __end)); + (3, 65) } pub(crate) fn __reduce133< >( @@ -20244,12 +21362,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")? = => ActionFn(301); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action301::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant40(__nt), __end)); - (0, 66) + // (> "as" ) = Test<"all">, "as", Identifier => ActionFn(307); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action307::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant38(__nt), __end)); + (3, 66) } pub(crate) fn __reduce134< >( @@ -20259,13 +21381,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (@L string @R) = string => ActionFn(1180); - let __sym0 = __pop_Variant6(__symbols); + // ( ",") = OneOrMore>, "," => ActionFn(1613); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1180::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant41(__nt), __end)); - (1, 67) + let __end = __sym1.2; + let __nt = super::__action1613::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant39(__nt), __end)); + (2, 67) } pub(crate) fn __reduce135< >( @@ -20275,13 +21399,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (@L string @R)+ = string => ActionFn(1490); - let __sym0 = __pop_Variant6(__symbols); + // ( ",")? = OneOrMore>, "," => ActionFn(1616); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1490::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant42(__nt), __end)); - (1, 68) + let __end = __sym1.2; + let __nt = super::__action1616::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant40(__nt), __end)); + (2, 68) } pub(crate) fn __reduce136< >( @@ -20291,15 +21417,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (@L string @R)+ = (@L string @R)+, string => ActionFn(1491); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant6(__symbols); - let __sym0 = __pop_Variant42(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1491::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant42(__nt), __end)); - (2, 68) + // ( ",")? = => ActionFn(303); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action303::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant40(__nt), __end)); + (0, 68) } pub(crate) fn __reduce137< >( @@ -20309,15 +21432,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (CompOp Expression<"all">) = CompOp, Expression<"all"> => ActionFn(489); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant55(__symbols); + // (@L string @R) = string => ActionFn(1277); + let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action489::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant43(__nt), __end)); - (2, 69) + let __end = __sym0.2; + let __nt = super::__action1277::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant41(__nt), __end)); + (1, 69) } pub(crate) fn __reduce138< >( @@ -20327,15 +21448,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (CompOp Expression<"all">)+ = CompOp, Expression<"all"> => ActionFn(1492); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant55(__symbols); + // (@L string @R)+ = string => ActionFn(1625); + let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1492::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (2, 70) + let __end = __sym0.2; + let __nt = super::__action1625::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant42(__nt), __end)); + (1, 70) } pub(crate) fn __reduce139< >( @@ -20345,16 +21464,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (CompOp Expression<"all">)+ = (CompOp Expression<"all">)+, CompOp, Expression<"all"> => ActionFn(1493); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant55(__symbols); - let __sym0 = __pop_Variant44(__symbols); + // (@L string @R)+ = (@L string @R)+, string => ActionFn(1626); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant6(__symbols); + let __sym0 = __pop_Variant42(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1493::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (3, 70) + let __end = __sym1.2; + let __nt = super::__action1626::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant42(__nt), __end)); + (2, 70) } pub(crate) fn __reduce140< >( @@ -20364,13 +21482,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (Guard) = Guard => ActionFn(343); - let __sym0 = __pop_Variant14(__symbols); + // (CompOp Expression<"all">) = CompOp, Expression<"all"> => ActionFn(502); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant55(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action343::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 71) + let __end = __sym1.2; + let __nt = super::__action502::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant43(__nt), __end)); + (2, 71) } pub(crate) fn __reduce141< >( @@ -20380,13 +21500,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (Guard)? = Guard => ActionFn(1494); - let __sym0 = __pop_Variant14(__symbols); + // (CompOp Expression<"all">)+ = CompOp, Expression<"all"> => ActionFn(1627); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant55(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1494::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 72) + let __end = __sym1.2; + let __nt = super::__action1627::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant44(__nt), __end)); + (2, 72) } pub(crate) fn __reduce142< >( @@ -20396,12 +21518,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (Guard)? = => ActionFn(342); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action342::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (0, 72) + // (CompOp Expression<"all">)+ = (CompOp Expression<"all">)+, CompOp, Expression<"all"> => ActionFn(1628); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant55(__symbols); + let __sym0 = __pop_Variant44(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1628::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant44(__nt), __end)); + (3, 72) } pub(crate) fn __reduce143< >( @@ -20411,12 +21537,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (ParameterList) = ParameterList => ActionFn(276); - let __sym0 = __pop_Variant45(__symbols); + // (Guard) = Guard => ActionFn(345); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action276::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + let __nt = super::__action345::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 73) } pub(crate) fn __reduce144< @@ -20427,12 +21553,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (ParameterList)? = ParameterList => ActionFn(1497); - let __sym0 = __pop_Variant45(__symbols); + // (Guard)? = Guard => ActionFn(1629); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1497::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant46(__nt), __end)); + let __nt = super::__action1629::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (1, 74) } pub(crate) fn __reduce145< @@ -20443,11 +21569,11 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // (ParameterList)? = => ActionFn(275); + // (Guard)? = => ActionFn(344); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action275::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant46(__nt), __end)); + let __nt = super::__action344::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (0, 74) } pub(crate) fn __reduce146< @@ -20458,12 +21584,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // @L = => ActionFn(389); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action389::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant47(__nt), __end)); - (0, 75) + // (ParameterList) = ParameterList => ActionFn(278); + let __sym0 = __pop_Variant45(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action278::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant45(__nt), __end)); + (1, 75) } pub(crate) fn __reduce147< >( @@ -20473,12 +21600,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // @R = => ActionFn(388); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action388::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant47(__nt), __end)); - (0, 76) + // (ParameterList)? = ParameterList => ActionFn(1632); + let __sym0 = __pop_Variant45(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1632::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant46(__nt), __end)); + (1, 76) } pub(crate) fn __reduce148< >( @@ -20488,13 +21616,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AddOp = "+" => ActionFn(194); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action194::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 77) + // (ParameterList)? = => ActionFn(277); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action277::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant46(__nt), __end)); + (0, 76) } pub(crate) fn __reduce149< >( @@ -20504,13 +21631,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AddOp = "-" => ActionFn(195); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action195::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 77) + // @L = => ActionFn(396); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action396::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant47(__nt), __end)); + (0, 77) } pub(crate) fn __reduce150< >( @@ -20520,16 +21646,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AddOpExpr = ConstantExpr, AddOp, ConstantAtom => ActionFn(1181); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant48(__symbols); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1181::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 78) + // @R = => ActionFn(395); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action395::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant47(__nt), __end)); + (0, 78) } pub(crate) fn __reduce151< >( @@ -20539,16 +21661,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AndExpression<"all"> = AndExpression<"all">, "&", ShiftExpression<"all"> => ActionFn(1182); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + // AddOp = "+" => ActionFn(196); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1182::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 79) + let __end = __sym0.2; + let __nt = super::__action196::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 79) } pub(crate) fn __reduce152< >( @@ -20558,12 +21677,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AndExpression<"all"> = ShiftExpression<"all"> => ActionFn(450); - let __sym0 = __pop_Variant14(__symbols); + // AddOp = "-" => ActionFn(197); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action450::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + let __nt = super::__action197::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); (1, 79) } pub(crate) fn __reduce153< @@ -20574,14 +21693,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AndExpression<"no-withitems"> = AndExpression<"all">, "&", ShiftExpression<"all"> => ActionFn(1183); + // AddOpExpr = ConstantExpr, AddOp, ConstantAtom => ActionFn(1278); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant48(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1183::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1278::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (3, 80) } @@ -20593,13 +21712,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AndExpression<"no-withitems"> = ShiftExpression<"no-withitems"> => ActionFn(509); + // AndExpression<"All"> = AndExpression<"all">, "&", ShiftExpression<"all"> => ActionFn(1279); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action509::<>(mode, __sym0); + let __end = __sym2.2; + let __nt = super::__action1279::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 80) + (3, 81) } pub(crate) fn __reduce155< >( @@ -20609,15 +21731,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AndTest<"all"> = (> "and")+, NotTest<"all"> => ActionFn(1184); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant16(__symbols); + // AndExpression<"All"> = ShiftExpression<"All"> => ActionFn(485); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1184::<>(mode, __sym0, __sym1); + let __end = __sym0.2; + let __nt = super::__action485::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 81) + (1, 81) } pub(crate) fn __reduce156< >( @@ -20627,13 +21747,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AndTest<"all"> = NotTest<"all"> => ActionFn(434); + // AndExpression<"all"> = AndExpression<"all">, "&", ShiftExpression<"all"> => ActionFn(1280); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action434::<>(mode, __sym0); + let __end = __sym2.2; + let __nt = super::__action1280::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 81) + (3, 82) } pub(crate) fn __reduce157< >( @@ -20643,15 +21766,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AndTest<"no-withitems"> = (> "and")+, NotTest<"all"> => ActionFn(1185); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant16(__symbols); + // AndExpression<"all"> = ShiftExpression<"all"> => ActionFn(487); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1185::<>(mode, __sym0, __sym1); + let __end = __sym0.2; + let __nt = super::__action487::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 82) + (1, 82) } pub(crate) fn __reduce158< >( @@ -20661,13 +21782,84 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AndTest<"no-withitems"> = NotTest<"no-withitems"> => ActionFn(478); + // AndExpression<"no-withitems"> = AndExpression<"all">, "&", ShiftExpression<"all"> => ActionFn(1281); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1281::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 83) + } + pub(crate) fn __reduce159< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // AndExpression<"no-withitems"> = ShiftExpression<"no-withitems"> => ActionFn(528); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action478::<>(mode, __sym0); + let __nt = super::__action528::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 82) + (1, 83) + } + pub(crate) fn __reduce160< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // AndTest<"all"> = (> "and")+, NotTest<"all"> => ActionFn(1282); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant16(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1282::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 84) + } + pub(crate) fn __reduce161< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // AndTest<"all"> = NotTest<"all"> => ActionFn(443); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action443::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 84) + } + pub(crate) fn __reduce162< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // AndTest<"no-withitems"> = (> "and")+, NotTest<"all"> => ActionFn(1283); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant16(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1283::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 85) } pub(crate) fn __reduce163< >( @@ -20677,83 +21869,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Arguments? = Arguments => ActionFn(266); - let __sym0 = __pop_Variant49(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action266::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant50(__nt), __end)); - (1, 84) - } - pub(crate) fn __reduce164< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Arguments? = => ActionFn(267); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action267::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant50(__nt), __end)); - (0, 84) - } - pub(crate) fn __reduce165< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ArithmeticExpression<"all"> = ArithmeticExpression<"all">, AddOp, Term<"all"> => ActionFn(1187); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant48(__symbols); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1187::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 85) - } - pub(crate) fn __reduce166< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ArithmeticExpression<"all"> = Term<"all"> => ActionFn(491); + // AndTest<"no-withitems"> = NotTest<"no-withitems"> => ActionFn(493); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action491::<>(mode, __sym0); + let __nt = super::__action493::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 85) } - pub(crate) fn __reduce167< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ArithmeticExpression<"no-withitems"> = ArithmeticExpression<"all">, AddOp, Term<"all"> => ActionFn(1188); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant48(__symbols); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1188::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 86) - } pub(crate) fn __reduce168< >( mode: Mode, @@ -20762,13 +21885,28 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ArithmeticExpression<"no-withitems"> = Term<"no-withitems"> => ActionFn(536); - let __sym0 = __pop_Variant14(__symbols); + // Arguments? = Arguments => ActionFn(268); + let __sym0 = __pop_Variant49(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action536::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 86) + let __nt = super::__action268::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant50(__nt), __end)); + (1, 87) + } + pub(crate) fn __reduce169< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Arguments? = => ActionFn(269); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action269::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant50(__nt), __end)); + (0, 87) } pub(crate) fn __reduce170< >( @@ -20778,17 +21916,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AssertStatement = "assert", Test<"all">, ",", Test<"all"> => ActionFn(1190); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant14(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ArithmeticExpression<"All"> = ArithmeticExpression<"all">, AddOp, Term<"all"> => ActionFn(1285); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant48(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1190::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (4, 88) + let __end = __sym2.2; + let __nt = super::__action1285::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 88) } pub(crate) fn __reduce171< >( @@ -20798,15 +21935,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AssertStatement = "assert", Test<"all"> => ActionFn(1191); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ArithmeticExpression<"All"> = Term<"All"> => ActionFn(506); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1191::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (2, 88) + let __end = __sym0.2; + let __nt = super::__action506::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 88) } pub(crate) fn __reduce172< >( @@ -20816,15 +21951,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AssignSuffix = "=", TestListOrYieldExpr => ActionFn(28); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ArithmeticExpression<"all"> = ArithmeticExpression<"all">, AddOp, Term<"all"> => ActionFn(1286); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant48(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action28::<>(mode, __sym0, __sym1); + let __end = __sym2.2; + let __nt = super::__action1286::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 89) + (3, 89) } pub(crate) fn __reduce173< >( @@ -20834,15 +21970,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AssignSuffix = "=", LineMagicExpr => ActionFn(29); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ArithmeticExpression<"all"> = Term<"all"> => ActionFn(508); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action29::<>(mode, __sym0, __sym1); + let __end = __sym0.2; + let __nt = super::__action508::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 89) + (1, 89) } pub(crate) fn __reduce174< >( @@ -20852,12 +21986,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AssignSuffix* = => ActionFn(378); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action378::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (0, 90) + // ArithmeticExpression<"no-withitems"> = ArithmeticExpression<"all">, AddOp, Term<"all"> => ActionFn(1287); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant48(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1287::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 90) } pub(crate) fn __reduce175< >( @@ -20867,29 +22005,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AssignSuffix* = AssignSuffix+ => ActionFn(379); - let __sym0 = __pop_Variant16(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action379::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 90) - } - pub(crate) fn __reduce176< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // AssignSuffix+ = AssignSuffix => ActionFn(394); + // ArithmeticExpression<"no-withitems"> = Term<"no-withitems"> => ActionFn(544); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action394::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 91) + let __nt = super::__action544::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 90) } pub(crate) fn __reduce177< >( @@ -20899,15 +22021,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AssignSuffix+ = AssignSuffix+, AssignSuffix => ActionFn(395); - assert!(__symbols.len() >= 2); + // AssertStatement = "assert", Test<"all">, ",", Test<"all"> => ActionFn(1289); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant14(__symbols); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant16(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action395::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (2, 91) + let __end = __sym3.2; + let __nt = super::__action1289::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (4, 92) } pub(crate) fn __reduce178< >( @@ -20917,13 +22041,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AssignSuffix? = AssignSuffix => ActionFn(373); - let __sym0 = __pop_Variant14(__symbols); + // AssertStatement = "assert", Test<"all"> => ActionFn(1290); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action373::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 92) + let __end = __sym1.2; + let __nt = super::__action1290::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (2, 92) } pub(crate) fn __reduce179< >( @@ -20933,12 +22059,33 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AssignSuffix? = => ActionFn(374); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action374::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (0, 92) + // AssignSuffix = "=", TestListOrYieldExpr => ActionFn(29); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action29::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 93) + } + pub(crate) fn __reduce180< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // AssignSuffix = "=", IpyEscapeCommandExpr => ActionFn(30); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action30::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 93) } pub(crate) fn __reduce181< >( @@ -20948,13 +22095,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = Constant => ActionFn(1192); - let __sym0 = __pop_Variant56(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1192::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 93) + // AssignSuffix* = => ActionFn(385); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action385::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (0, 94) } pub(crate) fn __reduce182< >( @@ -20964,13 +22110,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = Identifier => ActionFn(1193); - let __sym0 = __pop_Variant22(__symbols); + // AssignSuffix* = AssignSuffix+ => ActionFn(386); + let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1193::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 93) + let __nt = super::__action386::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (1, 94) } pub(crate) fn __reduce183< >( @@ -20980,16 +22126,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "[", ListLiteralValues, "]" => ActionFn(1556); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant32(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // AssignSuffix+ = AssignSuffix => ActionFn(401); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1556::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 93) + let __end = __sym0.2; + let __nt = super::__action401::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (1, 95) } pub(crate) fn __reduce184< >( @@ -20999,15 +22142,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "[", "]" => ActionFn(1557); + // AssignSuffix+ = AssignSuffix+, AssignSuffix => ActionFn(402); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant16(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1557::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 93) + let __nt = super::__action402::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (2, 95) } pub(crate) fn __reduce185< >( @@ -21017,17 +22160,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "[", TestOrStarNamedExpr, CompFor, "]" => ActionFn(1195); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant53(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // AssignSuffix? = AssignSuffix => ActionFn(380); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1195::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 93) + let __end = __sym0.2; + let __nt = super::__action380::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (1, 96) } pub(crate) fn __reduce186< >( @@ -21037,19 +22176,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "(", OneOrMore>, ",", ")" => ActionFn(1196); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant32(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1196::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 93) + // AssignSuffix? = => ActionFn(381); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action381::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (0, 96) } - pub(crate) fn __reduce187< + pub(crate) fn __reduce188< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -21057,18 +22191,50 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "(", OneOrMore>, ")" => ActionFn(1197); + // Atom<"All"> = Constant => ActionFn(1291); + let __sym0 = __pop_Variant56(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1291::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 97) + } + pub(crate) fn __reduce189< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Atom<"All"> = Identifier => ActionFn(1292); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1292::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 97) + } + pub(crate) fn __reduce190< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Atom<"All"> = "[", ListLiteralValues, "]" => ActionFn(1693); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant32(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1197::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1693::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 93) + (3, 97) } - pub(crate) fn __reduce196< + pub(crate) fn __reduce191< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -21076,17 +22242,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "(", ")" => ActionFn(1206); + // Atom<"All"> = "[", "]" => ActionFn(1694); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1206::<>(mode, __sym0, __sym1); + let __nt = super::__action1694::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 93) + (2, 97) } - pub(crate) fn __reduce197< + pub(crate) fn __reduce192< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -21094,26 +22260,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "(", YieldExpr, ")" => ActionFn(524); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action524::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 93) - } - pub(crate) fn __reduce198< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"all"> = "(", NamedExpressionTest, CompFor, ")" => ActionFn(1207); + // Atom<"All"> = "[", TestOrStarNamedExpr, CompFor, "]" => ActionFn(1294); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant53(__symbols); @@ -21121,11 +22268,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1207::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1294::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 93) + (4, 97) } - pub(crate) fn __reduce200< + pub(crate) fn __reduce193< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -21133,54 +22280,36 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "{", DictLiteralValues, "}" => ActionFn(1540); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant61(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1540::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 93) - } - pub(crate) fn __reduce201< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"all"> = "{", "}" => ActionFn(1541); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1541::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 93) - } - pub(crate) fn __reduce202< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"all"> = "{", DictEntry, CompFor, "}" => ActionFn(1210); + // Atom<"All"> = "(", OneOrMore>, ",", ")" => ActionFn(1295); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant53(__symbols); - let __sym1 = __pop_Variant60(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1210::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1295::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 93) + (4, 97) + } + pub(crate) fn __reduce194< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Atom<"All"> = "(", OneOrMore>, ")" => ActionFn(1296); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1296::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 97) } pub(crate) fn __reduce203< >( @@ -21190,16 +22319,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "{", SetLiteralValues, "}" => ActionFn(1211); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant32(__symbols); + // Atom<"All"> = "(", ")" => ActionFn(1305); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1211::<>(mode, __sym0, __sym1, __sym2); + let __end = __sym1.2; + let __nt = super::__action1305::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 93) + (2, 97) } pub(crate) fn __reduce204< >( @@ -21209,17 +22337,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "{", NamedExpressionTest, CompFor, "}" => ActionFn(1212); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant53(__symbols); + // Atom<"All"> = "(", YieldExpr, ")" => ActionFn(572); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1212::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __end = __sym2.2; + let __nt = super::__action572::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 93) + (3, 97) } pub(crate) fn __reduce205< >( @@ -21229,29 +22356,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "True" => ActionFn(1213); + // Atom<"All"> = "(", NamedExpressionTest, CompFor, ")" => ActionFn(1306); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant53(__symbols); + let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1213::<>(mode, __sym0); + let __end = __sym3.2; + let __nt = super::__action1306::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 93) - } - pub(crate) fn __reduce206< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"all"> = "False" => ActionFn(1214); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1214::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 93) + (4, 97) } pub(crate) fn __reduce207< >( @@ -21261,13 +22376,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "None" => ActionFn(1215); + // Atom<"All"> = "{", DictLiteralValues, "}" => ActionFn(1675); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant61(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1215::<>(mode, __sym0); + let __end = __sym2.2; + let __nt = super::__action1675::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 93) + (3, 97) } pub(crate) fn __reduce208< >( @@ -21277,13 +22395,35 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = "..." => ActionFn(1216); + // Atom<"All"> = "{", "}" => ActionFn(1676); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1216::<>(mode, __sym0); + let __end = __sym1.2; + let __nt = super::__action1676::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 93) + (2, 97) + } + pub(crate) fn __reduce209< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Atom<"All"> = "{", DictEntry, CompFor, "}" => ActionFn(1309); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant53(__symbols); + let __sym1 = __pop_Variant60(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action1309::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 97) } pub(crate) fn __reduce210< >( @@ -21293,13 +22433,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"no-withitems"> = Constant => ActionFn(1217); - let __sym0 = __pop_Variant56(__symbols); + // Atom<"All"> = "{", SetLiteralValues, "}" => ActionFn(1310); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1217::<>(mode, __sym0); + let __end = __sym2.2; + let __nt = super::__action1310::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 94) + (3, 97) } pub(crate) fn __reduce211< >( @@ -21309,13 +22452,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"no-withitems"> = Identifier => ActionFn(1218); - let __sym0 = __pop_Variant22(__symbols); + // Atom<"All"> = "{", NamedExpressionTest, CompFor, "}" => ActionFn(1311); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant53(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1218::<>(mode, __sym0); + let __end = __sym3.2; + let __nt = super::__action1311::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 94) + (4, 97) } pub(crate) fn __reduce212< >( @@ -21325,16 +22472,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"no-withitems"> = "[", ListLiteralValues, "]" => ActionFn(1558); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant32(__symbols); + // Atom<"All"> = "True" => ActionFn(1312); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1558::<>(mode, __sym0, __sym1, __sym2); + let __end = __sym0.2; + let __nt = super::__action1312::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 94) + (1, 97) } pub(crate) fn __reduce213< >( @@ -21344,15 +22488,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"no-withitems"> = "[", "]" => ActionFn(1559); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); + // Atom<"All"> = "False" => ActionFn(1313); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1559::<>(mode, __sym0, __sym1); + let __end = __sym0.2; + let __nt = super::__action1313::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 94) + (1, 97) } pub(crate) fn __reduce214< >( @@ -21362,7 +22504,108 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"no-withitems"> = "[", TestOrStarNamedExpr, CompFor, "]" => ActionFn(1220); + // Atom<"All"> = "None" => ActionFn(1314); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1314::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 97) + } + pub(crate) fn __reduce215< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Atom<"All"> = "..." => ActionFn(1315); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1315::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 97) + } + pub(crate) fn __reduce217< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Atom<"all"> = Constant => ActionFn(1316); + let __sym0 = __pop_Variant56(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1316::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 98) + } + pub(crate) fn __reduce218< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Atom<"all"> = Identifier => ActionFn(1317); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1317::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 98) + } + pub(crate) fn __reduce219< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Atom<"all"> = "[", ListLiteralValues, "]" => ActionFn(1695); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1695::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 98) + } + pub(crate) fn __reduce220< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Atom<"all"> = "[", "]" => ActionFn(1696); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1696::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 98) + } + pub(crate) fn __reduce221< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Atom<"all"> = "[", TestOrStarNamedExpr, CompFor, "]" => ActionFn(1319); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant53(__symbols); @@ -21370,9 +22613,29 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1220::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1319::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 94) + (4, 98) + } + pub(crate) fn __reduce222< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Atom<"all"> = "(", OneOrMore>, ",", ")" => ActionFn(1320); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action1320::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 98) } pub(crate) fn __reduce223< >( @@ -21382,150 +22645,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"no-withitems"> = "(", ")" => ActionFn(1229); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1229::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 94) - } - pub(crate) fn __reduce224< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"no-withitems"> = "(", YieldExpr, ")" => ActionFn(568); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action568::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 94) - } - pub(crate) fn __reduce225< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"no-withitems"> = "(", NamedExpressionTest, CompFor, ")" => ActionFn(1230); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant53(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1230::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 94) - } - pub(crate) fn __reduce227< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"no-withitems"> = "{", DictLiteralValues, "}" => ActionFn(1542); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant61(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1542::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 94) - } - pub(crate) fn __reduce228< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"no-withitems"> = "{", "}" => ActionFn(1543); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1543::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 94) - } - pub(crate) fn __reduce229< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"no-withitems"> = "{", DictEntry, CompFor, "}" => ActionFn(1233); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant53(__symbols); - let __sym1 = __pop_Variant60(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1233::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 94) - } - pub(crate) fn __reduce230< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"no-withitems"> = "{", SetLiteralValues, "}" => ActionFn(1234); + // Atom<"all"> = "(", OneOrMore>, ")" => ActionFn(1321); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant32(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1234::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1321::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 94) - } - pub(crate) fn __reduce231< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"no-withitems"> = "{", NamedExpressionTest, CompFor, "}" => ActionFn(1235); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant53(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1235::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 94) + (3, 98) } pub(crate) fn __reduce232< >( @@ -21535,13 +22664,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"no-withitems"> = "True" => ActionFn(1236); + // Atom<"all"> = "(", ")" => ActionFn(1330); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1236::<>(mode, __sym0); + let __end = __sym1.2; + let __nt = super::__action1330::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 94) + (2, 98) } pub(crate) fn __reduce233< >( @@ -21551,13 +22682,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"no-withitems"> = "False" => ActionFn(1237); + // Atom<"all"> = "(", YieldExpr, ")" => ActionFn(553); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1237::<>(mode, __sym0); + let __end = __sym2.2; + let __nt = super::__action553::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 94) + (3, 98) } pub(crate) fn __reduce234< >( @@ -21567,29 +22701,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"no-withitems"> = "None" => ActionFn(1238); + // Atom<"all"> = "(", NamedExpressionTest, CompFor, ")" => ActionFn(1331); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant53(__symbols); + let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1238::<>(mode, __sym0); + let __end = __sym3.2; + let __nt = super::__action1331::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 94) - } - pub(crate) fn __reduce235< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Atom<"no-withitems"> = "..." => ActionFn(1239); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1239::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 94) + (4, 98) } pub(crate) fn __reduce236< >( @@ -21599,13 +22721,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AtomExpr2<"all"> = Atom<"all"> => ActionFn(512); - let __sym0 = __pop_Variant14(__symbols); + // Atom<"all"> = "{", DictLiteralValues, "}" => ActionFn(1677); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant61(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action512::<>(mode, __sym0); + let __end = __sym2.2; + let __nt = super::__action1677::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 95) + (3, 98) } pub(crate) fn __reduce237< >( @@ -21615,15 +22740,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AtomExpr2<"all"> = AtomExpr2<"all">, Arguments => ActionFn(1240); + // Atom<"all"> = "{", "}" => ActionFn(1678); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant49(__symbols); - let __sym0 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1240::<>(mode, __sym0, __sym1); + let __nt = super::__action1678::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 95) + (2, 98) } pub(crate) fn __reduce238< >( @@ -21633,17 +22758,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AtomExpr2<"all"> = AtomExpr2<"all">, "[", SubscriptList, "]" => ActionFn(1241); + // Atom<"all"> = "{", DictEntry, CompFor, "}" => ActionFn(1334); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + let __sym2 = __pop_Variant53(__symbols); + let __sym1 = __pop_Variant60(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1241::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1334::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 95) + (4, 98) } pub(crate) fn __reduce239< >( @@ -21653,16 +22778,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AtomExpr2<"all"> = AtomExpr2<"all">, ".", Identifier => ActionFn(1242); + // Atom<"all"> = "{", SetLiteralValues, "}" => ActionFn(1335); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1242::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1335::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 95) + (3, 98) } pub(crate) fn __reduce240< >( @@ -21672,13 +22797,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AtomExpr2<"no-withitems"> = Atom<"no-withitems"> => ActionFn(557); - let __sym0 = __pop_Variant14(__symbols); + // Atom<"all"> = "{", NamedExpressionTest, CompFor, "}" => ActionFn(1336); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant53(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action557::<>(mode, __sym0); + let __end = __sym3.2; + let __nt = super::__action1336::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 96) + (4, 98) } pub(crate) fn __reduce241< >( @@ -21688,15 +22817,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AtomExpr2<"no-withitems"> = AtomExpr2<"all">, Arguments => ActionFn(1243); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant49(__symbols); - let __sym0 = __pop_Variant14(__symbols); + // Atom<"all"> = "True" => ActionFn(1337); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1243::<>(mode, __sym0, __sym1); + let __end = __sym0.2; + let __nt = super::__action1337::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 96) + (1, 98) } pub(crate) fn __reduce242< >( @@ -21706,17 +22833,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AtomExpr2<"no-withitems"> = AtomExpr2<"all">, "[", SubscriptList, "]" => ActionFn(1244); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + // Atom<"all"> = "False" => ActionFn(1338); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1244::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __end = __sym0.2; + let __nt = super::__action1338::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 96) + (1, 98) } pub(crate) fn __reduce243< >( @@ -21726,16 +22849,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AtomExpr2<"no-withitems"> = AtomExpr2<"all">, ".", Identifier => ActionFn(1245); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + // Atom<"all"> = "None" => ActionFn(1339); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1245::<>(mode, __sym0, __sym1, __sym2); + let __end = __sym0.2; + let __nt = super::__action1339::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 96) + (1, 98) } pub(crate) fn __reduce244< >( @@ -21745,31 +22865,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AtomExpr<"all"> = "await", AtomExpr2<"all"> => ActionFn(1246); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); + // Atom<"all"> = "..." => ActionFn(1340); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1246::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 97) - } - pub(crate) fn __reduce245< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // AtomExpr<"all"> = AtomExpr2<"all"> => ActionFn(507); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action507::<>(mode, __sym0); + let __nt = super::__action1340::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 97) + (1, 98) } pub(crate) fn __reduce246< >( @@ -21779,15 +22881,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AtomExpr<"no-withitems"> = "await", AtomExpr2<"all"> => ActionFn(1247); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // Atom<"no-withitems"> = Constant => ActionFn(1341); + let __sym0 = __pop_Variant56(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1247::<>(mode, __sym0, __sym1); + let __end = __sym0.2; + let __nt = super::__action1341::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 98) + (1, 99) } pub(crate) fn __reduce247< >( @@ -21797,13 +22897,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AtomExpr<"no-withitems"> = AtomExpr2<"no-withitems"> => ActionFn(556); - let __sym0 = __pop_Variant14(__symbols); + // Atom<"no-withitems"> = Identifier => ActionFn(1342); + let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action556::<>(mode, __sym0); + let __nt = super::__action1342::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 98) + (1, 99) } pub(crate) fn __reduce248< >( @@ -21813,13 +22913,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AugAssign = "+=" => ActionFn(39); + // Atom<"no-withitems"> = "[", ListLiteralValues, "]" => ActionFn(1697); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action39::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) + let __end = __sym2.2; + let __nt = super::__action1697::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 99) } pub(crate) fn __reduce249< >( @@ -21829,13 +22932,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AugAssign = "-=" => ActionFn(40); + // Atom<"no-withitems"> = "[", "]" => ActionFn(1698); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action40::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) + let __end = __sym1.2; + let __nt = super::__action1698::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 99) } pub(crate) fn __reduce250< >( @@ -21845,141 +22950,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AugAssign = "*=" => ActionFn(41); + // Atom<"no-withitems"> = "[", TestOrStarNamedExpr, CompFor, "]" => ActionFn(1344); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant53(__symbols); + let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action41::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) - } - pub(crate) fn __reduce251< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // AugAssign = "@=" => ActionFn(42); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action42::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) - } - pub(crate) fn __reduce252< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // AugAssign = "/=" => ActionFn(43); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action43::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) - } - pub(crate) fn __reduce253< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // AugAssign = "%=" => ActionFn(44); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action44::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) - } - pub(crate) fn __reduce254< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // AugAssign = "&=" => ActionFn(45); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action45::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) - } - pub(crate) fn __reduce255< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // AugAssign = "|=" => ActionFn(46); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action46::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) - } - pub(crate) fn __reduce256< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // AugAssign = "^=" => ActionFn(47); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action47::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) - } - pub(crate) fn __reduce257< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // AugAssign = "<<=" => ActionFn(48); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action48::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) - } - pub(crate) fn __reduce258< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // AugAssign = ">>=" => ActionFn(49); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action49::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) + let __end = __sym3.2; + let __nt = super::__action1344::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 99) } pub(crate) fn __reduce259< >( @@ -21989,13 +22970,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AugAssign = "**=" => ActionFn(50); + // Atom<"no-withitems"> = "(", ")" => ActionFn(1353); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action50::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) + let __end = __sym1.2; + let __nt = super::__action1353::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 99) } pub(crate) fn __reduce260< >( @@ -22005,13 +22988,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AugAssign = "//=" => ActionFn(51); + // Atom<"no-withitems"> = "(", YieldExpr, ")" => ActionFn(614); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action51::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 99) + let __end = __sym2.2; + let __nt = super::__action614::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 99) } pub(crate) fn __reduce261< >( @@ -22021,35 +23007,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CapturePattern = Identifier => ActionFn(1248); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1248::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 100) - } - pub(crate) fn __reduce262< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ClassDef = "class", Identifier, TypeParams, Arguments, ":", Suite => ActionFn(1712); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant24(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant49(__symbols); - let __sym2 = __pop_Variant91(__symbols); - let __sym1 = __pop_Variant22(__symbols); + // Atom<"no-withitems"> = "(", NamedExpressionTest, CompFor, ")" => ActionFn(1354); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant53(__symbols); + let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action1712::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (6, 101) + let __end = __sym3.2; + let __nt = super::__action1354::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 99) } pub(crate) fn __reduce263< >( @@ -22059,18 +23027,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassDef = "class", Identifier, Arguments, ":", Suite => ActionFn(1713); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant24(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant49(__symbols); - let __sym1 = __pop_Variant22(__symbols); + // Atom<"no-withitems"> = "{", DictLiteralValues, "}" => ActionFn(1679); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant61(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1713::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (5, 101) + let __end = __sym2.2; + let __nt = super::__action1679::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 99) } pub(crate) fn __reduce264< >( @@ -22080,20 +23046,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassDef = Decorator+, "class", Identifier, TypeParams, Arguments, ":", Suite => ActionFn(1714); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant24(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant49(__symbols); - let __sym3 = __pop_Variant91(__symbols); - let __sym2 = __pop_Variant22(__symbols); + // Atom<"no-withitems"> = "{", "}" => ActionFn(1680); + assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant58(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym6.2; - let __nt = super::__action1714::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 101) + let __end = __sym1.2; + let __nt = super::__action1680::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 99) } pub(crate) fn __reduce265< >( @@ -22103,19 +23064,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassDef = Decorator+, "class", Identifier, Arguments, ":", Suite => ActionFn(1715); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant24(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant49(__symbols); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant58(__symbols); + // Atom<"no-withitems"> = "{", DictEntry, CompFor, "}" => ActionFn(1357); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant53(__symbols); + let __sym1 = __pop_Variant60(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action1715::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (6, 101) + let __end = __sym3.2; + let __nt = super::__action1357::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 99) } pub(crate) fn __reduce266< >( @@ -22125,18 +23084,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassDef = "class", Identifier, TypeParams, ":", Suite => ActionFn(1716); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant24(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant91(__symbols); - let __sym1 = __pop_Variant22(__symbols); + // Atom<"no-withitems"> = "{", SetLiteralValues, "}" => ActionFn(1358); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant32(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1716::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (5, 101) + let __end = __sym2.2; + let __nt = super::__action1358::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 99) } pub(crate) fn __reduce267< >( @@ -22146,17 +23103,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassDef = "class", Identifier, ":", Suite => ActionFn(1717); + // Atom<"no-withitems"> = "{", NamedExpressionTest, CompFor, "}" => ActionFn(1359); assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant24(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant22(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant53(__symbols); + let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1717::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (4, 101) + let __nt = super::__action1359::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 99) } pub(crate) fn __reduce268< >( @@ -22166,19 +23123,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassDef = Decorator+, "class", Identifier, TypeParams, ":", Suite => ActionFn(1718); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant24(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant91(__symbols); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant58(__symbols); + // Atom<"no-withitems"> = "True" => ActionFn(1360); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action1718::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (6, 101) + let __end = __sym0.2; + let __nt = super::__action1360::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 99) } pub(crate) fn __reduce269< >( @@ -22188,18 +23139,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassDef = Decorator+, "class", Identifier, ":", Suite => ActionFn(1719); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant24(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant58(__symbols); + // Atom<"no-withitems"> = "False" => ActionFn(1361); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1719::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (5, 101) + let __end = __sym0.2; + let __nt = super::__action1361::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 99) } pub(crate) fn __reduce270< >( @@ -22209,20 +23155,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchName, "(", OneOrMore, ",", OneOrMore, ",", ")" => ActionFn(1249); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant78(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant52(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + // Atom<"no-withitems"> = "None" => ActionFn(1362); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym6.2; - let __nt = super::__action1249::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (7, 102) + let __end = __sym0.2; + let __nt = super::__action1362::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 99) } pub(crate) fn __reduce271< >( @@ -22232,19 +23171,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchName, "(", OneOrMore, ",", OneOrMore, ")" => ActionFn(1250); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant78(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant52(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + // Atom<"no-withitems"> = "..." => ActionFn(1363); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action1250::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (6, 102) + let __end = __sym0.2; + let __nt = super::__action1363::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 99) } pub(crate) fn __reduce272< >( @@ -22254,18 +23187,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchName, "(", OneOrMore, ",", ")" => ActionFn(1251); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant52(__symbols); - let __sym1 = __pop_Variant0(__symbols); + // AtomExpr2<"All"> = Atom<"All"> => ActionFn(533); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1251::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (5, 102) + let __end = __sym0.2; + let __nt = super::__action533::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 100) } pub(crate) fn __reduce273< >( @@ -22275,17 +23203,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchName, "(", OneOrMore, ")" => ActionFn(1252); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant52(__symbols); - let __sym1 = __pop_Variant0(__symbols); + // AtomExpr2<"All"> = AtomExpr2<"all">, Arguments => ActionFn(1364); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant49(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1252::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (4, 102) + let __end = __sym1.2; + let __nt = super::__action1364::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 100) } pub(crate) fn __reduce274< >( @@ -22295,18 +23221,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchName, "(", OneOrMore, ",", ")" => ActionFn(1253); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); + // AtomExpr2<"All"> = AtomExpr2<"all">, "[", SubscriptList, "]" => ActionFn(1365); + assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant78(__symbols); + let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1253::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (5, 102) + let __end = __sym3.2; + let __nt = super::__action1365::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 100) } pub(crate) fn __reduce275< >( @@ -22316,17 +23241,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchName, "(", OneOrMore, ")" => ActionFn(1254); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant78(__symbols); + // AtomExpr2<"All"> = AtomExpr2<"all">, ".", Identifier => ActionFn(1366); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant22(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1254::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (4, 102) + let __end = __sym2.2; + let __nt = super::__action1366::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 100) } pub(crate) fn __reduce276< >( @@ -22336,16 +23260,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchName, "(", ")" => ActionFn(1255); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); + // AtomExpr2<"all"> = Atom<"all"> => ActionFn(537); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1255::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (3, 102) + let __end = __sym0.2; + let __nt = super::__action537::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 101) } pub(crate) fn __reduce277< >( @@ -22355,20 +23276,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ",", OneOrMore, ",", ")" => ActionFn(1256); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant78(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant52(__symbols); - let __sym1 = __pop_Variant0(__symbols); + // AtomExpr2<"all"> = AtomExpr2<"all">, Arguments => ActionFn(1367); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant49(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym6.2; - let __nt = super::__action1256::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (7, 102) + let __end = __sym1.2; + let __nt = super::__action1367::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 101) } pub(crate) fn __reduce278< >( @@ -22378,19 +23294,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ",", OneOrMore, ")" => ActionFn(1257); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant78(__symbols); + // AtomExpr2<"all"> = AtomExpr2<"all">, "[", SubscriptList, "]" => ActionFn(1368); + assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant52(__symbols); + let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action1257::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (6, 102) + let __end = __sym3.2; + let __nt = super::__action1368::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (4, 101) } pub(crate) fn __reduce279< >( @@ -22400,18 +23314,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ",", ")" => ActionFn(1258); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant52(__symbols); + // AtomExpr2<"all"> = AtomExpr2<"all">, ".", Identifier => ActionFn(1369); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant22(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1258::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (5, 102) + let __end = __sym2.2; + let __nt = super::__action1369::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 101) } pub(crate) fn __reduce280< >( @@ -22421,17 +23333,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ")" => ActionFn(1259); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant52(__symbols); - let __sym1 = __pop_Variant0(__symbols); + // AtomExpr2<"no-withitems"> = Atom<"no-withitems"> => ActionFn(603); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1259::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (4, 102) + let __end = __sym0.2; + let __nt = super::__action603::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 102) } pub(crate) fn __reduce281< >( @@ -22441,18 +23349,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ",", ")" => ActionFn(1260); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant78(__symbols); - let __sym1 = __pop_Variant0(__symbols); + // AtomExpr2<"no-withitems"> = AtomExpr2<"all">, Arguments => ActionFn(1370); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant49(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1260::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (5, 102) + let __end = __sym1.2; + let __nt = super::__action1370::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 102) } pub(crate) fn __reduce282< >( @@ -22462,16 +23367,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ")" => ActionFn(1261); + // AtomExpr2<"no-withitems"> = AtomExpr2<"all">, "[", SubscriptList, "]" => ActionFn(1371); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant78(__symbols); + let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1261::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + let __nt = super::__action1371::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (4, 102) } pub(crate) fn __reduce283< @@ -22482,15 +23387,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClassPattern = MatchNameOrAttr, "(", ")" => ActionFn(1262); + // AtomExpr2<"no-withitems"> = AtomExpr2<"all">, ".", Identifier => ActionFn(1372); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant22(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1262::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + let __nt = super::__action1372::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (3, 102) } pub(crate) fn __reduce284< @@ -22501,13 +23406,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClosedPattern = LiteralPattern => ActionFn(96); - let __sym0 = __pop_Variant34(__symbols); + // AtomExpr<"All"> = "await", AtomExpr2<"all"> => ActionFn(1373); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action96::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 103) + let __end = __sym1.2; + let __nt = super::__action1373::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 103) } pub(crate) fn __reduce285< >( @@ -22517,12 +23424,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClosedPattern = CapturePattern => ActionFn(97); - let __sym0 = __pop_Variant34(__symbols); + // AtomExpr<"All"> = AtomExpr2<"All"> => ActionFn(530); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action97::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + let __nt = super::__action530::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 103) } pub(crate) fn __reduce286< @@ -22533,13 +23440,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClosedPattern = StarPattern => ActionFn(98); - let __sym0 = __pop_Variant34(__symbols); + // AtomExpr<"all"> = "await", AtomExpr2<"all"> => ActionFn(1374); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action98::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 103) + let __end = __sym1.2; + let __nt = super::__action1374::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 104) } pub(crate) fn __reduce287< >( @@ -22549,13 +23458,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClosedPattern = ValuePattern => ActionFn(99); - let __sym0 = __pop_Variant34(__symbols); + // AtomExpr<"all"> = AtomExpr2<"all"> => ActionFn(532); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action99::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 103) + let __nt = super::__action532::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 104) } pub(crate) fn __reduce288< >( @@ -22565,13 +23474,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClosedPattern = SequencePattern => ActionFn(100); - let __sym0 = __pop_Variant34(__symbols); + // AtomExpr<"no-withitems"> = "await", AtomExpr2<"all"> => ActionFn(1375); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action100::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 103) + let __end = __sym1.2; + let __nt = super::__action1375::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 105) } pub(crate) fn __reduce289< >( @@ -22581,13 +23492,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClosedPattern = MappingPattern => ActionFn(101); - let __sym0 = __pop_Variant34(__symbols); + // AtomExpr<"no-withitems"> = AtomExpr2<"no-withitems"> => ActionFn(602); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action101::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 103) + let __nt = super::__action602::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 105) } pub(crate) fn __reduce290< >( @@ -22597,13 +23508,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ClosedPattern = ClassPattern => ActionFn(102); - let __sym0 = __pop_Variant34(__symbols); + // AugAssign = "+=" => ActionFn(40); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action102::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 103) + let __nt = super::__action40::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce291< >( @@ -22613,13 +23524,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = FunctionArgument => ActionFn(1506); - let __sym0 = __pop_Variant30(__symbols); + // AugAssign = "-=" => ActionFn(41); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1506::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant51(__nt), __end)); - (1, 104) + let __nt = super::__action41::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce292< >( @@ -22629,12 +23540,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = => ActionFn(1507); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action1507::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant51(__nt), __end)); - (0, 104) + // AugAssign = "*=" => ActionFn(42); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action42::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce293< >( @@ -22644,15 +23556,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = ( ",")+, FunctionArgument => ActionFn(1508); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant30(__symbols); - let __sym0 = __pop_Variant31(__symbols); + // AugAssign = "@=" => ActionFn(43); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1508::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant51(__nt), __end)); - (2, 104) + let __end = __sym0.2; + let __nt = super::__action43::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce294< >( @@ -22662,13 +23572,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(1509); - let __sym0 = __pop_Variant31(__symbols); + // AugAssign = "/=" => ActionFn(44); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1509::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant51(__nt), __end)); - (1, 104) + let __nt = super::__action44::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce295< >( @@ -22678,13 +23588,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = Pattern => ActionFn(1514); - let __sym0 = __pop_Variant34(__symbols); + // AugAssign = "%=" => ActionFn(45); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1514::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant52(__nt), __end)); - (1, 105) + let __nt = super::__action45::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce296< >( @@ -22694,12 +23604,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = => ActionFn(1515); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action1515::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant52(__nt), __end)); - (0, 105) + // AugAssign = "&=" => ActionFn(46); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action46::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce297< >( @@ -22709,15 +23620,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = ( ",")+, Pattern => ActionFn(1516); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant34(__symbols); - let __sym0 = __pop_Variant35(__symbols); + // AugAssign = "|=" => ActionFn(47); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1516::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant52(__nt), __end)); - (2, 105) + let __end = __sym0.2; + let __nt = super::__action47::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce298< >( @@ -22727,13 +23636,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(1517); - let __sym0 = __pop_Variant35(__symbols); + // AugAssign = "^=" => ActionFn(48); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1517::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant52(__nt), __end)); - (1, 105) + let __nt = super::__action48::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce299< >( @@ -22743,12 +23652,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompFor = SingleForComprehension+ => ActionFn(222); - let __sym0 = __pop_Variant85(__symbols); + // AugAssign = "<<=" => ActionFn(49); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action222::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant53(__nt), __end)); + let __nt = super::__action49::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); (1, 106) } pub(crate) fn __reduce300< @@ -22759,13 +23668,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompFor? = CompFor => ActionFn(235); - let __sym0 = __pop_Variant53(__symbols); + // AugAssign = ">>=" => ActionFn(50); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action235::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant54(__nt), __end)); - (1, 107) + let __nt = super::__action50::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce301< >( @@ -22775,12 +23684,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompFor? = => ActionFn(236); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action236::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant54(__nt), __end)); - (0, 107) + // AugAssign = "**=" => ActionFn(51); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action51::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce302< >( @@ -22790,13 +23700,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompOp = "==" => ActionFn(182); + // AugAssign = "//=" => ActionFn(52); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action182::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant55(__nt), __end)); - (1, 108) + let __nt = super::__action52::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 106) } pub(crate) fn __reduce303< >( @@ -22806,13 +23716,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompOp = "!=" => ActionFn(183); - let __sym0 = __pop_Variant0(__symbols); + // CapturePattern = Identifier => ActionFn(1376); + let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action183::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant55(__nt), __end)); - (1, 108) + let __nt = super::__action1376::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 107) } pub(crate) fn __reduce304< >( @@ -22822,13 +23732,19 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompOp = "<" => ActionFn(184); + // ClassDef = "class", Identifier, TypeParams, Arguments, ":", Suite => ActionFn(1851); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant24(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant49(__symbols); + let __sym2 = __pop_Variant91(__symbols); + let __sym1 = __pop_Variant22(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action184::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant55(__nt), __end)); - (1, 108) + let __end = __sym5.2; + let __nt = super::__action1851::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (6, 108) } pub(crate) fn __reduce305< >( @@ -22838,13 +23754,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompOp = "<=" => ActionFn(185); + // ClassDef = "class", Identifier, Arguments, ":", Suite => ActionFn(1852); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant24(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant49(__symbols); + let __sym1 = __pop_Variant22(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action185::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant55(__nt), __end)); - (1, 108) + let __end = __sym4.2; + let __nt = super::__action1852::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (5, 108) } pub(crate) fn __reduce306< >( @@ -22854,13 +23775,20 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompOp = ">" => ActionFn(186); - let __sym0 = __pop_Variant0(__symbols); + // ClassDef = Decorator+, "class", Identifier, TypeParams, Arguments, ":", Suite => ActionFn(1853); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant24(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant49(__symbols); + let __sym3 = __pop_Variant91(__symbols); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action186::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant55(__nt), __end)); - (1, 108) + let __end = __sym6.2; + let __nt = super::__action1853::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (7, 108) } pub(crate) fn __reduce307< >( @@ -22870,13 +23798,19 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompOp = ">=" => ActionFn(187); - let __sym0 = __pop_Variant0(__symbols); + // ClassDef = Decorator+, "class", Identifier, Arguments, ":", Suite => ActionFn(1854); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant24(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant49(__symbols); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action187::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant55(__nt), __end)); - (1, 108) + let __end = __sym5.2; + let __nt = super::__action1854::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (6, 108) } pub(crate) fn __reduce308< >( @@ -22886,13 +23820,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompOp = "in" => ActionFn(188); + // ClassDef = "class", Identifier, TypeParams, ":", Suite => ActionFn(1855); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant24(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant91(__symbols); + let __sym1 = __pop_Variant22(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action188::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant55(__nt), __end)); - (1, 108) + let __end = __sym4.2; + let __nt = super::__action1855::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (5, 108) } pub(crate) fn __reduce309< >( @@ -22902,15 +23841,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompOp = "not", "in" => ActionFn(189); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); + // ClassDef = "class", Identifier, ":", Suite => ActionFn(1856); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant22(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action189::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant55(__nt), __end)); - (2, 108) + let __end = __sym3.2; + let __nt = super::__action1856::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (4, 108) } pub(crate) fn __reduce310< >( @@ -22920,13 +23861,19 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompOp = "is" => ActionFn(190); - let __sym0 = __pop_Variant0(__symbols); + // ClassDef = Decorator+, "class", Identifier, TypeParams, ":", Suite => ActionFn(1857); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant24(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant91(__symbols); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action190::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant55(__nt), __end)); - (1, 108) + let __end = __sym5.2; + let __nt = super::__action1857::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (6, 108) } pub(crate) fn __reduce311< >( @@ -22936,15 +23883,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompOp = "is", "not" => ActionFn(191); - assert!(__symbols.len() >= 2); + // ClassDef = Decorator+, "class", Identifier, ":", Suite => ActionFn(1858); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant24(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant22(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action191::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant55(__nt), __end)); - (2, 108) + let __end = __sym4.2; + let __nt = super::__action1858::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (5, 108) } pub(crate) fn __reduce312< >( @@ -22954,15 +23904,20 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comparison<"all"> = Expression<"all">, (CompOp Expression<"all">)+ => ActionFn(1263); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant44(__symbols); + // ClassPattern = MatchName, "(", OneOrMore, ",", OneOrMore, ",", ")" => ActionFn(1377); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant78(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant52(__symbols); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1263::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 109) + let __end = __sym6.2; + let __nt = super::__action1377::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (7, 109) } pub(crate) fn __reduce313< >( @@ -22972,13 +23927,19 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comparison<"all"> = Expression<"all"> => ActionFn(486); + // ClassPattern = MatchName, "(", OneOrMore, ",", OneOrMore, ")" => ActionFn(1378); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant78(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant52(__symbols); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action486::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 109) + let __end = __sym5.2; + let __nt = super::__action1378::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (6, 109) } pub(crate) fn __reduce314< >( @@ -22988,15 +23949,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comparison<"no-withitems"> = Expression<"all">, (CompOp Expression<"all">)+ => ActionFn(1264); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant44(__symbols); + // ClassPattern = MatchName, "(", OneOrMore, ",", ")" => ActionFn(1379); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant52(__symbols); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1264::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 110) + let __end = __sym4.2; + let __nt = super::__action1379::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (5, 109) } pub(crate) fn __reduce315< >( @@ -23006,13 +23970,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comparison<"no-withitems"> = Expression<"no-withitems"> => ActionFn(495); + // ClassPattern = MatchName, "(", OneOrMore, ")" => ActionFn(1380); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant52(__symbols); + let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action495::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 110) + let __end = __sym3.2; + let __nt = super::__action1380::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (4, 109) } pub(crate) fn __reduce316< >( @@ -23022,13 +23990,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompoundStatement = MatchStatement => ActionFn(75); - let __sym0 = __pop_Variant36(__symbols); + // ClassPattern = MatchName, "(", OneOrMore, ",", ")" => ActionFn(1381); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant78(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action75::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 111) + let __end = __sym4.2; + let __nt = super::__action1381::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (5, 109) } pub(crate) fn __reduce317< >( @@ -23038,13 +24011,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompoundStatement = IfStatement => ActionFn(76); - let __sym0 = __pop_Variant36(__symbols); + // ClassPattern = MatchName, "(", OneOrMore, ")" => ActionFn(1382); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant78(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action76::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 111) + let __end = __sym3.2; + let __nt = super::__action1382::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (4, 109) } pub(crate) fn __reduce318< >( @@ -23054,13 +24031,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompoundStatement = WhileStatement => ActionFn(77); - let __sym0 = __pop_Variant36(__symbols); + // ClassPattern = MatchName, "(", ")" => ActionFn(1383); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action77::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 111) + let __end = __sym2.2; + let __nt = super::__action1383::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (3, 109) } pub(crate) fn __reduce319< >( @@ -23070,13 +24050,20 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompoundStatement = ForStatement => ActionFn(78); - let __sym0 = __pop_Variant36(__symbols); + // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ",", OneOrMore, ",", ")" => ActionFn(1384); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant78(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant52(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action78::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 111) + let __end = __sym6.2; + let __nt = super::__action1384::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (7, 109) } pub(crate) fn __reduce320< >( @@ -23086,13 +24073,19 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompoundStatement = TryStatement => ActionFn(79); - let __sym0 = __pop_Variant36(__symbols); + // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ",", OneOrMore, ")" => ActionFn(1385); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant78(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant52(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action79::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 111) + let __end = __sym5.2; + let __nt = super::__action1385::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (6, 109) } pub(crate) fn __reduce321< >( @@ -23102,13 +24095,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompoundStatement = WithStatement => ActionFn(80); - let __sym0 = __pop_Variant36(__symbols); + // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ",", ")" => ActionFn(1386); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant52(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action80::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 111) + let __end = __sym4.2; + let __nt = super::__action1386::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (5, 109) } pub(crate) fn __reduce322< >( @@ -23118,13 +24116,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompoundStatement = FuncDef => ActionFn(81); - let __sym0 = __pop_Variant36(__symbols); + // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ")" => ActionFn(1387); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant52(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action81::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 111) + let __end = __sym3.2; + let __nt = super::__action1387::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (4, 109) } pub(crate) fn __reduce323< >( @@ -23134,13 +24136,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // CompoundStatement = ClassDef => ActionFn(82); - let __sym0 = __pop_Variant36(__symbols); + // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ",", ")" => ActionFn(1388); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant78(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action82::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 111) + let __end = __sym4.2; + let __nt = super::__action1388::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (5, 109) } pub(crate) fn __reduce324< >( @@ -23150,15 +24157,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ComprehensionIf = "if", ExpressionNoCond => ActionFn(225); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ClassPattern = MatchNameOrAttr, "(", OneOrMore, ")" => ActionFn(1389); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant78(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action225::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 112) + let __end = __sym3.2; + let __nt = super::__action1389::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (4, 109) } pub(crate) fn __reduce325< >( @@ -23168,12 +24177,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ComprehensionIf* = => ActionFn(238); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action238::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (0, 113) + // ClassPattern = MatchNameOrAttr, "(", ")" => ActionFn(1390); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1390::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (3, 109) } pub(crate) fn __reduce326< >( @@ -23183,13 +24196,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ComprehensionIf* = ComprehensionIf+ => ActionFn(239); - let __sym0 = __pop_Variant16(__symbols); + // ClosedPattern = LiteralPattern => ActionFn(98); + let __sym0 = __pop_Variant34(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action239::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 113) + let __nt = super::__action98::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 110) } pub(crate) fn __reduce327< >( @@ -23199,13 +24212,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ComprehensionIf+ = ComprehensionIf => ActionFn(435); - let __sym0 = __pop_Variant14(__symbols); + // ClosedPattern = CapturePattern => ActionFn(99); + let __sym0 = __pop_Variant34(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action435::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 114) + let __nt = super::__action99::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 110) } pub(crate) fn __reduce328< >( @@ -23215,15 +24228,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ComprehensionIf+ = ComprehensionIf+, ComprehensionIf => ActionFn(436); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant16(__symbols); + // ClosedPattern = StarPattern => ActionFn(100); + let __sym0 = __pop_Variant34(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action436::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (2, 114) + let __end = __sym0.2; + let __nt = super::__action100::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 110) } pub(crate) fn __reduce329< >( @@ -23233,13 +24244,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Constant = int => ActionFn(231); - let __sym0 = __pop_Variant3(__symbols); + // ClosedPattern = ValuePattern => ActionFn(101); + let __sym0 = __pop_Variant34(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action231::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant56(__nt), __end)); - (1, 115) + let __nt = super::__action101::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 110) } pub(crate) fn __reduce330< >( @@ -23249,13 +24260,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Constant = float => ActionFn(232); - let __sym0 = __pop_Variant2(__symbols); + // ClosedPattern = SequencePattern => ActionFn(102); + let __sym0 = __pop_Variant34(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action232::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant56(__nt), __end)); - (1, 115) + let __nt = super::__action102::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 110) } pub(crate) fn __reduce331< >( @@ -23265,13 +24276,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Constant = complex => ActionFn(233); - let __sym0 = __pop_Variant1(__symbols); + // ClosedPattern = MappingPattern => ActionFn(103); + let __sym0 = __pop_Variant34(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action233::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant56(__nt), __end)); - (1, 115) + let __nt = super::__action103::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 110) } pub(crate) fn __reduce332< >( @@ -23281,13 +24292,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ConstantAtom = Constant => ActionFn(1265); - let __sym0 = __pop_Variant56(__symbols); + // ClosedPattern = ClassPattern => ActionFn(104); + let __sym0 = __pop_Variant34(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1265::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 116) + let __nt = super::__action104::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 110) } pub(crate) fn __reduce333< >( @@ -23297,13 +24308,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ConstantExpr = ConstantAtom => ActionFn(110); - let __sym0 = __pop_Variant14(__symbols); + // Comma = FunctionArgument => ActionFn(1641); + let __sym0 = __pop_Variant30(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action110::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 117) + let __nt = super::__action1641::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant51(__nt), __end)); + (1, 111) } pub(crate) fn __reduce334< >( @@ -23313,15 +24324,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ConstantExpr = "-", ConstantAtom => ActionFn(1266); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1266::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 117) + // Comma = => ActionFn(1642); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action1642::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant51(__nt), __end)); + (0, 111) } pub(crate) fn __reduce335< >( @@ -23331,16 +24339,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Decorator = "@", NamedExpressionTest, "\n" => ActionFn(1267); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // Comma = ( ",")+, FunctionArgument => ActionFn(1643); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant30(__symbols); + let __sym0 = __pop_Variant31(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1267::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant57(__nt), __end)); - (3, 118) + let __end = __sym1.2; + let __nt = super::__action1643::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant51(__nt), __end)); + (2, 111) } pub(crate) fn __reduce336< >( @@ -23350,12 +24357,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Decorator* = => ActionFn(286); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action286::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant58(__nt), __end)); - (0, 119) + // Comma = ( ",")+ => ActionFn(1644); + let __sym0 = __pop_Variant31(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1644::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant51(__nt), __end)); + (1, 111) } pub(crate) fn __reduce337< >( @@ -23365,13 +24373,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Decorator* = Decorator+ => ActionFn(287); - let __sym0 = __pop_Variant58(__symbols); + // Comma = Pattern => ActionFn(1649); + let __sym0 = __pop_Variant34(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action287::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant58(__nt), __end)); - (1, 119) + let __nt = super::__action1649::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant52(__nt), __end)); + (1, 112) } pub(crate) fn __reduce338< >( @@ -23381,13 +24389,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Decorator+ = Decorator => ActionFn(408); - let __sym0 = __pop_Variant57(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action408::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant58(__nt), __end)); - (1, 120) + // Comma = => ActionFn(1650); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action1650::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant52(__nt), __end)); + (0, 112) } pub(crate) fn __reduce339< >( @@ -23397,15 +24404,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Decorator+ = Decorator+, Decorator => ActionFn(409); + // Comma = ( ",")+, Pattern => ActionFn(1651); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant57(__symbols); - let __sym0 = __pop_Variant58(__symbols); + let __sym1 = __pop_Variant34(__symbols); + let __sym0 = __pop_Variant35(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action409::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant58(__nt), __end)); - (2, 120) + let __nt = super::__action1651::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant52(__nt), __end)); + (2, 112) } pub(crate) fn __reduce340< >( @@ -23415,15 +24422,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DelStatement = "del", ExpressionList2 => ActionFn(1268); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant32(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // Comma = ( ",")+ => ActionFn(1652); + let __sym0 = __pop_Variant35(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1268::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (2, 121) + let __end = __sym0.2; + let __nt = super::__action1652::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant52(__nt), __end)); + (1, 112) } pub(crate) fn __reduce341< >( @@ -23433,13 +24438,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DictElement = DictEntry => ActionFn(213); - let __sym0 = __pop_Variant60(__symbols); + // CompFor = SingleForComprehension+ => ActionFn(224); + let __sym0 = __pop_Variant85(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action213::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant59(__nt), __end)); - (1, 122) + let __nt = super::__action224::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant53(__nt), __end)); + (1, 113) } pub(crate) fn __reduce342< >( @@ -23449,15 +24454,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DictElement = "**", Expression<"all"> => ActionFn(214); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // CompFor? = CompFor => ActionFn(237); + let __sym0 = __pop_Variant53(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action214::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant59(__nt), __end)); - (2, 122) + let __end = __sym0.2; + let __nt = super::__action237::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant54(__nt), __end)); + (1, 114) } pub(crate) fn __reduce343< >( @@ -23467,16 +24470,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DictEntry = Test<"all">, ":", Test<"all"> => ActionFn(212); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action212::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant60(__nt), __end)); - (3, 123) + // CompFor? = => ActionFn(238); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action238::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant54(__nt), __end)); + (0, 114) } pub(crate) fn __reduce344< >( @@ -23486,15 +24485,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DictLiteralValues = OneOrMore, "," => ActionFn(597); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant61(__symbols); + // CompOp = "==" => ActionFn(184); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action597::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant61(__nt), __end)); - (2, 124) + let __end = __sym0.2; + let __nt = super::__action184::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant55(__nt), __end)); + (1, 115) } pub(crate) fn __reduce345< >( @@ -23504,13 +24501,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DictLiteralValues = OneOrMore => ActionFn(598); - let __sym0 = __pop_Variant61(__symbols); + // CompOp = "!=" => ActionFn(185); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action598::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant61(__nt), __end)); - (1, 124) + let __nt = super::__action185::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant55(__nt), __end)); + (1, 115) } pub(crate) fn __reduce346< >( @@ -23520,13 +24517,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DictLiteralValues? = DictLiteralValues => ActionFn(539); - let __sym0 = __pop_Variant61(__symbols); + // CompOp = "<" => ActionFn(186); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action539::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant62(__nt), __end)); - (1, 125) + let __nt = super::__action186::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant55(__nt), __end)); + (1, 115) } pub(crate) fn __reduce347< >( @@ -23536,12 +24533,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DictLiteralValues? = => ActionFn(540); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action540::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant62(__nt), __end)); - (0, 125) + // CompOp = "<=" => ActionFn(187); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action187::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant55(__nt), __end)); + (1, 115) } pub(crate) fn __reduce348< >( @@ -23551,13 +24549,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DottedName = name => ActionFn(1269); - let __sym0 = __pop_Variant5(__symbols); + // CompOp = ">" => ActionFn(188); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1269::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 126) + let __nt = super::__action188::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant55(__nt), __end)); + (1, 115) } pub(crate) fn __reduce349< >( @@ -23567,15 +24565,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DottedName = name, ("." Identifier)+ => ActionFn(1270); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant20(__symbols); - let __sym0 = __pop_Variant5(__symbols); + // CompOp = ">=" => ActionFn(189); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1270::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (2, 126) + let __end = __sym0.2; + let __nt = super::__action189::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant55(__nt), __end)); + (1, 115) } pub(crate) fn __reduce350< >( @@ -23585,16 +24581,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DoubleStarTypedParameter = Identifier, ":", Test<"all"> => ActionFn(1271); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant22(__symbols); + // CompOp = "in" => ActionFn(190); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1271::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant63(__nt), __end)); - (3, 127) + let __end = __sym0.2; + let __nt = super::__action190::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant55(__nt), __end)); + (1, 115) } pub(crate) fn __reduce351< >( @@ -23604,13 +24597,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DoubleStarTypedParameter = Identifier => ActionFn(1272); - let __sym0 = __pop_Variant22(__symbols); + // CompOp = "not", "in" => ActionFn(191); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1272::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant63(__nt), __end)); - (1, 127) + let __end = __sym1.2; + let __nt = super::__action191::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant55(__nt), __end)); + (2, 115) } pub(crate) fn __reduce352< >( @@ -23620,13 +24615,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DoubleStarTypedParameter? = DoubleStarTypedParameter => ActionFn(473); - let __sym0 = __pop_Variant63(__symbols); + // CompOp = "is" => ActionFn(192); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action473::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant64(__nt), __end)); - (1, 128) + let __nt = super::__action192::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant55(__nt), __end)); + (1, 115) } pub(crate) fn __reduce353< >( @@ -23636,12 +24631,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DoubleStarTypedParameter? = => ActionFn(474); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action474::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant64(__nt), __end)); - (0, 128) + // CompOp = "is", "not" => ActionFn(193); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action193::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant55(__nt), __end)); + (2, 115) } pub(crate) fn __reduce354< >( @@ -23651,17 +24649,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExceptClause = "except", Test<"all">, ":", Suite => ActionFn(1684); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant24(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // Comparison<"all"> = Expression<"all">, (CompOp Expression<"all">)+ => ActionFn(1391); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant44(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1684::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant65(__nt), __end)); - (4, 129) + let __end = __sym1.2; + let __nt = super::__action1391::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 116) } pub(crate) fn __reduce355< >( @@ -23671,16 +24667,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExceptClause = "except", ":", Suite => ActionFn(1685); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // Comparison<"all"> = Expression<"all"> => ActionFn(499); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1685::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant65(__nt), __end)); - (3, 129) + let __end = __sym0.2; + let __nt = super::__action499::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 116) } pub(crate) fn __reduce356< >( @@ -23690,19 +24683,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExceptClause = "except", Test<"all">, "as", Identifier, ":", Suite => ActionFn(1178); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant24(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant22(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // Comparison<"no-withitems"> = Expression<"all">, (CompOp Expression<"all">)+ => ActionFn(1392); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant44(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action1178::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant65(__nt), __end)); - (6, 129) + let __end = __sym1.2; + let __nt = super::__action1392::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 117) } pub(crate) fn __reduce357< >( @@ -23712,13 +24701,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExceptClause+ = ExceptClause => ActionFn(311); - let __sym0 = __pop_Variant65(__symbols); + // Comparison<"no-withitems"> = Expression<"no-withitems"> => ActionFn(514); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action311::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant66(__nt), __end)); - (1, 130) + let __nt = super::__action514::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 117) } pub(crate) fn __reduce358< >( @@ -23728,15 +24717,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExceptClause+ = ExceptClause+, ExceptClause => ActionFn(312); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant65(__symbols); - let __sym0 = __pop_Variant66(__symbols); + // CompoundStatement = MatchStatement => ActionFn(77); + let __sym0 = __pop_Variant36(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action312::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant66(__nt), __end)); - (2, 130) + let __end = __sym0.2; + let __nt = super::__action77::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (1, 118) } pub(crate) fn __reduce359< >( @@ -23746,18 +24733,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExceptStarClause = "except", "*", Test<"all">, ":", Suite => ActionFn(783); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant24(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // CompoundStatement = IfStatement => ActionFn(78); + let __sym0 = __pop_Variant36(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action783::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant65(__nt), __end)); - (5, 131) + let __end = __sym0.2; + let __nt = super::__action78::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (1, 118) } pub(crate) fn __reduce360< >( @@ -23767,7 +24749,720 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExceptStarClause = "except", "*", Test<"all">, "as", Identifier, ":", Suite => ActionFn(1179); + // CompoundStatement = WhileStatement => ActionFn(79); + let __sym0 = __pop_Variant36(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action79::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (1, 118) + } + pub(crate) fn __reduce361< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // CompoundStatement = ForStatement => ActionFn(80); + let __sym0 = __pop_Variant36(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action80::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (1, 118) + } + pub(crate) fn __reduce362< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // CompoundStatement = TryStatement => ActionFn(81); + let __sym0 = __pop_Variant36(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action81::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (1, 118) + } + pub(crate) fn __reduce363< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // CompoundStatement = WithStatement => ActionFn(82); + let __sym0 = __pop_Variant36(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action82::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (1, 118) + } + pub(crate) fn __reduce364< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // CompoundStatement = FuncDef => ActionFn(83); + let __sym0 = __pop_Variant36(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action83::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (1, 118) + } + pub(crate) fn __reduce365< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // CompoundStatement = ClassDef => ActionFn(84); + let __sym0 = __pop_Variant36(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action84::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (1, 118) + } + pub(crate) fn __reduce366< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ComprehensionIf = "if", ExpressionNoCond => ActionFn(227); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action227::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 119) + } + pub(crate) fn __reduce367< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ComprehensionIf* = => ActionFn(240); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action240::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (0, 120) + } + pub(crate) fn __reduce368< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ComprehensionIf* = ComprehensionIf+ => ActionFn(241); + let __sym0 = __pop_Variant16(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action241::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (1, 120) + } + pub(crate) fn __reduce369< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ComprehensionIf+ = ComprehensionIf => ActionFn(444); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action444::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (1, 121) + } + pub(crate) fn __reduce370< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ComprehensionIf+ = ComprehensionIf+, ComprehensionIf => ActionFn(445); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant16(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action445::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant16(__nt), __end)); + (2, 121) + } + pub(crate) fn __reduce371< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Constant = int => ActionFn(233); + let __sym0 = __pop_Variant3(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action233::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant56(__nt), __end)); + (1, 122) + } + pub(crate) fn __reduce372< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Constant = float => ActionFn(234); + let __sym0 = __pop_Variant2(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action234::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant56(__nt), __end)); + (1, 122) + } + pub(crate) fn __reduce373< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Constant = complex => ActionFn(235); + let __sym0 = __pop_Variant1(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action235::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant56(__nt), __end)); + (1, 122) + } + pub(crate) fn __reduce374< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ConstantAtom = Constant => ActionFn(1393); + let __sym0 = __pop_Variant56(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1393::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 123) + } + pub(crate) fn __reduce375< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ConstantExpr = ConstantAtom => ActionFn(112); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action112::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 124) + } + pub(crate) fn __reduce376< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ConstantExpr = "-", ConstantAtom => ActionFn(1394); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1394::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 124) + } + pub(crate) fn __reduce377< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Decorator = "@", NamedExpressionTest, "\n" => ActionFn(1395); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1395::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant57(__nt), __end)); + (3, 125) + } + pub(crate) fn __reduce378< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Decorator* = => ActionFn(288); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action288::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant58(__nt), __end)); + (0, 126) + } + pub(crate) fn __reduce379< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Decorator* = Decorator+ => ActionFn(289); + let __sym0 = __pop_Variant58(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action289::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant58(__nt), __end)); + (1, 126) + } + pub(crate) fn __reduce380< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Decorator+ = Decorator => ActionFn(417); + let __sym0 = __pop_Variant57(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action417::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant58(__nt), __end)); + (1, 127) + } + pub(crate) fn __reduce381< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Decorator+ = Decorator+, Decorator => ActionFn(418); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant57(__symbols); + let __sym0 = __pop_Variant58(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action418::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant58(__nt), __end)); + (2, 127) + } + pub(crate) fn __reduce382< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DelStatement = "del", ExpressionList2 => ActionFn(1396); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant32(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1396::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (2, 128) + } + pub(crate) fn __reduce383< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DictElement = DictEntry => ActionFn(215); + let __sym0 = __pop_Variant60(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action215::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant59(__nt), __end)); + (1, 129) + } + pub(crate) fn __reduce384< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DictElement = "**", Expression<"all"> => ActionFn(216); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action216::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant59(__nt), __end)); + (2, 129) + } + pub(crate) fn __reduce385< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DictEntry = Test<"all">, ":", Test<"all"> => ActionFn(214); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action214::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant60(__nt), __end)); + (3, 130) + } + pub(crate) fn __reduce386< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DictLiteralValues = OneOrMore, "," => ActionFn(647); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant61(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action647::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant61(__nt), __end)); + (2, 131) + } + pub(crate) fn __reduce387< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DictLiteralValues = OneOrMore => ActionFn(648); + let __sym0 = __pop_Variant61(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action648::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant61(__nt), __end)); + (1, 131) + } + pub(crate) fn __reduce388< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DictLiteralValues? = DictLiteralValues => ActionFn(583); + let __sym0 = __pop_Variant61(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action583::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant62(__nt), __end)); + (1, 132) + } + pub(crate) fn __reduce389< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DictLiteralValues? = => ActionFn(584); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action584::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant62(__nt), __end)); + (0, 132) + } + pub(crate) fn __reduce390< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DottedName = name => ActionFn(1397); + let __sym0 = __pop_Variant5(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1397::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant22(__nt), __end)); + (1, 133) + } + pub(crate) fn __reduce391< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DottedName = name, ("." Identifier)+ => ActionFn(1398); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant20(__symbols); + let __sym0 = __pop_Variant5(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1398::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant22(__nt), __end)); + (2, 133) + } + pub(crate) fn __reduce392< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DoubleStarTypedParameter = Identifier, ":", Test<"all"> => ActionFn(1399); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1399::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant63(__nt), __end)); + (3, 134) + } + pub(crate) fn __reduce393< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DoubleStarTypedParameter = Identifier => ActionFn(1400); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1400::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant63(__nt), __end)); + (1, 134) + } + pub(crate) fn __reduce394< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DoubleStarTypedParameter? = DoubleStarTypedParameter => ActionFn(480); + let __sym0 = __pop_Variant63(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action480::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant64(__nt), __end)); + (1, 135) + } + pub(crate) fn __reduce395< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // DoubleStarTypedParameter? = => ActionFn(481); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action481::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant64(__nt), __end)); + (0, 135) + } + pub(crate) fn __reduce396< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExceptClause = "except", Test<"all">, ":", Suite => ActionFn(1823); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action1823::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + (4, 136) + } + pub(crate) fn __reduce397< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExceptClause = "except", ":", Suite => ActionFn(1824); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1824::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + (3, 136) + } + pub(crate) fn __reduce398< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExceptClause = "except", Test<"all">, "as", Identifier, ":", Suite => ActionFn(1275); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant24(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant22(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = super::__action1275::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + (6, 136) + } + pub(crate) fn __reduce399< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExceptClause+ = ExceptClause => ActionFn(313); + let __sym0 = __pop_Variant65(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action313::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant66(__nt), __end)); + (1, 137) + } + pub(crate) fn __reduce400< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExceptClause+ = ExceptClause+, ExceptClause => ActionFn(314); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant65(__symbols); + let __sym0 = __pop_Variant66(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action314::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant66(__nt), __end)); + (2, 137) + } + pub(crate) fn __reduce401< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExceptStarClause = "except", "*", Test<"all">, ":", Suite => ActionFn(859); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant24(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = super::__action859::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + (5, 138) + } + pub(crate) fn __reduce402< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExceptStarClause = "except", "*", Test<"all">, "as", Identifier, ":", Suite => ActionFn(1276); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant24(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -23778,11 +25473,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action1179::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action1276::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant65(__nt), __end)); - (7, 131) + (7, 138) } - pub(crate) fn __reduce361< + pub(crate) fn __reduce403< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -23790,15 +25485,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExceptStarClause+ = ExceptStarClause => ActionFn(306); + // ExceptStarClause+ = ExceptStarClause => ActionFn(308); let __sym0 = __pop_Variant65(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action306::<>(mode, __sym0); + let __nt = super::__action308::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant66(__nt), __end)); - (1, 132) + (1, 139) } - pub(crate) fn __reduce362< + pub(crate) fn __reduce404< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -23806,17 +25501,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExceptStarClause+ = ExceptStarClause+, ExceptStarClause => ActionFn(307); + // ExceptStarClause+ = ExceptStarClause+, ExceptStarClause => ActionFn(309); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant65(__symbols); let __sym0 = __pop_Variant66(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action307::<>(mode, __sym0, __sym1); + let __nt = super::__action309::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant66(__nt), __end)); - (2, 132) + (2, 139) } - pub(crate) fn __reduce363< + pub(crate) fn __reduce405< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -23824,18 +25519,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Expression<"all"> = Expression<"all">, "|", XorExpression<"all"> => ActionFn(1273); + // Expression<"All"> = Expression<"all">, "|", XorExpression<"all"> => ActionFn(1401); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1273::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1401::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 133) + (3, 140) } - pub(crate) fn __reduce364< + pub(crate) fn __reduce406< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -23843,15 +25538,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Expression<"all"> = XorExpression<"all"> => ActionFn(249); + // Expression<"All"> = XorExpression<"All"> => ActionFn(354); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action249::<>(mode, __sym0); + let __nt = super::__action354::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 133) + (1, 140) } - pub(crate) fn __reduce365< + pub(crate) fn __reduce407< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -23859,18 +25554,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Expression<"no-withitems"> = Expression<"all">, "|", XorExpression<"all"> => ActionFn(1274); + // Expression<"all"> = Expression<"all">, "|", XorExpression<"all"> => ActionFn(1402); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1274::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1402::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 134) + (3, 141) } - pub(crate) fn __reduce366< + pub(crate) fn __reduce408< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -23878,15 +25573,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Expression<"no-withitems"> = XorExpression<"no-withitems"> => ActionFn(501); + // Expression<"all"> = XorExpression<"all"> => ActionFn(251); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action501::<>(mode, __sym0); + let __nt = super::__action251::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 134) + (1, 141) } - pub(crate) fn __reduce367< + pub(crate) fn __reduce409< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -23894,15 +25589,116 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExpressionList = GenericList => ActionFn(218); + // Expression<"no-withitems"> = Expression<"all">, "|", XorExpression<"all"> => ActionFn(1403); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1403::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 142) + } + pub(crate) fn __reduce410< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Expression<"no-withitems"> = XorExpression<"no-withitems"> => ActionFn(516); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action516::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 142) + } + pub(crate) fn __reduce411< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExpressionList = GenericList => ActionFn(220); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action220::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 143) + } + pub(crate) fn __reduce412< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExpressionList2 = OneOrMore, "," => ActionFn(649); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action649::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (2, 144) + } + pub(crate) fn __reduce413< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExpressionList2 = OneOrMore => ActionFn(650); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action650::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (1, 144) + } + pub(crate) fn __reduce414< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExpressionNoCond = OrTest<"all"> => ActionFn(226); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action226::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 145) + } + pub(crate) fn __reduce415< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ExpressionOrStarExpression = Expression<"all"> => ActionFn(218); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action218::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 135) + (1, 146) } - pub(crate) fn __reduce368< + pub(crate) fn __reduce416< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -23910,49 +25706,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExpressionList2 = OneOrMore, "," => ActionFn(599); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action599::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (2, 136) - } - pub(crate) fn __reduce369< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ExpressionList2 = OneOrMore => ActionFn(600); - let __sym0 = __pop_Variant32(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action600::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (1, 136) - } - pub(crate) fn __reduce370< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ExpressionNoCond = OrTest<"all"> => ActionFn(224); + // ExpressionOrStarExpression = StarExpr => ActionFn(219); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action224::<>(mode, __sym0); + let __nt = super::__action219::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 137) + (1, 146) } - pub(crate) fn __reduce371< + pub(crate) fn __reduce417< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -23960,47 +25722,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExpressionOrStarExpression = Expression<"all"> => ActionFn(216); + // ExpressionStatement = GenericList => ActionFn(1848); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action216::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 138) - } - pub(crate) fn __reduce372< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ExpressionOrStarExpression = StarExpr => ActionFn(217); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action217::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 138) - } - pub(crate) fn __reduce373< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ExpressionStatement = GenericList => ActionFn(1709); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1709::<>(mode, __sym0); + let __nt = super::__action1848::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 139) + (1, 147) } - pub(crate) fn __reduce374< + pub(crate) fn __reduce418< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24008,17 +25738,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExpressionStatement = GenericList, AssignSuffix+ => ActionFn(1710); + // ExpressionStatement = GenericList, AssignSuffix+ => ActionFn(1849); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant16(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1710::<>(mode, __sym0, __sym1); + let __nt = super::__action1849::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (2, 139) + (2, 147) } - pub(crate) fn __reduce375< + pub(crate) fn __reduce419< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24026,18 +25756,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExpressionStatement = GenericList, AugAssign, TestListOrYieldExpr => ActionFn(1711); + // ExpressionStatement = GenericList, AugAssign, TestListOrYieldExpr => ActionFn(1850); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant48(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1711::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1850::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (3, 139) + (3, 147) } - pub(crate) fn __reduce376< + pub(crate) fn __reduce420< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24045,7 +25775,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExpressionStatement = Test<"all">, ":", Test<"all">, AssignSuffix => ActionFn(1504); + // ExpressionStatement = Test<"all">, ":", Test<"all">, AssignSuffix => ActionFn(1639); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant14(__symbols); let __sym2 = __pop_Variant14(__symbols); @@ -24053,11 +25783,11 @@ mod __parse__Top { let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1504::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1639::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (4, 139) + (4, 147) } - pub(crate) fn __reduce377< + pub(crate) fn __reduce421< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24065,18 +25795,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExpressionStatement = Test<"all">, ":", Test<"all"> => ActionFn(1505); + // ExpressionStatement = Test<"all">, ":", Test<"all"> => ActionFn(1640); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1505::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1640::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (3, 139) + (3, 147) } - pub(crate) fn __reduce378< + pub(crate) fn __reduce422< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24084,17 +25814,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Factor<"all"> = UnaryOp, Factor<"all"> => ActionFn(1278); + // Factor<"All"> = UnaryOp, Factor<"all"> => ActionFn(1407); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant93(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1278::<>(mode, __sym0, __sym1); + let __nt = super::__action1407::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 140) + (2, 148) } - pub(crate) fn __reduce379< + pub(crate) fn __reduce423< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24102,15 +25832,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Factor<"all"> = Power<"all"> => ActionFn(499); + // Factor<"All"> = Power<"All"> => ActionFn(518); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action499::<>(mode, __sym0); + let __nt = super::__action518::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 140) + (1, 148) } - pub(crate) fn __reduce380< + pub(crate) fn __reduce424< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24118,17 +25848,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Factor<"no-withitems"> = UnaryOp, Factor<"all"> => ActionFn(1279); + // Factor<"all"> = UnaryOp, Factor<"all"> => ActionFn(1408); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant93(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1279::<>(mode, __sym0, __sym1); + let __nt = super::__action1408::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 141) + (2, 149) } - pub(crate) fn __reduce381< + pub(crate) fn __reduce425< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24136,15 +25866,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Factor<"no-withitems"> = Power<"no-withitems"> => ActionFn(552); + // Factor<"all"> = Power<"all"> => ActionFn(520); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action552::<>(mode, __sym0); + let __nt = super::__action520::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 141) + (1, 149) } - pub(crate) fn __reduce382< + pub(crate) fn __reduce426< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24152,15 +25882,49 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FlowStatement = "break" => ActionFn(1280); + // Factor<"no-withitems"> = UnaryOp, Factor<"all"> => ActionFn(1409); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant93(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1409::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 150) + } + pub(crate) fn __reduce427< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Factor<"no-withitems"> = Power<"no-withitems"> => ActionFn(596); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action596::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 150) + } + pub(crate) fn __reduce428< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // FlowStatement = "break" => ActionFn(1410); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1280::<>(mode, __sym0); + let __nt = super::__action1410::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 142) + (1, 151) } - pub(crate) fn __reduce383< + pub(crate) fn __reduce429< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24168,15 +25932,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FlowStatement = "continue" => ActionFn(1281); + // FlowStatement = "continue" => ActionFn(1411); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1281::<>(mode, __sym0); + let __nt = super::__action1411::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 142) + (1, 151) } - pub(crate) fn __reduce384< + pub(crate) fn __reduce430< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24184,17 +25948,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FlowStatement = "return", GenericList => ActionFn(1705); + // FlowStatement = "return", GenericList => ActionFn(1844); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1705::<>(mode, __sym0, __sym1); + let __nt = super::__action1844::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (2, 142) + (2, 151) } - pub(crate) fn __reduce385< + pub(crate) fn __reduce431< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24202,15 +25966,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FlowStatement = "return" => ActionFn(1706); + // FlowStatement = "return" => ActionFn(1845); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1706::<>(mode, __sym0); + let __nt = super::__action1845::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 142) + (1, 151) } - pub(crate) fn __reduce386< + pub(crate) fn __reduce432< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24218,15 +25982,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FlowStatement = YieldExpr => ActionFn(1283); + // FlowStatement = YieldExpr => ActionFn(1413); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1283::<>(mode, __sym0); + let __nt = super::__action1413::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 142) + (1, 151) } - pub(crate) fn __reduce387< + pub(crate) fn __reduce433< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24234,15 +25998,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FlowStatement = RaiseStatement => ActionFn(56); + // FlowStatement = RaiseStatement => ActionFn(57); let __sym0 = __pop_Variant36(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action56::<>(mode, __sym0); + let __nt = super::__action57::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 142) + (1, 151) } - pub(crate) fn __reduce388< + pub(crate) fn __reduce434< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24250,7 +26014,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ForStatement = "async", "for", ExpressionList, "in", GenericList, ":", Suite, "else", ":", Suite => ActionFn(1696); + // ForStatement = "async", "for", ExpressionList, "in", GenericList, ":", Suite, "else", ":", Suite => ActionFn(1835); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant24(__symbols); let __sym8 = __pop_Variant0(__symbols); @@ -24264,11 +26028,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = super::__action1696::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action1835::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (10, 143) + (10, 152) } - pub(crate) fn __reduce389< + pub(crate) fn __reduce435< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24276,7 +26040,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ForStatement = "async", "for", ExpressionList, "in", GenericList, ":", Suite => ActionFn(1697); + // ForStatement = "async", "for", ExpressionList, "in", GenericList, ":", Suite => ActionFn(1836); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant24(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -24287,11 +26051,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action1697::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action1836::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 143) + (7, 152) } - pub(crate) fn __reduce390< + pub(crate) fn __reduce436< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24299,7 +26063,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ForStatement = "for", ExpressionList, "in", GenericList, ":", Suite, "else", ":", Suite => ActionFn(1698); + // ForStatement = "for", ExpressionList, "in", GenericList, ":", Suite, "else", ":", Suite => ActionFn(1837); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant24(__symbols); let __sym7 = __pop_Variant0(__symbols); @@ -24312,11 +26076,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = super::__action1698::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); + let __nt = super::__action1837::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (9, 143) + (9, 152) } - pub(crate) fn __reduce391< + pub(crate) fn __reduce437< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24324,7 +26088,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ForStatement = "for", ExpressionList, "in", GenericList, ":", Suite => ActionFn(1699); + // ForStatement = "for", ExpressionList, "in", GenericList, ":", Suite => ActionFn(1838); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant24(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -24334,11 +26098,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action1699::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action1838::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (6, 143) + (6, 152) } - pub(crate) fn __reduce392< + pub(crate) fn __reduce438< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24346,7 +26110,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = "async", "def", Identifier, TypeParams, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1720); + // FuncDef = "async", "def", Identifier, TypeParams, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1859); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant24(__symbols); let __sym7 = __pop_Variant0(__symbols); @@ -24359,11 +26123,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = super::__action1720::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); + let __nt = super::__action1859::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (9, 144) + (9, 153) } - pub(crate) fn __reduce393< + pub(crate) fn __reduce439< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24371,7 +26135,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = "async", "def", Identifier, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1721); + // FuncDef = "async", "def", Identifier, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1860); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant24(__symbols); let __sym6 = __pop_Variant0(__symbols); @@ -24383,11 +26147,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action1721::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action1860::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (8, 144) + (8, 153) } - pub(crate) fn __reduce394< + pub(crate) fn __reduce440< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24395,7 +26159,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = Decorator+, "async", "def", Identifier, TypeParams, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1722); + // FuncDef = Decorator+, "async", "def", Identifier, TypeParams, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1861); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant24(__symbols); let __sym8 = __pop_Variant0(__symbols); @@ -24409,11 +26173,11 @@ mod __parse__Top { let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = super::__action1722::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action1861::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (10, 144) + (10, 153) } - pub(crate) fn __reduce395< + pub(crate) fn __reduce441< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24421,7 +26185,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = Decorator+, "async", "def", Identifier, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1723); + // FuncDef = Decorator+, "async", "def", Identifier, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1862); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant24(__symbols); let __sym7 = __pop_Variant0(__symbols); @@ -24434,11 +26198,11 @@ mod __parse__Top { let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = super::__action1723::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); + let __nt = super::__action1862::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (9, 144) + (9, 153) } - pub(crate) fn __reduce396< + pub(crate) fn __reduce442< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24446,7 +26210,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = "async", "def", Identifier, TypeParams, Parameters, ":", Suite => ActionFn(1724); + // FuncDef = "async", "def", Identifier, TypeParams, Parameters, ":", Suite => ActionFn(1863); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant24(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -24457,11 +26221,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action1724::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action1863::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 144) + (7, 153) } - pub(crate) fn __reduce397< + pub(crate) fn __reduce443< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24469,7 +26233,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = "async", "def", Identifier, Parameters, ":", Suite => ActionFn(1725); + // FuncDef = "async", "def", Identifier, Parameters, ":", Suite => ActionFn(1864); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant24(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -24479,11 +26243,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action1725::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action1864::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (6, 144) + (6, 153) } - pub(crate) fn __reduce398< + pub(crate) fn __reduce444< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24491,7 +26255,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = Decorator+, "async", "def", Identifier, TypeParams, Parameters, ":", Suite => ActionFn(1726); + // FuncDef = Decorator+, "async", "def", Identifier, TypeParams, Parameters, ":", Suite => ActionFn(1865); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant24(__symbols); let __sym6 = __pop_Variant0(__symbols); @@ -24503,11 +26267,11 @@ mod __parse__Top { let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action1726::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action1865::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (8, 144) + (8, 153) } - pub(crate) fn __reduce399< + pub(crate) fn __reduce445< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24515,7 +26279,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = Decorator+, "async", "def", Identifier, Parameters, ":", Suite => ActionFn(1727); + // FuncDef = Decorator+, "async", "def", Identifier, Parameters, ":", Suite => ActionFn(1866); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant24(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -24526,11 +26290,11 @@ mod __parse__Top { let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action1727::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action1866::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 144) + (7, 153) } - pub(crate) fn __reduce400< + pub(crate) fn __reduce446< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24538,7 +26302,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = "def", Identifier, TypeParams, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1728); + // FuncDef = "def", Identifier, TypeParams, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1867); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant24(__symbols); let __sym6 = __pop_Variant0(__symbols); @@ -24550,11 +26314,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action1728::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action1867::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (8, 144) + (8, 153) } - pub(crate) fn __reduce401< + pub(crate) fn __reduce447< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24562,7 +26326,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = "def", Identifier, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1729); + // FuncDef = "def", Identifier, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1868); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant24(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -24573,11 +26337,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action1729::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action1868::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 144) + (7, 153) } - pub(crate) fn __reduce402< + pub(crate) fn __reduce448< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24585,7 +26349,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = Decorator+, "def", Identifier, TypeParams, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1730); + // FuncDef = Decorator+, "def", Identifier, TypeParams, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1869); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant24(__symbols); let __sym7 = __pop_Variant0(__symbols); @@ -24598,11 +26362,11 @@ mod __parse__Top { let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = super::__action1730::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); + let __nt = super::__action1869::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (9, 144) + (9, 153) } - pub(crate) fn __reduce403< + pub(crate) fn __reduce449< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24610,7 +26374,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = Decorator+, "def", Identifier, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1731); + // FuncDef = Decorator+, "def", Identifier, Parameters, "->", Test<"all">, ":", Suite => ActionFn(1870); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant24(__symbols); let __sym6 = __pop_Variant0(__symbols); @@ -24622,11 +26386,11 @@ mod __parse__Top { let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action1731::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action1870::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (8, 144) + (8, 153) } - pub(crate) fn __reduce404< + pub(crate) fn __reduce450< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24634,7 +26398,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = "def", Identifier, TypeParams, Parameters, ":", Suite => ActionFn(1732); + // FuncDef = "def", Identifier, TypeParams, Parameters, ":", Suite => ActionFn(1871); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant24(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -24644,11 +26408,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action1732::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action1871::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (6, 144) + (6, 153) } - pub(crate) fn __reduce405< + pub(crate) fn __reduce451< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24656,7 +26420,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = "def", Identifier, Parameters, ":", Suite => ActionFn(1733); + // FuncDef = "def", Identifier, Parameters, ":", Suite => ActionFn(1872); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant24(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -24665,11 +26429,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action1733::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action1872::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (5, 144) + (5, 153) } - pub(crate) fn __reduce406< + pub(crate) fn __reduce452< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24677,7 +26441,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = Decorator+, "def", Identifier, TypeParams, Parameters, ":", Suite => ActionFn(1734); + // FuncDef = Decorator+, "def", Identifier, TypeParams, Parameters, ":", Suite => ActionFn(1873); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant24(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -24688,11 +26452,11 @@ mod __parse__Top { let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action1734::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action1873::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 144) + (7, 153) } - pub(crate) fn __reduce407< + pub(crate) fn __reduce453< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24700,7 +26464,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FuncDef = Decorator+, "def", Identifier, Parameters, ":", Suite => ActionFn(1735); + // FuncDef = Decorator+, "def", Identifier, Parameters, ":", Suite => ActionFn(1874); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant24(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -24710,11 +26474,11 @@ mod __parse__Top { let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action1735::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action1874::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (6, 144) + (6, 153) } - pub(crate) fn __reduce408< + pub(crate) fn __reduce454< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24722,17 +26486,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FunctionArgument = NamedExpressionTest, CompFor => ActionFn(1522); + // FunctionArgument = NamedExpressionTest, CompFor => ActionFn(1657); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant53(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1522::<>(mode, __sym0, __sym1); + let __nt = super::__action1657::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant30(__nt), __end)); - (2, 145) + (2, 154) } - pub(crate) fn __reduce409< + pub(crate) fn __reduce455< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24740,15 +26504,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FunctionArgument = NamedExpressionTest => ActionFn(1523); + // FunctionArgument = NamedExpressionTest => ActionFn(1658); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1523::<>(mode, __sym0); + let __nt = super::__action1658::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant30(__nt), __end)); - (1, 145) + (1, 154) } - pub(crate) fn __reduce410< + pub(crate) fn __reduce456< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24756,18 +26520,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FunctionArgument = Identifier, "=", Test<"all"> => ActionFn(1285); + // FunctionArgument = Identifier, "=", Test<"all"> => ActionFn(1415); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1285::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1415::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant30(__nt), __end)); - (3, 145) + (3, 154) } - pub(crate) fn __reduce411< + pub(crate) fn __reduce457< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24775,17 +26539,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FunctionArgument = "*", Test<"all"> => ActionFn(1286); + // FunctionArgument = "*", Test<"all"> => ActionFn(1416); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1286::<>(mode, __sym0, __sym1); + let __nt = super::__action1416::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant30(__nt), __end)); - (2, 145) + (2, 154) } - pub(crate) fn __reduce412< + pub(crate) fn __reduce458< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24793,17 +26557,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FunctionArgument = "**", Test<"all"> => ActionFn(1287); + // FunctionArgument = "**", Test<"all"> => ActionFn(1417); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1287::<>(mode, __sym0, __sym1); + let __nt = super::__action1417::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant30(__nt), __end)); - (2, 145) + (2, 154) } - pub(crate) fn __reduce413< + pub(crate) fn __reduce459< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24811,15 +26575,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FunctionArgument? = FunctionArgument => ActionFn(437); + // FunctionArgument? = FunctionArgument => ActionFn(446); let __sym0 = __pop_Variant30(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action437::<>(mode, __sym0); + let __nt = super::__action446::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant67(__nt), __end)); - (1, 146) + (1, 155) } - pub(crate) fn __reduce414< + pub(crate) fn __reduce460< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24827,14 +26591,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FunctionArgument? = => ActionFn(438); + // FunctionArgument? = => ActionFn(447); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action438::<>(mode, &__start, &__end); + let __nt = super::__action447::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant67(__nt), __end)); - (0, 146) + (0, 155) } - pub(crate) fn __reduce415< + pub(crate) fn __reduce461< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24842,17 +26606,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // GenericList = OneOrMore, "," => ActionFn(1288); + // GenericList = OneOrMore, "," => ActionFn(1418); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1288::<>(mode, __sym0, __sym1); + let __nt = super::__action1418::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 147) + (2, 156) } - pub(crate) fn __reduce416< + pub(crate) fn __reduce462< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24860,15 +26624,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // GenericList = OneOrMore => ActionFn(1289); + // GenericList = OneOrMore => ActionFn(1419); let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1289::<>(mode, __sym0); + let __nt = super::__action1419::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 147) + (1, 156) } - pub(crate) fn __reduce417< + pub(crate) fn __reduce463< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24876,17 +26640,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // GenericList = OneOrMore, "," => ActionFn(1290); + // GenericList = OneOrMore, "," => ActionFn(1420); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1290::<>(mode, __sym0, __sym1); + let __nt = super::__action1420::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 148) + (2, 157) } - pub(crate) fn __reduce418< + pub(crate) fn __reduce464< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24894,15 +26658,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // GenericList = OneOrMore => ActionFn(1291); + // GenericList = OneOrMore => ActionFn(1421); let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1291::<>(mode, __sym0); + let __nt = super::__action1421::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 148) + (1, 157) } - pub(crate) fn __reduce419< + pub(crate) fn __reduce465< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24910,17 +26674,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // GlobalStatement = "global", OneOrMore => ActionFn(1292); + // GlobalStatement = "global", OneOrMore => ActionFn(1422); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant77(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1292::<>(mode, __sym0, __sym1); + let __nt = super::__action1422::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (2, 149) + (2, 158) } - pub(crate) fn __reduce420< + pub(crate) fn __reduce466< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24928,17 +26692,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Guard = "if", NamedExpressionTest => ActionFn(87); + // Guard = "if", NamedExpressionTest => ActionFn(89); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action87::<>(mode, __sym0, __sym1); + let __nt = super::__action89::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 150) + (2, 159) } - pub(crate) fn __reduce421< + pub(crate) fn __reduce467< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24946,15 +26710,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Identifier = name => ActionFn(1293); + // Identifier = name => ActionFn(1423); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1293::<>(mode, __sym0); + let __nt = super::__action1423::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant22(__nt), __end)); - (1, 151) + (1, 160) } - pub(crate) fn __reduce422< + pub(crate) fn __reduce468< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24962,7 +26726,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // IfStatement = "if", NamedExpressionTest, ":", Suite, "else", ":", Suite => ActionFn(1127); + // IfStatement = "if", NamedExpressionTest, ":", Suite, "else", ":", Suite => ActionFn(1216); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant24(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -24973,11 +26737,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action1127::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action1216::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 152) + (7, 161) } - pub(crate) fn __reduce423< + pub(crate) fn __reduce469< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -24985,7 +26749,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // IfStatement = "if", NamedExpressionTest, ":", Suite => ActionFn(1128); + // IfStatement = "if", NamedExpressionTest, ":", Suite => ActionFn(1217); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant24(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -24993,11 +26757,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1128::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1217::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (4, 152) + (4, 161) } - pub(crate) fn __reduce424< + pub(crate) fn __reduce470< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -25005,7 +26769,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // IfStatement = "if", NamedExpressionTest, ":", Suite, (<@L> "elif" ":" )+, "else", ":", Suite => ActionFn(1129); + // IfStatement = "if", NamedExpressionTest, ":", Suite, (<@L> "elif" ":" )+, "else", ":", Suite => ActionFn(1218); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant24(__symbols); let __sym6 = __pop_Variant0(__symbols); @@ -25017,683 +26781,9 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action1129::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action1218::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (8, 152) - } - pub(crate) fn __reduce425< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // IfStatement = "if", NamedExpressionTest, ":", Suite, (<@L> "elif" ":" )+ => ActionFn(1130); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant27(__symbols); - let __sym3 = __pop_Variant24(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1130::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (5, 152) - } - pub(crate) fn __reduce426< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportAsAlias = DottedName, "as", Identifier => ActionFn(1294); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1294::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant68(__nt), __end)); - (3, 153) - } - pub(crate) fn __reduce427< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportAsAlias = DottedName => ActionFn(1295); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1295::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant68(__nt), __end)); - (1, 153) - } - pub(crate) fn __reduce428< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportAsAlias = Identifier, "as", Identifier => ActionFn(1296); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1296::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant68(__nt), __end)); - (3, 154) - } - pub(crate) fn __reduce429< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportAsAlias = Identifier => ActionFn(1297); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1297::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant68(__nt), __end)); - (1, 154) - } - pub(crate) fn __reduce430< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportAsNames = OneOrMore> => ActionFn(1298); - let __sym0 = __pop_Variant69(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1298::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (1, 155) - } - pub(crate) fn __reduce431< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportAsNames = "(", OneOrMore>, ",", ")" => ActionFn(1299); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant69(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1299::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (4, 155) - } - pub(crate) fn __reduce432< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportAsNames = "(", OneOrMore>, ")" => ActionFn(1300); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant69(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1300::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (3, 155) - } - pub(crate) fn __reduce433< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportAsNames = "*" => ActionFn(1301); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1301::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (1, 155) - } - pub(crate) fn __reduce434< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportDots = "..." => ActionFn(63); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action63::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant70(__nt), __end)); - (1, 156) - } - pub(crate) fn __reduce435< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportDots = "." => ActionFn(64); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action64::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant70(__nt), __end)); - (1, 156) - } - pub(crate) fn __reduce436< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportDots* = => ActionFn(363); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action363::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant71(__nt), __end)); - (0, 157) - } - pub(crate) fn __reduce437< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportDots* = ImportDots+ => ActionFn(364); - let __sym0 = __pop_Variant71(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action364::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant71(__nt), __end)); - (1, 157) - } - pub(crate) fn __reduce438< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportDots+ = ImportDots => ActionFn(361); - let __sym0 = __pop_Variant70(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action361::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant71(__nt), __end)); - (1, 158) - } - pub(crate) fn __reduce439< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportDots+ = ImportDots+, ImportDots => ActionFn(362); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant70(__symbols); - let __sym0 = __pop_Variant71(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action362::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant71(__nt), __end)); - (2, 158) - } - pub(crate) fn __reduce440< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportFromLocation = DottedName => ActionFn(1554); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1554::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant72(__nt), __end)); - (1, 159) - } - pub(crate) fn __reduce441< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportFromLocation = ImportDots+, DottedName => ActionFn(1555); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant22(__symbols); - let __sym0 = __pop_Variant71(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1555::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant72(__nt), __end)); - (2, 159) - } - pub(crate) fn __reduce442< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportFromLocation = ImportDots+ => ActionFn(62); - let __sym0 = __pop_Variant71(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action62::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant72(__nt), __end)); - (1, 159) - } - pub(crate) fn __reduce443< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportStatement = "import", OneOrMore> => ActionFn(1302); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant69(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1302::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (2, 160) - } - pub(crate) fn __reduce444< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ImportStatement = "from", ImportFromLocation, "import", ImportAsNames => ActionFn(1303); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant69(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant72(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1303::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (4, 160) - } - pub(crate) fn __reduce445< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // KwargParameter = "**", DoubleStarTypedParameter => ActionFn(1544); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1544::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (2, 161) - } - pub(crate) fn __reduce446< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // KwargParameter = "**" => ActionFn(1545); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1545::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 161) - } - pub(crate) fn __reduce447< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // KwargParameter = "**", StarUntypedParameter => ActionFn(993); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant63(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action993::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (2, 162) - } - pub(crate) fn __reduce448< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // KwargParameter = "**" => ActionFn(994); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action994::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 162) - } - pub(crate) fn __reduce453< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ListLiteralValues = OneOrMore, "," => ActionFn(607); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action607::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (2, 166) - } - pub(crate) fn __reduce454< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ListLiteralValues = OneOrMore => ActionFn(608); - let __sym0 = __pop_Variant32(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action608::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (1, 166) - } - pub(crate) fn __reduce455< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ListLiteralValues? = ListLiteralValues => ActionFn(547); - let __sym0 = __pop_Variant32(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action547::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant33(__nt), __end)); - (1, 167) - } - pub(crate) fn __reduce456< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ListLiteralValues? = => ActionFn(548); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action548::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant33(__nt), __end)); - (0, 167) - } - pub(crate) fn __reduce457< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // LiteralPattern = "None" => ActionFn(1307); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1307::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 168) - } - pub(crate) fn __reduce458< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // LiteralPattern = "True" => ActionFn(1308); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1308::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 168) - } - pub(crate) fn __reduce459< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // LiteralPattern = "False" => ActionFn(1309); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1309::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 168) - } - pub(crate) fn __reduce460< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // LiteralPattern = ConstantExpr => ActionFn(1310); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1310::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 168) - } - pub(crate) fn __reduce461< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // LiteralPattern = AddOpExpr => ActionFn(1311); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1311::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 168) - } - pub(crate) fn __reduce463< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MappingKey = ConstantExpr => ActionFn(124); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action124::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 169) - } - pub(crate) fn __reduce464< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MappingKey = AddOpExpr => ActionFn(125); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action125::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 169) - } - pub(crate) fn __reduce465< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MappingKey = MatchNameOrAttr => ActionFn(126); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action126::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 169) - } - pub(crate) fn __reduce466< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MappingKey = "None" => ActionFn(1313); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1313::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 169) - } - pub(crate) fn __reduce467< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MappingKey = "True" => ActionFn(1314); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1314::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 169) - } - pub(crate) fn __reduce468< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MappingKey = "False" => ActionFn(1315); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1315::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 169) - } - pub(crate) fn __reduce470< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MappingPattern = "{", "}" => ActionFn(1316); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1316::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (2, 170) + (8, 161) } pub(crate) fn __reduce471< >( @@ -25703,17 +26793,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", OneOrMore, ",", "}" => ActionFn(1317); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // IfStatement = "if", NamedExpressionTest, ":", Suite, (<@L> "elif" ":" )+ => ActionFn(1219); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant27(__symbols); + let __sym3 = __pop_Variant24(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant79(__symbols); + let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1317::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (4, 170) + let __end = __sym4.2; + let __nt = super::__action1219::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (5, 161) } pub(crate) fn __reduce472< >( @@ -25723,16 +26814,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", OneOrMore, "}" => ActionFn(1318); + // ImportAsAlias = DottedName, "as", Identifier => ActionFn(1424); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant79(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1318::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (3, 170) + let __nt = super::__action1424::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant68(__nt), __end)); + (3, 162) } pub(crate) fn __reduce473< >( @@ -25742,18 +26833,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", "**", Identifier, ",", "}" => ActionFn(1319); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ImportAsAlias = DottedName => ActionFn(1425); + let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1319::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (5, 170) + let __end = __sym0.2; + let __nt = super::__action1425::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant68(__nt), __end)); + (1, 162) } pub(crate) fn __reduce474< >( @@ -25763,17 +26849,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", "**", Identifier, "}" => ActionFn(1320); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); + // ImportAsAlias = Identifier, "as", Identifier => ActionFn(1426); + assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant22(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1320::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (4, 170) + let __end = __sym2.2; + let __nt = super::__action1426::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant68(__nt), __end)); + (3, 163) } pub(crate) fn __reduce475< >( @@ -25783,20 +26868,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", OneOrMore, ",", "**", Identifier, ",", "}" => ActionFn(1321); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant22(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant79(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ImportAsAlias = Identifier => ActionFn(1427); + let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; - let __end = __sym6.2; - let __nt = super::__action1321::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (7, 170) + let __end = __sym0.2; + let __nt = super::__action1427::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant68(__nt), __end)); + (1, 163) } pub(crate) fn __reduce476< >( @@ -25806,19 +26884,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", OneOrMore, ",", "**", Identifier, "}" => ActionFn(1322); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant22(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant79(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ImportAsNames = OneOrMore> => ActionFn(1428); + let __sym0 = __pop_Variant69(__symbols); let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action1322::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (6, 170) + let __end = __sym0.2; + let __nt = super::__action1428::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (1, 164) } pub(crate) fn __reduce477< >( @@ -25828,18 +26900,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchCase = "case", Patterns, Guard, ":", Suite => ActionFn(1495); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant24(__symbols); + // ImportAsNames = "(", OneOrMore>, ",", ")" => ActionFn(1429); + assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant34(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant69(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1495::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant73(__nt), __end)); - (5, 171) + let __end = __sym3.2; + let __nt = super::__action1429::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (4, 164) } pub(crate) fn __reduce478< >( @@ -25849,17 +26920,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchCase = "case", Patterns, ":", Suite => ActionFn(1496); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant24(__symbols); + // ImportAsNames = "(", OneOrMore>, ")" => ActionFn(1430); + assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant34(__symbols); + let __sym1 = __pop_Variant69(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1496::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant73(__nt), __end)); - (4, 171) + let __end = __sym2.2; + let __nt = super::__action1430::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (3, 164) } pub(crate) fn __reduce479< >( @@ -25869,13 +26939,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchCase+ = MatchCase => ActionFn(346); - let __sym0 = __pop_Variant73(__symbols); + // ImportAsNames = "*" => ActionFn(1431); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action346::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); - (1, 172) + let __nt = super::__action1431::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (1, 164) } pub(crate) fn __reduce480< >( @@ -25885,15 +26955,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchCase+ = MatchCase+, MatchCase => ActionFn(347); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant73(__symbols); - let __sym0 = __pop_Variant74(__symbols); + // ImportDots = "..." => ActionFn(64); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action347::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); - (2, 172) + let __end = __sym0.2; + let __nt = super::__action64::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant70(__nt), __end)); + (1, 165) } pub(crate) fn __reduce481< >( @@ -25903,16 +26971,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchKeywordEntry = Identifier, "=", Pattern => ActionFn(136); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant34(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant22(__symbols); + // ImportDots = "." => ActionFn(65); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action136::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant75(__nt), __end)); - (3, 173) + let __end = __sym0.2; + let __nt = super::__action65::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant70(__nt), __end)); + (1, 165) } pub(crate) fn __reduce482< >( @@ -25922,16 +26987,12 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchMappingEntry = MappingKey, ":", Pattern => ActionFn(131); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant34(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action131::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant76(__nt), __end)); - (3, 174) + // ImportDots* = => ActionFn(370); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action370::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant71(__nt), __end)); + (0, 166) } pub(crate) fn __reduce483< >( @@ -25941,13 +27002,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchName = Identifier => ActionFn(1323); - let __sym0 = __pop_Variant22(__symbols); + // ImportDots* = ImportDots+ => ActionFn(371); + let __sym0 = __pop_Variant71(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1323::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 175) + let __nt = super::__action371::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant71(__nt), __end)); + (1, 166) } pub(crate) fn __reduce484< >( @@ -25957,16 +27018,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchNameOrAttr = MatchName, ".", Identifier => ActionFn(1324); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + // ImportDots+ = ImportDots => ActionFn(368); + let __sym0 = __pop_Variant70(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1324::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 176) + let __end = __sym0.2; + let __nt = super::__action368::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant71(__nt), __end)); + (1, 167) } pub(crate) fn __reduce485< >( @@ -25976,16 +27034,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchNameOrAttr = MatchNameOrAttr, ".", Identifier => ActionFn(1325); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); + // ImportDots+ = ImportDots+, ImportDots => ActionFn(369); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant70(__symbols); + let __sym0 = __pop_Variant71(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1325::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 176) + let __end = __sym1.2; + let __nt = super::__action369::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant71(__nt), __end)); + (2, 167) } pub(crate) fn __reduce486< >( @@ -25995,20 +27052,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchStatement = "match", TestOrStarNamedExpr, ":", "\n", Indent, MatchCase+, Dedent => ActionFn(843); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant74(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ImportFromLocation = DottedName => ActionFn(1691); + let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; - let __end = __sym6.2; - let __nt = super::__action843::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 177) + let __end = __sym0.2; + let __nt = super::__action1691::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant72(__nt), __end)); + (1, 168) } pub(crate) fn __reduce487< >( @@ -26018,7 +27068,721 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchStatement = "match", TestOrStarNamedExpr, ",", ":", "\n", Indent, MatchCase+, Dedent => ActionFn(844); + // ImportFromLocation = ImportDots+, DottedName => ActionFn(1692); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant22(__symbols); + let __sym0 = __pop_Variant71(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1692::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant72(__nt), __end)); + (2, 168) + } + pub(crate) fn __reduce488< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ImportFromLocation = ImportDots+ => ActionFn(63); + let __sym0 = __pop_Variant71(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action63::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant72(__nt), __end)); + (1, 168) + } + pub(crate) fn __reduce489< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ImportStatement = "import", OneOrMore> => ActionFn(1432); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant69(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1432::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (2, 169) + } + pub(crate) fn __reduce490< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ImportStatement = "from", ImportFromLocation, "import", ImportAsNames => ActionFn(1433); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant69(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant72(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action1433::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (4, 169) + } + pub(crate) fn __reduce494< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // KwargParameter = "**", DoubleStarTypedParameter => ActionFn(1681); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1681::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 173) + } + pub(crate) fn __reduce495< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // KwargParameter = "**" => ActionFn(1682); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1682::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 173) + } + pub(crate) fn __reduce496< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // KwargParameter = "**", StarUntypedParameter => ActionFn(1076); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant63(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1076::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (2, 174) + } + pub(crate) fn __reduce497< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // KwargParameter = "**" => ActionFn(1077); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1077::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (1, 174) + } + pub(crate) fn __reduce500< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ListLiteralValues = OneOrMore, "," => ActionFn(657); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action657::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (2, 176) + } + pub(crate) fn __reduce501< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ListLiteralValues = OneOrMore => ActionFn(658); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action658::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (1, 176) + } + pub(crate) fn __reduce502< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ListLiteralValues? = ListLiteralValues => ActionFn(591); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action591::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant33(__nt), __end)); + (1, 177) + } + pub(crate) fn __reduce503< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ListLiteralValues? = => ActionFn(592); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action592::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant33(__nt), __end)); + (0, 177) + } + pub(crate) fn __reduce504< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // LiteralPattern = "None" => ActionFn(1438); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1438::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 178) + } + pub(crate) fn __reduce505< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // LiteralPattern = "True" => ActionFn(1439); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1439::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 178) + } + pub(crate) fn __reduce506< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // LiteralPattern = "False" => ActionFn(1440); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1440::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 178) + } + pub(crate) fn __reduce507< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // LiteralPattern = ConstantExpr => ActionFn(1441); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1441::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 178) + } + pub(crate) fn __reduce508< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // LiteralPattern = AddOpExpr => ActionFn(1442); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1442::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 178) + } + pub(crate) fn __reduce510< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingKey = ConstantExpr => ActionFn(126); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action126::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 179) + } + pub(crate) fn __reduce511< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingKey = AddOpExpr => ActionFn(127); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action127::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 179) + } + pub(crate) fn __reduce512< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingKey = MatchNameOrAttr => ActionFn(128); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action128::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 179) + } + pub(crate) fn __reduce513< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingKey = "None" => ActionFn(1444); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1444::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 179) + } + pub(crate) fn __reduce514< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingKey = "True" => ActionFn(1445); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1445::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 179) + } + pub(crate) fn __reduce515< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingKey = "False" => ActionFn(1446); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1446::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 179) + } + pub(crate) fn __reduce517< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingPattern = "{", "}" => ActionFn(1447); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1447::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (2, 180) + } + pub(crate) fn __reduce518< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingPattern = "{", OneOrMore, ",", "}" => ActionFn(1448); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant79(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action1448::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (4, 180) + } + pub(crate) fn __reduce519< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingPattern = "{", OneOrMore, "}" => ActionFn(1449); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant79(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1449::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (3, 180) + } + pub(crate) fn __reduce520< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingPattern = "{", "**", Identifier, ",", "}" => ActionFn(1450); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = super::__action1450::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (5, 180) + } + pub(crate) fn __reduce521< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingPattern = "{", "**", Identifier, "}" => ActionFn(1451); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action1451::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (4, 180) + } + pub(crate) fn __reduce522< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingPattern = "{", OneOrMore, ",", "**", Identifier, ",", "}" => ActionFn(1452); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant22(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant79(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = super::__action1452::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (7, 180) + } + pub(crate) fn __reduce523< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MappingPattern = "{", OneOrMore, ",", "**", Identifier, "}" => ActionFn(1453); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant22(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant79(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = super::__action1453::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (6, 180) + } + pub(crate) fn __reduce524< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MatchCase = "case", Patterns, Guard, ":", Suite => ActionFn(1630); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant24(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant34(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = super::__action1630::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); + (5, 181) + } + pub(crate) fn __reduce525< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MatchCase = "case", Patterns, ":", Suite => ActionFn(1631); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant24(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant34(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action1631::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); + (4, 181) + } + pub(crate) fn __reduce526< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MatchCase+ = MatchCase => ActionFn(348); + let __sym0 = __pop_Variant73(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action348::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + (1, 182) + } + pub(crate) fn __reduce527< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MatchCase+ = MatchCase+, MatchCase => ActionFn(349); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant73(__symbols); + let __sym0 = __pop_Variant74(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action349::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + (2, 182) + } + pub(crate) fn __reduce528< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MatchKeywordEntry = Identifier, "=", Pattern => ActionFn(138); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant34(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action138::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant75(__nt), __end)); + (3, 183) + } + pub(crate) fn __reduce529< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MatchMappingEntry = MappingKey, ":", Pattern => ActionFn(133); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant34(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action133::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant76(__nt), __end)); + (3, 184) + } + pub(crate) fn __reduce530< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MatchName = Identifier => ActionFn(1454); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1454::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 185) + } + pub(crate) fn __reduce531< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MatchNameOrAttr = MatchName, ".", Identifier => ActionFn(1455); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1455::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 186) + } + pub(crate) fn __reduce532< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MatchNameOrAttr = MatchNameOrAttr, ".", Identifier => ActionFn(1456); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1456::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 186) + } + pub(crate) fn __reduce533< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MatchStatement = "match", TestOrStarNamedExpr, ":", "\n", Indent, MatchCase+, Dedent => ActionFn(922); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant74(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = super::__action922::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (7, 187) + } + pub(crate) fn __reduce534< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // MatchStatement = "match", TestOrStarNamedExpr, ",", ":", "\n", Indent, MatchCase+, Dedent => ActionFn(923); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant74(__symbols); @@ -26030,11 +27794,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action844::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action923::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (8, 177) + (8, 187) } - pub(crate) fn __reduce488< + pub(crate) fn __reduce535< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -26042,7 +27806,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchStatement = "match", TwoOrMore, ",", ":", "\n", Indent, MatchCase+, Dedent => ActionFn(845); + // MatchStatement = "match", TwoOrMore, ",", ":", "\n", Indent, MatchCase+, Dedent => ActionFn(924); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant74(__symbols); @@ -26054,11 +27818,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action845::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action924::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (8, 177) + (8, 187) } - pub(crate) fn __reduce489< + pub(crate) fn __reduce536< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -26066,7 +27830,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchStatement = "match", TwoOrMore, ":", "\n", Indent, MatchCase+, Dedent => ActionFn(846); + // MatchStatement = "match", TwoOrMore, ":", "\n", Indent, MatchCase+, Dedent => ActionFn(925); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant74(__symbols); @@ -26077,828 +27841,9 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action846::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action925::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 177) - } - pub(crate) fn __reduce490< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MulOp = "*" => ActionFn(196); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action196::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 178) - } - pub(crate) fn __reduce491< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MulOp = "/" => ActionFn(197); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action197::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 178) - } - pub(crate) fn __reduce492< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MulOp = "//" => ActionFn(198); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action198::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 178) - } - pub(crate) fn __reduce493< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MulOp = "%" => ActionFn(199); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action199::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 178) - } - pub(crate) fn __reduce494< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // MulOp = "@" => ActionFn(200); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action200::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 178) - } - pub(crate) fn __reduce495< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // NamedExpression = Identifier, ":=", Test<"all"> => ActionFn(1326); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1326::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 179) - } - pub(crate) fn __reduce496< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // NamedExpressionTest = NamedExpression => ActionFn(178); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action178::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 180) - } - pub(crate) fn __reduce497< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // NamedExpressionTest = Test<"all"> => ActionFn(179); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action179::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 180) - } - pub(crate) fn __reduce498< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // NamedOrStarExpr = NamedExpression => ActionFn(35); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action35::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 181) - } - pub(crate) fn __reduce499< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // NamedOrStarExpr = StarExpr => ActionFn(36); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action36::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 181) - } - pub(crate) fn __reduce500< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // NonlocalStatement = "nonlocal", OneOrMore => ActionFn(1327); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant77(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1327::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (2, 182) - } - pub(crate) fn __reduce501< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // NotTest<"all"> = "not", NotTest<"all"> => ActionFn(1328); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1328::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 183) - } - pub(crate) fn __reduce502< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // NotTest<"all"> = Comparison<"all"> => ActionFn(448); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action448::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 183) - } - pub(crate) fn __reduce503< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // NotTest<"no-withitems"> = "not", NotTest<"all"> => ActionFn(1329); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1329::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 184) - } - pub(crate) fn __reduce504< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // NotTest<"no-withitems"> = Comparison<"no-withitems"> => ActionFn(493); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action493::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 184) - } - pub(crate) fn __reduce505< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = DictElement => ActionFn(250); - let __sym0 = __pop_Variant59(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action250::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant61(__nt), __end)); - (1, 185) - } - pub(crate) fn __reduce506< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = OneOrMore, ",", DictElement => ActionFn(251); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant59(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant61(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action251::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant61(__nt), __end)); - (3, 185) - } - pub(crate) fn __reduce507< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = ExpressionOrStarExpression => ActionFn(245); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action245::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (1, 186) - } - pub(crate) fn __reduce508< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = OneOrMore, ",", ExpressionOrStarExpression => ActionFn(246); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action246::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (3, 186) - } - pub(crate) fn __reduce509< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = Identifier => ActionFn(351); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action351::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant77(__nt), __end)); - (1, 187) - } - pub(crate) fn __reduce510< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = OneOrMore, ",", Identifier => ActionFn(352); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant77(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action352::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant77(__nt), __end)); - (3, 187) - } - pub(crate) fn __reduce511< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = DottedName, "as", Identifier => ActionFn(1546); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1546::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (3, 188) - } - pub(crate) fn __reduce512< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = DottedName => ActionFn(1547); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1547::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (1, 188) - } - pub(crate) fn __reduce513< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = OneOrMore>, ",", DottedName, "as", Identifier => ActionFn(1548); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant22(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant69(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1548::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (5, 188) - } - pub(crate) fn __reduce514< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = OneOrMore>, ",", DottedName => ActionFn(1549); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant69(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1549::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (3, 188) - } - pub(crate) fn __reduce515< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = Identifier, "as", Identifier => ActionFn(1550); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1550::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (3, 189) - } - pub(crate) fn __reduce516< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = Identifier => ActionFn(1551); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1551::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (1, 189) - } - pub(crate) fn __reduce517< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = OneOrMore>, ",", Identifier, "as", Identifier => ActionFn(1552); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant22(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant69(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1552::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (5, 189) - } - pub(crate) fn __reduce518< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = OneOrMore>, ",", Identifier => ActionFn(1553); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant22(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant69(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1553::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (3, 189) - } - pub(crate) fn __reduce519< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = MatchKeywordEntry => ActionFn(324); - let __sym0 = __pop_Variant75(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action324::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant78(__nt), __end)); - (1, 190) - } - pub(crate) fn __reduce520< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = OneOrMore, ",", MatchKeywordEntry => ActionFn(325); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant75(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant78(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action325::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant78(__nt), __end)); - (3, 190) - } - pub(crate) fn __reduce521< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = MatchMappingEntry => ActionFn(328); - let __sym0 = __pop_Variant76(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action328::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant79(__nt), __end)); - (1, 191) - } - pub(crate) fn __reduce522< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = OneOrMore, ",", MatchMappingEntry => ActionFn(329); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant76(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant79(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action329::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant79(__nt), __end)); - (3, 191) - } - pub(crate) fn __reduce523< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = ParameterDef => ActionFn(462); - let __sym0 = __pop_Variant10(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action462::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant80(__nt), __end)); - (1, 192) - } - pub(crate) fn __reduce524< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = OneOrMore>, ",", ParameterDef => ActionFn(463); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant10(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action463::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant80(__nt), __end)); - (3, 192) - } - pub(crate) fn __reduce525< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = ParameterDef => ActionFn(451); - let __sym0 = __pop_Variant10(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action451::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant80(__nt), __end)); - (1, 193) - } - pub(crate) fn __reduce526< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = OneOrMore>, ",", ParameterDef => ActionFn(452); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant10(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action452::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant80(__nt), __end)); - (3, 193) - } - pub(crate) fn __reduce527< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = Pattern => ActionFn(326); - let __sym0 = __pop_Variant34(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action326::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant52(__nt), __end)); - (1, 194) - } - pub(crate) fn __reduce528< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = OneOrMore, ",", Pattern => ActionFn(327); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant34(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant52(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action327::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant52(__nt), __end)); - (3, 194) - } - pub(crate) fn __reduce529< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = Test<"all"> => ActionFn(288); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action288::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (1, 195) - } - pub(crate) fn __reduce530< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore> = OneOrMore>, ",", Test<"all"> => ActionFn(289); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action289::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (3, 195) - } - pub(crate) fn __reduce531< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = TestOrStarExpr => ActionFn(428); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action428::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (1, 196) - } - pub(crate) fn __reduce532< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = OneOrMore, ",", TestOrStarExpr => ActionFn(429); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action429::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (3, 196) - } - pub(crate) fn __reduce533< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = TestOrStarNamedExpr => ActionFn(252); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action252::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (1, 197) - } - pub(crate) fn __reduce534< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = OneOrMore, ",", TestOrStarNamedExpr => ActionFn(253); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action253::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (3, 197) - } - pub(crate) fn __reduce535< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = TypeParam => ActionFn(264); - let __sym0 = __pop_Variant90(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action264::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant81(__nt), __end)); - (1, 198) - } - pub(crate) fn __reduce536< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // OneOrMore = OneOrMore, ",", TypeParam => ActionFn(265); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant90(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant81(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action265::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant81(__nt), __end)); - (3, 198) + (7, 187) } pub(crate) fn __reduce537< >( @@ -26908,13 +27853,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // OrPattern = ClosedPattern => ActionFn(94); - let __sym0 = __pop_Variant34(__symbols); + // MulOp = "*" => ActionFn(198); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action94::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 199) + let __nt = super::__action198::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 188) } pub(crate) fn __reduce538< >( @@ -26924,13 +27869,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // OrPattern = TwoOrMore => ActionFn(1330); - let __sym0 = __pop_Variant52(__symbols); + // MulOp = "/" => ActionFn(199); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1330::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 199) + let __nt = super::__action199::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 188) } pub(crate) fn __reduce539< >( @@ -26940,15 +27885,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // OrTest<"all"> = (> "or")+, AndTest<"all"> => ActionFn(1331); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant16(__symbols); + // MulOp = "//" => ActionFn(200); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1331::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 200) + let __end = __sym0.2; + let __nt = super::__action200::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 188) } pub(crate) fn __reduce540< >( @@ -26958,13 +27901,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // OrTest<"all"> = AndTest<"all"> => ActionFn(241); - let __sym0 = __pop_Variant14(__symbols); + // MulOp = "%" => ActionFn(201); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action241::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 200) + let __nt = super::__action201::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 188) } pub(crate) fn __reduce541< >( @@ -26974,15 +27917,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // OrTest<"no-withitems"> = (> "or")+, AndTest<"all"> => ActionFn(1332); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant16(__symbols); + // MulOp = "@" => ActionFn(202); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1332::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 201) + let __end = __sym0.2; + let __nt = super::__action202::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant48(__nt), __end)); + (1, 188) } pub(crate) fn __reduce542< >( @@ -26992,13 +27933,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // OrTest<"no-withitems"> = AndTest<"no-withitems"> => ActionFn(476); - let __sym0 = __pop_Variant14(__symbols); + // NamedExpression = Identifier, ":=", Test<"all"> => ActionFn(1457); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action476::<>(mode, __sym0); + let __end = __sym2.2; + let __nt = super::__action1457::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 201) + (3, 189) } pub(crate) fn __reduce543< >( @@ -27008,13 +27952,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterDef = TypedParameter => ActionFn(469); - let __sym0 = __pop_Variant10(__symbols); + // NamedExpressionTest = NamedExpression => ActionFn(180); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action469::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 202) + let __nt = super::__action180::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 190) } pub(crate) fn __reduce544< >( @@ -27024,16 +27968,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterDef = TypedParameter, "=", Test<"all"> => ActionFn(1333); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant10(__symbols); + // NamedExpressionTest = Test<"all"> => ActionFn(181); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1333::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (3, 202) + let __end = __sym0.2; + let __nt = super::__action181::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 190) } pub(crate) fn __reduce545< >( @@ -27043,13 +27984,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterDef = UntypedParameter => ActionFn(458); - let __sym0 = __pop_Variant10(__symbols); + // NamedOrStarExpr = NamedExpression => ActionFn(36); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action458::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 203) + let __nt = super::__action36::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 191) } pub(crate) fn __reduce546< >( @@ -27059,16 +28000,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterDef = UntypedParameter, "=", Test<"all"> => ActionFn(1334); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant10(__symbols); + // NamedOrStarExpr = StarExpr => ActionFn(37); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1334::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (3, 203) + let __end = __sym0.2; + let __nt = super::__action37::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 191) } pub(crate) fn __reduce547< >( @@ -27078,13 +28016,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterDefs = OneOrMore> => ActionFn(416); - let __sym0 = __pop_Variant80(__symbols); + // NonlocalStatement = "nonlocal", OneOrMore => ActionFn(1458); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant77(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action416::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant82(__nt), __end)); - (1, 204) + let __end = __sym1.2; + let __nt = super::__action1458::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (2, 192) } pub(crate) fn __reduce548< >( @@ -27094,16 +28034,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterDefs = OneOrMore>, ",", "/" => ActionFn(675); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); + // NotTest<"all"> = "not", NotTest<"all"> => ActionFn(1459); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action675::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant82(__nt), __end)); - (3, 204) + let __end = __sym1.2; + let __nt = super::__action1459::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 193) } pub(crate) fn __reduce549< >( @@ -27113,17 +28052,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterDefs = OneOrMore>, ",", "/", ("," >)+ => ActionFn(676); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant11(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); + // NotTest<"all"> = Comparison<"all"> => ActionFn(457); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action676::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant82(__nt), __end)); - (4, 204) + let __end = __sym0.2; + let __nt = super::__action457::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 193) } pub(crate) fn __reduce550< >( @@ -27133,13 +28068,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterDefs = OneOrMore> => ActionFn(424); - let __sym0 = __pop_Variant80(__symbols); + // NotTest<"no-withitems"> = "not", NotTest<"all"> => ActionFn(1460); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action424::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant82(__nt), __end)); - (1, 205) + let __end = __sym1.2; + let __nt = super::__action1460::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 194) } pub(crate) fn __reduce551< >( @@ -27149,16 +28086,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterDefs = OneOrMore>, ",", "/" => ActionFn(683); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant80(__symbols); + // NotTest<"no-withitems"> = Comparison<"no-withitems"> => ActionFn(504); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action683::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant82(__nt), __end)); - (3, 205) + let __end = __sym0.2; + let __nt = super::__action504::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 194) } pub(crate) fn __reduce552< >( @@ -27168,7 +28102,782 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterDefs = OneOrMore>, ",", "/", ("," >)+ => ActionFn(684); + // OneOrMore = DictElement => ActionFn(252); + let __sym0 = __pop_Variant59(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action252::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant61(__nt), __end)); + (1, 195) + } + pub(crate) fn __reduce553< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = OneOrMore, ",", DictElement => ActionFn(253); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant59(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant61(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action253::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant61(__nt), __end)); + (3, 195) + } + pub(crate) fn __reduce554< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = ExpressionOrStarExpression => ActionFn(247); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action247::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (1, 196) + } + pub(crate) fn __reduce555< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = OneOrMore, ",", ExpressionOrStarExpression => ActionFn(248); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action248::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (3, 196) + } + pub(crate) fn __reduce556< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = Identifier => ActionFn(358); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action358::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant77(__nt), __end)); + (1, 197) + } + pub(crate) fn __reduce557< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = OneOrMore, ",", Identifier => ActionFn(359); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant77(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action359::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant77(__nt), __end)); + (3, 197) + } + pub(crate) fn __reduce558< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = DottedName, "as", Identifier => ActionFn(1683); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1683::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (3, 198) + } + pub(crate) fn __reduce559< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = DottedName => ActionFn(1684); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1684::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (1, 198) + } + pub(crate) fn __reduce560< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = OneOrMore>, ",", DottedName, "as", Identifier => ActionFn(1685); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant22(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant69(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = super::__action1685::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (5, 198) + } + pub(crate) fn __reduce561< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = OneOrMore>, ",", DottedName => ActionFn(1686); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant69(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1686::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (3, 198) + } + pub(crate) fn __reduce562< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = Identifier, "as", Identifier => ActionFn(1687); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1687::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (3, 199) + } + pub(crate) fn __reduce563< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = Identifier => ActionFn(1688); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1688::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (1, 199) + } + pub(crate) fn __reduce564< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = OneOrMore>, ",", Identifier, "as", Identifier => ActionFn(1689); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant22(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant69(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = super::__action1689::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (5, 199) + } + pub(crate) fn __reduce565< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = OneOrMore>, ",", Identifier => ActionFn(1690); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant22(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant69(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1690::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (3, 199) + } + pub(crate) fn __reduce566< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = MatchKeywordEntry => ActionFn(326); + let __sym0 = __pop_Variant75(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action326::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant78(__nt), __end)); + (1, 200) + } + pub(crate) fn __reduce567< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = OneOrMore, ",", MatchKeywordEntry => ActionFn(327); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant75(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant78(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action327::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant78(__nt), __end)); + (3, 200) + } + pub(crate) fn __reduce568< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = MatchMappingEntry => ActionFn(330); + let __sym0 = __pop_Variant76(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action330::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant79(__nt), __end)); + (1, 201) + } + pub(crate) fn __reduce569< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = OneOrMore, ",", MatchMappingEntry => ActionFn(331); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant76(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant79(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action331::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant79(__nt), __end)); + (3, 201) + } + pub(crate) fn __reduce570< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = ParameterDef => ActionFn(469); + let __sym0 = __pop_Variant10(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action469::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant80(__nt), __end)); + (1, 202) + } + pub(crate) fn __reduce571< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = OneOrMore>, ",", ParameterDef => ActionFn(470); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant10(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action470::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant80(__nt), __end)); + (3, 202) + } + pub(crate) fn __reduce572< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = ParameterDef => ActionFn(458); + let __sym0 = __pop_Variant10(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action458::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant80(__nt), __end)); + (1, 203) + } + pub(crate) fn __reduce573< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = OneOrMore>, ",", ParameterDef => ActionFn(459); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant10(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action459::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant80(__nt), __end)); + (3, 203) + } + pub(crate) fn __reduce574< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = Pattern => ActionFn(328); + let __sym0 = __pop_Variant34(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action328::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant52(__nt), __end)); + (1, 204) + } + pub(crate) fn __reduce575< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = OneOrMore, ",", Pattern => ActionFn(329); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant34(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant52(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action329::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant52(__nt), __end)); + (3, 204) + } + pub(crate) fn __reduce576< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = Test<"all"> => ActionFn(290); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action290::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (1, 205) + } + pub(crate) fn __reduce577< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore> = OneOrMore>, ",", Test<"all"> => ActionFn(291); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action291::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (3, 205) + } + pub(crate) fn __reduce578< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = TestOrStarExpr => ActionFn(437); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action437::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (1, 206) + } + pub(crate) fn __reduce579< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = OneOrMore, ",", TestOrStarExpr => ActionFn(438); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action438::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (3, 206) + } + pub(crate) fn __reduce580< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = TestOrStarNamedExpr => ActionFn(254); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action254::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (1, 207) + } + pub(crate) fn __reduce581< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = OneOrMore, ",", TestOrStarNamedExpr => ActionFn(255); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action255::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (3, 207) + } + pub(crate) fn __reduce582< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = TypeParam => ActionFn(266); + let __sym0 = __pop_Variant90(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action266::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant81(__nt), __end)); + (1, 208) + } + pub(crate) fn __reduce583< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OneOrMore = OneOrMore, ",", TypeParam => ActionFn(267); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant90(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant81(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action267::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant81(__nt), __end)); + (3, 208) + } + pub(crate) fn __reduce584< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OrPattern = ClosedPattern => ActionFn(96); + let __sym0 = __pop_Variant34(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action96::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 209) + } + pub(crate) fn __reduce585< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OrPattern = TwoOrMore => ActionFn(1461); + let __sym0 = __pop_Variant52(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1461::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 209) + } + pub(crate) fn __reduce586< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OrTest<"all"> = (> "or")+, AndTest<"all"> => ActionFn(1462); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant16(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1462::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 210) + } + pub(crate) fn __reduce587< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OrTest<"all"> = AndTest<"all"> => ActionFn(243); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action243::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 210) + } + pub(crate) fn __reduce588< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OrTest<"no-withitems"> = (> "or")+, AndTest<"all"> => ActionFn(1463); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant16(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1463::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (2, 211) + } + pub(crate) fn __reduce589< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // OrTest<"no-withitems"> = AndTest<"no-withitems"> => ActionFn(483); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action483::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 211) + } + pub(crate) fn __reduce590< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ParameterDef = TypedParameter => ActionFn(476); + let __sym0 = __pop_Variant10(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action476::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (1, 212) + } + pub(crate) fn __reduce591< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ParameterDef = TypedParameter, "=", Test<"all"> => ActionFn(1464); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant10(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1464::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (3, 212) + } + pub(crate) fn __reduce592< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ParameterDef = UntypedParameter => ActionFn(465); + let __sym0 = __pop_Variant10(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action465::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (1, 213) + } + pub(crate) fn __reduce593< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ParameterDef = UntypedParameter, "=", Test<"all"> => ActionFn(1465); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant10(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1465::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (3, 213) + } + pub(crate) fn __reduce594< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ParameterDefs = OneOrMore> => ActionFn(425); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action425::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant82(__nt), __end)); + (1, 214) + } + pub(crate) fn __reduce595< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ParameterDefs = OneOrMore>, ",", "/" => ActionFn(725); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action725::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant82(__nt), __end)); + (3, 214) + } + pub(crate) fn __reduce596< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ParameterDefs = OneOrMore>, ",", "/", ("," >)+ => ActionFn(726); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant11(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -27176,11 +28885,11 @@ mod __parse__Top { let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action684::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action726::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant82(__nt), __end)); - (4, 205) + (4, 214) } - pub(crate) fn __reduce629< + pub(crate) fn __reduce597< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27188,17 +28897,72 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterList = KwargParameter, "," => ActionFn(1371); + // ParameterDefs = OneOrMore> => ActionFn(433); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action433::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant82(__nt), __end)); + (1, 215) + } + pub(crate) fn __reduce598< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ParameterDefs = OneOrMore>, ",", "/" => ActionFn(733); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action733::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant82(__nt), __end)); + (3, 215) + } + pub(crate) fn __reduce599< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ParameterDefs = OneOrMore>, ",", "/", ("," >)+ => ActionFn(734); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant11(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant80(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action734::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant82(__nt), __end)); + (4, 215) + } + pub(crate) fn __reduce676< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ParameterList = KwargParameter, "," => ActionFn(1502); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1371::<>(mode, __sym0, __sym1); + let __nt = super::__action1502::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (2, 206) + (2, 216) } - pub(crate) fn __reduce630< + pub(crate) fn __reduce677< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27206,15 +28970,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterList = KwargParameter => ActionFn(1372); + // ParameterList = KwargParameter => ActionFn(1503); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1372::<>(mode, __sym0); + let __nt = super::__action1503::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (1, 206) + (1, 216) } - pub(crate) fn __reduce707< + pub(crate) fn __reduce754< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27222,17 +28986,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterList = KwargParameter, "," => ActionFn(1409); + // ParameterList = KwargParameter, "," => ActionFn(1540); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1409::<>(mode, __sym0, __sym1); + let __nt = super::__action1540::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (2, 207) + (2, 217) } - pub(crate) fn __reduce708< + pub(crate) fn __reduce755< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27240,15 +29004,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterList = KwargParameter => ActionFn(1410); + // ParameterList = KwargParameter => ActionFn(1541); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1410::<>(mode, __sym0); + let __nt = super::__action1541::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (1, 207) + (1, 217) } - pub(crate) fn __reduce709< + pub(crate) fn __reduce756< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27256,15 +29020,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterList? = ParameterList => ActionFn(258); + // ParameterList? = ParameterList => ActionFn(260); let __sym0 = __pop_Variant45(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action258::<>(mode, __sym0); + let __nt = super::__action260::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant46(__nt), __end)); - (1, 208) + (1, 218) } - pub(crate) fn __reduce710< + pub(crate) fn __reduce757< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27272,14 +29036,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ParameterList? = => ActionFn(259); + // ParameterList? = => ActionFn(261); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action259::<>(mode, &__start, &__end); + let __nt = super::__action261::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant46(__nt), __end)); - (0, 208) + (0, 218) } - pub(crate) fn __reduce729< + pub(crate) fn __reduce776< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27287,15 +29051,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // PassStatement = "pass" => ActionFn(1412); + // PassStatement = "pass" => ActionFn(1543); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1412::<>(mode, __sym0); + let __nt = super::__action1543::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 212) + (1, 222) } - pub(crate) fn __reduce730< + pub(crate) fn __reduce777< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27303,15 +29067,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Pattern = AsPattern => ActionFn(91); + // Pattern = AsPattern => ActionFn(93); let __sym0 = __pop_Variant34(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action91::<>(mode, __sym0); + let __nt = super::__action93::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 213) + (1, 223) } - pub(crate) fn __reduce731< + pub(crate) fn __reduce778< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27319,15 +29083,114 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Pattern = OrPattern => ActionFn(92); + // Pattern = OrPattern => ActionFn(94); + let __sym0 = __pop_Variant34(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action94::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 223) + } + pub(crate) fn __reduce779< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Pattern? = Pattern => ActionFn(408); + let __sym0 = __pop_Variant34(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action408::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant83(__nt), __end)); + (1, 224) + } + pub(crate) fn __reduce780< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Pattern? = => ActionFn(409); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action409::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant83(__nt), __end)); + (0, 224) + } + pub(crate) fn __reduce781< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Patterns = Pattern, "," => ActionFn(1544); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant34(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1544::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (2, 225) + } + pub(crate) fn __reduce782< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Patterns = TwoOrMore, "," => ActionFn(1545); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant52(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1545::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (2, 225) + } + pub(crate) fn __reduce783< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Patterns = TwoOrMore => ActionFn(1546); + let __sym0 = __pop_Variant52(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1546::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 225) + } + pub(crate) fn __reduce784< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Patterns = Pattern => ActionFn(92); let __sym0 = __pop_Variant34(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action92::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 213) + (1, 225) } - pub(crate) fn __reduce732< + pub(crate) fn __reduce785< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27335,117 +29198,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Pattern? = Pattern => ActionFn(399); - let __sym0 = __pop_Variant34(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action399::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant83(__nt), __end)); - (1, 214) - } - pub(crate) fn __reduce733< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Pattern? = => ActionFn(400); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action400::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant83(__nt), __end)); - (0, 214) - } - pub(crate) fn __reduce734< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Patterns = Pattern, "," => ActionFn(1413); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant34(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1413::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (2, 215) - } - pub(crate) fn __reduce735< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Patterns = TwoOrMore, "," => ActionFn(1414); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant52(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1414::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (2, 215) - } - pub(crate) fn __reduce736< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Patterns = TwoOrMore => ActionFn(1415); - let __sym0 = __pop_Variant52(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1415::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 215) - } - pub(crate) fn __reduce737< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Patterns = Pattern => ActionFn(90); - let __sym0 = __pop_Variant34(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action90::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 215) - } - pub(crate) fn __reduce738< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Power<"all"> = AtomExpr<"all">, "**", Factor<"all"> => ActionFn(1416); + // Power<"All"> = AtomExpr<"all">, "**", Factor<"all"> => ActionFn(1547); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1416::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1547::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 216) + (3, 226) } - pub(crate) fn __reduce739< + pub(crate) fn __reduce786< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27453,15 +29217,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Power<"all"> = AtomExpr<"all"> => ActionFn(505); + // Power<"All"> = AtomExpr<"All"> => ActionFn(524); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action505::<>(mode, __sym0); + let __nt = super::__action524::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 216) + (1, 226) } - pub(crate) fn __reduce740< + pub(crate) fn __reduce787< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27469,18 +29233,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Power<"no-withitems"> = AtomExpr<"all">, "**", Factor<"all"> => ActionFn(1417); + // Power<"all"> = AtomExpr<"all">, "**", Factor<"all"> => ActionFn(1548); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1417::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1548::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 217) + (3, 227) } - pub(crate) fn __reduce741< + pub(crate) fn __reduce788< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27488,15 +29252,50 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Power<"no-withitems"> = AtomExpr<"no-withitems"> => ActionFn(554); + // Power<"all"> = AtomExpr<"all"> => ActionFn(522); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action554::<>(mode, __sym0); + let __nt = super::__action522::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 217) + (1, 227) } - pub(crate) fn __reduce742< + pub(crate) fn __reduce789< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Power<"no-withitems"> = AtomExpr<"all">, "**", Factor<"all"> => ActionFn(1549); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1549::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 228) + } + pub(crate) fn __reduce790< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Power<"no-withitems"> = AtomExpr<"no-withitems"> => ActionFn(600); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action600::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 228) + } + pub(crate) fn __reduce791< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27509,9 +29308,9 @@ mod __parse__Top { let __end = __start.clone(); let __nt = super::__action3::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (0, 218) + (0, 229) } - pub(crate) fn __reduce743< + pub(crate) fn __reduce792< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27527,9 +29326,9 @@ mod __parse__Top { let __end = __sym1.2; let __nt = super::__action4::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (2, 218) + (2, 229) } - pub(crate) fn __reduce744< + pub(crate) fn __reduce793< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27537,7 +29336,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Program = Program, SmallStatement, ";", "\n" => ActionFn(1162); + // Program = Program, SmallStatement, ";", "\n" => ActionFn(1259); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -27545,11 +29344,11 @@ mod __parse__Top { let __sym0 = __pop_Variant24(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1162::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1259::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (4, 218) + (4, 229) } - pub(crate) fn __reduce745< + pub(crate) fn __reduce794< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27557,7 +29356,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Program = Program, ( ";")+, SmallStatement, ";", "\n" => ActionFn(1163); + // Program = Program, ( ";")+, SmallStatement, ";", "\n" => ActionFn(1260); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -27566,11 +29365,11 @@ mod __parse__Top { let __sym0 = __pop_Variant24(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action1163::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action1260::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (5, 218) + (5, 229) } - pub(crate) fn __reduce746< + pub(crate) fn __reduce795< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27578,18 +29377,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Program = Program, SmallStatement, "\n" => ActionFn(1164); + // Program = Program, SmallStatement, "\n" => ActionFn(1261); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant36(__symbols); let __sym0 = __pop_Variant24(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1164::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1261::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 218) + (3, 229) } - pub(crate) fn __reduce747< + pub(crate) fn __reduce796< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27597,7 +29396,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Program = Program, ( ";")+, SmallStatement, "\n" => ActionFn(1165); + // Program = Program, ( ";")+, SmallStatement, "\n" => ActionFn(1262); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant36(__symbols); @@ -27605,11 +29404,11 @@ mod __parse__Top { let __sym0 = __pop_Variant24(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1165::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1262::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (4, 218) + (4, 229) } - pub(crate) fn __reduce748< + pub(crate) fn __reduce797< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27625,9 +29424,9 @@ mod __parse__Top { let __end = __sym1.2; let __nt = super::__action6::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (2, 218) + (2, 229) } - pub(crate) fn __reduce749< + pub(crate) fn __reduce798< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27635,15 +29434,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // RaiseStatement = "raise" => ActionFn(1418); + // RaiseStatement = "raise" => ActionFn(1550); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1418::<>(mode, __sym0); + let __nt = super::__action1550::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 219) + (1, 230) } - pub(crate) fn __reduce750< + pub(crate) fn __reduce799< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27651,7 +29450,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // RaiseStatement = "raise", Test<"all">, "from", Test<"all"> => ActionFn(1419); + // RaiseStatement = "raise", Test<"all">, "from", Test<"all"> => ActionFn(1551); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant14(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -27659,11 +29458,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1419::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1551::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (4, 219) + (4, 230) } - pub(crate) fn __reduce751< + pub(crate) fn __reduce800< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27671,17 +29470,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // RaiseStatement = "raise", Test<"all"> => ActionFn(1420); + // RaiseStatement = "raise", Test<"all"> => ActionFn(1552); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1420::<>(mode, __sym0, __sym1); + let __nt = super::__action1552::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (2, 219) + (2, 230) } - pub(crate) fn __reduce752< + pub(crate) fn __reduce801< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27689,18 +29488,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SequencePattern = "(", Pattern, ")" => ActionFn(1421); + // SequencePattern = "(", Pattern, ")" => ActionFn(1553); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant34(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1421::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1553::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (3, 220) + (3, 231) } - pub(crate) fn __reduce753< + pub(crate) fn __reduce802< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27708,17 +29507,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SequencePattern = "(", ")" => ActionFn(1422); + // SequencePattern = "(", ")" => ActionFn(1554); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1422::<>(mode, __sym0, __sym1); + let __nt = super::__action1554::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (2, 220) + (2, 231) } - pub(crate) fn __reduce754< + pub(crate) fn __reduce803< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27726,7 +29525,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SequencePattern = "(", Pattern, ",", ")" => ActionFn(1423); + // SequencePattern = "(", Pattern, ",", ")" => ActionFn(1555); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -27734,11 +29533,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1423::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1555::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (4, 220) + (4, 231) } - pub(crate) fn __reduce755< + pub(crate) fn __reduce804< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27746,7 +29545,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SequencePattern = "(", ( ",")+, Pattern, ",", ")" => ActionFn(1424); + // SequencePattern = "(", ( ",")+, Pattern, ",", ")" => ActionFn(1556); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -27755,11 +29554,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action1424::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action1556::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (5, 220) + (5, 231) } - pub(crate) fn __reduce756< + pub(crate) fn __reduce805< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27767,7 +29566,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SequencePattern = "(", ( ",")+, Pattern, ")" => ActionFn(1425); + // SequencePattern = "(", ( ",")+, Pattern, ")" => ActionFn(1557); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant34(__symbols); @@ -27775,11 +29574,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1425::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1557::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (4, 220) + (4, 231) } - pub(crate) fn __reduce757< + pub(crate) fn __reduce806< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27787,18 +29586,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SequencePattern = "[", Pattern, "]" => ActionFn(1518); + // SequencePattern = "[", Pattern, "]" => ActionFn(1653); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant34(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1518::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1653::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (3, 220) + (3, 231) } - pub(crate) fn __reduce758< + pub(crate) fn __reduce807< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27806,17 +29605,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SequencePattern = "[", "]" => ActionFn(1519); + // SequencePattern = "[", "]" => ActionFn(1654); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1519::<>(mode, __sym0, __sym1); + let __nt = super::__action1654::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (2, 220) + (2, 231) } - pub(crate) fn __reduce759< + pub(crate) fn __reduce808< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27824,7 +29623,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SequencePattern = "[", ( ",")+, Pattern, "]" => ActionFn(1520); + // SequencePattern = "[", ( ",")+, Pattern, "]" => ActionFn(1655); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant34(__symbols); @@ -27832,11 +29631,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1520::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1655::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (4, 220) + (4, 231) } - pub(crate) fn __reduce760< + pub(crate) fn __reduce809< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27844,18 +29643,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SequencePattern = "[", ( ",")+, "]" => ActionFn(1521); + // SequencePattern = "[", ( ",")+, "]" => ActionFn(1656); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant35(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1521::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1656::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (3, 220) + (3, 231) } - pub(crate) fn __reduce761< + pub(crate) fn __reduce810< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27863,17 +29662,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SetLiteralValues = OneOrMore, "," => ActionFn(637); + // SetLiteralValues = OneOrMore, "," => ActionFn(687); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action637::<>(mode, __sym0, __sym1); + let __nt = super::__action687::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (2, 221) + (2, 232) } - pub(crate) fn __reduce762< + pub(crate) fn __reduce811< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27881,15 +29680,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SetLiteralValues = OneOrMore => ActionFn(638); + // SetLiteralValues = OneOrMore => ActionFn(688); let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action638::<>(mode, __sym0); + let __nt = super::__action688::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (1, 221) + (1, 232) } - pub(crate) fn __reduce763< + pub(crate) fn __reduce812< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27897,18 +29696,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ShiftExpression<"all"> = ShiftExpression<"all">, ShiftOp, ArithmeticExpression<"all"> => ActionFn(1427); + // ShiftExpression<"All"> = ShiftExpression<"all">, ShiftOp, ArithmeticExpression<"all"> => ActionFn(1559); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant48(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1427::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1559::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 222) + (3, 233) } - pub(crate) fn __reduce764< + pub(crate) fn __reduce813< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27916,15 +29715,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ShiftExpression<"all"> = ArithmeticExpression<"all"> => ActionFn(484); + // ShiftExpression<"All"> = ArithmeticExpression<"All"> => ActionFn(489); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action484::<>(mode, __sym0); + let __nt = super::__action489::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 222) + (1, 233) } - pub(crate) fn __reduce765< + pub(crate) fn __reduce814< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27932,18 +29731,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ShiftExpression<"no-withitems"> = ShiftExpression<"all">, ShiftOp, ArithmeticExpression<"all"> => ActionFn(1428); + // ShiftExpression<"all"> = ShiftExpression<"all">, ShiftOp, ArithmeticExpression<"all"> => ActionFn(1560); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant48(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1428::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1560::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 223) + (3, 234) } - pub(crate) fn __reduce766< + pub(crate) fn __reduce815< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27951,15 +29750,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ShiftExpression<"no-withitems"> = ArithmeticExpression<"no-withitems"> => ActionFn(511); + // ShiftExpression<"all"> = ArithmeticExpression<"all"> => ActionFn(491); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action511::<>(mode, __sym0); + let __nt = super::__action491::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 223) + (1, 234) } - pub(crate) fn __reduce767< + pub(crate) fn __reduce816< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27967,15 +29766,50 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ShiftOp = "<<" => ActionFn(192); + // ShiftExpression<"no-withitems"> = ShiftExpression<"all">, ShiftOp, ArithmeticExpression<"all"> => ActionFn(1561); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant48(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1561::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 235) + } + pub(crate) fn __reduce817< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ShiftExpression<"no-withitems"> = ArithmeticExpression<"no-withitems"> => ActionFn(542); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action542::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 235) + } + pub(crate) fn __reduce818< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ShiftOp = "<<" => ActionFn(194); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action192::<>(mode, __sym0); + let __nt = super::__action194::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 224) + (1, 236) } - pub(crate) fn __reduce768< + pub(crate) fn __reduce819< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27983,15 +29817,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ShiftOp = ">>" => ActionFn(193); + // ShiftOp = ">>" => ActionFn(195); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action193::<>(mode, __sym0); + let __nt = super::__action195::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant48(__nt), __end)); - (1, 224) + (1, 236) } - pub(crate) fn __reduce769< + pub(crate) fn __reduce820< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -27999,7 +29833,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SingleForComprehension = "async", "for", ExpressionList, "in", OrTest<"all"> => ActionFn(1524); + // SingleForComprehension = "async", "for", ExpressionList, "in", OrTest<"all"> => ActionFn(1659); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant14(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -28008,11 +29842,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action1524::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action1659::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant84(__nt), __end)); - (5, 225) + (5, 237) } - pub(crate) fn __reduce770< + pub(crate) fn __reduce821< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28020,7 +29854,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SingleForComprehension = "async", "for", ExpressionList, "in", OrTest<"all">, ComprehensionIf+ => ActionFn(1525); + // SingleForComprehension = "async", "for", ExpressionList, "in", OrTest<"all">, ComprehensionIf+ => ActionFn(1660); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant16(__symbols); let __sym4 = __pop_Variant14(__symbols); @@ -28030,11 +29864,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action1525::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action1660::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant84(__nt), __end)); - (6, 225) + (6, 237) } - pub(crate) fn __reduce771< + pub(crate) fn __reduce822< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28042,7 +29876,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SingleForComprehension = "for", ExpressionList, "in", OrTest<"all"> => ActionFn(1526); + // SingleForComprehension = "for", ExpressionList, "in", OrTest<"all"> => ActionFn(1661); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant14(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -28050,11 +29884,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1526::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1661::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant84(__nt), __end)); - (4, 225) + (4, 237) } - pub(crate) fn __reduce772< + pub(crate) fn __reduce823< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28062,7 +29896,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SingleForComprehension = "for", ExpressionList, "in", OrTest<"all">, ComprehensionIf+ => ActionFn(1527); + // SingleForComprehension = "for", ExpressionList, "in", OrTest<"all">, ComprehensionIf+ => ActionFn(1662); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant16(__symbols); let __sym3 = __pop_Variant14(__symbols); @@ -28071,11 +29905,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action1527::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action1662::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant84(__nt), __end)); - (5, 225) + (5, 237) } - pub(crate) fn __reduce773< + pub(crate) fn __reduce824< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28083,15 +29917,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SingleForComprehension+ = SingleForComprehension => ActionFn(242); + // SingleForComprehension+ = SingleForComprehension => ActionFn(244); let __sym0 = __pop_Variant84(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action242::<>(mode, __sym0); + let __nt = super::__action244::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant85(__nt), __end)); - (1, 226) + (1, 238) } - pub(crate) fn __reduce774< + pub(crate) fn __reduce825< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28099,17 +29933,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SingleForComprehension+ = SingleForComprehension+, SingleForComprehension => ActionFn(243); + // SingleForComprehension+ = SingleForComprehension+, SingleForComprehension => ActionFn(245); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant84(__symbols); let __sym0 = __pop_Variant85(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action243::<>(mode, __sym0, __sym1); + let __nt = super::__action245::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant85(__nt), __end)); - (2, 226) + (2, 238) } - pub(crate) fn __reduce775< + pub(crate) fn __reduce826< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28117,17 +29951,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SliceOp = ":", Test<"all"> => ActionFn(1686); + // SliceOp = ":", Test<"all"> => ActionFn(1825); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1686::<>(mode, __sym0, __sym1); + let __nt = super::__action1825::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant86(__nt), __end)); - (2, 227) + (2, 239) } - pub(crate) fn __reduce776< + pub(crate) fn __reduce827< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28135,15 +29969,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SliceOp = ":" => ActionFn(1687); + // SliceOp = ":" => ActionFn(1826); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1687::<>(mode, __sym0); + let __nt = super::__action1826::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant86(__nt), __end)); - (1, 227) + (1, 239) } - pub(crate) fn __reduce777< + pub(crate) fn __reduce828< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28151,15 +29985,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SliceOp? = SliceOp => ActionFn(254); + // SliceOp? = SliceOp => ActionFn(256); let __sym0 = __pop_Variant86(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action254::<>(mode, __sym0); + let __nt = super::__action256::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant87(__nt), __end)); - (1, 228) + (1, 240) } - pub(crate) fn __reduce778< + pub(crate) fn __reduce829< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28167,14 +30001,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SliceOp? = => ActionFn(255); + // SliceOp? = => ActionFn(257); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action255::<>(mode, &__start, &__end); + let __nt = super::__action257::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant87(__nt), __end)); - (0, 228) + (0, 240) } - pub(crate) fn __reduce779< + pub(crate) fn __reduce830< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28188,9 +30022,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action13::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 229) + (1, 241) } - pub(crate) fn __reduce780< + pub(crate) fn __reduce831< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28204,9 +30038,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action14::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 229) + (1, 241) } - pub(crate) fn __reduce781< + pub(crate) fn __reduce832< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28220,9 +30054,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action15::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 229) + (1, 241) } - pub(crate) fn __reduce782< + pub(crate) fn __reduce833< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28236,9 +30070,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action16::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 229) + (1, 241) } - pub(crate) fn __reduce783< + pub(crate) fn __reduce834< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28252,9 +30086,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action17::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 229) + (1, 241) } - pub(crate) fn __reduce784< + pub(crate) fn __reduce835< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28268,9 +30102,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action18::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 229) + (1, 241) } - pub(crate) fn __reduce785< + pub(crate) fn __reduce836< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28284,9 +30118,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action19::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 229) + (1, 241) } - pub(crate) fn __reduce786< + pub(crate) fn __reduce837< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28300,9 +30134,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action20::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 229) + (1, 241) } - pub(crate) fn __reduce787< + pub(crate) fn __reduce838< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28316,9 +30150,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action21::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 229) + (1, 241) } - pub(crate) fn __reduce788< + pub(crate) fn __reduce839< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28326,15 +30160,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SmallStatement = LineMagicStatement => ActionFn(22); + // SmallStatement = IpyEscapeCommandStatement => ActionFn(22); let __sym0 = __pop_Variant36(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action22::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (1, 229) + (1, 241) } - pub(crate) fn __reduce789< + pub(crate) fn __reduce840< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28342,17 +30176,33 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // StarExpr = "*", Expression<"all"> => ActionFn(1431); + // SmallStatement = IpyHelpEndEscapeCommandStatement => ActionFn(23); + let __sym0 = __pop_Variant36(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action23::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (1, 241) + } + pub(crate) fn __reduce841< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // StarExpr = "*", Expression<"all"> => ActionFn(1564); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1431::<>(mode, __sym0, __sym1); + let __nt = super::__action1564::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 230) + (2, 242) } - pub(crate) fn __reduce790< + pub(crate) fn __reduce842< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28360,17 +30210,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // StarPattern = "*", Identifier => ActionFn(1432); + // StarPattern = "*", Identifier => ActionFn(1565); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant22(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1432::<>(mode, __sym0, __sym1); + let __nt = super::__action1565::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (2, 231) + (2, 243) } - pub(crate) fn __reduce791< + pub(crate) fn __reduce843< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28378,18 +30228,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // StarTypedParameter = Identifier, ":", TestOrStarExpr => ActionFn(1433); + // StarTypedParameter = Identifier, ":", TestOrStarExpr => ActionFn(1566); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1433::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1566::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant63(__nt), __end)); - (3, 232) + (3, 244) } - pub(crate) fn __reduce792< + pub(crate) fn __reduce844< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28397,15 +30247,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // StarTypedParameter = Identifier => ActionFn(1434); + // StarTypedParameter = Identifier => ActionFn(1567); let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1434::<>(mode, __sym0); + let __nt = super::__action1567::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant63(__nt), __end)); - (1, 232) + (1, 244) } - pub(crate) fn __reduce793< + pub(crate) fn __reduce845< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28413,15 +30263,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // StarTypedParameter? = StarTypedParameter => ActionFn(471); + // StarTypedParameter? = StarTypedParameter => ActionFn(478); let __sym0 = __pop_Variant63(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action471::<>(mode, __sym0); + let __nt = super::__action478::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant64(__nt), __end)); - (1, 233) + (1, 245) } - pub(crate) fn __reduce794< + pub(crate) fn __reduce846< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28429,14 +30279,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // StarTypedParameter? = => ActionFn(472); + // StarTypedParameter? = => ActionFn(479); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action472::<>(mode, &__start, &__end); + let __nt = super::__action479::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant64(__nt), __end)); - (0, 233) + (0, 245) } - pub(crate) fn __reduce795< + pub(crate) fn __reduce847< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28444,15 +30294,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // StarUntypedParameter = Identifier => ActionFn(1435); + // StarUntypedParameter = Identifier => ActionFn(1568); let __sym0 = __pop_Variant22(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1435::<>(mode, __sym0); + let __nt = super::__action1568::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant63(__nt), __end)); - (1, 234) + (1, 246) } - pub(crate) fn __reduce796< + pub(crate) fn __reduce848< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28460,15 +30310,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // StarUntypedParameter? = StarUntypedParameter => ActionFn(460); + // StarUntypedParameter? = StarUntypedParameter => ActionFn(467); let __sym0 = __pop_Variant63(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action460::<>(mode, __sym0); + let __nt = super::__action467::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant64(__nt), __end)); - (1, 235) + (1, 247) } - pub(crate) fn __reduce797< + pub(crate) fn __reduce849< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28476,14 +30326,14 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // StarUntypedParameter? = => ActionFn(461); + // StarUntypedParameter? = => ActionFn(468); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action461::<>(mode, &__start, &__end); + let __nt = super::__action468::<>(mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant64(__nt), __end)); - (0, 235) + (0, 247) } - pub(crate) fn __reduce798< + pub(crate) fn __reduce850< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28491,18 +30341,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statements = SmallStatement, ";", "\n" => ActionFn(1166); + // Statements = SmallStatement, ";", "\n" => ActionFn(1263); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant36(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1166::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1263::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant88(__nt), __end)); - (3, 236) + (3, 248) } - pub(crate) fn __reduce799< + pub(crate) fn __reduce851< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28510,7 +30360,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statements = ( ";")+, SmallStatement, ";", "\n" => ActionFn(1167); + // Statements = ( ";")+, SmallStatement, ";", "\n" => ActionFn(1264); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -28518,11 +30368,11 @@ mod __parse__Top { let __sym0 = __pop_Variant37(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1167::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1264::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant88(__nt), __end)); - (4, 236) + (4, 248) } - pub(crate) fn __reduce800< + pub(crate) fn __reduce852< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28530,17 +30380,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statements = SmallStatement, "\n" => ActionFn(1168); + // Statements = SmallStatement, "\n" => ActionFn(1265); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant36(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1168::<>(mode, __sym0, __sym1); + let __nt = super::__action1265::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant88(__nt), __end)); - (2, 236) + (2, 248) } - pub(crate) fn __reduce801< + pub(crate) fn __reduce853< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28548,18 +30398,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statements = ( ";")+, SmallStatement, "\n" => ActionFn(1169); + // Statements = ( ";")+, SmallStatement, "\n" => ActionFn(1266); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant36(__symbols); let __sym0 = __pop_Variant37(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1169::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1266::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant88(__nt), __end)); - (3, 236) + (3, 248) } - pub(crate) fn __reduce802< + pub(crate) fn __reduce854< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28573,9 +30423,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action10::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant88(__nt), __end)); - (1, 236) + (1, 248) } - pub(crate) fn __reduce803< + pub(crate) fn __reduce855< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28591,9 +30441,9 @@ mod __parse__Top { let __end = __sym1.2; let __nt = super::__action11::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant88(__nt), __end)); - (2, 236) + (2, 248) } - pub(crate) fn __reduce804< + pub(crate) fn __reduce856< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28601,7 +30451,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statements = Statements, SmallStatement, ";", "\n" => ActionFn(1170); + // Statements = Statements, SmallStatement, ";", "\n" => ActionFn(1267); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -28609,11 +30459,11 @@ mod __parse__Top { let __sym0 = __pop_Variant88(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1170::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1267::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant88(__nt), __end)); - (4, 236) + (4, 248) } - pub(crate) fn __reduce805< + pub(crate) fn __reduce857< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28621,7 +30471,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statements = Statements, ( ";")+, SmallStatement, ";", "\n" => ActionFn(1171); + // Statements = Statements, ( ";")+, SmallStatement, ";", "\n" => ActionFn(1268); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -28630,11 +30480,11 @@ mod __parse__Top { let __sym0 = __pop_Variant88(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action1171::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action1268::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant88(__nt), __end)); - (5, 236) + (5, 248) } - pub(crate) fn __reduce806< + pub(crate) fn __reduce858< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28642,18 +30492,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statements = Statements, SmallStatement, "\n" => ActionFn(1172); + // Statements = Statements, SmallStatement, "\n" => ActionFn(1269); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant36(__symbols); let __sym0 = __pop_Variant88(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1172::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1269::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant88(__nt), __end)); - (3, 236) + (3, 248) } - pub(crate) fn __reduce807< + pub(crate) fn __reduce859< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28661,7 +30511,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statements = Statements, ( ";")+, SmallStatement, "\n" => ActionFn(1173); + // Statements = Statements, ( ";")+, SmallStatement, "\n" => ActionFn(1270); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant36(__symbols); @@ -28669,11 +30519,11 @@ mod __parse__Top { let __sym0 = __pop_Variant88(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1173::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1270::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant88(__nt), __end)); - (4, 236) + (4, 248) } - pub(crate) fn __reduce808< + pub(crate) fn __reduce860< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28681,15 +30531,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Subscript = TestOrStarNamedExpr => ActionFn(207); + // Subscript = TestOrStarNamedExpr => ActionFn(209); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action207::<>(mode, __sym0); + let __nt = super::__action209::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 237) + (1, 249) } - pub(crate) fn __reduce809< + pub(crate) fn __reduce861< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28697,7 +30547,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Subscript = Test<"all">, ":", Test<"all">, SliceOp => ActionFn(1688); + // Subscript = Test<"all">, ":", Test<"all">, SliceOp => ActionFn(1827); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant86(__symbols); let __sym2 = __pop_Variant14(__symbols); @@ -28705,11 +30555,11 @@ mod __parse__Top { let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1688::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1827::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (4, 237) + (4, 249) } - pub(crate) fn __reduce810< + pub(crate) fn __reduce862< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28717,18 +30567,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Subscript = Test<"all">, ":", SliceOp => ActionFn(1689); + // Subscript = Test<"all">, ":", SliceOp => ActionFn(1828); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant86(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1689::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1828::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 237) + (3, 249) } - pub(crate) fn __reduce811< + pub(crate) fn __reduce863< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28736,18 +30586,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Subscript = ":", Test<"all">, SliceOp => ActionFn(1690); + // Subscript = ":", Test<"all">, SliceOp => ActionFn(1829); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant86(__symbols); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1690::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1829::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 237) + (3, 249) } - pub(crate) fn __reduce812< + pub(crate) fn __reduce864< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28755,17 +30605,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Subscript = ":", SliceOp => ActionFn(1691); + // Subscript = ":", SliceOp => ActionFn(1830); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant86(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1691::<>(mode, __sym0, __sym1); + let __nt = super::__action1830::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 237) + (2, 249) } - pub(crate) fn __reduce813< + pub(crate) fn __reduce865< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28773,18 +30623,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Subscript = Test<"all">, ":", Test<"all"> => ActionFn(1692); + // Subscript = Test<"all">, ":", Test<"all"> => ActionFn(1831); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1692::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1831::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 237) + (3, 249) } - pub(crate) fn __reduce814< + pub(crate) fn __reduce866< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28792,17 +30642,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Subscript = Test<"all">, ":" => ActionFn(1693); + // Subscript = Test<"all">, ":" => ActionFn(1832); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1693::<>(mode, __sym0, __sym1); + let __nt = super::__action1832::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 237) + (2, 249) } - pub(crate) fn __reduce815< + pub(crate) fn __reduce867< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28810,17 +30660,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Subscript = ":", Test<"all"> => ActionFn(1694); + // Subscript = ":", Test<"all"> => ActionFn(1833); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1694::<>(mode, __sym0, __sym1); + let __nt = super::__action1833::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 237) + (2, 249) } - pub(crate) fn __reduce816< + pub(crate) fn __reduce868< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28828,15 +30678,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Subscript = ":" => ActionFn(1695); + // Subscript = ":" => ActionFn(1834); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1695::<>(mode, __sym0); + let __nt = super::__action1834::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 237) + (1, 249) } - pub(crate) fn __reduce817< + pub(crate) fn __reduce869< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28844,15 +30694,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SubscriptList = Subscript => ActionFn(1437); + // SubscriptList = Subscript => ActionFn(1570); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1437::<>(mode, __sym0); + let __nt = super::__action1570::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 238) + (1, 250) } - pub(crate) fn __reduce818< + pub(crate) fn __reduce870< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28860,17 +30710,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SubscriptList = Subscript, "," => ActionFn(1438); + // SubscriptList = Subscript, "," => ActionFn(1571); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1438::<>(mode, __sym0, __sym1); + let __nt = super::__action1571::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 238) + (2, 250) } - pub(crate) fn __reduce819< + pub(crate) fn __reduce871< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28878,17 +30728,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SubscriptList = TwoOrMore, "," => ActionFn(1439); + // SubscriptList = TwoOrMore, "," => ActionFn(1572); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1439::<>(mode, __sym0, __sym1); + let __nt = super::__action1572::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 238) + (2, 250) } - pub(crate) fn __reduce820< + pub(crate) fn __reduce872< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28896,15 +30746,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SubscriptList = TwoOrMore => ActionFn(1440); + // SubscriptList = TwoOrMore => ActionFn(1573); let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1440::<>(mode, __sym0); + let __nt = super::__action1573::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 238) + (1, 250) } - pub(crate) fn __reduce821< + pub(crate) fn __reduce873< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28912,18 +30762,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Suite = SmallStatement, ";", "\n" => ActionFn(1174); + // Suite = SmallStatement, ";", "\n" => ActionFn(1271); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant36(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1174::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1271::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 239) + (3, 251) } - pub(crate) fn __reduce822< + pub(crate) fn __reduce874< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28931,7 +30781,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Suite = ( ";")+, SmallStatement, ";", "\n" => ActionFn(1175); + // Suite = ( ";")+, SmallStatement, ";", "\n" => ActionFn(1272); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -28939,11 +30789,11 @@ mod __parse__Top { let __sym0 = __pop_Variant37(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1175::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1272::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (4, 239) + (4, 251) } - pub(crate) fn __reduce823< + pub(crate) fn __reduce875< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28951,17 +30801,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Suite = SmallStatement, "\n" => ActionFn(1176); + // Suite = SmallStatement, "\n" => ActionFn(1273); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant36(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1176::<>(mode, __sym0, __sym1); + let __nt = super::__action1273::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (2, 239) + (2, 251) } - pub(crate) fn __reduce824< + pub(crate) fn __reduce876< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28969,18 +30819,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Suite = ( ";")+, SmallStatement, "\n" => ActionFn(1177); + // Suite = ( ";")+, SmallStatement, "\n" => ActionFn(1274); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant36(__symbols); let __sym0 = __pop_Variant37(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1177::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1274::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (3, 239) + (3, 251) } - pub(crate) fn __reduce825< + pub(crate) fn __reduce877< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -28998,969 +30848,7 @@ mod __parse__Top { let __end = __sym3.2; let __nt = super::__action8::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant24(__nt), __end)); - (4, 239) - } - pub(crate) fn __reduce826< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Term<"all"> = Term<"all">, MulOp, Factor<"all"> => ActionFn(1441); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant48(__symbols); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1441::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 240) - } - pub(crate) fn __reduce827< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Term<"all"> = Factor<"all"> => ActionFn(497); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action497::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 240) - } - pub(crate) fn __reduce828< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Term<"no-withitems"> = Term<"all">, MulOp, Factor<"all"> => ActionFn(1442); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant48(__symbols); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1442::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 241) - } - pub(crate) fn __reduce829< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Term<"no-withitems"> = Factor<"no-withitems"> => ActionFn(538); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action538::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 241) - } - pub(crate) fn __reduce830< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Test<"all"> = OrTest<"all">, "if", OrTest<"all">, "else", Test<"all"> => ActionFn(1443); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant14(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1443::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (5, 242) - } - pub(crate) fn __reduce831< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Test<"all"> = OrTest<"all"> => ActionFn(376); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action376::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 242) - } - pub(crate) fn __reduce832< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Test<"all"> = LambdaDef => ActionFn(377); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action377::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 242) - } - pub(crate) fn __reduce833< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Test<"all">? = Test<"all"> => ActionFn(303); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action303::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 243) - } - pub(crate) fn __reduce834< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Test<"all">? = => ActionFn(304); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action304::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (0, 243) - } - pub(crate) fn __reduce835< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Test<"no-withitems"> = OrTest<"all">, "if", OrTest<"all">, "else", Test<"all"> => ActionFn(1444); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant14(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1444::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (5, 244) - } - pub(crate) fn __reduce836< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Test<"no-withitems"> = OrTest<"no-withitems"> => ActionFn(406); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action406::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 244) - } - pub(crate) fn __reduce837< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Test<"no-withitems"> = LambdaDef => ActionFn(407); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action407::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 244) - } - pub(crate) fn __reduce838< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TestList = GenericList => ActionFn(220); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action220::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 245) - } - pub(crate) fn __reduce839< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TestList? = GenericList => ActionFn(1700); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1700::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 246) - } - pub(crate) fn __reduce840< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TestList? = => ActionFn(372); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action372::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (0, 246) - } - pub(crate) fn __reduce841< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TestListOrYieldExpr = GenericList => ActionFn(1701); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1701::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 247) - } - pub(crate) fn __reduce842< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TestListOrYieldExpr = YieldExpr => ActionFn(31); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action31::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 247) - } - pub(crate) fn __reduce843< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TestOrStarExpr = Test<"all"> => ActionFn(33); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action33::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 248) - } - pub(crate) fn __reduce844< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TestOrStarExpr = StarExpr => ActionFn(34); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action34::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 248) - } - pub(crate) fn __reduce845< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TestOrStarExprList = GenericList => ActionFn(1702); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1702::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 249) - } - pub(crate) fn __reduce846< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TestOrStarNamedExpr = NamedExpressionTest => ActionFn(37); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action37::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 250) - } - pub(crate) fn __reduce847< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TestOrStarNamedExpr = StarExpr => ActionFn(38); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action38::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 250) - } - pub(crate) fn __reduce848< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Top = StartModule, Program => ActionFn(1445); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant24(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1445::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant89(__nt), __end)); - (2, 251) - } - pub(crate) fn __reduce849< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Top = StartExpression, GenericList => ActionFn(1703); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1703::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant89(__nt), __end)); - (2, 251) - } - pub(crate) fn __reduce850< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Top = StartExpression, GenericList, ("\n")+ => ActionFn(1704); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant21(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1704::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant89(__nt), __end)); - (3, 251) - } - pub(crate) fn __reduce851< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TryStatement = "try", ":", Suite, ExceptClause+, "else", ":", Suite, "finally", ":", Suite => ActionFn(1448); - assert!(__symbols.len() >= 10); - let __sym9 = __pop_Variant24(__symbols); - let __sym8 = __pop_Variant0(__symbols); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant24(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant66(__symbols); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym9.2; - let __nt = super::__action1448::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (10, 252) - } - pub(crate) fn __reduce852< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TryStatement = "try", ":", Suite, ExceptClause+, "else", ":", Suite => ActionFn(1449); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant24(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant66(__symbols); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = super::__action1449::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 252) - } - pub(crate) fn __reduce853< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TryStatement = "try", ":", Suite, ExceptClause+, "finally", ":", Suite => ActionFn(1450); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant24(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant66(__symbols); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = super::__action1450::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 252) - } - pub(crate) fn __reduce854< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TryStatement = "try", ":", Suite, ExceptClause+ => ActionFn(1451); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant66(__symbols); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1451::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (4, 252) - } - pub(crate) fn __reduce855< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TryStatement = "try", ":", Suite, ExceptStarClause+, "else", ":", Suite, "finally", ":", Suite => ActionFn(1452); - assert!(__symbols.len() >= 10); - let __sym9 = __pop_Variant24(__symbols); - let __sym8 = __pop_Variant0(__symbols); - let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant24(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant66(__symbols); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym9.2; - let __nt = super::__action1452::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (10, 252) - } - pub(crate) fn __reduce856< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TryStatement = "try", ":", Suite, ExceptStarClause+, "else", ":", Suite => ActionFn(1453); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant24(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant66(__symbols); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = super::__action1453::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 252) - } - pub(crate) fn __reduce857< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TryStatement = "try", ":", Suite, ExceptStarClause+, "finally", ":", Suite => ActionFn(1454); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant24(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant66(__symbols); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = super::__action1454::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 252) - } - pub(crate) fn __reduce858< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TryStatement = "try", ":", Suite, ExceptStarClause+ => ActionFn(1455); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant66(__symbols); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1455::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (4, 252) - } - pub(crate) fn __reduce859< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TryStatement = "try", ":", Suite, "finally", ":", Suite => ActionFn(1110); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant24(__symbols); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant24(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action1110::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (6, 252) - } - pub(crate) fn __reduce860< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TwoOrMore = ClosedPattern, "|", ClosedPattern => ActionFn(337); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant34(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant34(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action337::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant52(__nt), __end)); - (3, 253) - } - pub(crate) fn __reduce861< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TwoOrMore = TwoOrMore, "|", ClosedPattern => ActionFn(338); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant34(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant52(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action338::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant52(__nt), __end)); - (3, 253) - } - pub(crate) fn __reduce862< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TwoOrMore = Pattern, ",", Pattern => ActionFn(339); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant34(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant34(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action339::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant52(__nt), __end)); - (3, 254) - } - pub(crate) fn __reduce863< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TwoOrMore = TwoOrMore, ",", Pattern => ActionFn(340); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant34(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant52(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action340::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant52(__nt), __end)); - (3, 254) - } - pub(crate) fn __reduce864< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TwoOrMore = Subscript, ",", Subscript => ActionFn(256); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action256::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (3, 255) - } - pub(crate) fn __reduce865< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TwoOrMore = TwoOrMore, ",", Subscript => ActionFn(257); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action257::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (3, 255) - } - pub(crate) fn __reduce866< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TwoOrMore = TestOrStarNamedExpr, ",", TestOrStarNamedExpr => ActionFn(344); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant14(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action344::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (3, 256) - } - pub(crate) fn __reduce867< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TwoOrMore = TwoOrMore, ",", TestOrStarNamedExpr => ActionFn(345); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant32(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action345::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant32(__nt), __end)); - (3, 256) - } - pub(crate) fn __reduce868< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TypeAliasName = Identifier => ActionFn(1456); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1456::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 257) - } - pub(crate) fn __reduce869< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TypeAliasStatement = "type", TypeAliasName, TypeParams, "=", Test<"all"> => ActionFn(1736); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant14(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant91(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action1736::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (5, 258) - } - pub(crate) fn __reduce870< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TypeAliasStatement = "type", TypeAliasName, "=", Test<"all"> => ActionFn(1737); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant14(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant14(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1737::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (4, 258) - } - pub(crate) fn __reduce871< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TypeParam = Identifier, ":", Test<"all"> => ActionFn(1458); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1458::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant90(__nt), __end)); - (3, 259) - } - pub(crate) fn __reduce872< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TypeParam = Identifier => ActionFn(1459); - let __sym0 = __pop_Variant22(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1459::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant90(__nt), __end)); - (1, 259) - } - pub(crate) fn __reduce873< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TypeParam = "*", Identifier => ActionFn(1460); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant22(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1460::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant90(__nt), __end)); - (2, 259) - } - pub(crate) fn __reduce874< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TypeParam = "**", Identifier => ActionFn(1461); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant22(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1461::<>(mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant90(__nt), __end)); - (2, 259) - } - pub(crate) fn __reduce875< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TypeParams = "[", OneOrMore, ",", "]" => ActionFn(1462); - assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant81(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym3.2; - let __nt = super::__action1462::<>(mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant91(__nt), __end)); - (4, 260) - } - pub(crate) fn __reduce876< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TypeParams = "[", OneOrMore, "]" => ActionFn(1463); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant81(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1463::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant91(__nt), __end)); - (3, 260) - } - pub(crate) fn __reduce877< - >( - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // TypeParams? = TypeParams => ActionFn(284); - let __sym0 = __pop_Variant91(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action284::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant92(__nt), __end)); - (1, 261) + (4, 251) } pub(crate) fn __reduce878< >( @@ -29970,12 +30858,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // TypeParams? = => ActionFn(285); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action285::<>(mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant92(__nt), __end)); - (0, 261) + // Term<"All"> = Term<"all">, MulOp, Factor<"all"> => ActionFn(1574); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant48(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1574::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 252) } pub(crate) fn __reduce879< >( @@ -29985,16 +30877,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // TypedParameter = Identifier, ":", Test<"all"> => ActionFn(1464); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant14(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant22(__symbols); + // Term<"All"> = Factor<"All"> => ActionFn(510); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action1464::<>(mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (3, 262) + let __end = __sym0.2; + let __nt = super::__action510::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 252) } pub(crate) fn __reduce880< >( @@ -30004,13 +30893,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // TypedParameter = Identifier => ActionFn(1465); - let __sym0 = __pop_Variant22(__symbols); + // Term<"all"> = Term<"all">, MulOp, Factor<"all"> => ActionFn(1575); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant48(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1465::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 262) + let __end = __sym2.2; + let __nt = super::__action1575::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 253) } pub(crate) fn __reduce881< >( @@ -30020,13 +30912,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // UnaryOp = "+" => ActionFn(201); - let __sym0 = __pop_Variant0(__symbols); + // Term<"all"> = Factor<"all"> => ActionFn(512); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action201::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant93(__nt), __end)); - (1, 263) + let __nt = super::__action512::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 253) } pub(crate) fn __reduce882< >( @@ -30036,13 +30928,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // UnaryOp = "-" => ActionFn(202); - let __sym0 = __pop_Variant0(__symbols); + // Term<"no-withitems"> = Term<"all">, MulOp, Factor<"all"> => ActionFn(1576); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant48(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action202::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant93(__nt), __end)); - (1, 263) + let __end = __sym2.2; + let __nt = super::__action1576::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 254) } pub(crate) fn __reduce883< >( @@ -30052,13 +30947,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // UnaryOp = "~" => ActionFn(203); - let __sym0 = __pop_Variant0(__symbols); + // Term<"no-withitems"> = Factor<"no-withitems"> => ActionFn(594); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action203::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant93(__nt), __end)); - (1, 263) + let __nt = super::__action594::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 254) } pub(crate) fn __reduce884< >( @@ -30068,13 +30963,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // UntypedParameter = Identifier => ActionFn(1466); - let __sym0 = __pop_Variant22(__symbols); + // Test<"all"> = OrTest<"all">, "if", OrTest<"all">, "else", Test<"all"> => ActionFn(1577); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant14(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1466::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 264) + let __end = __sym4.2; + let __nt = super::__action1577::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (5, 255) } pub(crate) fn __reduce885< >( @@ -30084,13 +30984,13 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ValuePattern = MatchNameOrAttr => ActionFn(1467); + // Test<"all"> = OrTest<"all"> => ActionFn(383); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1467::<>(mode, __sym0); - __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 265) + let __nt = super::__action383::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 255) } pub(crate) fn __reduce886< >( @@ -30100,7 +31000,992 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WhileStatement = "while", NamedExpressionTest, ":", Suite, "else", ":", Suite => ActionFn(1107); + // Test<"all"> = LambdaDef => ActionFn(384); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action384::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 255) + } + pub(crate) fn __reduce887< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Test<"all">? = Test<"all"> => ActionFn(305); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action305::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (1, 256) + } + pub(crate) fn __reduce888< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Test<"all">? = => ActionFn(306); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action306::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (0, 256) + } + pub(crate) fn __reduce889< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Test<"no-withitems"> = OrTest<"all">, "if", OrTest<"all">, "else", Test<"all"> => ActionFn(1578); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant14(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = super::__action1578::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (5, 257) + } + pub(crate) fn __reduce890< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Test<"no-withitems"> = OrTest<"no-withitems"> => ActionFn(415); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action415::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 257) + } + pub(crate) fn __reduce891< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Test<"no-withitems"> = LambdaDef => ActionFn(416); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action416::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 257) + } + pub(crate) fn __reduce892< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TestList = GenericList => ActionFn(222); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action222::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 258) + } + pub(crate) fn __reduce893< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TestList? = GenericList => ActionFn(1839); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1839::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (1, 259) + } + pub(crate) fn __reduce894< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TestList? = => ActionFn(379); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action379::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (0, 259) + } + pub(crate) fn __reduce895< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TestListOrYieldExpr = GenericList => ActionFn(1840); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1840::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 260) + } + pub(crate) fn __reduce896< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TestListOrYieldExpr = YieldExpr => ActionFn(32); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action32::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 260) + } + pub(crate) fn __reduce897< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TestOrStarExpr = Test<"all"> => ActionFn(34); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action34::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 261) + } + pub(crate) fn __reduce898< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TestOrStarExpr = StarExpr => ActionFn(35); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action35::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 261) + } + pub(crate) fn __reduce899< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TestOrStarExprList = GenericList => ActionFn(1841); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1841::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 262) + } + pub(crate) fn __reduce900< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TestOrStarNamedExpr = NamedExpressionTest => ActionFn(38); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action38::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 263) + } + pub(crate) fn __reduce901< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TestOrStarNamedExpr = StarExpr => ActionFn(39); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action39::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 263) + } + pub(crate) fn __reduce902< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Top = StartModule, Program => ActionFn(1579); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant24(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1579::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant89(__nt), __end)); + (2, 264) + } + pub(crate) fn __reduce903< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Top = StartExpression, GenericList => ActionFn(1842); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1842::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant89(__nt), __end)); + (2, 264) + } + pub(crate) fn __reduce904< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Top = StartExpression, GenericList, ("\n")+ => ActionFn(1843); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant21(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1843::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant89(__nt), __end)); + (3, 264) + } + pub(crate) fn __reduce905< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TryStatement = "try", ":", Suite, ExceptClause+, "else", ":", Suite, "finally", ":", Suite => ActionFn(1582); + assert!(__symbols.len() >= 10); + let __sym9 = __pop_Variant24(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant24(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant66(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym9.2; + let __nt = super::__action1582::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (10, 265) + } + pub(crate) fn __reduce906< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TryStatement = "try", ":", Suite, ExceptClause+, "else", ":", Suite => ActionFn(1583); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant24(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant66(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = super::__action1583::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (7, 265) + } + pub(crate) fn __reduce907< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TryStatement = "try", ":", Suite, ExceptClause+, "finally", ":", Suite => ActionFn(1584); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant24(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant66(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = super::__action1584::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (7, 265) + } + pub(crate) fn __reduce908< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TryStatement = "try", ":", Suite, ExceptClause+ => ActionFn(1585); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant66(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action1585::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (4, 265) + } + pub(crate) fn __reduce909< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TryStatement = "try", ":", Suite, ExceptStarClause+, "else", ":", Suite, "finally", ":", Suite => ActionFn(1586); + assert!(__symbols.len() >= 10); + let __sym9 = __pop_Variant24(__symbols); + let __sym8 = __pop_Variant0(__symbols); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant24(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant66(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym9.2; + let __nt = super::__action1586::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (10, 265) + } + pub(crate) fn __reduce910< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TryStatement = "try", ":", Suite, ExceptStarClause+, "else", ":", Suite => ActionFn(1587); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant24(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant66(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = super::__action1587::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (7, 265) + } + pub(crate) fn __reduce911< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TryStatement = "try", ":", Suite, ExceptStarClause+, "finally", ":", Suite => ActionFn(1588); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant24(__symbols); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant66(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = super::__action1588::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (7, 265) + } + pub(crate) fn __reduce912< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TryStatement = "try", ":", Suite, ExceptStarClause+ => ActionFn(1589); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant66(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action1589::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (4, 265) + } + pub(crate) fn __reduce913< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TryStatement = "try", ":", Suite, "finally", ":", Suite => ActionFn(1199); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant24(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant24(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = super::__action1199::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (6, 265) + } + pub(crate) fn __reduce914< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TwoOrMore = ClosedPattern, "|", ClosedPattern => ActionFn(339); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant34(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant34(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action339::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant52(__nt), __end)); + (3, 266) + } + pub(crate) fn __reduce915< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TwoOrMore = TwoOrMore, "|", ClosedPattern => ActionFn(340); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant34(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant52(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action340::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant52(__nt), __end)); + (3, 266) + } + pub(crate) fn __reduce916< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TwoOrMore = Pattern, ",", Pattern => ActionFn(341); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant34(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant34(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action341::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant52(__nt), __end)); + (3, 267) + } + pub(crate) fn __reduce917< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TwoOrMore = TwoOrMore, ",", Pattern => ActionFn(342); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant34(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant52(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action342::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant52(__nt), __end)); + (3, 267) + } + pub(crate) fn __reduce918< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TwoOrMore = Subscript, ",", Subscript => ActionFn(258); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action258::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (3, 268) + } + pub(crate) fn __reduce919< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TwoOrMore = TwoOrMore, ",", Subscript => ActionFn(259); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action259::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (3, 268) + } + pub(crate) fn __reduce920< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TwoOrMore = TestOrStarNamedExpr, ",", TestOrStarNamedExpr => ActionFn(346); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action346::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (3, 269) + } + pub(crate) fn __reduce921< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TwoOrMore = TwoOrMore, ",", TestOrStarNamedExpr => ActionFn(347); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant32(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action347::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant32(__nt), __end)); + (3, 269) + } + pub(crate) fn __reduce922< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypeAliasName = Identifier => ActionFn(1590); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1590::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 270) + } + pub(crate) fn __reduce923< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypeAliasStatement = "type", TypeAliasName, TypeParams, "=", Test<"all"> => ActionFn(1875); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant14(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant91(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = super::__action1875::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (5, 271) + } + pub(crate) fn __reduce924< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypeAliasStatement = "type", TypeAliasName, "=", Test<"all"> => ActionFn(1876); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant14(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant14(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action1876::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant36(__nt), __end)); + (4, 271) + } + pub(crate) fn __reduce925< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypeParam = Identifier, ":", Test<"all"> => ActionFn(1592); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1592::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant90(__nt), __end)); + (3, 272) + } + pub(crate) fn __reduce926< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypeParam = Identifier => ActionFn(1593); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1593::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant90(__nt), __end)); + (1, 272) + } + pub(crate) fn __reduce927< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypeParam = "*", Identifier => ActionFn(1594); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant22(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1594::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant90(__nt), __end)); + (2, 272) + } + pub(crate) fn __reduce928< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypeParam = "**", Identifier => ActionFn(1595); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant22(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1595::<>(mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant90(__nt), __end)); + (2, 272) + } + pub(crate) fn __reduce929< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypeParams = "[", OneOrMore, ",", "]" => ActionFn(1596); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant81(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action1596::<>(mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant91(__nt), __end)); + (4, 273) + } + pub(crate) fn __reduce930< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypeParams = "[", OneOrMore, "]" => ActionFn(1597); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant81(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1597::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant91(__nt), __end)); + (3, 273) + } + pub(crate) fn __reduce931< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypeParams? = TypeParams => ActionFn(286); + let __sym0 = __pop_Variant91(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action286::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant92(__nt), __end)); + (1, 274) + } + pub(crate) fn __reduce932< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypeParams? = => ActionFn(287); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action287::<>(mode, &__start, &__end); + __symbols.push((__start, __Symbol::Variant92(__nt), __end)); + (0, 274) + } + pub(crate) fn __reduce933< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypedParameter = Identifier, ":", Test<"all"> => ActionFn(1598); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1598::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (3, 275) + } + pub(crate) fn __reduce934< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // TypedParameter = Identifier => ActionFn(1599); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1599::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (1, 275) + } + pub(crate) fn __reduce935< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // UnaryOp = "+" => ActionFn(203); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action203::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant93(__nt), __end)); + (1, 276) + } + pub(crate) fn __reduce936< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // UnaryOp = "-" => ActionFn(204); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action204::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant93(__nt), __end)); + (1, 276) + } + pub(crate) fn __reduce937< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // UnaryOp = "~" => ActionFn(205); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action205::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant93(__nt), __end)); + (1, 276) + } + pub(crate) fn __reduce938< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // UntypedParameter = Identifier => ActionFn(1600); + let __sym0 = __pop_Variant22(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1600::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (1, 277) + } + pub(crate) fn __reduce939< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // ValuePattern = MatchNameOrAttr => ActionFn(1601); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1601::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant34(__nt), __end)); + (1, 278) + } + pub(crate) fn __reduce940< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // WhileStatement = "while", NamedExpressionTest, ":", Suite, "else", ":", Suite => ActionFn(1196); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant24(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -30111,11 +31996,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action1107::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action1196::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (7, 266) + (7, 279) } - pub(crate) fn __reduce887< + pub(crate) fn __reduce941< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30123,7 +32008,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WhileStatement = "while", NamedExpressionTest, ":", Suite => ActionFn(1108); + // WhileStatement = "while", NamedExpressionTest, ":", Suite => ActionFn(1197); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant24(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -30131,11 +32016,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1108::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1197::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (4, 266) + (4, 279) } - pub(crate) fn __reduce888< + pub(crate) fn __reduce942< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30143,15 +32028,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItem<"all"> = Test<"all"> => ActionFn(1468); + // WithItem<"all"> = Test<"all"> => ActionFn(1602); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1468::<>(mode, __sym0); + let __nt = super::__action1602::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 267) + (1, 280) } - pub(crate) fn __reduce889< + pub(crate) fn __reduce943< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30159,18 +32044,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItem<"all"> = Test<"all">, "as", Expression<"all"> => ActionFn(1469); + // WithItem<"all"> = Test<"all">, "as", Expression<"all"> => ActionFn(1603); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1469::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1603::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (3, 267) + (3, 280) } - pub(crate) fn __reduce890< + pub(crate) fn __reduce944< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30178,18 +32063,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItem<"as"> = Test<"all">, "as", Expression<"all"> => ActionFn(1470); + // WithItem<"as"> = Test<"all">, "as", Expression<"all"> => ActionFn(1604); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1470::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1604::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (3, 268) + (3, 281) } - pub(crate) fn __reduce891< + pub(crate) fn __reduce945< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30197,15 +32082,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItem<"no-withitems"> = Test<"no-withitems"> => ActionFn(1471); + // WithItem<"no-withitems"> = Test<"no-withitems"> => ActionFn(1605); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1471::<>(mode, __sym0); + let __nt = super::__action1605::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 269) + (1, 282) } - pub(crate) fn __reduce892< + pub(crate) fn __reduce946< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30213,18 +32098,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItem<"no-withitems"> = Test<"all">, "as", Expression<"all"> => ActionFn(1472); + // WithItem<"no-withitems"> = Test<"all">, "as", Expression<"all"> => ActionFn(1606); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1472::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1606::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (3, 269) + (3, 282) } - pub(crate) fn __reduce893< + pub(crate) fn __reduce947< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30232,7 +32117,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = "(", OneOrMore>, ",", ")" => ActionFn(1479); + // WithItems = "(", OneOrMore>, ",", ")" => ActionFn(1614); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -30240,11 +32125,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1479::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1614::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (4, 270) + (4, 283) } - pub(crate) fn __reduce894< + pub(crate) fn __reduce948< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30252,18 +32137,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = "(", OneOrMore>, ")" => ActionFn(1480); + // WithItems = "(", OneOrMore>, ")" => ActionFn(1615); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant32(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1480::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1615::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (3, 270) + (3, 283) } - pub(crate) fn __reduce895< + pub(crate) fn __reduce949< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30271,7 +32156,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = "(", OneOrMore>, ",", WithItem<"as">, ",", ")" => ActionFn(1482); + // WithItems = "(", OneOrMore>, ",", WithItem<"as">, ",", ")" => ActionFn(1617); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -30281,11 +32166,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action1482::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action1617::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (6, 270) + (6, 283) } - pub(crate) fn __reduce896< + pub(crate) fn __reduce950< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30293,7 +32178,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = "(", WithItem<"as">, ",", ")" => ActionFn(1483); + // WithItems = "(", WithItem<"as">, ",", ")" => ActionFn(1618); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -30301,11 +32186,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1483::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1618::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (4, 270) + (4, 283) } - pub(crate) fn __reduce897< + pub(crate) fn __reduce951< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30313,7 +32198,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = "(", OneOrMore>, ",", WithItem<"as">, ("," >)+, ",", ")" => ActionFn(1484); + // WithItems = "(", OneOrMore>, ",", WithItem<"as">, ("," >)+, ",", ")" => ActionFn(1619); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -30324,11 +32209,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action1484::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action1619::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (7, 270) + (7, 283) } - pub(crate) fn __reduce898< + pub(crate) fn __reduce952< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30336,7 +32221,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = "(", WithItem<"as">, ("," >)+, ",", ")" => ActionFn(1485); + // WithItems = "(", WithItem<"as">, ("," >)+, ",", ")" => ActionFn(1620); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -30345,11 +32230,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action1485::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action1620::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (5, 270) + (5, 283) } - pub(crate) fn __reduce899< + pub(crate) fn __reduce953< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30357,7 +32242,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = "(", OneOrMore>, ",", WithItem<"as">, ")" => ActionFn(1486); + // WithItems = "(", OneOrMore>, ",", WithItem<"as">, ")" => ActionFn(1621); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant17(__symbols); @@ -30366,11 +32251,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action1486::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action1621::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (5, 270) + (5, 283) } - pub(crate) fn __reduce900< + pub(crate) fn __reduce954< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30378,18 +32263,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = "(", WithItem<"as">, ")" => ActionFn(1487); + // WithItems = "(", WithItem<"as">, ")" => ActionFn(1622); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant17(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1487::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1622::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (3, 270) + (3, 283) } - pub(crate) fn __reduce901< + pub(crate) fn __reduce955< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30397,7 +32282,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = "(", OneOrMore>, ",", WithItem<"as">, ("," >)+, ")" => ActionFn(1488); + // WithItems = "(", OneOrMore>, ",", WithItem<"as">, ("," >)+, ")" => ActionFn(1623); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant18(__symbols); @@ -30407,11 +32292,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action1488::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action1623::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (6, 270) + (6, 283) } - pub(crate) fn __reduce902< + pub(crate) fn __reduce956< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30419,7 +32304,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = "(", WithItem<"as">, ("," >)+, ")" => ActionFn(1489); + // WithItems = "(", WithItem<"as">, ("," >)+, ")" => ActionFn(1624); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant18(__symbols); @@ -30427,11 +32312,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1489::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1624::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (4, 270) + (4, 283) } - pub(crate) fn __reduce903< + pub(crate) fn __reduce957< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30439,15 +32324,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = WithItem<"no-withitems"> => ActionFn(158); + // WithItems = WithItem<"no-withitems"> => ActionFn(160); let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action158::<>(mode, __sym0); + let __nt = super::__action160::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (1, 270) + (1, 283) } - pub(crate) fn __reduce904< + pub(crate) fn __reduce958< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30455,17 +32340,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItems = WithItem<"all">, ("," >)+ => ActionFn(159); + // WithItems = WithItem<"all">, ("," >)+ => ActionFn(161); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant18(__symbols); let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action159::<>(mode, __sym0, __sym1); + let __nt = super::__action161::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (2, 270) + (2, 283) } - pub(crate) fn __reduce905< + pub(crate) fn __reduce959< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30473,15 +32358,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithItemsNoAs = OneOrMore> => ActionFn(1473); + // WithItemsNoAs = OneOrMore> => ActionFn(1607); let __sym0 = __pop_Variant32(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1473::<>(mode, __sym0); + let __nt = super::__action1607::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant39(__nt), __end)); - (1, 271) + (1, 284) } - pub(crate) fn __reduce906< + pub(crate) fn __reduce960< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30489,7 +32374,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithStatement = "async", "with", WithItems, ":", Suite => ActionFn(937); + // WithStatement = "async", "with", WithItems, ":", Suite => ActionFn(1019); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant24(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -30498,11 +32383,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action937::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action1019::<>(mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (5, 272) + (5, 285) } - pub(crate) fn __reduce907< + pub(crate) fn __reduce961< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30510,7 +32395,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // WithStatement = "with", WithItems, ":", Suite => ActionFn(938); + // WithStatement = "with", WithItems, ":", Suite => ActionFn(1020); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant24(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -30518,11 +32403,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action938::<>(mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1020::<>(mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant36(__nt), __end)); - (4, 272) + (4, 285) } - pub(crate) fn __reduce908< + pub(crate) fn __reduce962< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30530,18 +32415,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // XorExpression<"all"> = XorExpression<"all">, "^", AndExpression<"all"> => ActionFn(1474); + // XorExpression<"All"> = XorExpression<"all">, "^", AndExpression<"all"> => ActionFn(1608); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1474::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1608::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 273) + (3, 286) } - pub(crate) fn __reduce909< + pub(crate) fn __reduce963< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30549,15 +32434,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // XorExpression<"all"> = AndExpression<"all"> => ActionFn(427); + // XorExpression<"All"> = AndExpression<"All"> => ActionFn(407); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action427::<>(mode, __sym0); + let __nt = super::__action407::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 273) + (1, 286) } - pub(crate) fn __reduce910< + pub(crate) fn __reduce964< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30565,18 +32450,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // XorExpression<"no-withitems"> = XorExpression<"all">, "^", AndExpression<"all"> => ActionFn(1475); + // XorExpression<"all"> = XorExpression<"all">, "^", AndExpression<"all"> => ActionFn(1609); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1475::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1609::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 274) + (3, 287) } - pub(crate) fn __reduce911< + pub(crate) fn __reduce965< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30584,15 +32469,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // XorExpression<"no-withitems"> = AndExpression<"no-withitems"> => ActionFn(503); + // XorExpression<"all"> = AndExpression<"all"> => ActionFn(436); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action503::<>(mode, __sym0); + let __nt = super::__action436::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 274) + (1, 287) } - pub(crate) fn __reduce912< + pub(crate) fn __reduce966< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30600,17 +32485,52 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // YieldExpr = "yield", GenericList => ActionFn(1707); + // XorExpression<"no-withitems"> = XorExpression<"all">, "^", AndExpression<"all"> => ActionFn(1610); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant14(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action1610::<>(mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (3, 288) + } + pub(crate) fn __reduce967< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // XorExpression<"no-withitems"> = AndExpression<"no-withitems"> => ActionFn(526); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action526::<>(mode, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (1, 288) + } + pub(crate) fn __reduce968< + >( + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // YieldExpr = "yield", GenericList => ActionFn(1846); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant14(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1707::<>(mode, __sym0, __sym1); + let __nt = super::__action1846::<>(mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (2, 275) + (2, 289) } - pub(crate) fn __reduce913< + pub(crate) fn __reduce969< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30618,15 +32538,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // YieldExpr = "yield" => ActionFn(1708); + // YieldExpr = "yield" => ActionFn(1847); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1708::<>(mode, __sym0); + let __nt = super::__action1847::<>(mode, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 275) + (1, 289) } - pub(crate) fn __reduce914< + pub(crate) fn __reduce970< >( mode: Mode, __lookahead_start: Option<&TextSize>, @@ -30634,16 +32554,16 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // YieldExpr = "yield", "from", Test<"all"> => ActionFn(1477); + // YieldExpr = "yield", "from", Test<"all"> => ActionFn(1612); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant14(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1477::<>(mode, __sym0, __sym1, __sym2); + let __nt = super::__action1612::<>(mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (3, 275) + (3, 289) } } pub(crate) use self::__parse__Top::TopParser; @@ -30952,6 +32872,17 @@ fn __action22< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action23< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Stmt, TextSize), +) -> ast::Stmt +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action24< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -30966,7 +32897,7 @@ fn __action23< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action24< +fn __action25< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -30984,7 +32915,7 @@ fn __action24< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action25< +fn __action26< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31018,7 +32949,7 @@ fn __action25< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action26< +fn __action27< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31042,7 +32973,7 @@ fn __action26< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action27< +fn __action28< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31067,18 +32998,6 @@ fn __action27< } } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action28< ->( - mode: Mode, - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - e -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action29< @@ -31096,10 +33015,11 @@ fn __action29< fn __action30< >( mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), ) -> ast::Expr { - __0 + e } #[allow(unused_variables)] @@ -31195,10 +33115,10 @@ fn __action38< fn __action39< >( mode: Mode, - (_, __0, _): (TextSize, token::Tok, TextSize), -) -> ast::Operator + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - ast::Operator::Add + __0 } #[allow(unused_variables)] @@ -31209,7 +33129,7 @@ fn __action40< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::Sub + ast::Operator::Add } #[allow(unused_variables)] @@ -31220,7 +33140,7 @@ fn __action41< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::Mult + ast::Operator::Sub } #[allow(unused_variables)] @@ -31231,7 +33151,7 @@ fn __action42< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::MatMult + ast::Operator::Mult } #[allow(unused_variables)] @@ -31242,7 +33162,7 @@ fn __action43< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::Div + ast::Operator::MatMult } #[allow(unused_variables)] @@ -31253,7 +33173,7 @@ fn __action44< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::Mod + ast::Operator::Div } #[allow(unused_variables)] @@ -31264,7 +33184,7 @@ fn __action45< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::BitAnd + ast::Operator::Mod } #[allow(unused_variables)] @@ -31275,7 +33195,7 @@ fn __action46< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::BitOr + ast::Operator::BitAnd } #[allow(unused_variables)] @@ -31286,7 +33206,7 @@ fn __action47< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::BitXor + ast::Operator::BitOr } #[allow(unused_variables)] @@ -31297,7 +33217,7 @@ fn __action48< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::LShift + ast::Operator::BitXor } #[allow(unused_variables)] @@ -31308,7 +33228,7 @@ fn __action49< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::RShift + ast::Operator::LShift } #[allow(unused_variables)] @@ -31319,7 +33239,7 @@ fn __action50< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::Pow + ast::Operator::RShift } #[allow(unused_variables)] @@ -31330,12 +33250,23 @@ fn __action51< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::FloorDiv + ast::Operator::Pow } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action52< +>( + mode: Mode, + (_, __0, _): (TextSize, token::Tok, TextSize), +) -> ast::Operator +{ + ast::Operator::FloorDiv +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action53< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31351,7 +33282,7 @@ fn __action52< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action53< +fn __action54< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31366,7 +33297,7 @@ fn __action53< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action54< +fn __action55< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31384,7 +33315,7 @@ fn __action54< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action55< +fn __action56< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31401,7 +33332,7 @@ fn __action55< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action56< +fn __action57< >( mode: Mode, (_, __0, _): (TextSize, ast::Stmt, TextSize), @@ -31412,7 +33343,7 @@ fn __action56< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action57< +fn __action58< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31429,7 +33360,7 @@ fn __action57< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action58< +fn __action59< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31448,7 +33379,7 @@ fn __action58< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action59< +fn __action60< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31466,7 +33397,7 @@ fn __action59< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action60< +fn __action61< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31492,7 +33423,7 @@ fn __action60< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action61< +fn __action62< >( mode: Mode, (_, dots, _): (TextSize, alloc::vec::Vec, TextSize), @@ -31506,7 +33437,7 @@ fn __action61< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action62< +fn __action63< >( mode: Mode, (_, dots, _): (TextSize, alloc::vec::Vec, TextSize), @@ -31519,7 +33450,7 @@ fn __action62< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action63< +fn __action64< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), @@ -31530,7 +33461,7 @@ fn __action63< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action64< +fn __action65< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), @@ -31541,7 +33472,7 @@ fn __action64< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action65< +fn __action66< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31554,7 +33485,7 @@ fn __action65< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action66< +fn __action67< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31570,7 +33501,7 @@ fn __action66< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action67< +fn __action68< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31586,7 +33517,7 @@ fn __action67< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action68< +fn __action69< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31599,7 +33530,7 @@ fn __action68< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action69< +fn __action70< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31620,7 +33551,7 @@ fn __action69< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action70< +fn __action71< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31638,7 +33569,7 @@ fn __action70< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action71< +fn __action72< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31656,7 +33587,7 @@ fn __action71< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action72< +fn __action73< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31679,61 +33610,26 @@ fn __action72< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action73< +fn __action74< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), - (_, m, _): (TextSize, (MagicKind, String), TextSize), + (_, c, _): (TextSize, (IpyEscapeKind, String), TextSize), (_, end_location, _): (TextSize, TextSize, TextSize), ) -> Result> { { if mode == Mode::Jupyter { - Ok(ast::Stmt::LineMagic( - ast::StmtLineMagic { - kind: m.0, - value: m.1, + Ok(ast::Stmt::IpyEscapeCommand( + ast::StmtIpyEscapeCommand { + kind: c.0, + value: c.1, range: (location..end_location).into() } )) } else { Err(LexicalError { - error: LexicalErrorType::OtherError("line magics are only allowed in Jupyter mode".to_string()), - location, - })? - } - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action74< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, m, _): (TextSize, (MagicKind, String), TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> Result> -{ - { - if mode == Mode::Jupyter { - // This should never occur as the lexer won't allow it. - if !matches!(m.0, MagicKind::Magic | MagicKind::Shell) { - return Err(LexicalError { - error: LexicalErrorType::OtherError("expr line magics are only allowed for % and !".to_string()), - location, - })?; - } - Ok(ast::Expr::LineMagic( - ast::ExprLineMagic { - kind: m.0, - value: m.1, - range: (location..end_location).into() - } - )) - } else { - Err(LexicalError { - error: LexicalErrorType::OtherError("line magics are only allowed in Jupyter mode".to_string()), + error: LexicalErrorType::OtherError("IPython escape commands are only allowed in Jupyter mode".to_string()), location, })? } @@ -31745,10 +33641,34 @@ fn __action74< fn __action75< >( mode: Mode, - (_, __0, _): (TextSize, ast::Stmt, TextSize), -) -> ast::Stmt + (_, location, _): (TextSize, TextSize, TextSize), + (_, c, _): (TextSize, (IpyEscapeKind, String), TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> Result> { - __0 + { + if mode == Mode::Jupyter { + // This should never occur as the lexer won't allow it. + if !matches!(c.0, IpyEscapeKind::Magic | IpyEscapeKind::Shell) { + return Err(LexicalError { + error: LexicalErrorType::OtherError("IPython escape command expr is only allowed for % and !".to_string()), + location, + })?; + } + Ok(ast::Expr::IpyEscapeCommand( + ast::ExprIpyEscapeCommand { + kind: c.0, + value: c.1, + range: (location..end_location).into() + } + )) + } else { + Err(LexicalError { + error: LexicalErrorType::OtherError("IPython escape commands are only allowed in Jupyter mode".to_string()), + location, + })? + } + } } #[allow(unused_variables)] @@ -31756,10 +33676,78 @@ fn __action75< fn __action76< >( mode: Mode, - (_, __0, _): (TextSize, ast::Stmt, TextSize), -) -> ast::Stmt + (_, location, _): (TextSize, TextSize, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, suffix, _): (TextSize, alloc::vec::Vec, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> Result> { - __0 + { + fn unparse_expr(expr: &ast::Expr, buffer: &mut String) -> Result<(), LexicalError> { + match expr { + ast::Expr::Name(ast::ExprName { id, .. }) => { + buffer.push_str(id.as_str()); + }, + ast::Expr::Subscript(ast::ExprSubscript { value, slice, range, .. }) => { + let ast::Expr::Constant(ast::ExprConstant { value: ast::Constant::Int(integer), .. }) = slice.as_ref() else { + return Err(LexicalError { + error: LexicalErrorType::OtherError("only integer constants are allowed in Subscript expressions in help end escape command".to_string()), + location: range.start(), + }); + }; + unparse_expr(value, buffer)?; + buffer.push('['); + buffer.push_str(&format!("{}", integer)); + buffer.push(']'); + }, + ast::Expr::Attribute(ast::ExprAttribute { value, attr, .. }) => { + unparse_expr(value, buffer)?; + buffer.push('.'); + buffer.push_str(attr.as_str()); + }, + _ => { + return Err(LexicalError { + error: LexicalErrorType::OtherError("only Name, Subscript and Attribute expressions are allowed in help end escape command".to_string()), + location: expr.range().start(), + }); + } + } + Ok(()) + } + + if mode != Mode::Jupyter { + return Err(ParseError::User { + error: LexicalError { + error: LexicalErrorType::OtherError("IPython escape commands are only allowed in Jupyter mode".to_string()), + location, + }, + }); + } + + let kind = match suffix.len() { + 1 => IpyEscapeKind::Help, + 2 => IpyEscapeKind::Help2, + _ => { + return Err(ParseError::User { + error: LexicalError { + error: LexicalErrorType::OtherError("maximum of 2 `?` tokens are allowed in help end escape command".to_string()), + location, + }, + }); + } + }; + + let mut value = String::new(); + unparse_expr(&e, &mut value)?; + + Ok(ast::Stmt::IpyEscapeCommand( + ast::StmtIpyEscapeCommand { + kind, + value, + range: (location..end_location).into() + } + )) + } } #[allow(unused_variables)] @@ -31831,6 +33819,28 @@ fn __action82< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action83< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Stmt, TextSize), +) -> ast::Stmt +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action84< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Stmt, TextSize), +) -> ast::Stmt +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action85< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31863,7 +33873,7 @@ fn __action83< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action84< +fn __action86< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31897,7 +33907,7 @@ fn __action84< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action85< +fn __action87< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31937,7 +33947,7 @@ fn __action85< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action86< +fn __action88< >( mode: Mode, (_, start, _): (TextSize, TextSize, TextSize), @@ -31962,7 +33972,7 @@ fn __action86< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action87< +fn __action89< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -31976,7 +33986,7 @@ fn __action87< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action88< +fn __action90< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -31995,7 +34005,7 @@ fn __action88< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action89< +fn __action91< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32014,28 +34024,6 @@ fn __action89< } } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action90< ->( - mode: Mode, - (_, pattern, _): (TextSize, ast::Pattern, TextSize), -) -> ast::Pattern -{ - pattern -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action91< ->( - mode: Mode, - (_, pattern, _): (TextSize, ast::Pattern, TextSize), -) -> ast::Pattern -{ - pattern -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action92< @@ -32050,6 +34038,28 @@ fn __action92< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action93< +>( + mode: Mode, + (_, pattern, _): (TextSize, ast::Pattern, TextSize), +) -> ast::Pattern +{ + pattern +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action94< +>( + mode: Mode, + (_, pattern, _): (TextSize, ast::Pattern, TextSize), +) -> ast::Pattern +{ + pattern +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action95< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32079,7 +34089,7 @@ fn __action93< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action94< +fn __action96< >( mode: Mode, (_, pattern, _): (TextSize, ast::Pattern, TextSize), @@ -32090,7 +34100,7 @@ fn __action94< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action95< +fn __action97< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32105,28 +34115,6 @@ fn __action95< } } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action96< ->( - mode: Mode, - (_, node, _): (TextSize, ast::Pattern, TextSize), -) -> ast::Pattern -{ - node -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action97< ->( - mode: Mode, - (_, node, _): (TextSize, ast::Pattern, TextSize), -) -> ast::Pattern -{ - node -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action98< @@ -32185,6 +34173,28 @@ fn __action102< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action103< +>( + mode: Mode, + (_, node, _): (TextSize, ast::Pattern, TextSize), +) -> ast::Pattern +{ + node +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action104< +>( + mode: Mode, + (_, node, _): (TextSize, ast::Pattern, TextSize), +) -> ast::Pattern +{ + node +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action105< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32199,7 +34209,7 @@ fn __action103< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action104< +fn __action106< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32216,7 +34226,7 @@ fn __action104< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action105< +fn __action107< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32237,7 +34247,7 @@ fn __action105< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action106< +fn __action108< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32261,7 +34271,7 @@ fn __action106< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action107< +fn __action109< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32279,7 +34289,7 @@ fn __action107< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action108< +fn __action110< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32296,7 +34306,7 @@ fn __action108< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action109< +fn __action111< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32311,7 +34321,7 @@ fn __action109< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action110< +fn __action112< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -32322,7 +34332,7 @@ fn __action110< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action111< +fn __action113< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32342,7 +34352,7 @@ fn __action111< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action112< +fn __action114< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32364,7 +34374,7 @@ fn __action112< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action113< +fn __action115< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32380,7 +34390,7 @@ fn __action113< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action114< +fn __action116< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32396,7 +34406,7 @@ fn __action114< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action115< +fn __action117< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32410,41 +34420,41 @@ fn __action115< }.into() } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action116< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, value, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - ast::PatternMatchValue { - value: Box::new(value), - range: (location..end_location).into() - }.into() -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action117< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, value, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - ast::PatternMatchValue { - value: Box::new(value), - range: (location..end_location).into() - }.into() -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action118< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, value, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + ast::PatternMatchValue { + value: Box::new(value), + range: (location..end_location).into() + }.into() +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action119< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, value, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + ast::PatternMatchValue { + value: Box::new(value), + range: (location..end_location).into() + }.into() +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action120< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32460,7 +34470,7 @@ fn __action118< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action119< +fn __action121< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32477,7 +34487,7 @@ fn __action119< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action120< +fn __action122< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32492,7 +34502,7 @@ fn __action120< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action121< +fn __action123< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32514,7 +34524,7 @@ fn __action121< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action122< +fn __action124< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32536,7 +34546,7 @@ fn __action122< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action123< +fn __action125< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32550,28 +34560,6 @@ fn __action123< }.into() } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action124< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action125< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action126< @@ -32586,6 +34574,28 @@ fn __action126< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action127< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action128< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action129< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32604,7 +34614,7 @@ fn __action127< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action128< +fn __action130< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32623,7 +34633,7 @@ fn __action128< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action129< +fn __action131< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32642,7 +34652,7 @@ fn __action129< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action130< +fn __action132< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32654,7 +34664,7 @@ fn __action130< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action131< +fn __action133< >( mode: Mode, (_, k, _): (TextSize, ast::Expr, TextSize), @@ -32665,53 +34675,6 @@ fn __action131< (k, v) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action132< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - { - ast::PatternMatchMapping { - keys: vec![], - patterns: vec![], - rest: None, - range: (location..end_location).into() - }.into() - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action133< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e, _): (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), - (_, _, _): (TextSize, core::option::Option, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - { - let (keys, patterns) = e - .into_iter() - .unzip(); - ast::PatternMatchMapping { - keys, - patterns, - rest: None, - range: (location..end_location).into() - }.into() - } -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action134< @@ -32720,9 +34683,6 @@ fn __action134< (_, location, _): (TextSize, TextSize, TextSize), (_, _, _): (TextSize, token::Tok, TextSize), (_, _, _): (TextSize, token::Tok, TextSize), - (_, rest, _): (TextSize, ast::Identifier, TextSize), - (_, _, _): (TextSize, core::option::Option, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Pattern { @@ -32730,7 +34690,7 @@ fn __action134< ast::PatternMatchMapping { keys: vec![], patterns: vec![], - rest: Some(rest), + rest: None, range: (location..end_location).into() }.into() } @@ -32739,6 +34699,56 @@ fn __action134< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action135< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e, _): (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + (_, _, _): (TextSize, core::option::Option, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + { + let (keys, patterns) = e + .into_iter() + .unzip(); + ast::PatternMatchMapping { + keys, + patterns, + rest: None, + range: (location..end_location).into() + }.into() + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action136< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, rest, _): (TextSize, ast::Identifier, TextSize), + (_, _, _): (TextSize, core::option::Option, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + { + ast::PatternMatchMapping { + keys: vec![], + patterns: vec![], + rest: Some(rest), + range: (location..end_location).into() + }.into() + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action137< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32767,7 +34777,7 @@ fn __action135< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action136< +fn __action138< >( mode: Mode, (_, k, _): (TextSize, ast::Identifier, TextSize), @@ -32780,7 +34790,7 @@ fn __action136< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action137< +fn __action139< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32808,62 +34818,62 @@ fn __action137< } } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action138< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, patterns, _): (TextSize, Vec, TextSize), - (_, _, _): (TextSize, core::option::Option, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - { - ast::PatternMatchClass { - cls: Box::new(e), - patterns, - kwd_attrs: vec![], - kwd_patterns: vec![], - range: (location..end_location).into() - }.into() - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action139< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, kwds, _): (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - (_, _, _): (TextSize, core::option::Option, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - { - let (kwd_attrs, kwd_patterns) = kwds - .into_iter() - .unzip(); - ast::PatternMatchClass { - cls: Box::new(e), - patterns: vec![], - kwd_attrs, - kwd_patterns, - range: (location..end_location).into() - }.into() - } -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action140< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, patterns, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, core::option::Option, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + { + ast::PatternMatchClass { + cls: Box::new(e), + patterns, + kwd_attrs: vec![], + kwd_patterns: vec![], + range: (location..end_location).into() + }.into() + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action141< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, kwds, _): (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + (_, _, _): (TextSize, core::option::Option, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + { + let (kwd_attrs, kwd_patterns) = kwds + .into_iter() + .unzip(); + ast::PatternMatchClass { + cls: Box::new(e), + patterns: vec![], + kwd_attrs, + kwd_patterns, + range: (location..end_location).into() + }.into() + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action142< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32886,7 +34896,7 @@ fn __action140< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action141< +fn __action143< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32916,7 +34926,7 @@ fn __action141< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action142< +fn __action144< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32941,7 +34951,7 @@ fn __action142< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action143< +fn __action145< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32969,7 +34979,7 @@ fn __action143< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action144< +fn __action146< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -32992,7 +35002,7 @@ fn __action144< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action145< +fn __action147< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33027,7 +35037,7 @@ fn __action145< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action146< +fn __action148< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33058,7 +35068,7 @@ fn __action146< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action147< +fn __action149< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33081,17 +35091,13 @@ fn __action147< .end(); let target = Box::new(set_context(target, ast::ExprContext::Store)); let iter = Box::new(iter); - if is_async.is_some() { - ast::Stmt::AsyncFor(ast::StmtAsyncFor { target, iter, body, orelse, range: (location..end_location).into() }) - } else { - ast::Stmt::For(ast::StmtFor { target, iter, body, orelse, range: (location..end_location).into() }) - } + ast::Stmt::For(ast::StmtFor { target, iter, body, orelse, is_async: is_async.is_some(), range: (location..end_location).into() }) } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action148< +fn __action150< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33119,6 +35125,7 @@ fn __action148< handlers, orelse, finalbody, + is_star: false, range: (location..end_location).into() }, ) @@ -33127,7 +35134,7 @@ fn __action148< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action149< +fn __action151< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33149,12 +35156,13 @@ fn __action149< .map(Ranged::end) .or_else(|| handlers.last().map(Ranged::end)) .unwrap(); - ast::Stmt::TryStar( - ast::StmtTryStar { + ast::Stmt::Try( + ast::StmtTry { body, handlers, orelse, finalbody, + is_star: true, range: (location..end_location).into() }, ) @@ -33163,7 +35171,7 @@ fn __action149< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action150< +fn __action152< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33183,6 +35191,7 @@ fn __action150< handlers, orelse, finalbody, + is_star: false, range: (location..end_location).into() }, ) @@ -33191,7 +35200,7 @@ fn __action150< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action151< +fn __action153< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33215,57 +35224,6 @@ fn __action151< } } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action152< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, x, _): (TextSize, (ast::Expr, ast::Identifier), TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, body, _): (TextSize, ast::Suite, TextSize), -) -> ast::ExceptHandler -{ - { - let end_location = body.last().unwrap().end(); - ast::ExceptHandler::ExceptHandler( - ast::ExceptHandlerExceptHandler { - type_: Some(Box::new(x.0)), - name: Some(x.1), - body, - range: (location..end_location).into() - }, - ) - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action153< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, typ, _): (TextSize, core::option::Option, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, body, _): (TextSize, ast::Suite, TextSize), -) -> ast::ExceptHandler -{ - { - let end_location = body.last().unwrap().end(); - ast::ExceptHandler::ExceptHandler( - ast::ExceptHandlerExceptHandler { - type_: typ.map(Box::new), - name: None, - body, - range: (location..end_location).into() - }, - ) - } -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action154< @@ -33273,6 +35231,7 @@ fn __action154< mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), (_, _, _): (TextSize, token::Tok, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), (_, x, _): (TextSize, (ast::Expr, ast::Identifier), TextSize), (_, _, _): (TextSize, token::Tok, TextSize), (_, body, _): (TextSize, ast::Suite, TextSize), @@ -33294,6 +35253,56 @@ fn __action154< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action155< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, typ, _): (TextSize, core::option::Option, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, body, _): (TextSize, ast::Suite, TextSize), +) -> ast::ExceptHandler +{ + { + let end_location = body.last().unwrap().end(); + ast::ExceptHandler::ExceptHandler( + ast::ExceptHandlerExceptHandler { + type_: typ.map(Box::new), + name: None, + body, + range: (location..end_location).into() + }, + ) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action156< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, x, _): (TextSize, (ast::Expr, ast::Identifier), TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, body, _): (TextSize, ast::Suite, TextSize), +) -> ast::ExceptHandler +{ + { + let end_location = body.last().unwrap().end(); + ast::ExceptHandler::ExceptHandler( + ast::ExceptHandlerExceptHandler { + type_: Some(Box::new(x.0)), + name: Some(x.1), + body, + range: (location..end_location).into() + }, + ) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action157< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33306,17 +35315,13 @@ fn __action155< { { let end_location = body.last().unwrap().end(); - if is_async.is_some() { - ast::StmtAsyncWith { items, body, range: (location..end_location).into() }.into() - } else { - ast::StmtWith { items, body, range: (location..end_location).into() }.into() - } + ast::StmtWith { items, body, is_async: is_async.is_some(), range: (location..end_location).into() }.into() } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action156< +fn __action158< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -33330,7 +35335,7 @@ fn __action156< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action157< +fn __action159< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -33348,7 +35353,7 @@ fn __action157< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action158< +fn __action160< >( mode: Mode, (_, __0, _): (TextSize, ast::WithItem, TextSize), @@ -33359,7 +35364,7 @@ fn __action158< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action159< +fn __action161< >( mode: Mode, (_, item, _): (TextSize, ast::WithItem, TextSize), @@ -33373,7 +35378,7 @@ fn __action159< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action160< +fn __action162< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33388,7 +35393,7 @@ fn __action160< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action161< +fn __action163< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33407,17 +35412,13 @@ fn __action161< let args = Box::new(args); let returns = r.map(Box::new); let end_location = body.last().unwrap().end(); - if is_async.is_some() { - ast::StmtAsyncFunctionDef { name, parameters:args, body, decorator_list, returns, type_params, range: (location..end_location).into() }.into() - } else { - ast::StmtFunctionDef { name, parameters:args, body, decorator_list, returns, type_params, range: (location..end_location).into() }.into() - } + ast::StmtFunctionDef { name, parameters:args, body, decorator_list, returns, type_params, is_async: is_async.is_some(), range: (location..end_location).into() }.into() } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action162< +fn __action164< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33432,7 +35433,7 @@ fn __action162< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action163< +fn __action165< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33458,7 +35459,7 @@ fn __action163< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action164< +fn __action166< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33484,7 +35485,7 @@ fn __action164< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action165< +fn __action167< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33500,7 +35501,7 @@ fn __action165< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action166< +fn __action168< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33513,7 +35514,7 @@ fn __action166< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action167< +fn __action169< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33529,43 +35530,43 @@ fn __action167< } } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action168< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, arg, _): (TextSize, ast::Identifier, TextSize), - (_, a, _): (TextSize, core::option::Option, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Parameter -{ - { - let annotation = a.map(Box::new); - ast::Parameter { name:arg, annotation, range: (location..end_location).into() } - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action169< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, arg, _): (TextSize, ast::Identifier, TextSize), - (_, a, _): (TextSize, core::option::Option, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Parameter -{ - { - let annotation = a.map(Box::new); - ast::Parameter { name:arg, annotation, range: (location..end_location).into() } - } -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action170< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, arg, _): (TextSize, ast::Identifier, TextSize), + (_, a, _): (TextSize, core::option::Option, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Parameter +{ + { + let annotation = a.map(Box::new); + ast::Parameter { name:arg, annotation, range: (location..end_location).into() } + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action171< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, arg, _): (TextSize, ast::Identifier, TextSize), + (_, a, _): (TextSize, core::option::Option, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Parameter +{ + { + let annotation = a.map(Box::new); + ast::Parameter { name:arg, annotation, range: (location..end_location).into() } + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action172< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33595,7 +35596,7 @@ fn __action170< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action171< +fn __action173< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33616,7 +35617,7 @@ fn __action171< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action172< +fn __action174< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33634,7 +35635,7 @@ fn __action172< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action173< +fn __action175< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33652,7 +35653,7 @@ fn __action173< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action174< +fn __action176< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33670,7 +35671,7 @@ fn __action174< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action175< +fn __action177< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33687,7 +35688,7 @@ fn __action175< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action176< +fn __action178< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33703,7 +35704,7 @@ fn __action176< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action177< +fn __action179< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33718,31 +35719,31 @@ fn __action177< ) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action178< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action179< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action180< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action181< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action182< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33767,7 +35768,7 @@ fn __action180< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action181< +fn __action183< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -33797,7 +35798,7 @@ fn __action181< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action182< +fn __action184< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), @@ -33808,7 +35809,7 @@ fn __action182< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action183< +fn __action185< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), @@ -33819,7 +35820,7 @@ fn __action183< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action184< +fn __action186< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), @@ -33830,7 +35831,7 @@ fn __action184< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action185< +fn __action187< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), @@ -33841,7 +35842,7 @@ fn __action185< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action186< +fn __action188< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), @@ -33852,7 +35853,7 @@ fn __action186< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action187< +fn __action189< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), @@ -33861,29 +35862,6 @@ fn __action187< ast::CmpOp::GtE } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action188< ->( - mode: Mode, - (_, __0, _): (TextSize, token::Tok, TextSize), -) -> ast::CmpOp -{ - ast::CmpOp::In -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action189< ->( - mode: Mode, - (_, __0, _): (TextSize, token::Tok, TextSize), - (_, __1, _): (TextSize, token::Tok, TextSize), -) -> ast::CmpOp -{ - ast::CmpOp::NotIn -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action190< @@ -33892,7 +35870,7 @@ fn __action190< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::CmpOp { - ast::CmpOp::Is + ast::CmpOp::In } #[allow(unused_variables)] @@ -33904,7 +35882,7 @@ fn __action191< (_, __1, _): (TextSize, token::Tok, TextSize), ) -> ast::CmpOp { - ast::CmpOp::IsNot + ast::CmpOp::NotIn } #[allow(unused_variables)] @@ -33913,9 +35891,9 @@ fn __action192< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), -) -> ast::Operator +) -> ast::CmpOp { - ast::Operator::LShift + ast::CmpOp::Is } #[allow(unused_variables)] @@ -33924,9 +35902,10 @@ fn __action193< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), -) -> ast::Operator + (_, __1, _): (TextSize, token::Tok, TextSize), +) -> ast::CmpOp { - ast::Operator::RShift + ast::CmpOp::IsNot } #[allow(unused_variables)] @@ -33937,7 +35916,7 @@ fn __action194< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::Add + ast::Operator::LShift } #[allow(unused_variables)] @@ -33948,7 +35927,7 @@ fn __action195< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::Sub + ast::Operator::RShift } #[allow(unused_variables)] @@ -33959,7 +35938,7 @@ fn __action196< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::Mult + ast::Operator::Add } #[allow(unused_variables)] @@ -33970,7 +35949,7 @@ fn __action197< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::Div + ast::Operator::Sub } #[allow(unused_variables)] @@ -33981,7 +35960,7 @@ fn __action198< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::FloorDiv + ast::Operator::Mult } #[allow(unused_variables)] @@ -33992,7 +35971,7 @@ fn __action199< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::Mod + ast::Operator::Div } #[allow(unused_variables)] @@ -34003,7 +35982,7 @@ fn __action200< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::Operator { - ast::Operator::MatMult + ast::Operator::FloorDiv } #[allow(unused_variables)] @@ -34012,9 +35991,9 @@ fn __action201< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), -) -> ast::UnaryOp +) -> ast::Operator { - ast::UnaryOp::UAdd + ast::Operator::Mod } #[allow(unused_variables)] @@ -34023,9 +36002,9 @@ fn __action202< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), -) -> ast::UnaryOp +) -> ast::Operator { - ast::UnaryOp::USub + ast::Operator::MatMult } #[allow(unused_variables)] @@ -34036,12 +36015,34 @@ fn __action203< (_, __0, _): (TextSize, token::Tok, TextSize), ) -> ast::UnaryOp { - ast::UnaryOp::Invert + ast::UnaryOp::UAdd } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action204< +>( + mode: Mode, + (_, __0, _): (TextSize, token::Tok, TextSize), +) -> ast::UnaryOp +{ + ast::UnaryOp::USub +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action205< +>( + mode: Mode, + (_, __0, _): (TextSize, token::Tok, TextSize), +) -> ast::UnaryOp +{ + ast::UnaryOp::Invert +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action206< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34056,7 +36057,7 @@ fn __action204< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action205< +fn __action207< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34074,7 +36075,7 @@ fn __action205< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action206< +fn __action208< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34092,7 +36093,7 @@ fn __action206< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action207< +fn __action209< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -34103,7 +36104,7 @@ fn __action207< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action208< +fn __action210< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34126,7 +36127,7 @@ fn __action208< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action209< +fn __action211< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34139,7 +36140,7 @@ fn __action209< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action210< +fn __action212< >( mode: Mode, (_, e, _): (TextSize, Vec, TextSize), @@ -34151,7 +36152,7 @@ fn __action210< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action211< +fn __action213< >( mode: Mode, (_, elements, _): (TextSize, Vec<(Option>, ast::Expr)>, TextSize), @@ -34163,7 +36164,7 @@ fn __action211< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action212< +fn __action214< >( mode: Mode, (_, e1, _): (TextSize, ast::Expr, TextSize), @@ -34176,7 +36177,7 @@ fn __action212< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action213< +fn __action215< >( mode: Mode, (_, e, _): (TextSize, (ast::Expr, ast::Expr), TextSize), @@ -34187,7 +36188,7 @@ fn __action213< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action214< +fn __action216< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -34199,7 +36200,7 @@ fn __action214< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action215< +fn __action217< >( mode: Mode, (_, e1, _): (TextSize, Vec, TextSize), @@ -34209,28 +36210,6 @@ fn __action215< e1 } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action216< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action217< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action218< @@ -34247,11 +36226,10 @@ fn __action218< fn __action219< >( mode: Mode, - (_, elements, _): (TextSize, Vec, TextSize), - (_, _, _): (TextSize, core::option::Option, TextSize), -) -> Vec + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - elements + __0 } #[allow(unused_variables)] @@ -34268,6 +36246,29 @@ fn __action220< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action221< +>( + mode: Mode, + (_, elements, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, core::option::Option, TextSize), +) -> Vec +{ + elements +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action222< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action223< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34283,7 +36284,7 @@ fn __action221< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action222< +fn __action224< >( mode: Mode, (_, c, _): (TextSize, alloc::vec::Vec, TextSize), @@ -34294,7 +36295,7 @@ fn __action222< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action223< +fn __action225< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34321,7 +36322,7 @@ fn __action223< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action224< +fn __action226< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -34332,7 +36333,7 @@ fn __action224< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action225< +fn __action227< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -34344,7 +36345,7 @@ fn __action225< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action226< +fn __action228< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34366,7 +36367,7 @@ fn __action226< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action227< +fn __action229< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34392,7 +36393,7 @@ fn __action227< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action228< +fn __action230< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34407,7 +36408,7 @@ fn __action228< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action229< +fn __action231< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34426,7 +36427,7 @@ fn __action229< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action230< +fn __action232< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34440,7 +36441,7 @@ fn __action230< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action231< +fn __action233< >( mode: Mode, (_, value, _): (TextSize, BigInt, TextSize), @@ -34451,7 +36452,7 @@ fn __action231< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action232< +fn __action234< >( mode: Mode, (_, value, _): (TextSize, f64, TextSize), @@ -34462,7 +36463,7 @@ fn __action232< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action233< +fn __action235< >( mode: Mode, (_, s, _): (TextSize, (f64, f64), TextSize), @@ -34473,7 +36474,7 @@ fn __action233< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action234< +fn __action236< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34486,7 +36487,7 @@ fn __action234< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action235< +fn __action237< >( mode: Mode, (_, __0, _): (TextSize, Vec, TextSize), @@ -34497,7 +36498,7 @@ fn __action235< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action236< +fn __action238< >( mode: Mode, __lookbehind: &TextSize, @@ -34509,7 +36510,7 @@ fn __action236< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action237< +fn __action239< >( mode: Mode, (_, mut v, _): (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), @@ -34526,7 +36527,7 @@ fn __action237< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action238< +fn __action240< >( mode: Mode, __lookbehind: &TextSize, @@ -34538,7 +36539,7 @@ fn __action238< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action239< +fn __action241< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -34549,7 +36550,7 @@ fn __action239< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action240< +fn __action242< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34568,7 +36569,7 @@ fn __action240< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action241< +fn __action243< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -34579,7 +36580,7 @@ fn __action241< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action242< +fn __action244< >( mode: Mode, (_, __0, _): (TextSize, ast::Comprehension, TextSize), @@ -34590,7 +36591,7 @@ fn __action242< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action243< +fn __action245< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -34602,7 +36603,7 @@ fn __action243< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action244< +fn __action246< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34624,7 +36625,7 @@ fn __action244< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action245< +fn __action247< >( mode: Mode, (_, e, _): (TextSize, ast::Expr, TextSize), @@ -34635,7 +36636,7 @@ fn __action245< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action246< +fn __action248< >( mode: Mode, (_, mut v, _): (TextSize, Vec, TextSize), @@ -34651,7 +36652,7 @@ fn __action246< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action247< +fn __action249< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34673,7 +36674,7 @@ fn __action247< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action248< +fn __action250< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34690,7 +36691,7 @@ fn __action248< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action249< +fn __action251< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -34701,7 +36702,7 @@ fn __action249< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action250< +fn __action252< >( mode: Mode, (_, e, _): (TextSize, (Option>, ast::Expr), TextSize), @@ -34712,7 +36713,7 @@ fn __action250< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action251< +fn __action253< >( mode: Mode, (_, mut v, _): (TextSize, Vec<(Option>, ast::Expr)>, TextSize), @@ -34728,7 +36729,7 @@ fn __action251< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action252< +fn __action254< >( mode: Mode, (_, e, _): (TextSize, ast::Expr, TextSize), @@ -34739,7 +36740,7 @@ fn __action252< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action253< +fn __action255< >( mode: Mode, (_, mut v, _): (TextSize, Vec, TextSize), @@ -34755,7 +36756,7 @@ fn __action253< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action254< +fn __action256< >( mode: Mode, (_, __0, _): (TextSize, Option, TextSize), @@ -34766,7 +36767,7 @@ fn __action254< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action255< +fn __action257< >( mode: Mode, __lookbehind: &TextSize, @@ -34778,7 +36779,7 @@ fn __action255< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action256< +fn __action258< >( mode: Mode, (_, e1, _): (TextSize, ast::Expr, TextSize), @@ -34791,7 +36792,7 @@ fn __action256< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action257< +fn __action259< >( mode: Mode, (_, mut v, _): (TextSize, Vec, TextSize), @@ -34807,7 +36808,7 @@ fn __action257< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action258< +fn __action260< >( mode: Mode, (_, __0, _): (TextSize, ast::Parameters, TextSize), @@ -34818,7 +36819,7 @@ fn __action258< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action259< +fn __action261< >( mode: Mode, __lookbehind: &TextSize, @@ -34830,7 +36831,7 @@ fn __action259< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action260< +fn __action262< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34860,7 +36861,7 @@ fn __action260< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action261< +fn __action263< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34892,7 +36893,7 @@ fn __action261< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action262< +fn __action264< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34916,7 +36917,7 @@ fn __action262< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action263< +fn __action265< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -34939,7 +36940,7 @@ fn __action263< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action264< +fn __action266< >( mode: Mode, (_, e, _): (TextSize, ast::TypeParam, TextSize), @@ -34950,7 +36951,7 @@ fn __action264< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action265< +fn __action267< >( mode: Mode, (_, mut v, _): (TextSize, Vec, TextSize), @@ -34966,7 +36967,7 @@ fn __action265< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action266< +fn __action268< >( mode: Mode, (_, __0, _): (TextSize, ast::Arguments, TextSize), @@ -34975,29 +36976,6 @@ fn __action266< Some(__0) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action267< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option -{ - None -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action268< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> core::option::Option -{ - Some(__0) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action269< @@ -35005,7 +36983,7 @@ fn __action269< mode: Mode, __lookbehind: &TextSize, __lookahead: &TextSize, -) -> core::option::Option +) -> core::option::Option { None } @@ -35013,18 +36991,6 @@ fn __action269< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action270< ->( - mode: Mode, - (_, _, _): (TextSize, token::Tok, TextSize), - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action271< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -35035,7 +37001,7 @@ fn __action271< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action272< +fn __action271< >( mode: Mode, __lookbehind: &TextSize, @@ -35047,7 +37013,7 @@ fn __action272< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action273< +fn __action272< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -35057,9 +37023,44 @@ fn __action273< __0 } +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action273< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> core::option::Option +{ + Some(__0) +} + #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action274< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option +{ + None +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action275< +>( + mode: Mode, + (_, _, _): (TextSize, token::Tok, TextSize), + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action276< >( mode: Mode, (_, __0, _): (TextSize, ast::Parameters, TextSize), @@ -35070,7 +37071,7 @@ fn __action274< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action275< +fn __action277< >( mode: Mode, __lookbehind: &TextSize, @@ -35082,7 +37083,7 @@ fn __action275< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action276< +fn __action278< >( mode: Mode, (_, __0, _): (TextSize, ast::Parameters, TextSize), @@ -35093,7 +37094,7 @@ fn __action276< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action277< +fn __action279< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -35123,7 +37124,7 @@ fn __action277< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action278< +fn __action280< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -35155,7 +37156,7 @@ fn __action278< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action279< +fn __action281< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -35179,7 +37180,7 @@ fn __action279< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action280< +fn __action282< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -35202,7 +37203,7 @@ fn __action280< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action281< +fn __action283< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -35213,7 +37214,7 @@ fn __action281< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action282< +fn __action284< >( mode: Mode, __lookbehind: &TextSize, @@ -35225,7 +37226,7 @@ fn __action282< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action283< +fn __action285< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -35237,7 +37238,7 @@ fn __action283< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action284< +fn __action286< >( mode: Mode, (_, __0, _): (TextSize, ast::TypeParams, TextSize), @@ -35248,7 +37249,7 @@ fn __action284< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action285< +fn __action287< >( mode: Mode, __lookbehind: &TextSize, @@ -35260,7 +37261,7 @@ fn __action285< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action286< +fn __action288< >( mode: Mode, __lookbehind: &TextSize, @@ -35272,7 +37273,7 @@ fn __action286< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action287< +fn __action289< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -35283,7 +37284,7 @@ fn __action287< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action288< +fn __action290< >( mode: Mode, (_, e, _): (TextSize, ast::Expr, TextSize), @@ -35294,7 +37295,7 @@ fn __action288< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action289< +fn __action291< >( mode: Mode, (_, mut v, _): (TextSize, Vec, TextSize), @@ -35310,7 +37311,7 @@ fn __action289< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action290< +fn __action292< >( mode: Mode, (_, __0, _): (TextSize, ast::WithItem, TextSize), @@ -35321,7 +37322,7 @@ fn __action290< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action291< +fn __action293< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -35333,7 +37334,7 @@ fn __action291< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action292< +fn __action294< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -35346,7 +37347,7 @@ fn __action292< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action293< +fn __action295< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -35364,7 +37365,7 @@ fn __action293< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action294< +fn __action296< >( mode: Mode, __lookbehind: &TextSize, @@ -35376,7 +37377,7 @@ fn __action294< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action295< +fn __action297< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -35387,7 +37388,7 @@ fn __action295< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action296< +fn __action298< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -35399,7 +37400,7 @@ fn __action296< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action297< +fn __action299< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -35410,45 +37411,45 @@ fn __action297< ast::WithItem { context_expr, optional_vars: None, range: (location..end_location).into() } } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action298< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, context_expr, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, vars, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::WithItem -{ - { - let optional_vars = Some(Box::new(set_context(vars, ast::ExprContext::Store))); - ast::WithItem { context_expr, optional_vars, range: (location..end_location).into() } - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action299< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, context_expr, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, vars, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::WithItem -{ - { - let optional_vars = Some(Box::new(set_context(vars, ast::ExprContext::Store))); - ast::WithItem { context_expr, optional_vars, range: (location..end_location).into() } - } -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action300< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, context_expr, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, vars, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::WithItem +{ + { + let optional_vars = Some(Box::new(set_context(vars, ast::ExprContext::Store))); + ast::WithItem { context_expr, optional_vars, range: (location..end_location).into() } + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action301< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, context_expr, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, vars, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::WithItem +{ + { + let optional_vars = Some(Box::new(set_context(vars, ast::ExprContext::Store))); + ast::WithItem { context_expr, optional_vars, range: (location..end_location).into() } + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action302< >( mode: Mode, (_, __0, _): (TextSize, Vec, TextSize), @@ -35459,7 +37460,7 @@ fn __action300< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action301< +fn __action303< >( mode: Mode, __lookbehind: &TextSize, @@ -35471,7 +37472,7 @@ fn __action301< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action302< +fn __action304< >( mode: Mode, (_, __0, _): (TextSize, Vec, TextSize), @@ -35483,7 +37484,7 @@ fn __action302< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action303< +fn __action305< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -35494,7 +37495,7 @@ fn __action303< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action304< +fn __action306< >( mode: Mode, __lookbehind: &TextSize, @@ -35506,7 +37507,7 @@ fn __action304< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action305< +fn __action307< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -35519,7 +37520,7 @@ fn __action305< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action306< +fn __action308< >( mode: Mode, (_, __0, _): (TextSize, ast::ExceptHandler, TextSize), @@ -35530,7 +37531,7 @@ fn __action306< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action307< +fn __action309< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -35542,7 +37543,7 @@ fn __action307< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action308< +fn __action310< >( mode: Mode, (_, __0, _): (TextSize, ast::Suite, TextSize), @@ -35553,7 +37554,7 @@ fn __action308< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action309< +fn __action311< >( mode: Mode, __lookbehind: &TextSize, @@ -35565,7 +37566,7 @@ fn __action309< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action310< +fn __action312< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -35578,7 +37579,7 @@ fn __action310< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action311< +fn __action313< >( mode: Mode, (_, __0, _): (TextSize, ast::ExceptHandler, TextSize), @@ -35589,7 +37590,7 @@ fn __action311< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action312< +fn __action314< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -35601,7 +37602,7 @@ fn __action312< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action313< +fn __action315< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), @@ -35610,29 +37611,6 @@ fn __action313< Some(__0) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action314< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option -{ - None -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action315< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Suite, TextSize), -) -> core::option::Option -{ - Some(__0) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action316< @@ -35640,7 +37618,7 @@ fn __action316< mode: Mode, __lookbehind: &TextSize, __lookahead: &TextSize, -) -> core::option::Option +) -> core::option::Option { None } @@ -35648,6 +37626,29 @@ fn __action316< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action317< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Suite, TextSize), +) -> core::option::Option +{ + Some(__0) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action318< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option +{ + None +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action319< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -35660,7 +37661,7 @@ fn __action317< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action318< +fn __action320< >( mode: Mode, (_, __0, _): (TextSize, (TextSize, ast::Suite), TextSize), @@ -35671,7 +37672,7 @@ fn __action318< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action319< +fn __action321< >( mode: Mode, __lookbehind: &TextSize, @@ -35683,7 +37684,7 @@ fn __action319< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action320< +fn __action322< >( mode: Mode, (_, __0, _): (TextSize, TextSize, TextSize), @@ -35697,7 +37698,7 @@ fn __action320< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action321< +fn __action323< >( mode: Mode, __lookbehind: &TextSize, @@ -35709,7 +37710,7 @@ fn __action321< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action322< +fn __action324< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), @@ -35720,7 +37721,7 @@ fn __action322< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action323< +fn __action325< >( mode: Mode, (_, __0, _): (TextSize, TextSize, TextSize), @@ -35735,7 +37736,7 @@ fn __action323< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action324< +fn __action326< >( mode: Mode, (_, e, _): (TextSize, (ast::Identifier, ast::Pattern), TextSize), @@ -35746,7 +37747,7 @@ fn __action324< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action325< +fn __action327< >( mode: Mode, (_, mut v, _): (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), @@ -35762,7 +37763,7 @@ fn __action325< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action326< +fn __action328< >( mode: Mode, (_, e, _): (TextSize, ast::Pattern, TextSize), @@ -35773,7 +37774,7 @@ fn __action326< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action327< +fn __action329< >( mode: Mode, (_, mut v, _): (TextSize, Vec, TextSize), @@ -35789,7 +37790,7 @@ fn __action327< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action328< +fn __action330< >( mode: Mode, (_, e, _): (TextSize, (ast::Expr, ast::Pattern), TextSize), @@ -35800,7 +37801,7 @@ fn __action328< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action329< +fn __action331< >( mode: Mode, (_, mut v, _): (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), @@ -35816,7 +37817,7 @@ fn __action329< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action330< +fn __action332< >( mode: Mode, (_, __0, _): (TextSize, (TextSize, (String, StringKind, bool), TextSize), TextSize), @@ -35827,7 +37828,7 @@ fn __action330< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action331< +fn __action333< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), @@ -35839,7 +37840,7 @@ fn __action331< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action332< +fn __action334< >( mode: Mode, (_, __0, _): (TextSize, TextSize, TextSize), @@ -35852,7 +37853,7 @@ fn __action332< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action333< +fn __action335< >( mode: Mode, (_, mut v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -35869,7 +37870,7 @@ fn __action333< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action334< +fn __action336< >( mode: Mode, (_, __0, _): (TextSize, ast::Pattern, TextSize), @@ -35880,7 +37881,7 @@ fn __action334< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action335< +fn __action337< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -35892,7 +37893,7 @@ fn __action335< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action336< +fn __action338< >( mode: Mode, (_, __0, _): (TextSize, ast::Pattern, TextSize), @@ -35902,35 +37903,6 @@ fn __action336< __0 } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action337< ->( - mode: Mode, - (_, e1, _): (TextSize, ast::Pattern, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e2, _): (TextSize, ast::Pattern, TextSize), -) -> Vec -{ - vec![e1, e2] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action338< ->( - mode: Mode, - (_, mut v, _): (TextSize, Vec, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e, _): (TextSize, ast::Pattern, TextSize), -) -> Vec -{ - { - v.push(e); - v - } -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action339< @@ -35963,6 +37935,35 @@ fn __action340< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action341< +>( + mode: Mode, + (_, e1, _): (TextSize, ast::Pattern, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e2, _): (TextSize, ast::Pattern, TextSize), +) -> Vec +{ + vec![e1, e2] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action342< +>( + mode: Mode, + (_, mut v, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e, _): (TextSize, ast::Pattern, TextSize), +) -> Vec +{ + { + v.push(e); + v + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action343< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -35973,7 +37974,7 @@ fn __action341< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action342< +fn __action344< >( mode: Mode, __lookbehind: &TextSize, @@ -35985,7 +37986,7 @@ fn __action342< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action343< +fn __action345< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -35996,7 +37997,7 @@ fn __action343< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action344< +fn __action346< >( mode: Mode, (_, e1, _): (TextSize, ast::Expr, TextSize), @@ -36009,7 +38010,7 @@ fn __action344< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action345< +fn __action347< >( mode: Mode, (_, mut v, _): (TextSize, Vec, TextSize), @@ -36025,7 +38026,7 @@ fn __action345< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action346< +fn __action348< >( mode: Mode, (_, __0, _): (TextSize, ast::MatchCase, TextSize), @@ -36036,7 +38037,7 @@ fn __action346< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action347< +fn __action349< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -36048,7 +38049,69 @@ fn __action347< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action348< +fn __action350< +>( + mode: Mode, + (_, __0, _): (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec +{ + alloc::vec![__0] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action351< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), + (_, e, _): (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action352< +>( + mode: Mode, + (_, __0, _): (TextSize, token::Tok, TextSize), +) -> token::Tok +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action353< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e1, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e2, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(e1), op: ast::Operator::BitOr, right: Box::new(e2), range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action354< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action355< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -36059,7 +38122,7 @@ fn __action348< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action349< +fn __action356< >( mode: Mode, __lookbehind: &TextSize, @@ -36071,7 +38134,7 @@ fn __action349< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action350< +fn __action357< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -36083,7 +38146,7 @@ fn __action350< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action351< +fn __action358< >( mode: Mode, (_, e, _): (TextSize, ast::Identifier, TextSize), @@ -36094,7 +38157,7 @@ fn __action351< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action352< +fn __action359< >( mode: Mode, (_, mut v, _): (TextSize, Vec, TextSize), @@ -36110,7 +38173,7 @@ fn __action352< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action353< +fn __action360< >( mode: Mode, (_, __0, _): (TextSize, (token::Tok, ast::Identifier), TextSize), @@ -36121,7 +38184,7 @@ fn __action353< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action354< +fn __action361< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec<(token::Tok, ast::Identifier)>, TextSize), @@ -36133,7 +38196,7 @@ fn __action354< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action355< +fn __action362< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), @@ -36145,7 +38208,7 @@ fn __action355< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action356< +fn __action363< >( mode: Mode, (_, __0, _): (TextSize, token::Tok, TextSize), @@ -36156,7 +38219,7 @@ fn __action356< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action357< +fn __action364< >( mode: Mode, __lookbehind: &TextSize, @@ -36166,93 +38229,6 @@ fn __action357< None } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action358< ->( - mode: Mode, - (_, e, _): (TextSize, ast::Alias, TextSize), -) -> Vec -{ - vec![e] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action359< ->( - mode: Mode, - (_, mut v, _): (TextSize, Vec, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e, _): (TextSize, ast::Alias, TextSize), -) -> Vec -{ - { - v.push(e); - v - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action360< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, name, _): (TextSize, ast::Identifier, TextSize), - (_, a, _): (TextSize, core::option::Option, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Alias -{ - ast::Alias { name, asname: a, range: (location..end_location).into() } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action361< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Int, TextSize), -) -> alloc::vec::Vec -{ - alloc::vec![__0] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action362< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), - (_, e, _): (TextSize, ast::Int, TextSize), -) -> alloc::vec::Vec -{ - { let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action363< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> alloc::vec::Vec -{ - alloc::vec![] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action364< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), -) -> alloc::vec::Vec -{ - v -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action365< @@ -36299,10 +38275,10 @@ fn __action367< fn __action368< >( mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> core::option::Option + (_, __0, _): (TextSize, ast::Int, TextSize), +) -> alloc::vec::Vec { - Some(__0) + alloc::vec![__0] } #[allow(unused_variables)] @@ -36310,11 +38286,11 @@ fn __action368< fn __action369< >( mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), + (_, e, _): (TextSize, ast::Int, TextSize), +) -> alloc::vec::Vec { - None + { let mut v = v; v.push(e); v } } #[allow(unused_variables)] @@ -36322,11 +38298,11 @@ fn __action369< fn __action370< >( mode: Mode, - (_, _, _): (TextSize, token::Tok, TextSize), - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> alloc::vec::Vec { - __0 + alloc::vec![] } #[allow(unused_variables)] @@ -36334,10 +38310,10 @@ fn __action370< fn __action371< >( mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> core::option::Option + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), +) -> alloc::vec::Vec { - Some(__0) + v } #[allow(unused_variables)] @@ -36345,16 +38321,45 @@ fn __action371< fn __action372< >( mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option + (_, e, _): (TextSize, ast::Alias, TextSize), +) -> Vec { - None + vec![e] } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action373< +>( + mode: Mode, + (_, mut v, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e, _): (TextSize, ast::Alias, TextSize), +) -> Vec +{ + { + v.push(e); + v + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action374< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, name, _): (TextSize, ast::Identifier, TextSize), + (_, a, _): (TextSize, core::option::Option, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Alias +{ + ast::Alias { name, asname: a, range: (location..end_location).into() } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action375< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -36365,7 +38370,7 @@ fn __action373< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action374< +fn __action376< >( mode: Mode, __lookbehind: &TextSize, @@ -36375,46 +38380,12 @@ fn __action374< None } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action375< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, body, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, test, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, orelse, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - ast::Expr::IfExp( - ast::ExprIfExp { - test: Box::new(test), - body: Box::new(body), - orelse: Box::new(orelse), - range: (location..end_location).into() - } - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action376< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action377< >( mode: Mode, + (_, _, _): (TextSize, token::Tok, TextSize), (_, __0, _): (TextSize, ast::Expr, TextSize), ) -> ast::Expr { @@ -36426,11 +38397,10 @@ fn __action377< fn __action378< >( mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> alloc::vec::Vec + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> core::option::Option { - alloc::vec![] + Some(__0) } #[allow(unused_variables)] @@ -36438,10 +38408,11 @@ fn __action378< fn __action379< >( mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), -) -> alloc::vec::Vec + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option { - v + None } #[allow(unused_variables)] @@ -36449,8 +38420,8 @@ fn __action379< fn __action380< >( mode: Mode, - (_, __0, _): (TextSize, token::Tok, TextSize), -) -> core::option::Option + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> core::option::Option { Some(__0) } @@ -36462,7 +38433,7 @@ fn __action381< mode: Mode, __lookbehind: &TextSize, __lookahead: &TextSize, -) -> core::option::Option +) -> core::option::Option { None } @@ -36470,270 +38441,6 @@ fn __action381< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action382< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> alloc::vec::Vec -{ - alloc::vec![] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action383< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), -) -> alloc::vec::Vec -{ - v -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action384< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Stmt, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), -) -> ast::Stmt -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action385< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> alloc::vec::Vec -{ - alloc::vec![] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action386< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), -) -> alloc::vec::Vec -{ - v -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action387< ->( - mode: Mode, - (_, __0, _): (TextSize, token::Tok, TextSize), -) -> token::Tok -{ - __0 -} - -#[allow(unused_variables)] -fn __action388< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> TextSize -{ - *__lookbehind -} - -#[allow(unused_variables)] -fn __action389< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> TextSize -{ - *__lookahead -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action390< ->( - mode: Mode, - (_, __0, _): (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec -{ - alloc::vec![__0] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action391< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), - (_, e, _): (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec -{ - { let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action392< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Stmt, TextSize), -) -> alloc::vec::Vec -{ - alloc::vec![__0] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action393< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), - (_, e, _): (TextSize, ast::Stmt, TextSize), -) -> alloc::vec::Vec -{ - { let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action394< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> alloc::vec::Vec -{ - alloc::vec![__0] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action395< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), -) -> alloc::vec::Vec -{ - { let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action396< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Identifier, TextSize), -) -> core::option::Option -{ - Some(__0) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action397< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option -{ - None -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action398< ->( - mode: Mode, - (_, _, _): (TextSize, token::Tok, TextSize), - (_, __0, _): (TextSize, ast::Identifier, TextSize), -) -> ast::Identifier -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action399< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Pattern, TextSize), -) -> core::option::Option -{ - Some(__0) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action400< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option -{ - None -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action401< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> alloc::vec::Vec -{ - alloc::vec![] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action402< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), -) -> alloc::vec::Vec -{ - v -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action403< ->( - mode: Mode, - (_, __0, _): (TextSize, (TextSize, ast::Expr, ast::Suite), TextSize), -) -> alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)> -{ - alloc::vec![__0] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action404< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), - (_, e, _): (TextSize, (TextSize, ast::Expr, ast::Suite), TextSize), -) -> alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)> -{ - { let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action405< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -36757,7 +38464,7 @@ fn __action405< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action406< +fn __action383< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -36766,6 +38473,275 @@ fn __action406< __0 } +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action384< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action385< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> alloc::vec::Vec +{ + alloc::vec![] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action386< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), +) -> alloc::vec::Vec +{ + v +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action387< +>( + mode: Mode, + (_, __0, _): (TextSize, token::Tok, TextSize), +) -> core::option::Option +{ + Some(__0) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action388< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option +{ + None +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action389< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> alloc::vec::Vec +{ + alloc::vec![] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action390< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), +) -> alloc::vec::Vec +{ + v +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action391< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Stmt, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), +) -> ast::Stmt +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action392< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> alloc::vec::Vec +{ + alloc::vec![] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action393< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), +) -> alloc::vec::Vec +{ + v +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action394< +>( + mode: Mode, + (_, __0, _): (TextSize, token::Tok, TextSize), +) -> token::Tok +{ + __0 +} + +#[allow(unused_variables)] +fn __action395< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> TextSize +{ + *__lookbehind +} + +#[allow(unused_variables)] +fn __action396< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> TextSize +{ + *__lookahead +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action397< +>( + mode: Mode, + (_, __0, _): (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec +{ + alloc::vec![__0] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action398< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), + (_, e, _): (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action399< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Stmt, TextSize), +) -> alloc::vec::Vec +{ + alloc::vec![__0] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action400< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), + (_, e, _): (TextSize, ast::Stmt, TextSize), +) -> alloc::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action401< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> alloc::vec::Vec +{ + alloc::vec![__0] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action402< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), +) -> alloc::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action403< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Identifier, TextSize), +) -> core::option::Option +{ + Some(__0) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action404< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option +{ + None +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action405< +>( + mode: Mode, + (_, _, _): (TextSize, token::Tok, TextSize), + (_, __0, _): (TextSize, ast::Identifier, TextSize), +) -> ast::Identifier +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action406< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e1, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e2, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(e1), op: ast::Operator::BitXor, right: Box::new(e2), range: (location..end_location).into() } + ) +} + #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action407< @@ -36780,6 +38756,121 @@ fn __action407< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action408< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Pattern, TextSize), +) -> core::option::Option +{ + Some(__0) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action409< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option +{ + None +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action410< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> alloc::vec::Vec +{ + alloc::vec![] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action411< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), +) -> alloc::vec::Vec +{ + v +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action412< +>( + mode: Mode, + (_, __0, _): (TextSize, (TextSize, ast::Expr, ast::Suite), TextSize), +) -> alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)> +{ + alloc::vec![__0] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action413< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), + (_, e, _): (TextSize, (TextSize, ast::Expr, ast::Suite), TextSize), +) -> alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)> +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action414< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, body, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, test, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, orelse, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::IfExp( + ast::ExprIfExp { + test: Box::new(test), + body: Box::new(body), + orelse: Box::new(orelse), + range: (location..end_location).into() + } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action415< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action416< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action417< >( mode: Mode, (_, __0, _): (TextSize, ast::Decorator, TextSize), @@ -36790,7 +38881,7 @@ fn __action408< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action409< +fn __action418< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -36800,152 +38891,35 @@ fn __action409< { let mut v = v; v.push(e); v } } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action410< ->( - mode: Mode, - (_, _, _): (TextSize, token::Tok, TextSize), - (_, __0, _): (TextSize, Option>, TextSize), -) -> Option> -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action411< ->( - mode: Mode, - (_, _, _): (TextSize, token::Tok, TextSize), - (_, kwarg, _): (TextSize, core::option::Option, TextSize), -) -> Option> -{ - { - kwarg.map(Box::new) - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action412< ->( - mode: Mode, - (_, __0, _): (TextSize, (Option>, Vec, Option>), TextSize), -) -> core::option::Option<(Option>, Vec, Option>)> -{ - Some(__0) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action413< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option<(Option>, Vec, Option>)> -{ - None -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action414< ->( - mode: Mode, - (_, _, _): (TextSize, token::Tok, TextSize), - (_, __0, _): (TextSize, (Option>, Vec, Option>), TextSize), -) -> (Option>, Vec, Option>) -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action415< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, va, _): (TextSize, core::option::Option, TextSize), - (_, kwonlyargs, _): (TextSize, alloc::vec::Vec, TextSize), - (_, kwarg, _): (TextSize, core::option::Option>>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - { - if va.is_none() && kwonlyargs.is_empty() && kwarg.is_none() { - return Err(LexicalError { - error: LexicalErrorType::OtherError("named arguments must follow bare *".to_string()), - location, - })?; - } - - let kwarg = kwarg.flatten(); - let va = va.map(Box::new); - - Ok((va, kwonlyargs, kwarg)) - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action416< ->( - mode: Mode, - (_, args, _): (TextSize, Vec, TextSize), -) -> (Vec, Vec) -{ - { - (vec![], args) - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action417< ->( - mode: Mode, - (_, posonlyargs, _): (TextSize, Vec, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, args, _): (TextSize, alloc::vec::Vec, TextSize), -) -> (Vec, Vec) -{ - { - (posonlyargs, args) - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action418< ->( - mode: Mode, - (_, _, _): (TextSize, token::Tok, TextSize), - (_, __0, _): (TextSize, Option>, TextSize), -) -> Option> -{ - __0 -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action419< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), - (_, kwarg, _): (TextSize, core::option::Option, TextSize), + (_, __0, _): (TextSize, Option>, TextSize), ) -> Option> { - { - kwarg.map(Box::new) - } + __0 } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action420< +>( + mode: Mode, + (_, _, _): (TextSize, token::Tok, TextSize), + (_, kwarg, _): (TextSize, core::option::Option, TextSize), +) -> Option> +{ + { + kwarg.map(Box::new) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action421< >( mode: Mode, (_, __0, _): (TextSize, (Option>, Vec, Option>), TextSize), @@ -36956,7 +38930,7 @@ fn __action420< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action421< +fn __action422< >( mode: Mode, __lookbehind: &TextSize, @@ -36968,7 +38942,7 @@ fn __action421< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action422< +fn __action423< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -36980,7 +38954,7 @@ fn __action422< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action423< +fn __action424< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -37005,22 +38979,22 @@ fn __action423< } } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action424< ->( - mode: Mode, - (_, args, _): (TextSize, Vec, TextSize), -) -> (Vec, Vec) -{ - { - (vec![], args) - } -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action425< +>( + mode: Mode, + (_, args, _): (TextSize, Vec, TextSize), +) -> (Vec, Vec) +{ + { + (vec![], args) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action426< >( mode: Mode, (_, posonlyargs, _): (TextSize, Vec, TextSize), @@ -37036,7 +39010,124 @@ fn __action425< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action426< +fn __action427< +>( + mode: Mode, + (_, _, _): (TextSize, token::Tok, TextSize), + (_, __0, _): (TextSize, Option>, TextSize), +) -> Option> +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action428< +>( + mode: Mode, + (_, _, _): (TextSize, token::Tok, TextSize), + (_, kwarg, _): (TextSize, core::option::Option, TextSize), +) -> Option> +{ + { + kwarg.map(Box::new) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action429< +>( + mode: Mode, + (_, __0, _): (TextSize, (Option>, Vec, Option>), TextSize), +) -> core::option::Option<(Option>, Vec, Option>)> +{ + Some(__0) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action430< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option<(Option>, Vec, Option>)> +{ + None +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action431< +>( + mode: Mode, + (_, _, _): (TextSize, token::Tok, TextSize), + (_, __0, _): (TextSize, (Option>, Vec, Option>), TextSize), +) -> (Option>, Vec, Option>) +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action432< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, va, _): (TextSize, core::option::Option, TextSize), + (_, kwonlyargs, _): (TextSize, alloc::vec::Vec, TextSize), + (_, kwarg, _): (TextSize, core::option::Option>>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + { + if va.is_none() && kwonlyargs.is_empty() && kwarg.is_none() { + return Err(LexicalError { + error: LexicalErrorType::OtherError("named arguments must follow bare *".to_string()), + location, + })?; + } + + let kwarg = kwarg.flatten(); + let va = va.map(Box::new); + + Ok((va, kwonlyargs, kwarg)) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action433< +>( + mode: Mode, + (_, args, _): (TextSize, Vec, TextSize), +) -> (Vec, Vec) +{ + { + (vec![], args) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action434< +>( + mode: Mode, + (_, posonlyargs, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, args, _): (TextSize, alloc::vec::Vec, TextSize), +) -> (Vec, Vec) +{ + { + (posonlyargs, args) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action435< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -37053,7 +39144,7 @@ fn __action426< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action427< +fn __action436< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -37064,7 +39155,7 @@ fn __action427< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action428< +fn __action437< >( mode: Mode, (_, e, _): (TextSize, ast::Expr, TextSize), @@ -37075,7 +39166,7 @@ fn __action428< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action429< +fn __action438< >( mode: Mode, (_, mut v, _): (TextSize, Vec, TextSize), @@ -37091,7 +39182,7 @@ fn __action429< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action430< +fn __action439< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -37102,7 +39193,7 @@ fn __action430< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action431< +fn __action440< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -37114,7 +39205,7 @@ fn __action431< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action432< +fn __action441< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -37126,7 +39217,7 @@ fn __action432< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action433< +fn __action442< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -37145,7 +39236,7 @@ fn __action433< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action434< +fn __action443< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -37154,110 +39245,6 @@ fn __action434< __0 } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action435< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> alloc::vec::Vec -{ - alloc::vec![__0] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action436< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), -) -> alloc::vec::Vec -{ - { let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action437< ->( - mode: Mode, - (_, __0, _): (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), -) -> core::option::Option<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - Some(__0) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action438< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - None -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action439< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - alloc::vec![] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action440< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), -) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - v -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action441< ->( - mode: Mode, - (_, __0, _): (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), -) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action442< ->( - mode: Mode, - (_, __0, _): (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), -) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - alloc::vec![__0] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action443< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), - (_, e, _): (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), -) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - { let mut v = v; v.push(e); v } -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action444< @@ -37284,6 +39271,110 @@ fn __action445< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action446< +>( + mode: Mode, + (_, __0, _): (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), +) -> core::option::Option<(Option<(TextSize, TextSize, Option)>, ast::Expr)> +{ + Some(__0) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action447< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option<(Option<(TextSize, TextSize, Option)>, ast::Expr)> +{ + None +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action448< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> +{ + alloc::vec![] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action449< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), +) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> +{ + v +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action450< +>( + mode: Mode, + (_, __0, _): (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), +) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action451< +>( + mode: Mode, + (_, __0, _): (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), +) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> +{ + alloc::vec![__0] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action452< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), + (_, e, _): (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), +) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action453< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> alloc::vec::Vec +{ + alloc::vec![__0] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action454< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), +) -> alloc::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action455< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -37295,7 +39386,7 @@ fn __action446< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action447< +fn __action456< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -37311,7 +39402,7 @@ fn __action447< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action448< +fn __action457< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -37322,35 +39413,7 @@ fn __action448< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action449< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, e1, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e2, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - ast::Expr::BinOp( - ast::ExprBinOp { left: Box::new(e1), op: ast::Operator::BitAnd, right: Box::new(e2), range: (location..end_location).into() } - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action450< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action451< +fn __action458< >( mode: Mode, (_, e, _): (TextSize, ast::ParameterWithDefault, TextSize), @@ -37361,7 +39424,7 @@ fn __action451< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action452< +fn __action459< >( mode: Mode, (_, mut v, _): (TextSize, Vec, TextSize), @@ -37377,7 +39440,7 @@ fn __action452< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action453< +fn __action460< >( mode: Mode, (_, __0, _): (TextSize, Option>, TextSize), @@ -37386,93 +39449,6 @@ fn __action453< Some(__0) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action454< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option>> -{ - None -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action455< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> alloc::vec::Vec -{ - alloc::vec![] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action456< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), -) -> alloc::vec::Vec -{ - v -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action457< ->( - mode: Mode, - (_, _, _): (TextSize, token::Tok, TextSize), - (_, __0, _): (TextSize, ast::ParameterWithDefault, TextSize), -) -> ast::ParameterWithDefault -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action458< ->( - mode: Mode, - (_, i, _): (TextSize, ast::ParameterWithDefault, TextSize), -) -> ast::ParameterWithDefault -{ - i -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action459< ->( - mode: Mode, - (_, mut i, _): (TextSize, ast::ParameterWithDefault, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::ParameterWithDefault -{ - { - i.default = Some(Box::new(e)); - i.range = (i.range.start()..end_location).into(); - i - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action460< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Parameter, TextSize), -) -> core::option::Option -{ - Some(__0) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action461< @@ -37480,7 +39456,7 @@ fn __action461< mode: Mode, __lookbehind: &TextSize, __lookahead: &TextSize, -) -> core::option::Option +) -> core::option::Option>> { None } @@ -37488,56 +39464,6 @@ fn __action461< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action462< ->( - mode: Mode, - (_, e, _): (TextSize, ast::ParameterWithDefault, TextSize), -) -> Vec -{ - vec![e] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action463< ->( - mode: Mode, - (_, mut v, _): (TextSize, Vec, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e, _): (TextSize, ast::ParameterWithDefault, TextSize), -) -> Vec -{ - { - v.push(e); - v - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action464< ->( - mode: Mode, - (_, __0, _): (TextSize, Option>, TextSize), -) -> core::option::Option>> -{ - Some(__0) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action465< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option>> -{ - None -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action466< >( mode: Mode, __lookbehind: &TextSize, @@ -37549,7 +39475,7 @@ fn __action466< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action467< +fn __action463< >( mode: Mode, (_, v, _): (TextSize, alloc::vec::Vec, TextSize), @@ -37560,7 +39486,7 @@ fn __action467< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action468< +fn __action464< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -37572,7 +39498,7 @@ fn __action468< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action469< +fn __action465< >( mode: Mode, (_, i, _): (TextSize, ast::ParameterWithDefault, TextSize), @@ -37583,7 +39509,7 @@ fn __action469< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action470< +fn __action466< >( mode: Mode, (_, mut i, _): (TextSize, ast::ParameterWithDefault, TextSize), @@ -37601,7 +39527,7 @@ fn __action470< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action471< +fn __action467< >( mode: Mode, (_, __0, _): (TextSize, ast::Parameter, TextSize), @@ -37610,6 +39536,56 @@ fn __action471< Some(__0) } +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action468< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option +{ + None +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action469< +>( + mode: Mode, + (_, e, _): (TextSize, ast::ParameterWithDefault, TextSize), +) -> Vec +{ + vec![e] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action470< +>( + mode: Mode, + (_, mut v, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e, _): (TextSize, ast::ParameterWithDefault, TextSize), +) -> Vec +{ + { + v.push(e); + v + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action471< +>( + mode: Mode, + (_, __0, _): (TextSize, Option>, TextSize), +) -> core::option::Option>> +{ + Some(__0) +} + #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action472< @@ -37617,7 +39593,7 @@ fn __action472< mode: Mode, __lookbehind: &TextSize, __lookahead: &TextSize, -) -> core::option::Option +) -> core::option::Option>> { None } @@ -37625,6 +39601,70 @@ fn __action472< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action473< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> alloc::vec::Vec +{ + alloc::vec![] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action474< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), +) -> alloc::vec::Vec +{ + v +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action475< +>( + mode: Mode, + (_, _, _): (TextSize, token::Tok, TextSize), + (_, __0, _): (TextSize, ast::ParameterWithDefault, TextSize), +) -> ast::ParameterWithDefault +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action476< +>( + mode: Mode, + (_, i, _): (TextSize, ast::ParameterWithDefault, TextSize), +) -> ast::ParameterWithDefault +{ + i +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action477< +>( + mode: Mode, + (_, mut i, _): (TextSize, ast::ParameterWithDefault, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::ParameterWithDefault +{ + { + i.default = Some(Box::new(e)); + i.range = (i.range.start()..end_location).into(); + i + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action478< >( mode: Mode, (_, __0, _): (TextSize, ast::Parameter, TextSize), @@ -37635,7 +39675,7 @@ fn __action473< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action474< +fn __action479< >( mode: Mode, __lookbehind: &TextSize, @@ -37647,7 +39687,30 @@ fn __action474< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action475< +fn __action480< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Parameter, TextSize), +) -> core::option::Option +{ + Some(__0) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action481< +>( + mode: Mode, + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option +{ + None +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action482< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -37666,7 +39729,7 @@ fn __action475< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action476< +fn __action483< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -37677,26 +39740,24 @@ fn __action476< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action477< +fn __action484< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), - (_, mut values, _): (TextSize, alloc::vec::Vec, TextSize), - (_, last, _): (TextSize, ast::Expr, TextSize), + (_, e1, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e2, _): (TextSize, ast::Expr, TextSize), (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - { - values.push(last); - ast::Expr::BoolOp( - ast::ExprBoolOp { op: ast::BoolOp::And, values, range: (location..end_location).into() } - ) - } + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(e1), op: ast::Operator::BitAnd, right: Box::new(e2), range: (location..end_location).into() } + ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action478< +fn __action485< >( mode: Mode, (_, __0, _): (TextSize, ast::Expr, TextSize), @@ -37707,53 +39768,35 @@ fn __action478< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action479< +fn __action486< >( mode: Mode, - (_, __0, _): (TextSize, ast::ParameterWithDefault, TextSize), -) -> alloc::vec::Vec + (_, location, _): (TextSize, TextSize, TextSize), + (_, e1, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e2, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - alloc::vec![__0] + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(e1), op: ast::Operator::BitAnd, right: Box::new(e2), range: (location..end_location).into() } + ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action480< +fn __action487< >( mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), - (_, e, _): (TextSize, ast::ParameterWithDefault, TextSize), -) -> alloc::vec::Vec + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - { let mut v = v; v.push(e); v } + __0 } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action481< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::ParameterWithDefault, TextSize), -) -> alloc::vec::Vec -{ - alloc::vec![__0] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action482< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), - (_, e, _): (TextSize, ast::ParameterWithDefault, TextSize), -) -> alloc::vec::Vec -{ - { let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action483< +fn __action488< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -37768,80 +39811,15 @@ fn __action483< ) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action484< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action485< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, left, _): (TextSize, ast::Expr, TextSize), - (_, comparisons, _): (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - { - let (ops, comparators) = comparisons.into_iter().unzip(); - ast::Expr::Compare( - ast::ExprCompare { left: Box::new(left), ops, comparators, range: (location..end_location).into() } - ) - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action486< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action487< ->( - mode: Mode, - (_, __0, _): (TextSize, (ast::CmpOp, ast::Expr), TextSize), -) -> alloc::vec::Vec<(ast::CmpOp, ast::Expr)> -{ - alloc::vec![__0] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action488< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), - (_, e, _): (TextSize, (ast::CmpOp, ast::Expr), TextSize), -) -> alloc::vec::Vec<(ast::CmpOp, ast::Expr)> -{ - { let mut v = v; v.push(e); v } -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action489< >( mode: Mode, - (_, __0, _): (TextSize, ast::CmpOp, TextSize), - (_, __1, _): (TextSize, ast::Expr, TextSize), -) -> (ast::CmpOp, ast::Expr) + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - (__0, __1) + __0 } #[allow(unused_variables)] @@ -37850,14 +39828,14 @@ fn __action490< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), - (_, a, _): (TextSize, ast::Expr, TextSize), + (_, e1, _): (TextSize, ast::Expr, TextSize), (_, op, _): (TextSize, ast::Operator, TextSize), - (_, b, _): (TextSize, ast::Expr, TextSize), + (_, e2, _): (TextSize, ast::Expr, TextSize), (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { ast::Expr::BinOp( - ast::ExprBinOp { left: Box::new(a), op, right: Box::new(b), range: (location..end_location).into() } + ast::ExprBinOp { left: Box::new(e1), op, right: Box::new(e2), range: (location..end_location).into() } ) } @@ -37878,14 +39856,17 @@ fn __action492< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), + (_, mut values, _): (TextSize, alloc::vec::Vec, TextSize), + (_, last, _): (TextSize, ast::Expr, TextSize), (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - ast::Expr::UnaryOp( - ast::ExprUnaryOp { operand: Box::new(e), op: ast::UnaryOp::Not, range: (location..end_location).into() } - ) + { + values.push(last); + ast::Expr::BoolOp( + ast::ExprBoolOp { op: ast::BoolOp::And, values, range: (location..end_location).into() } + ) + } } #[allow(unused_variables)] @@ -37902,6 +39883,52 @@ fn __action493< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action494< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::ParameterWithDefault, TextSize), +) -> alloc::vec::Vec +{ + alloc::vec![__0] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action495< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), + (_, e, _): (TextSize, ast::ParameterWithDefault, TextSize), +) -> alloc::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action496< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::ParameterWithDefault, TextSize), +) -> alloc::vec::Vec +{ + alloc::vec![__0] +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action497< +>( + mode: Mode, + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), + (_, e, _): (TextSize, ast::ParameterWithDefault, TextSize), +) -> alloc::vec::Vec +{ + { let mut v = v; v.push(e); v } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action498< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -37918,61 +39945,6 @@ fn __action494< } } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action495< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action496< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, a, _): (TextSize, ast::Expr, TextSize), - (_, op, _): (TextSize, ast::Operator, TextSize), - (_, b, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - ast::Expr::BinOp( - ast::ExprBinOp { left: Box::new(a), op, right: Box::new(b), range: (location..end_location).into() } - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action497< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action498< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, op, _): (TextSize, ast::UnaryOp, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - ast::Expr::UnaryOp( - ast::ExprUnaryOp { operand: Box::new(e), op, range: (location..end_location).into() } - ) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action499< @@ -37989,16 +39961,10 @@ fn __action499< fn __action500< >( mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, e1, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e2, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr + (_, __0, _): (TextSize, (ast::CmpOp, ast::Expr), TextSize), +) -> alloc::vec::Vec<(ast::CmpOp, ast::Expr)> { - ast::Expr::BinOp( - ast::ExprBinOp { left: Box::new(e1), op: ast::Operator::BitOr, right: Box::new(e2), range: (location..end_location).into() } - ) + alloc::vec![__0] } #[allow(unused_variables)] @@ -38006,10 +39972,11 @@ fn __action500< fn __action501< >( mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr + (_, v, _): (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), + (_, e, _): (TextSize, (ast::CmpOp, ast::Expr), TextSize), +) -> alloc::vec::Vec<(ast::CmpOp, ast::Expr)> { - __0 + { let mut v = v; v.push(e); v } } #[allow(unused_variables)] @@ -38017,16 +39984,11 @@ fn __action501< fn __action502< >( mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, e1, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e2, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr + (_, __0, _): (TextSize, ast::CmpOp, TextSize), + (_, __1, _): (TextSize, ast::Expr, TextSize), +) -> (ast::CmpOp, ast::Expr) { - ast::Expr::BinOp( - ast::ExprBinOp { left: Box::new(e1), op: ast::Operator::BitXor, right: Box::new(e2), range: (location..end_location).into() } - ) + (__0, __1) } #[allow(unused_variables)] @@ -38034,10 +39996,15 @@ fn __action502< fn __action503< >( mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - __0 + ast::Expr::UnaryOp( + ast::ExprUnaryOp { operand: Box::new(e), op: ast::UnaryOp::Not, range: (location..end_location).into() } + ) } #[allow(unused_variables)] @@ -38045,16 +40012,10 @@ fn __action503< fn __action504< >( mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, b, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), + (_, __0, _): (TextSize, ast::Expr, TextSize), ) -> ast::Expr { - ast::Expr::BinOp( - ast::ExprBinOp { left: Box::new(e), op: ast::Operator::Pow, right: Box::new(b), range: (location..end_location).into() } - ) + __0 } #[allow(unused_variables)] @@ -38062,10 +40023,16 @@ fn __action504< fn __action505< >( mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), + (_, location, _): (TextSize, TextSize, TextSize), + (_, a, _): (TextSize, ast::Expr, TextSize), + (_, op, _): (TextSize, ast::Operator, TextSize), + (_, b, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - __0 + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(a), op, right: Box::new(b), range: (location..end_location).into() } + ) } #[allow(unused_variables)] @@ -38073,17 +40040,10 @@ fn __action505< fn __action506< >( mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, atom, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), + (_, __0, _): (TextSize, ast::Expr, TextSize), ) -> ast::Expr { - { - ast::Expr::Await( - ast::ExprAwait { value: Box::new(atom), range: (location..end_location).into() } - ) - } + __0 } #[allow(unused_variables)] @@ -38091,10 +40051,16 @@ fn __action506< fn __action507< >( mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), + (_, location, _): (TextSize, TextSize, TextSize), + (_, a, _): (TextSize, ast::Expr, TextSize), + (_, op, _): (TextSize, ast::Operator, TextSize), + (_, b, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - __0 + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(a), op, right: Box::new(b), range: (location..end_location).into() } + ) } #[allow(unused_variables)] @@ -38102,16 +40068,10 @@ fn __action507< fn __action508< >( mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, e1, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, e2, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), + (_, __0, _): (TextSize, ast::Expr, TextSize), ) -> ast::Expr { - ast::Expr::BinOp( - ast::ExprBinOp { left: Box::new(e1), op: ast::Operator::BitAnd, right: Box::new(e2), range: (location..end_location).into() } - ) + __0 } #[allow(unused_variables)] @@ -38119,10 +40079,16 @@ fn __action508< fn __action509< >( mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), + (_, location, _): (TextSize, TextSize, TextSize), + (_, a, _): (TextSize, ast::Expr, TextSize), + (_, op, _): (TextSize, ast::Operator, TextSize), + (_, b, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - __0 + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(a), op, right: Box::new(b), range: (location..end_location).into() } + ) } #[allow(unused_variables)] @@ -38130,16 +40096,10 @@ fn __action509< fn __action510< >( mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, e1, _): (TextSize, ast::Expr, TextSize), - (_, op, _): (TextSize, ast::Operator, TextSize), - (_, e2, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), + (_, __0, _): (TextSize, ast::Expr, TextSize), ) -> ast::Expr { - ast::Expr::BinOp( - ast::ExprBinOp { left: Box::new(e1), op, right: Box::new(e2), range: (location..end_location).into() } - ) + __0 } #[allow(unused_variables)] @@ -38147,10 +40107,16 @@ fn __action510< fn __action511< >( mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), + (_, location, _): (TextSize, TextSize, TextSize), + (_, a, _): (TextSize, ast::Expr, TextSize), + (_, op, _): (TextSize, ast::Operator, TextSize), + (_, b, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - __0 + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(a), op, right: Box::new(b), range: (location..end_location).into() } + ) } #[allow(unused_variables)] @@ -38167,6 +40133,299 @@ fn __action512< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action513< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, left, _): (TextSize, ast::Expr, TextSize), + (_, comparisons, _): (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + { + let (ops, comparators) = comparisons.into_iter().unzip(); + ast::Expr::Compare( + ast::ExprCompare { left: Box::new(left), ops, comparators, range: (location..end_location).into() } + ) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action514< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action515< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e1, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e2, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(e1), op: ast::Operator::BitOr, right: Box::new(e2), range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action516< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action517< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, op, _): (TextSize, ast::UnaryOp, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::UnaryOp( + ast::ExprUnaryOp { operand: Box::new(e), op, range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action518< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action519< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, op, _): (TextSize, ast::UnaryOp, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::UnaryOp( + ast::ExprUnaryOp { operand: Box::new(e), op, range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action520< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action521< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, b, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(e), op: ast::Operator::Pow, right: Box::new(b), range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action522< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action523< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, b, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(e), op: ast::Operator::Pow, right: Box::new(b), range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action524< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action525< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e1, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e2, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(e1), op: ast::Operator::BitXor, right: Box::new(e2), range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action526< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action527< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e1, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e2, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(e1), op: ast::Operator::BitAnd, right: Box::new(e2), range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action528< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action529< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, atom, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + { + ast::Expr::Await( + ast::ExprAwait { value: Box::new(atom), range: (location..end_location).into() } + ) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action530< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action531< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, atom, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + { + ast::Expr::Await( + ast::ExprAwait { value: Box::new(atom), range: (location..end_location).into() } + ) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action532< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action533< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action534< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38184,7 +40443,7 @@ fn __action513< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action514< +fn __action535< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38202,7 +40461,7 @@ fn __action514< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action515< +fn __action536< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38219,7 +40478,127 @@ fn __action515< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action516< +fn __action537< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action538< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, f, _): (TextSize, ast::Expr, TextSize), + (_, arguments, _): (TextSize, ast::Arguments, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + { + ast::Expr::Call( + ast::ExprCall { func: Box::new(f), arguments, range: (location..end_location).into() } + ) + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action539< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, s, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::Subscript( + ast::ExprSubscript { value: Box::new(e), slice: Box::new(s), ctx: ast::ExprContext::Load, range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action540< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, attr, _): (TextSize, ast::Identifier, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::Attribute( + ast::ExprAttribute { value: Box::new(e), attr, ctx: ast::ExprContext::Load, range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action541< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, e1, _): (TextSize, ast::Expr, TextSize), + (_, op, _): (TextSize, ast::Operator, TextSize), + (_, e2, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(e1), op, right: Box::new(e2), range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action542< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action543< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, a, _): (TextSize, ast::Expr, TextSize), + (_, op, _): (TextSize, ast::Operator, TextSize), + (_, b, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(a), op, right: Box::new(b), range: (location..end_location).into() } + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action544< +>( + mode: Mode, + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action545< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38231,7 +40610,7 @@ fn __action516< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action517< +fn __action546< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38246,7 +40625,7 @@ fn __action517< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action518< +fn __action547< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38261,7 +40640,7 @@ fn __action518< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action519< +fn __action548< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38281,7 +40660,7 @@ fn __action519< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action520< +fn __action549< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38301,7 +40680,7 @@ fn __action520< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action521< +fn __action550< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38325,7 +40704,7 @@ fn __action521< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action522< +fn __action551< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38358,7 +40737,7 @@ fn __action522< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action523< +fn __action552< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38374,7 +40753,7 @@ fn __action523< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action524< +fn __action553< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -38387,7 +40766,7 @@ fn __action524< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action525< +fn __action554< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38407,7 +40786,7 @@ fn __action525< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action526< +fn __action555< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -38428,7 +40807,7 @@ fn __action526< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action527< +fn __action556< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38452,7 +40831,7 @@ fn __action527< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action528< +fn __action557< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38477,7 +40856,7 @@ fn __action528< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action529< +fn __action558< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38494,7 +40873,7 @@ fn __action529< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action530< +fn __action559< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38514,7 +40893,7 @@ fn __action530< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action531< +fn __action560< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38527,7 +40906,7 @@ fn __action531< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action532< +fn __action561< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38540,7 +40919,7 @@ fn __action532< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action533< +fn __action562< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38553,7 +40932,7 @@ fn __action533< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action534< +fn __action563< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38566,350 +40945,7 @@ fn __action534< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action535< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, a, _): (TextSize, ast::Expr, TextSize), - (_, op, _): (TextSize, ast::Operator, TextSize), - (_, b, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - ast::Expr::BinOp( - ast::ExprBinOp { left: Box::new(a), op, right: Box::new(b), range: (location..end_location).into() } - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action536< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action537< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, a, _): (TextSize, ast::Expr, TextSize), - (_, op, _): (TextSize, ast::Operator, TextSize), - (_, b, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - ast::Expr::BinOp( - ast::ExprBinOp { left: Box::new(a), op, right: Box::new(b), range: (location..end_location).into() } - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action538< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action539< ->( - mode: Mode, - (_, __0, _): (TextSize, Vec<(Option>, ast::Expr)>, TextSize), -) -> core::option::Option>, ast::Expr)>> -{ - Some(__0) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action540< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option>, ast::Expr)>> -{ - None -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action541< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> alloc::vec::Vec -{ - alloc::vec![] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action542< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), -) -> alloc::vec::Vec -{ - v -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action543< ->( - mode: Mode, - (_, _, _): (TextSize, token::Tok, TextSize), - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action544< ->( - mode: Mode, - (_, __0, _): (TextSize, Vec, TextSize), -) -> core::option::Option> -{ - Some(__0) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action545< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option> -{ - None -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action546< ->( - mode: Mode, - (_, __0, _): (TextSize, Vec, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), -) -> Vec -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action547< ->( - mode: Mode, - (_, __0, _): (TextSize, Vec, TextSize), -) -> core::option::Option> -{ - Some(__0) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action548< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> core::option::Option> -{ - None -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action549< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> alloc::vec::Vec -{ - alloc::vec![__0] -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action550< ->( - mode: Mode, - (_, v, _): (TextSize, alloc::vec::Vec, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), -) -> alloc::vec::Vec -{ - { let mut v = v; v.push(e); v } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action551< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, op, _): (TextSize, ast::UnaryOp, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - ast::Expr::UnaryOp( - ast::ExprUnaryOp { operand: Box::new(e), op, range: (location..end_location).into() } - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action552< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action553< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, b, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - ast::Expr::BinOp( - ast::ExprBinOp { left: Box::new(e), op: ast::Operator::Pow, right: Box::new(b), range: (location..end_location).into() } - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action554< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action555< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, atom, _): (TextSize, ast::Expr, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - { - ast::Expr::Await( - ast::ExprAwait { value: Box::new(atom), range: (location..end_location).into() } - ) - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action556< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action557< ->( - mode: Mode, - (_, __0, _): (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - __0 -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action558< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, f, _): (TextSize, ast::Expr, TextSize), - (_, arguments, _): (TextSize, ast::Arguments, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - { - ast::Expr::Call( - ast::ExprCall { func: Box::new(f), arguments, range: (location..end_location).into() } - ) - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action559< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, s, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - ast::Expr::Subscript( - ast::ExprSubscript { value: Box::new(e), slice: Box::new(s), ctx: ast::ExprContext::Load, range: (location..end_location).into() } - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action560< ->( - mode: Mode, - (_, location, _): (TextSize, TextSize, TextSize), - (_, e, _): (TextSize, ast::Expr, TextSize), - (_, _, _): (TextSize, token::Tok, TextSize), - (_, attr, _): (TextSize, ast::Identifier, TextSize), - (_, end_location, _): (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - ast::Expr::Attribute( - ast::ExprAttribute { value: Box::new(e), attr, ctx: ast::ExprContext::Load, range: (location..end_location).into() } - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action561< +fn __action564< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38921,7 +40957,7 @@ fn __action561< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action562< +fn __action565< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38936,7 +40972,7 @@ fn __action562< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action563< +fn __action566< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38951,7 +40987,7 @@ fn __action563< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action564< +fn __action567< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38971,7 +41007,7 @@ fn __action564< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action565< +fn __action568< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -38991,7 +41027,31 @@ fn __action565< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action566< +fn __action569< +>( + mode: Mode, + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, elts, _): (TextSize, Vec, TextSize), + (_, trailing_comma, _): (TextSize, core::option::Option, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + { + if elts.len() == 1 && trailing_comma.is_none() { + elts.into_iter().next().unwrap() + } else { + ast::Expr::Tuple( + ast::ExprTuple { elts, ctx: ast::ExprContext::Load, range: (location..end_location).into() } + ) + } + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action570< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -39024,7 +41084,7 @@ fn __action566< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action567< +fn __action571< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -39040,7 +41100,7 @@ fn __action567< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action568< +fn __action572< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -39053,7 +41113,7 @@ fn __action568< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action569< +fn __action573< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -39073,7 +41133,7 @@ fn __action569< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action570< +fn __action574< >( mode: Mode, (_, _, _): (TextSize, token::Tok, TextSize), @@ -39094,7 +41154,7 @@ fn __action570< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action571< +fn __action575< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -39118,7 +41178,7 @@ fn __action571< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action572< +fn __action576< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -39143,7 +41203,7 @@ fn __action572< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action573< +fn __action577< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -39160,7 +41220,7 @@ fn __action573< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action574< +fn __action578< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -39180,7 +41240,7 @@ fn __action574< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action575< +fn __action579< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -39193,7 +41253,7 @@ fn __action575< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action576< +fn __action580< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -39206,7 +41266,7 @@ fn __action576< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action577< +fn __action581< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -39219,7 +41279,7 @@ fn __action577< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action578< +fn __action582< >( mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), @@ -39230,171 +41290,15 @@ fn __action578< ast::Expr::Constant(ast::ExprConstant { value: ast::Constant::Ellipsis, kind: None, range: (location..end_location).into() }) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action579< ->( - mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __3.0; - let __end0 = __3.2; - let __temp0 = __action356( - mode, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action521( - mode, - __0, - __1, - __2, - __temp0, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action580< ->( - mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __3.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action521( - mode, - __0, - __1, - __2, - __temp0, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action581< ->( - mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, core::option::Option>, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __5.0; - let __end0 = __5.2; - let __temp0 = __action356( - mode, - __5, - ); - let __temp0 = (__start0, __temp0, __end0); - __action522( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - __6, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action582< ->( - mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, core::option::Option>, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __4.2; - let __end0 = __5.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action522( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - __5, - __6, - ) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action583< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, core::option::Option>, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> Result> + (_, __0, _): (TextSize, Vec<(Option>, ast::Expr)>, TextSize), +) -> core::option::Option>, ast::Expr)>> { - let __start0 = __5.0; - let __end0 = __5.2; - let __temp0 = __action356( - mode, - __5, - ); - let __temp0 = (__start0, __temp0, __end0); - __action566( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - __6, - __7, - ) + Some(__0) } #[allow(unused_variables)] @@ -39402,34 +41306,11 @@ fn __action583< fn __action584< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, core::option::Option>, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option>, ast::Expr)>> { - let __start0 = __4.2; - let __end0 = __5.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action566( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - __5, - __6, - ) + None } #[allow(unused_variables)] @@ -39437,36 +41318,11 @@ fn __action584< fn __action585< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> alloc::vec::Vec { - let __start0 = __6.0; - let __end0 = __6.2; - let __temp0 = __action356( - mode, - __6, - ); - let __temp0 = (__start0, __temp0, __end0); - __action137( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __temp0, - __7, - __8, - ) + alloc::vec![] } #[allow(unused_variables)] @@ -39474,36 +41330,10 @@ fn __action585< fn __action586< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), +) -> alloc::vec::Vec { - let __start0 = __5.2; - let __end0 = __6.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action137( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __temp0, - __6, - __7, - ) + v } #[allow(unused_variables)] @@ -39511,32 +41341,11 @@ fn __action586< fn __action587< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, _, _): (TextSize, token::Tok, TextSize), + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __4.0; - let __end0 = __4.2; - let __temp0 = __action356( - mode, - __4, - ); - let __temp0 = (__start0, __temp0, __end0); - __action138( - mode, - __0, - __1, - __2, - __3, - __temp0, - __5, - __6, - ) + __0 } #[allow(unused_variables)] @@ -39544,32 +41353,10 @@ fn __action587< fn __action588< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, __0, _): (TextSize, Vec, TextSize), +) -> core::option::Option> { - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action138( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - __5, - ) + Some(__0) } #[allow(unused_variables)] @@ -39577,32 +41364,11 @@ fn __action588< fn __action589< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option> { - let __start0 = __4.0; - let __end0 = __4.2; - let __temp0 = __action356( - mode, - __4, - ); - let __temp0 = (__start0, __temp0, __end0); - __action139( - mode, - __0, - __1, - __2, - __3, - __temp0, - __5, - __6, - ) + None } #[allow(unused_variables)] @@ -39610,32 +41376,11 @@ fn __action589< fn __action590< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, __0, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), +) -> Vec { - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action139( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - __5, - ) + __0 } #[allow(unused_variables)] @@ -39643,36 +41388,10 @@ fn __action590< fn __action591< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, __0, _): (TextSize, Vec, TextSize), +) -> core::option::Option> { - let __start0 = __6.0; - let __end0 = __6.2; - let __temp0 = __action356( - mode, - __6, - ); - let __temp0 = (__start0, __temp0, __end0); - __action141( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __temp0, - __7, - __8, - ) + Some(__0) } #[allow(unused_variables)] @@ -39680,36 +41399,11 @@ fn __action591< fn __action592< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> core::option::Option> { - let __start0 = __5.2; - let __end0 = __6.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action141( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __temp0, - __6, - __7, - ) + None } #[allow(unused_variables)] @@ -39717,31 +41411,15 @@ fn __action592< fn __action593< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, location, _): (TextSize, TextSize, TextSize), + (_, a, _): (TextSize, ast::Expr, TextSize), + (_, op, _): (TextSize, ast::Operator, TextSize), + (_, b, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __4.0; - let __end0 = __4.2; - let __temp0 = __action356( - mode, - __4, - ); - let __temp0 = (__start0, __temp0, __end0); - __action142( - mode, - __0, - __1, - __2, - __3, - __temp0, - __5, - __6, + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(a), op, right: Box::new(b), range: (location..end_location).into() } ) } @@ -39750,32 +41428,10 @@ fn __action593< fn __action594< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action142( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - __5, - ) + __0 } #[allow(unused_variables)] @@ -39783,31 +41439,14 @@ fn __action594< fn __action595< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, location, _): (TextSize, TextSize, TextSize), + (_, op, _): (TextSize, ast::UnaryOp, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __4.0; - let __end0 = __4.2; - let __temp0 = __action356( - mode, - __4, - ); - let __temp0 = (__start0, __temp0, __end0); - __action143( - mode, - __0, - __1, - __2, - __3, - __temp0, - __5, - __6, + ast::Expr::UnaryOp( + ast::ExprUnaryOp { operand: Box::new(e), op, range: (location..end_location).into() } ) } @@ -39816,32 +41455,10 @@ fn __action595< fn __action596< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action143( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - __5, - ) + __0 } #[allow(unused_variables)] @@ -39849,22 +41466,10 @@ fn __action596< fn __action597< >( mode: Mode, - __0: (TextSize, Vec<(Option>, ast::Expr)>, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Vec<(Option>, ast::Expr)> + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> alloc::vec::Vec { - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action356( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action211( - mode, - __0, - __temp0, - ) + alloc::vec![__0] } #[allow(unused_variables)] @@ -39872,22 +41477,11 @@ fn __action597< fn __action598< >( mode: Mode, - __0: (TextSize, Vec<(Option>, ast::Expr)>, TextSize), -) -> Vec<(Option>, ast::Expr)> + (_, v, _): (TextSize, alloc::vec::Vec, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), +) -> alloc::vec::Vec { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action211( - mode, - __0, - __temp0, - ) + { let mut v = v; v.push(e); v } } #[allow(unused_variables)] @@ -39895,21 +41489,15 @@ fn __action598< fn __action599< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Vec + (_, location, _): (TextSize, TextSize, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, b, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action356( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action219( - mode, - __0, - __temp0, + ast::Expr::BinOp( + ast::ExprBinOp { left: Box::new(e), op: ast::Operator::Pow, right: Box::new(b), range: (location..end_location).into() } ) } @@ -39918,22 +41506,10 @@ fn __action599< fn __action600< >( mode: Mode, - __0: (TextSize, Vec, TextSize), -) -> Vec + (_, __0, _): (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action219( - mode, - __0, - __temp0, - ) + __0 } #[allow(unused_variables)] @@ -39941,26 +41517,17 @@ fn __action600< fn __action601< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, atom, _): (TextSize, ast::Expr, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - let __start0 = __2.0; - let __end0 = __2.2; - let __temp0 = __action356( - mode, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action247( - mode, - __0, - __1, - __temp0, - __3, - ) + { + ast::Expr::Await( + ast::ExprAwait { value: Box::new(atom), range: (location..end_location).into() } + ) + } } #[allow(unused_variables)] @@ -39968,26 +41535,10 @@ fn __action601< fn __action602< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, TextSize, TextSize), + (_, __0, _): (TextSize, ast::Expr, TextSize), ) -> ast::Expr { - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action247( - mode, - __0, - __1, - __temp0, - __2, - ) + __0 } #[allow(unused_variables)] @@ -39995,26 +41546,10 @@ fn __action602< fn __action603< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), + (_, __0, _): (TextSize, ast::Expr, TextSize), ) -> ast::Expr { - let __start0 = __2.0; - let __end0 = __2.2; - let __temp0 = __action356( - mode, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action244( - mode, - __0, - __1, - __temp0, - __3, - ) + __0 } #[allow(unused_variables)] @@ -40022,26 +41557,17 @@ fn __action603< fn __action604< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, TextSize, TextSize), + (_, location, _): (TextSize, TextSize, TextSize), + (_, f, _): (TextSize, ast::Expr, TextSize), + (_, arguments, _): (TextSize, ast::Arguments, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action244( - mode, - __0, - __1, - __temp0, - __2, - ) + { + ast::Expr::Call( + ast::ExprCall { func: Box::new(f), arguments, range: (location..end_location).into() } + ) + } } #[allow(unused_variables)] @@ -40049,29 +41575,16 @@ fn __action604< fn __action605< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Vec + (_, location, _): (TextSize, TextSize, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, s, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __3.0; - let __end0 = __3.2; - let __temp0 = __action356( - mode, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action66( - mode, - __0, - __1, - __2, - __temp0, - __4, - __5, + ast::Expr::Subscript( + ast::ExprSubscript { value: Box::new(e), slice: Box::new(s), ctx: ast::ExprContext::Load, range: (location..end_location).into() } ) } @@ -40080,29 +41593,15 @@ fn __action605< fn __action606< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Vec + (_, location, _): (TextSize, TextSize, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, attr, _): (TextSize, ast::Identifier, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __2.2; - let __end0 = __3.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action66( - mode, - __0, - __1, - __2, - __temp0, - __3, - __4, + ast::Expr::Attribute( + ast::ExprAttribute { value: Box::new(e), attr, ctx: ast::ExprContext::Load, range: (location..end_location).into() } ) } @@ -40111,22 +41610,11 @@ fn __action606< fn __action607< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Vec + (_, location, _): (TextSize, TextSize, TextSize), + (_, s, _): (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), +) -> Result> { - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action356( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action210( - mode, - __0, - __temp0, - ) + Ok(parse_strings(s)?) } #[allow(unused_variables)] @@ -40134,21 +41622,13 @@ fn __action607< fn __action608< >( mode: Mode, - __0: (TextSize, Vec, TextSize), -) -> Vec + (_, location, _): (TextSize, TextSize, TextSize), + (_, value, _): (TextSize, ast::Constant, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action210( - mode, - __0, - __temp0, + ast::Expr::Constant( + ast::ExprConstant { value, kind: None, range: (location..end_location).into() } ) } @@ -40157,29 +41637,13 @@ fn __action608< fn __action609< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, location, _): (TextSize, TextSize, TextSize), + (_, id, _): (TextSize, ast::Identifier, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __3.0; - let __end0 = __3.2; - let __temp0 = __action356( - mode, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action133( - mode, - __0, - __1, - __2, - __temp0, - __4, - __5, + ast::Expr::Name( + ast::ExprName { id: id.into(), ctx: ast::ExprContext::Load, range: (location..end_location).into() } ) } @@ -40188,30 +41652,19 @@ fn __action609< fn __action610< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e, _): (TextSize, core::option::Option>, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __2.2; - let __end0 = __3.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action133( - mode, - __0, - __1, - __2, - __temp0, - __3, - __4, - ) + { + let elts = e.unwrap_or_default(); + ast::Expr::List( + ast::ExprList { elts, ctx: ast::ExprContext::Load, range: (location..end_location).into() } + ) + } } #[allow(unused_variables)] @@ -40219,32 +41672,19 @@ fn __action610< fn __action611< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Identifier, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, elt, _): (TextSize, ast::Expr, TextSize), + (_, generators, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __4.0; - let __end0 = __4.2; - let __temp0 = __action356( - mode, - __4, - ); - let __temp0 = (__start0, __temp0, __end0); - __action134( - mode, - __0, - __1, - __2, - __3, - __temp0, - __5, - __6, - ) + { + ast::Expr::ListComp( + ast::ExprListComp { elt: Box::new(elt), generators, range: (location..end_location).into() } + ) + } } #[allow(unused_variables)] @@ -40252,32 +41692,32 @@ fn __action611< fn __action612< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Identifier, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, left, _): (TextSize, core::option::Option>, TextSize), + (_, mid, _): (TextSize, ast::Expr, TextSize), + (_, right, _): (TextSize, alloc::vec::Vec, TextSize), + (_, trailing_comma, _): (TextSize, core::option::Option, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action134( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - __5, - ) + { + if left.is_none() && right.is_empty() && trailing_comma.is_none() { + if mid.is_starred_expr() { + return Err(LexicalError{ + error: LexicalErrorType::OtherError("cannot use starred expression here".to_string()), + location: mid.start(), + })?; + } + Ok(mid) + } else { + let elts = left.into_iter().flatten().chain([mid]).chain(right).collect(); + Ok(ast::Expr::Tuple( + ast::ExprTuple { elts, ctx: ast::ExprContext::Load, range: (location..end_location).into() }, + )) + } + } } #[allow(unused_variables)] @@ -40285,35 +41725,14 @@ fn __action612< fn __action613< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Identifier, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __6.0; - let __end0 = __6.2; - let __temp0 = __action356( - mode, - __6, - ); - let __temp0 = (__start0, __temp0, __end0); - __action135( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __temp0, - __7, - __8, + ast::Expr::Tuple( + ast::ExprTuple { elts: Vec::new(), ctx: ast::ExprContext::Load, range: (location..end_location).into() } ) } @@ -40322,36 +41741,12 @@ fn __action613< fn __action614< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Identifier, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> ast::Pattern + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), +) -> ast::Expr { - let __start0 = __5.2; - let __end0 = __6.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action135( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __temp0, - __6, - __7, - ) + e } #[allow(unused_variables)] @@ -40359,36 +41754,19 @@ fn __action614< fn __action615< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, alloc::vec::Vec, TextSize), - __8: (TextSize, token::Tok, TextSize), -) -> ast::Stmt + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, elt, _): (TextSize, ast::Expr, TextSize), + (_, generators, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __3.0; - let __end0 = __3.2; - let __temp0 = __action356( - mode, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action85( - mode, - __0, - __1, - __2, - __temp0, - __4, - __5, - __6, - __7, - __8, - ) + { + ast::Expr::GeneratorExp( + ast::ExprGeneratorExp { elt: Box::new(elt), generators, range: (location..end_location).into() } + ) + } } #[allow(unused_variables)] @@ -40396,36 +41774,20 @@ fn __action615< fn __action616< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> ast::Stmt + (_, _, _): (TextSize, token::Tok, TextSize), + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e, _): (TextSize, ast::Expr, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __2.2; - let __end0 = __3.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action85( - mode, - __0, - __1, - __2, - __temp0, - __3, - __4, - __5, - __6, - __7, - ) + { + Err(LexicalError{ + error : LexicalErrorType::OtherError("cannot use double starred expression here".to_string()), + location, + }.into()) + } } #[allow(unused_variables)] @@ -40433,28 +41795,23 @@ fn __action616< fn __action617< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Vec, Vec), TextSize), - __2: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e, _): (TextSize, core::option::Option>, ast::Expr)>>, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __3.0; - let __end0 = __3.2; - let __temp0 = __action356( - mode, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action277( - mode, - __0, - __1, - __2, - __temp0, - __4, - ) + { + let (keys, values) = e + .unwrap_or_default() + .into_iter() + .map(|(k, v)| (k.map(|x| *x), v)) + .unzip(); + ast::Expr::Dict( + ast::ExprDict { keys, values, range: (location..end_location).into() } + ) + } } #[allow(unused_variables)] @@ -40462,28 +41819,24 @@ fn __action617< fn __action618< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Vec, Vec), TextSize), - __2: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, e1, _): (TextSize, (ast::Expr, ast::Expr), TextSize), + (_, generators, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __2.2; - let __end0 = __3.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action277( - mode, - __0, - __1, - __2, - __temp0, - __3, - ) + { + ast::Expr::DictComp( + ast::ExprDictComp { + key: Box::new(e1.0), + value: Box::new(e1.1), + generators, + range: (location..end_location).into() + } + ) + } } #[allow(unused_variables)] @@ -40491,27 +41844,15 @@ fn __action618< fn __action619< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Vec, Vec), TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, elts, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __3.0; - let __end0 = __3.2; - let __temp0 = __action356( - mode, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action278( - mode, - __0, - __1, - __2, - __temp0, - __4, + ast::Expr::Set( + ast::ExprSet { elts, range: (location..end_location).into() } ) } @@ -40520,28 +41861,19 @@ fn __action619< fn __action620< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Vec, Vec), TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, elt, _): (TextSize, ast::Expr, TextSize), + (_, generators, _): (TextSize, Vec, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __2.2; - let __end0 = __3.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action278( - mode, - __0, - __1, - __2, - __temp0, - __3, - ) + { + ast::Expr::SetComp( + ast::ExprSetComp { elt: Box::new(elt), generators, range: (location..end_location).into() } + ) + } } #[allow(unused_variables)] @@ -40549,26 +41881,12 @@ fn __action620< fn __action621< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Option>, Vec, Option>), TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Parameters + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __2.0; - let __end0 = __2.2; - let __temp0 = __action356( - mode, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action279( - mode, - __0, - __1, - __temp0, - __3, - ) + ast::Expr::Constant(ast::ExprConstant { value: true.into(), kind: None, range: (location..end_location).into() }) } #[allow(unused_variables)] @@ -40576,26 +41894,12 @@ fn __action621< fn __action622< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Option>, Vec, Option>), TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Parameters + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action279( - mode, - __0, - __1, - __temp0, - __2, - ) + ast::Expr::Constant(ast::ExprConstant { value: false.into(), kind: None, range: (location..end_location).into() }) } #[allow(unused_variables)] @@ -40603,26 +41907,12 @@ fn __action622< fn __action623< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, Option>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Parameters + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __2.0; - let __end0 = __2.2; - let __temp0 = __action356( - mode, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action280( - mode, - __0, - __1, - __temp0, - __3, - ) + ast::Expr::Constant(ast::ExprConstant { value: ast::Constant::None, kind: None, range: (location..end_location).into() }) } #[allow(unused_variables)] @@ -40630,26 +41920,12 @@ fn __action623< fn __action624< >( mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, Option>, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Parameters + (_, location, _): (TextSize, TextSize, TextSize), + (_, _, _): (TextSize, token::Tok, TextSize), + (_, end_location, _): (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action280( - mode, - __0, - __1, - __temp0, - __2, - ) + ast::Expr::Constant(ast::ExprConstant { value: ast::Constant::Ellipsis, kind: None, range: (location..end_location).into() }) } #[allow(unused_variables)] @@ -40658,26 +41934,28 @@ fn __action625< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Vec, Vec), TextSize), - __2: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action356( + let __temp0 = __action363( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action260( + __action569( mode, __0, __1, __2, __temp0, __4, + __5, ) } @@ -40687,26 +41965,28 @@ fn __action626< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Vec, Vec), TextSize), - __2: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action357( + let __temp0 = __action364( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action260( + __action569( mode, __0, __1, __2, __temp0, __3, + __4, ) } @@ -40716,26 +41996,32 @@ fn __action627< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Vec, Vec), TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, core::option::Option>, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __3.0; - let __end0 = __3.2; - let __temp0 = __action356( + let __start0 = __5.0; + let __end0 = __5.2; + let __temp0 = __action363( mode, - __3, + __5, ); let __temp0 = (__start0, __temp0, __end0); - __action261( + __action570( mode, __0, __1, __2, - __temp0, + __3, __4, + __temp0, + __6, + __7, ) } @@ -40745,26 +42031,32 @@ fn __action628< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Vec, Vec), TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, core::option::Option>, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __2.2; - let __end0 = __3.0; - let __temp0 = __action357( + let __start0 = __4.2; + let __end0 = __5.0; + let __temp0 = __action364( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action261( + __action570( mode, __0, __1, __2, - __temp0, __3, + __4, + __temp0, + __5, + __6, ) } @@ -40774,24 +42066,28 @@ fn __action629< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Option>, Vec, Option>), TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Parameters + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __2.0; - let __end0 = __2.2; - let __temp0 = __action356( + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action363( mode, - __2, + __3, ); let __temp0 = (__start0, __temp0, __end0); - __action262( + __action550( mode, __0, __1, + __2, __temp0, - __3, + __4, + __5, ) } @@ -40801,24 +42097,28 @@ fn __action630< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, (Option>, Vec, Option>), TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Parameters + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr { - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action357( + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action364( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action262( + __action550( mode, __0, __1, - __temp0, __2, + __temp0, + __3, + __4, ) } @@ -40828,24 +42128,32 @@ fn __action631< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, Option>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Parameters + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, core::option::Option>, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __2.0; - let __end0 = __2.2; - let __temp0 = __action356( + let __start0 = __5.0; + let __end0 = __5.2; + let __temp0 = __action363( mode, - __2, + __5, ); let __temp0 = (__start0, __temp0, __end0); - __action263( + __action551( mode, __0, __1, - __temp0, + __2, __3, + __4, + __temp0, + __6, + __7, ) } @@ -40855,24 +42163,32 @@ fn __action632< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, Option>, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Parameters + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, core::option::Option>, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action357( + let __start0 = __4.2; + let __end0 = __5.0; + let __temp0 = __action364( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action263( + __action551( mode, __0, __1, - __temp0, __2, + __3, + __4, + __temp0, + __5, + __6, ) } @@ -40882,24 +42198,32 @@ fn __action633< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, core::option::Option>, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __2.0; - let __end0 = __2.2; - let __temp0 = __action356( + let __start0 = __5.0; + let __end0 = __5.2; + let __temp0 = __action363( mode, - __2, + __5, ); let __temp0 = (__start0, __temp0, __end0); - __action89( + __action612( mode, __0, __1, - __temp0, + __2, __3, + __4, + __temp0, + __6, + __7, ) } @@ -40909,24 +42233,32 @@ fn __action634< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, core::option::Option>, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action357( + let __start0 = __4.2; + let __end0 = __5.0; + let __temp0 = __action364( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action89( + __action612( mode, __0, __1, - __temp0, __2, + __3, + __4, + __temp0, + __5, + __6, ) } @@ -40936,9 +42268,83 @@ fn __action635< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, ast::Pattern, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __6.0; + let __end0 = __6.2; + let __temp0 = __action363( + mode, + __6, + ); + let __temp0 = (__start0, __temp0, __end0); + __action139( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action636< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __5.2; + let __end0 = __6.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action139( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action637< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec, TextSize), __4: (TextSize, token::Tok, TextSize), __5: (TextSize, token::Tok, TextSize), __6: (TextSize, TextSize, TextSize), @@ -40946,12 +42352,12 @@ fn __action635< { let __start0 = __4.0; let __end0 = __4.2; - let __temp0 = __action356( + let __temp0 = __action363( mode, __4, ); let __temp0 = (__start0, __temp0, __end0); - __action106( + __action140( mode, __0, __1, @@ -40965,26 +42371,26 @@ fn __action635< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action636< +fn __action638< >( mode: Mode, __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, ast::Pattern, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec, TextSize), __4: (TextSize, token::Tok, TextSize), __5: (TextSize, TextSize, TextSize), ) -> ast::Pattern { let __start0 = __3.2; let __end0 = __4.0; - let __temp0 = __action357( + let __temp0 = __action364( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action106( + __action140( mode, __0, __1, @@ -40998,7 +42404,325 @@ fn __action636< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action637< +fn __action639< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __4.0; + let __end0 = __4.2; + let __temp0 = __action363( + mode, + __4, + ); + let __temp0 = (__start0, __temp0, __end0); + __action141( + mode, + __0, + __1, + __2, + __3, + __temp0, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action640< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.2; + let __end0 = __4.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action141( + mode, + __0, + __1, + __2, + __3, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action641< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __6.0; + let __end0 = __6.2; + let __temp0 = __action363( + mode, + __6, + ); + let __temp0 = (__start0, __temp0, __end0); + __action143( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action642< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __5.2; + let __end0 = __6.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action143( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action643< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __4.0; + let __end0 = __4.2; + let __temp0 = __action363( + mode, + __4, + ); + let __temp0 = (__start0, __temp0, __end0); + __action144( + mode, + __0, + __1, + __2, + __3, + __temp0, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action644< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.2; + let __end0 = __4.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action144( + mode, + __0, + __1, + __2, + __3, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action645< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __4.0; + let __end0 = __4.2; + let __temp0 = __action363( + mode, + __4, + ); + let __temp0 = (__start0, __temp0, __end0); + __action145( + mode, + __0, + __1, + __2, + __3, + __temp0, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action646< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.2; + let __end0 = __4.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action145( + mode, + __0, + __1, + __2, + __3, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action647< +>( + mode: Mode, + __0: (TextSize, Vec<(Option>, ast::Expr)>, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> Vec<(Option>, ast::Expr)> +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action363( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action213( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action648< +>( + mode: Mode, + __0: (TextSize, Vec<(Option>, ast::Expr)>, TextSize), +) -> Vec<(Option>, ast::Expr)> +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action213( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action649< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -41007,12 +42731,12 @@ fn __action637< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action356( + let __temp0 = __action363( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action215( + __action221( mode, __0, __temp0, @@ -41021,7 +42745,7 @@ fn __action637< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action638< +fn __action650< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -41029,13 +42753,13 @@ fn __action638< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action357( + let __temp0 = __action364( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action215( + __action221( mode, __0, __temp0, @@ -41044,7 +42768,7 @@ fn __action638< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action639< +fn __action651< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41055,12 +42779,12 @@ fn __action639< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action356( + let __temp0 = __action363( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action206( + __action249( mode, __0, __1, @@ -41071,7 +42795,7 @@ fn __action639< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action640< +fn __action652< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41081,13 +42805,13 @@ fn __action640< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action357( + let __temp0 = __action364( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action206( + __action249( mode, __0, __1, @@ -41096,373 +42820,25 @@ fn __action640< ) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action641< ->( - mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::TypeParams -{ - let __start0 = __3.0; - let __end0 = __3.2; - let __temp0 = __action356( - mode, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action171( - mode, - __0, - __1, - __2, - __temp0, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action642< ->( - mode: Mode, - __0: (TextSize, TextSize, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::TypeParams -{ - let __start0 = __2.2; - let __end0 = __3.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action171( - mode, - __0, - __1, - __2, - __temp0, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action643< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __2.0; - let __end0 = __2.2; - let __temp0 = __action356( - mode, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action156( - mode, - __0, - __1, - __temp0, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action644< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action156( - mode, - __0, - __1, - __temp0, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action645< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, TextSize), - __2: (TextSize, ast::WithItem, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __4.0; - let __end0 = __4.2; - let __temp0 = __action356( - mode, - __4, - ); - let __temp0 = (__start0, __temp0, __end0); - __action157( - mode, - __0, - __1, - __2, - __3, - __temp0, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action646< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, TextSize), - __2: (TextSize, ast::WithItem, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action357( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action157( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action647< ->( - mode: Mode, - __0: (TextSize, ast::Suite, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Stmt, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> ast::Suite -{ - let __start0 = __3.0; - let __end0 = __3.2; - let __temp0 = __action380( - mode, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action5( - mode, - __0, - __1, - __2, - __temp0, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action648< ->( - mode: Mode, - __0: (TextSize, ast::Suite, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Stmt, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Suite -{ - let __start0 = __2.2; - let __end0 = __3.0; - let __temp0 = __action381( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action5( - mode, - __0, - __1, - __2, - __temp0, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action649< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __2.0; - let __end0 = __2.2; - let __temp0 = __action380( - mode, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action9( - mode, - __0, - __1, - __temp0, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action650< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action381( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action9( - mode, - __0, - __1, - __temp0, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action651< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Stmt, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __3.0; - let __end0 = __3.2; - let __temp0 = __action380( - mode, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action12( - mode, - __0, - __1, - __2, - __temp0, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action652< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Stmt, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __2.2; - let __end0 = __3.0; - let __temp0 = __action381( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action12( - mode, - __0, - __1, - __2, - __temp0, - __3, - ) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action653< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Stmt, TextSize), + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Suite + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action380( + let __temp0 = __action363( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action7( + __action246( mode, __0, __1, @@ -41476,20 +42852,20 @@ fn __action653< fn __action654< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Suite + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action381( + let __temp0 = __action364( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action7( + __action246( mode, __0, __1, @@ -41501,6 +42877,1460 @@ fn __action654< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action655< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Vec +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action363( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action67( + mode, + __0, + __1, + __2, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action656< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Vec +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action67( + mode, + __0, + __1, + __2, + __temp0, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action657< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action363( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action212( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action658< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), +) -> Vec +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action212( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action659< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action363( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action135( + mode, + __0, + __1, + __2, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action660< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action135( + mode, + __0, + __1, + __2, + __temp0, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action661< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Identifier, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __4.0; + let __end0 = __4.2; + let __temp0 = __action363( + mode, + __4, + ); + let __temp0 = (__start0, __temp0, __end0); + __action136( + mode, + __0, + __1, + __2, + __3, + __temp0, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action662< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Identifier, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.2; + let __end0 = __4.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action136( + mode, + __0, + __1, + __2, + __3, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action663< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Identifier, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __6.0; + let __end0 = __6.2; + let __temp0 = __action363( + mode, + __6, + ); + let __temp0 = (__start0, __temp0, __end0); + __action137( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action664< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Identifier, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __5.2; + let __end0 = __6.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action137( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action665< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, alloc::vec::Vec, TextSize), + __8: (TextSize, token::Tok, TextSize), +) -> ast::Stmt +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action363( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action87( + mode, + __0, + __1, + __2, + __temp0, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action666< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> ast::Stmt +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action87( + mode, + __0, + __1, + __2, + __temp0, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action667< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Vec, Vec), TextSize), + __2: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action363( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action279( + mode, + __0, + __1, + __2, + __temp0, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action668< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Vec, Vec), TextSize), + __2: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action279( + mode, + __0, + __1, + __2, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action669< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Vec, Vec), TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action363( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action280( + mode, + __0, + __1, + __2, + __temp0, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action670< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Vec, Vec), TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action280( + mode, + __0, + __1, + __2, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action671< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Option>, Vec, Option>), TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action363( + mode, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action281( + mode, + __0, + __1, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action672< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Option>, Vec, Option>), TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __1.2; + let __end0 = __2.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action281( + mode, + __0, + __1, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action673< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, Option>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action363( + mode, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action282( + mode, + __0, + __1, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action674< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, Option>, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __1.2; + let __end0 = __2.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action282( + mode, + __0, + __1, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action675< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Vec, Vec), TextSize), + __2: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action363( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action262( + mode, + __0, + __1, + __2, + __temp0, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action676< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Vec, Vec), TextSize), + __2: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action262( + mode, + __0, + __1, + __2, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action677< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Vec, Vec), TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action363( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action263( + mode, + __0, + __1, + __2, + __temp0, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action678< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Vec, Vec), TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action263( + mode, + __0, + __1, + __2, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action679< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Option>, Vec, Option>), TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action363( + mode, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action264( + mode, + __0, + __1, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action680< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, (Option>, Vec, Option>), TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __1.2; + let __end0 = __2.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action264( + mode, + __0, + __1, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action681< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, Option>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action363( + mode, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action265( + mode, + __0, + __1, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action682< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, Option>, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __1.2; + let __end0 = __2.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action265( + mode, + __0, + __1, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action683< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action363( + mode, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action91( + mode, + __0, + __1, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action684< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __1.2; + let __end0 = __2.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action91( + mode, + __0, + __1, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action685< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, ast::Pattern, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __4.0; + let __end0 = __4.2; + let __temp0 = __action363( + mode, + __4, + ); + let __temp0 = (__start0, __temp0, __end0); + __action108( + mode, + __0, + __1, + __2, + __3, + __temp0, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action686< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, ast::Pattern, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.2; + let __end0 = __4.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action108( + mode, + __0, + __1, + __2, + __3, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action687< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action363( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action217( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action688< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), +) -> Vec +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action217( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action689< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action363( + mode, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action208( + mode, + __0, + __1, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action690< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __2.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action208( + mode, + __0, + __1, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action691< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::TypeParams +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action363( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action173( + mode, + __0, + __1, + __2, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action692< +>( + mode: Mode, + __0: (TextSize, TextSize, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::TypeParams +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action173( + mode, + __0, + __1, + __2, + __temp0, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action693< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action363( + mode, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action158( + mode, + __0, + __1, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action694< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __1.2; + let __end0 = __2.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action158( + mode, + __0, + __1, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action695< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, ast::WithItem, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __4.0; + let __end0 = __4.2; + let __temp0 = __action363( + mode, + __4, + ); + let __temp0 = (__start0, __temp0, __end0); + __action159( + mode, + __0, + __1, + __2, + __3, + __temp0, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action696< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, ast::WithItem, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __3.2; + let __end0 = __4.0; + let __temp0 = __action364( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action159( + mode, + __0, + __1, + __2, + __3, + __temp0, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action697< +>( + mode: Mode, + __0: (TextSize, ast::Suite, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Stmt, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action387( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action5( + mode, + __0, + __1, + __2, + __temp0, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action698< +>( + mode: Mode, + __0: (TextSize, ast::Suite, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Stmt, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action388( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action5( + mode, + __0, + __1, + __2, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action699< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action387( + mode, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action9( + mode, + __0, + __1, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action700< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __1.2; + let __end0 = __2.0; + let __temp0 = __action388( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action9( + mode, + __0, + __1, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action701< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Stmt, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action387( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action12( + mode, + __0, + __1, + __2, + __temp0, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action702< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Stmt, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action388( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action12( + mode, + __0, + __1, + __2, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action703< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action387( + mode, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action7( + mode, + __0, + __1, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action704< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __1.2; + let __end0 = __2.0; + let __temp0 = __action388( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action7( + mode, + __0, + __1, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action705< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41516,12 +44346,12 @@ fn __action655< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action313( + let __temp0 = __action315( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action147( + __action149( mode, __0, __temp0, @@ -41537,7 +44367,7 @@ fn __action655< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action656< +fn __action706< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41552,13 +44382,13 @@ fn __action656< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action314( + let __temp0 = __action316( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action147( + __action149( mode, __0, __temp0, @@ -41574,7 +44404,7 @@ fn __action656< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action657< +fn __action707< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41591,12 +44421,12 @@ fn __action657< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action313( + let __temp0 = __action315( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action161( + __action163( mode, __0, __1, @@ -41613,7 +44443,7 @@ fn __action657< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action658< +fn __action708< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41629,13 +44459,13 @@ fn __action658< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action314( + let __temp0 = __action316( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action161( + __action163( mode, __0, __1, @@ -41652,7 +44482,7 @@ fn __action658< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action659< +fn __action709< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41667,12 +44497,12 @@ fn __action659< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action313( + let __temp0 = __action315( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action223( + __action225( mode, __0, __temp0, @@ -41687,7 +44517,7 @@ fn __action659< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action660< +fn __action710< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41701,13 +44531,13 @@ fn __action660< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action314( + let __temp0 = __action316( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action223( + __action225( mode, __0, __temp0, @@ -41722,7 +44552,7 @@ fn __action660< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action661< +fn __action711< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41735,12 +44565,12 @@ fn __action661< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action313( + let __temp0 = __action315( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action155( + __action157( mode, __0, __temp0, @@ -41753,7 +44583,7 @@ fn __action661< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action662< +fn __action712< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41765,13 +44595,13 @@ fn __action662< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action314( + let __temp0 = __action316( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action155( + __action157( mode, __0, __temp0, @@ -41784,7 +44614,7 @@ fn __action662< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action663< +fn __action713< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -41793,13 +44623,13 @@ fn __action663< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action410( + let __temp0 = __action419( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action464( + __action471( mode, __temp0, ) @@ -41807,7 +44637,7 @@ fn __action663< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action664< +fn __action714< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41820,13 +44650,13 @@ fn __action664< { let __start0 = __2.0; let __end0 = __3.2; - let __temp0 = __action410( + let __temp0 = __action419( mode, __2, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action619( + __action669( mode, __0, __1, @@ -41838,7 +44668,7 @@ fn __action664< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action665< +fn __action715< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41850,13 +44680,13 @@ fn __action665< { let __start0 = __2.0; let __end0 = __3.2; - let __temp0 = __action410( + let __temp0 = __action419( mode, __2, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action620( + __action670( mode, __0, __1, @@ -41867,7 +44697,7 @@ fn __action665< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action666< +fn __action716< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41880,13 +44710,13 @@ fn __action666< { let __start0 = __4.0; let __end0 = __5.2; - let __temp0 = __action663( + let __temp0 = __action713( mode, __4, __5, ); let __temp0 = (__start0, __temp0, __end0); - __action415( + __action424( mode, __0, __1, @@ -41898,7 +44728,7 @@ fn __action666< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action667< +fn __action717< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41909,13 +44739,13 @@ fn __action667< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action465( + let __temp0 = __action472( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action415( + __action424( mode, __0, __1, @@ -41927,7 +44757,7 @@ fn __action667< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action668< +fn __action718< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -41936,13 +44766,13 @@ fn __action668< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action418( + let __temp0 = __action427( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action453( + __action460( mode, __temp0, ) @@ -41950,7 +44780,7 @@ fn __action668< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action669< +fn __action719< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41963,13 +44793,13 @@ fn __action669< { let __start0 = __2.0; let __end0 = __3.2; - let __temp0 = __action418( + let __temp0 = __action427( mode, __2, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action627( + __action677( mode, __0, __1, @@ -41981,7 +44811,7 @@ fn __action669< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action670< +fn __action720< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -41993,13 +44823,13 @@ fn __action670< { let __start0 = __2.0; let __end0 = __3.2; - let __temp0 = __action418( + let __temp0 = __action427( mode, __2, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action628( + __action678( mode, __0, __1, @@ -42010,7 +44840,7 @@ fn __action670< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action671< +fn __action721< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42023,13 +44853,13 @@ fn __action671< { let __start0 = __4.0; let __end0 = __5.2; - let __temp0 = __action668( + let __temp0 = __action718( mode, __4, __5, ); let __temp0 = (__start0, __temp0, __end0); - __action423( + __action432( mode, __0, __1, @@ -42041,7 +44871,7 @@ fn __action671< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action672< +fn __action722< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42052,13 +44882,13 @@ fn __action672< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action454( + let __temp0 = __action461( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action423( + __action432( mode, __0, __1, @@ -42070,7 +44900,7 @@ fn __action672< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action673< +fn __action723< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -42079,13 +44909,13 @@ fn __action673< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action468( + let __temp0 = __action475( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action479( + __action494( mode, __temp0, ) @@ -42093,7 +44923,7 @@ fn __action673< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action674< +fn __action724< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -42103,13 +44933,13 @@ fn __action674< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action468( + let __temp0 = __action475( mode, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action480( + __action495( mode, __0, __temp0, @@ -42118,7 +44948,7 @@ fn __action674< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action675< +fn __action725< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -42128,13 +44958,13 @@ fn __action675< { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action466( + let __temp0 = __action473( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action417( + __action426( mode, __0, __1, @@ -42145,7 +44975,7 @@ fn __action675< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action676< +fn __action726< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -42156,12 +44986,12 @@ fn __action676< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action467( + let __temp0 = __action474( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action417( + __action426( mode, __0, __1, @@ -42172,7 +45002,7 @@ fn __action676< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action677< +fn __action727< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42184,13 +45014,13 @@ fn __action677< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action466( + let __temp0 = __action473( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action666( + __action716( mode, __0, __1, @@ -42203,7 +45033,7 @@ fn __action677< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action678< +fn __action728< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42216,12 +45046,12 @@ fn __action678< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action467( + let __temp0 = __action474( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action666( + __action716( mode, __0, __1, @@ -42234,7 +45064,7 @@ fn __action678< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action679< +fn __action729< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42244,13 +45074,13 @@ fn __action679< { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action466( + let __temp0 = __action473( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action667( + __action717( mode, __0, __1, @@ -42261,7 +45091,7 @@ fn __action679< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action680< +fn __action730< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42272,12 +45102,12 @@ fn __action680< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action467( + let __temp0 = __action474( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action667( + __action717( mode, __0, __1, @@ -42288,7 +45118,7 @@ fn __action680< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action681< +fn __action731< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -42297,13 +45127,13 @@ fn __action681< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action457( + let __temp0 = __action464( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action481( + __action496( mode, __temp0, ) @@ -42311,7 +45141,7 @@ fn __action681< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action682< +fn __action732< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -42321,13 +45151,13 @@ fn __action682< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action457( + let __temp0 = __action464( mode, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action482( + __action497( mode, __0, __temp0, @@ -42336,7 +45166,7 @@ fn __action682< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action683< +fn __action733< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -42346,13 +45176,13 @@ fn __action683< { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action455( + let __temp0 = __action462( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action425( + __action434( mode, __0, __1, @@ -42363,7 +45193,7 @@ fn __action683< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action684< +fn __action734< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -42374,12 +45204,12 @@ fn __action684< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action456( + let __temp0 = __action463( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action425( + __action434( mode, __0, __1, @@ -42390,7 +45220,7 @@ fn __action684< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action685< +fn __action735< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42402,13 +45232,13 @@ fn __action685< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action455( + let __temp0 = __action462( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action671( + __action721( mode, __0, __1, @@ -42421,7 +45251,7 @@ fn __action685< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action686< +fn __action736< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42434,12 +45264,12 @@ fn __action686< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action456( + let __temp0 = __action463( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action671( + __action721( mode, __0, __1, @@ -42452,7 +45282,7 @@ fn __action686< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action687< +fn __action737< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42462,13 +45292,13 @@ fn __action687< { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action455( + let __temp0 = __action462( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action672( + __action722( mode, __0, __1, @@ -42479,7 +45309,7 @@ fn __action687< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action688< +fn __action738< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42490,12 +45320,12 @@ fn __action688< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action456( + let __temp0 = __action463( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action672( + __action722( mode, __0, __1, @@ -42506,7 +45336,7 @@ fn __action688< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action689< +fn __action739< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42518,12 +45348,12 @@ fn __action689< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action471( + let __temp0 = __action478( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action677( + __action727( mode, __0, __1, @@ -42535,7 +45365,7 @@ fn __action689< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action690< +fn __action740< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42546,13 +45376,13 @@ fn __action690< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action472( + let __temp0 = __action479( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action677( + __action727( mode, __0, __1, @@ -42564,7 +45394,7 @@ fn __action690< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action691< +fn __action741< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42577,12 +45407,12 @@ fn __action691< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action471( + let __temp0 = __action478( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action678( + __action728( mode, __0, __1, @@ -42595,7 +45425,7 @@ fn __action691< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action692< +fn __action742< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42607,13 +45437,13 @@ fn __action692< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action472( + let __temp0 = __action479( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action678( + __action728( mode, __0, __1, @@ -42626,7 +45456,7 @@ fn __action692< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action693< +fn __action743< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42636,12 +45466,12 @@ fn __action693< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action471( + let __temp0 = __action478( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action679( + __action729( mode, __0, __1, @@ -42651,7 +45481,7 @@ fn __action693< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action694< +fn __action744< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42660,13 +45490,13 @@ fn __action694< { let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action472( + let __temp0 = __action479( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action679( + __action729( mode, __0, __1, @@ -42676,7 +45506,7 @@ fn __action694< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action695< +fn __action745< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42687,12 +45517,12 @@ fn __action695< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action471( + let __temp0 = __action478( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action680( + __action730( mode, __0, __1, @@ -42703,7 +45533,7 @@ fn __action695< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action696< +fn __action746< >( mode: Mode, __0: (TextSize, TextSize, TextSize), @@ -42713,13 +45543,13 @@ fn __action696< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action472( + let __temp0 = __action479( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action680( + __action730( mode, __0, __1, @@ -42730,7 +45560,7 @@ fn __action696< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action697< +fn __action747< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -42741,13 +45571,13 @@ fn __action697< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action323( + __action325( mode, __temp0, __0, @@ -42759,7 +45589,7 @@ fn __action697< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action698< +fn __action748< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -42769,13 +45599,13 @@ fn __action698< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action320( + __action322( mode, __temp0, __0, @@ -42786,7 +45616,7 @@ fn __action698< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action699< +fn __action749< >( mode: Mode, __0: (TextSize, (String, StringKind, bool), TextSize), @@ -42795,13 +45625,13 @@ fn __action699< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action332( + __action334( mode, __temp0, __0, @@ -42811,7 +45641,7 @@ fn __action699< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action700< +fn __action750< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -42822,13 +45652,13 @@ fn __action700< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action112( + __action114( mode, __temp0, __0, @@ -42840,7 +45670,7 @@ fn __action700< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action701< +fn __action751< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -42851,13 +45681,13 @@ fn __action701< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action449( + __action484( mode, __temp0, __0, @@ -42869,7 +45699,7 @@ fn __action701< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action702< +fn __action752< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -42880,13 +45710,13 @@ fn __action702< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action508( + __action486( mode, __temp0, __0, @@ -42898,567 +45728,18 @@ fn __action702< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action703< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action433( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action704< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action477( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action705< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action226( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action706< +fn __action753< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action490( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action707< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action535( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action708< ->( - mode: Mode, - __0: (TextSize, ast::Pattern, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action93( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action709< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, core::option::Option, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action72( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action710< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action516( - mode, - __temp0, - __0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action711< ->( - mode: Mode, - __0: (TextSize, ast::Constant, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action517( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action712< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action518( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action713< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action519( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action714< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action520( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action715< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action579( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action716< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action580( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action717< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action581( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action718< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action582( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action719< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action523( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action720< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action525( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action721< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action526( - mode, - __0, - __temp0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action722< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, ast::Expr)>>, TextSize), - __2: (TextSize, token::Tok, TextSize), __3: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -43476,55 +45757,107 @@ fn __action722< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action723< +fn __action754< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, (ast::Expr, ast::Expr), TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action528( + __action442( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action755< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action492( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action756< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action228( mode, __temp0, __0, __1, __2, __3, - __4, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action724< +fn __action757< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), __3: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action529( + __action505( mode, __temp0, __0, @@ -43536,138 +45869,123 @@ fn __action724< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action725< +fn __action758< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action507( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action759< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action543( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action760< +>( + mode: Mode, + __0: (TextSize, ast::Pattern, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action95( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action761< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Expr + __2: (TextSize, core::option::Option, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Stmt { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action530( + __action73( mode, __temp0, __0, __1, __2, __3, - __4, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action726< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action531( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action727< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action532( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action728< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action533( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action729< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action534( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action730< +fn __action762< >( mode: Mode, __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), @@ -43675,83 +45993,7 @@ fn __action730< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action561( - mode, - __temp0, - __0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action731< ->( - mode: Mode, - __0: (TextSize, ast::Constant, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action562( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action732< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action563( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action733< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -43761,27 +46003,21 @@ fn __action733< mode, __temp0, __0, - __1, - __2, - __3, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action734< +fn __action763< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), + __0: (TextSize, ast::Constant, TextSize), + __1: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -43792,6 +46028,88 @@ fn __action734< __temp0, __0, __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action764< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action566( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action765< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action567( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action766< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action568( + mode, + __temp0, + __0, + __1, __2, __3, __4, @@ -43800,7 +46118,67 @@ fn __action734< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action735< +fn __action767< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action625( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action768< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action626( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action769< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -43814,13 +46192,13 @@ fn __action735< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action583( + __action627( mode, __temp0, __0, @@ -43835,7 +46213,7 @@ fn __action735< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action736< +fn __action770< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -43848,13 +46226,13 @@ fn __action736< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action584( + __action628( mode, __temp0, __0, @@ -43868,7 +46246,7 @@ fn __action736< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action737< +fn __action771< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -43878,97 +46256,7 @@ fn __action737< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action567( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action738< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action569( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action739< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action570( - mode, - __0, - __temp0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action740< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, ast::Expr)>>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -43980,17 +46268,16 @@ fn __action740< __0, __1, __2, - __3, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action741< +fn __action772< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, (ast::Expr, ast::Expr), TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, Vec, TextSize), __3: (TextSize, token::Tok, TextSize), __4: (TextSize, TextSize, TextSize), @@ -43998,37 +46285,7 @@ fn __action741< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action572( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action742< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -44041,12 +46298,133 @@ fn __action742< __1, __2, __3, + __4, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action743< +fn __action773< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action574( + mode, + __0, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action774< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, ast::Expr)>>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action575( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action775< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, (ast::Expr, ast::Expr), TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action576( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action776< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action577( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action777< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -44058,110 +46436,7 @@ fn __action743< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action574( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action744< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action575( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action745< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action576( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action746< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action577( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action747< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -44172,57 +46447,235 @@ fn __action747< __temp0, __0, __1, + __2, + __3, + __4, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action748< +fn __action778< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Arguments, TextSize), - __2: (TextSize, TextSize, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action513( + __action579( mode, __temp0, __0, __1, - __2, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action749< +fn __action779< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action580( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action780< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action581( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action781< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action582( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action782< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action545( + mode, + __temp0, + __0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action783< +>( + mode: Mode, + __0: (TextSize, ast::Constant, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action546( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action784< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action547( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action785< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action548( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action786< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), __3: (TextSize, token::Tok, TextSize), __4: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action514( + __action549( mode, __temp0, __0, @@ -44235,24 +46688,55 @@ fn __action749< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action750< +fn __action787< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, TextSize, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action515( + __action629( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action788< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action630( mode, __temp0, __0, @@ -44264,17 +46748,235 @@ fn __action750< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action751< +fn __action789< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Arguments, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action631( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action790< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action632( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action791< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), __2: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action552( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action792< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action554( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action793< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action555( + mode, + __0, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action794< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, ast::Expr)>>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action556( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action795< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, (ast::Expr, ast::Expr), TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action557( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action796< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( mode, &__start0, &__end0, @@ -44286,24 +46988,25 @@ fn __action751< __0, __1, __2, + __3, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action752< +fn __action797< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), __3: (TextSize, token::Tok, TextSize), __4: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -44322,18 +47025,16 @@ fn __action752< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action753< +fn __action798< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, TextSize, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -44344,1353 +47045,6 @@ fn __action753< __temp0, __0, __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action754< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action506( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action755< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action555( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action756< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action119( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action757< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, core::option::Option, TextSize), - __4: (TextSize, core::option::Option, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action170( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action758< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action585( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action759< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action586( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action760< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action587( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action761< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action588( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action762< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action589( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action763< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action590( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action764< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action140( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action765< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action591( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action766< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action592( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action767< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action593( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action768< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action594( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action769< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action595( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action770< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action596( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action771< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action144( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action772< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action485( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action773< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action494( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action774< ->( - mode: Mode, - __0: (TextSize, ast::Constant, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action109( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action775< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action111( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action776< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Decorator -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action175( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action777< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action24( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action778< ->( - mode: Mode, - __0: (TextSize, String, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Identifier -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action68( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action779< ->( - mode: Mode, - __0: (TextSize, String, TextSize), - __1: (TextSize, alloc::vec::Vec<(token::Tok, ast::Identifier)>, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Identifier -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action69( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action780< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Parameter -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action169( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action781< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), -) -> ast::ExceptHandler -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action153( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action782< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, (ast::Expr, ast::Identifier), TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), -) -> ast::ExceptHandler -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action154( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action783< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Suite, TextSize), -) -> ast::ExceptHandler -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action151( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action784< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, (ast::Expr, ast::Identifier), TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Suite, TextSize), -) -> ast::ExceptHandler -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action152( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action785< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action248( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action786< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action500( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action787< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action25( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action788< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action26( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action789< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, core::option::Option, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action27( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action790< ->( - mode: Mode, - __0: (TextSize, ast::UnaryOp, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action498( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action791< ->( - mode: Mode, - __0: (TextSize, ast::UnaryOp, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action551( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action792< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action52( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action793< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action53( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action794< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action54( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action795< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action55( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action796< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), - __7: (TextSize, core::option::Option, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action655( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action797< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Suite, TextSize), - __6: (TextSize, core::option::Option, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action656( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action798< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Identifier, TextSize), - __4: (TextSize, core::option::Option, TextSize), - __5: (TextSize, ast::Parameters, TextSize), - __6: (TextSize, core::option::Option, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action657( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __7, - __8, ) } @@ -45699,25 +47053,232 @@ fn __action798< fn __action799< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, core::option::Option, TextSize), - __4: (TextSize, ast::Parameters, TextSize), - __5: (TextSize, core::option::Option, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action658( + __action561( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action800< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action562( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action801< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action563( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action802< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action607( + mode, + __temp0, + __0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action803< +>( + mode: Mode, + __0: (TextSize, ast::Constant, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action608( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action804< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action609( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action805< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action610( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action806< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action611( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action807< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action633( mode, __temp0, __0, @@ -45727,221 +47288,6 @@ fn __action799< __4, __5, __6, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action800< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, core::option::Option>, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action227( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action801< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action228( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action802< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action229( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action803< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action230( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action804< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action601( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action805< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action602( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action806< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action603( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action807< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action604( - mode, - __temp0, - __0, - __1, ) } @@ -45951,24 +47297,30 @@ fn __action808< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Stmt + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action70( + __action634( mode, __temp0, __0, __1, __2, + __3, + __4, + __5, ) } @@ -45977,23 +47329,25 @@ fn __action808< fn __action809< >( mode: Mode, - __0: (TextSize, String, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Identifier + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action234( + __action613( mode, __temp0, __0, __1, + __2, ) } @@ -46004,21 +47358,20 @@ fn __action810< mode: Mode, __0: (TextSize, token::Tok, TextSize), __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), - __4: (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), - __5: (TextSize, core::option::Option<(TextSize, ast::Suite)>, TextSize), -) -> ast::Stmt + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action145( + __action615( mode, __temp0, __0, @@ -46026,7 +47379,6 @@ fn __action810< __2, __3, __4, - __5, ) } @@ -46035,25 +47387,29 @@ fn __action810< fn __action811< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Alias + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action367( + __action616( mode, - __temp0, __0, + __temp0, __1, __2, + __3, + __4, ) } @@ -46062,25 +47418,27 @@ fn __action811< fn __action812< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Alias + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, ast::Expr)>>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action360( + __action617( mode, __temp0, __0, __1, __2, + __3, ) } @@ -46089,23 +47447,29 @@ fn __action812< fn __action813< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> Vec + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, (ast::Expr, ast::Expr), TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action65( + __action618( mode, __temp0, __0, __1, + __2, + __3, + __4, ) } @@ -46115,15 +47479,376 @@ fn __action814< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Vec + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action619( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action815< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action620( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action816< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action621( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action817< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action622( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action818< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action623( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action819< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action624( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action820< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Arguments, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action534( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action821< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action535( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action822< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action536( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action823< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Arguments, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action538( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action824< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action539( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action825< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action540( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action826< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Arguments, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action604( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action827< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( mode, &__start0, &__end0, @@ -46142,18 +47867,18 @@ fn __action814< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action815< +fn __action828< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), __3: (TextSize, TextSize, TextSize), -) -> Vec +) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -46169,378 +47894,30 @@ fn __action815< ) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action816< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> Vec -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action67( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action817< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action59( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action818< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, (Option, Option), TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action60( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action819< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, TextSize, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __start1 = __0.2; - let __end1 = __1.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - let __temp1 = __action389( - mode, - &__start1, - &__end1, - ); - let __temp1 = (__start1, __temp1, __end1); - __action181( - mode, - __temp0, - __0, - __temp1, - __1, - __2, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action820< ->( - mode: Mode, - __0: (TextSize, (MagicKind, String), TextSize), - __1: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action74( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action821< ->( - mode: Mode, - __0: (TextSize, (MagicKind, String), TextSize), - __1: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action73( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action822< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action113( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action823< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action114( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action824< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action115( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action825< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action116( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action826< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action117( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action827< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action118( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action828< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action127( - mode, - __temp0, - __0, - __1, - ) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action829< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action128( + __action529( mode, __temp0, __0, __1, + __2, ) } @@ -46550,22 +47927,24 @@ fn __action830< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action129( + __action531( mode, __temp0, __0, __1, + __2, ) } @@ -46574,21 +47953,25 @@ fn __action830< fn __action831< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action130( + __action601( mode, __temp0, __0, + __1, + __2, ) } @@ -46597,25 +47980,23 @@ fn __action831< fn __action832< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, TextSize, TextSize), ) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action132( + __action121( mode, __temp0, __0, __1, - __2, ) } @@ -46624,83 +48005,24 @@ fn __action832< fn __action833< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action609( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action834< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action610( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action835< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), + __0: (TextSize, alloc::vec::Vec, TextSize), __1: (TextSize, token::Tok, TextSize), __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __3: (TextSize, core::option::Option, TextSize), + __4: (TextSize, core::option::Option, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action611( + __action172( mode, __temp0, __0, @@ -46709,50 +48031,20 @@ fn __action835< __3, __4, __5, + __6, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action836< +fn __action834< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), + __2: (TextSize, Vec, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action612( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action837< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Identifier, TextSize), + __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), __5: (TextSize, token::Tok, TextSize), __6: (TextSize, token::Tok, TextSize), __7: (TextSize, TextSize, TextSize), @@ -46760,13 +48052,13 @@ fn __action837< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action613( + __action635( mode, __temp0, __0, @@ -46782,27 +48074,27 @@ fn __action837< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action838< +fn __action835< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Identifier, TextSize), + __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), __5: (TextSize, token::Tok, TextSize), __6: (TextSize, TextSize, TextSize), ) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action614( + __action636( mode, __temp0, __0, @@ -46817,25 +48109,122 @@ fn __action838< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action839< +fn __action836< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Pattern, TextSize), - __2: (TextSize, core::option::Option, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Suite, TextSize), -) -> ast::MatchCase + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action86( + __action637( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action837< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action638( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action838< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action639( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action839< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action640( mode, __temp0, __0, @@ -46851,23 +48240,27 @@ fn __action839< fn __action840< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action120( + __action142( mode, __temp0, __0, __1, + __2, + __3, ) } @@ -46878,25 +48271,33 @@ fn __action841< mode: Mode, __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action121( + __action641( mode, __temp0, __0, __1, __2, __3, + __4, + __5, + __6, + __7, ) } @@ -46907,25 +48308,31 @@ fn __action842< mode: Mode, __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action122( + __action642( mode, __temp0, __0, __1, __2, __3, + __4, + __5, + __6, ) } @@ -46934,24 +48341,23 @@ fn __action842< fn __action843< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), __3: (TextSize, token::Tok, TextSize), __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> ast::Stmt + __5: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action83( + __action643( mode, __temp0, __0, @@ -46960,7 +48366,6 @@ fn __action843< __3, __4, __5, - __6, ) } @@ -46969,25 +48374,22 @@ fn __action843< fn __action844< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> ast::Stmt + __4: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action84( + __action644( mode, __temp0, __0, @@ -46995,9 +48397,6 @@ fn __action844< __2, __3, __4, - __5, - __6, - __7, ) } @@ -47006,25 +48405,23 @@ fn __action844< fn __action845< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), __3: (TextSize, token::Tok, TextSize), __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> ast::Stmt + __5: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action615( + __action645( mode, __temp0, __0, @@ -47033,8 +48430,6 @@ fn __action845< __3, __4, __5, - __6, - __7, ) } @@ -47043,24 +48438,22 @@ fn __action845< fn __action846< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> ast::Stmt + __4: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action616( + __action646( mode, __temp0, __0, @@ -47068,8 +48461,6 @@ fn __action846< __2, __3, __4, - __5, - __6, ) } @@ -47078,21 +48469,21 @@ fn __action846< fn __action847< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, TextSize, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), -) -> ast::Expr + __3: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action180( + __action146( mode, __temp0, __0, @@ -47105,6 +48496,1086 @@ fn __action847< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action848< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action498( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action849< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action513( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action850< +>( + mode: Mode, + __0: (TextSize, ast::Constant, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action111( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action851< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action113( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action852< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Decorator +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action177( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action853< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action25( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action854< +>( + mode: Mode, + __0: (TextSize, String, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Identifier +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action69( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action855< +>( + mode: Mode, + __0: (TextSize, String, TextSize), + __1: (TextSize, alloc::vec::Vec<(token::Tok, ast::Identifier)>, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Identifier +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action70( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action856< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Parameter +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action171( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action857< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Suite, TextSize), +) -> ast::ExceptHandler +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action155( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action858< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, (ast::Expr, ast::Identifier), TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Suite, TextSize), +) -> ast::ExceptHandler +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action156( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action859< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Suite, TextSize), +) -> ast::ExceptHandler +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action153( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action860< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, (ast::Expr, ast::Identifier), TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Suite, TextSize), +) -> ast::ExceptHandler +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action154( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action861< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action353( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action862< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action250( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action863< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action515( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action864< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action26( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action865< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action27( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action866< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, core::option::Option, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action28( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action867< +>( + mode: Mode, + __0: (TextSize, ast::UnaryOp, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action517( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action868< +>( + mode: Mode, + __0: (TextSize, ast::UnaryOp, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action519( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action869< +>( + mode: Mode, + __0: (TextSize, ast::UnaryOp, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action595( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action870< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action53( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action871< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action54( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action872< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action55( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action873< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action56( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action874< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Expr, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), + __7: (TextSize, core::option::Option, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action705( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action875< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Suite, TextSize), + __6: (TextSize, core::option::Option, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action706( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action876< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Identifier, TextSize), + __4: (TextSize, core::option::Option, TextSize), + __5: (TextSize, ast::Parameters, TextSize), + __6: (TextSize, core::option::Option, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action707( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action877< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, core::option::Option, TextSize), + __4: (TextSize, ast::Parameters, TextSize), + __5: (TextSize, core::option::Option, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action708( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action878< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action229( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action879< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action230( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action880< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action231( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action881< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action232( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action882< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action651( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action883< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action652( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action884< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action653( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action885< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action654( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action886< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -47114,7 +49585,7 @@ fn __action848< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -47129,1066 +49600,28 @@ fn __action848< ) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action849< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action447( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action850< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action492( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action851< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action95( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action852< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action240( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action853< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action475( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action854< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action617( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action855< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action618( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action856< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action664( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action857< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action665( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action858< ->( - mode: Mode, - __0: (TextSize, (Option>, Vec, Option>), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Parameters -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action621( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action859< ->( - mode: Mode, - __0: (TextSize, (Option>, Vec, Option>), TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Parameters -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action622( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action860< ->( - mode: Mode, - __0: (TextSize, Option>, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Parameters -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action623( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action861< ->( - mode: Mode, - __0: (TextSize, Option>, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Parameters -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action624( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action862< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action625( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action863< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action626( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action864< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action669( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action865< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action670( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action866< ->( - mode: Mode, - __0: (TextSize, (Option>, Vec, Option>), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Parameters -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action629( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action867< ->( - mode: Mode, - __0: (TextSize, (Option>, Vec, Option>), TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Parameters -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action630( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action868< ->( - mode: Mode, - __0: (TextSize, Option>, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Parameters -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action631( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action869< ->( - mode: Mode, - __0: (TextSize, Option>, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Parameters -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action632( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action870< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action689( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action871< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action690( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action872< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action691( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action873< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action692( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action874< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action693( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action875< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action694( - mode, - __temp0, - __0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action876< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action695( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action877< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action696( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action878< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action685( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action879< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action686( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action880< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action687( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action881< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action688( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action882< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action164( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action883< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action23( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action884< ->( - mode: Mode, - __0: (TextSize, ast::Pattern, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action88( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action885< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action633( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action886< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action634( - mode, - __temp0, - __0, - __1, - ) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action887< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr + __0: (TextSize, String, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Identifier { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action504( + __action236( mode, __temp0, __0, __1, - __2, - __3, ) } @@ -48197,27 +49630,31 @@ fn __action887< fn __action888< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Suite, TextSize), + __4: (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), + __5: (TextSize, core::option::Option<(TextSize, ast::Suite)>, TextSize), +) -> ast::Stmt { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action553( + __action147( mode, __temp0, __0, __1, __2, __3, + __4, + __5, ) } @@ -48226,23 +49663,25 @@ fn __action888< fn __action889< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Stmt + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Alias { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action57( + __action374( mode, __temp0, __0, __1, + __2, ) } @@ -48251,27 +49690,25 @@ fn __action889< fn __action890< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, core::option::Option, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Stmt + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Alias { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action58( + __action367( mode, __temp0, __0, __1, __2, - __3, ) } @@ -48280,27 +49717,23 @@ fn __action890< fn __action891< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Pattern, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __0: (TextSize, Vec, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> Vec { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action103( + __action66( mode, __temp0, __0, __1, - __2, - __3, ) } @@ -48310,24 +49743,28 @@ fn __action892< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Vec { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action104( + __action655( mode, __temp0, __0, __1, __2, + __3, + __4, ) } @@ -48337,28 +49774,26 @@ fn __action893< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Pattern, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __3: (TextSize, TextSize, TextSize), +) -> Vec { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action105( + __action656( mode, __temp0, __0, __1, __2, __3, - __4, ) } @@ -48368,30 +49803,22 @@ fn __action894< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Pattern, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __1: (TextSize, TextSize, TextSize), +) -> Vec { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action635( + __action68( mode, __temp0, __0, __1, - __2, - __3, - __4, - __5, ) } @@ -48401,28 +49828,24 @@ fn __action895< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Pattern, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __1: (TextSize, Vec, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Stmt { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action636( + __action60( mode, __temp0, __0, __1, __2, - __3, - __4, ) } @@ -48432,26 +49855,28 @@ fn __action896< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), + __1: (TextSize, (Option, Option), TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Pattern + __3: (TextSize, Vec, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Stmt { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action107( + __action61( mode, __temp0, __0, __1, __2, __3, + __4, ) } @@ -48460,27 +49885,23 @@ fn __action896< fn __action897< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr + __0: (TextSize, (IpyEscapeKind, String), TextSize), + __1: (TextSize, TextSize, TextSize), +) -> Result> { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action483( + __action75( mode, __temp0, __0, __1, - __2, - __3, ) } @@ -48489,27 +49910,23 @@ fn __action897< fn __action898< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr + __0: (TextSize, (IpyEscapeKind, String), TextSize), + __1: (TextSize, TextSize, TextSize), +) -> Result> { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action510( + __action74( mode, __temp0, __0, __1, - __2, - __3, ) } @@ -48518,33 +49935,25 @@ fn __action898< fn __action899< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> ast::Comprehension + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> Result> { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action659( + __action76( mode, __temp0, __0, __1, __2, - __3, - __4, - __5, - __6, ) } @@ -48554,25 +49963,34 @@ fn __action900< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, TextSize, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Expr, TextSize), __5: (TextSize, TextSize, TextSize), -) -> ast::Comprehension +) -> Result> { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __start1 = __0.2; + let __end1 = __1.0; + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action660( + let __temp1 = __action396( + mode, + &__start1, + &__end1, + ); + let __temp1 = (__start1, __temp1, __end1); + __action183( mode, __temp0, __0, + __temp1, __1, __2, __3, @@ -48587,18 +50005,18 @@ fn __action901< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), -) -> Option + __1: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action209( + __action115( mode, __temp0, __0, @@ -48612,24 +50030,22 @@ fn __action902< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Expr + __1: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action221( + __action116( mode, __temp0, __0, __1, - __2, ) } @@ -48639,24 +50055,22 @@ fn __action903< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Identifier, TextSize), - __2: (TextSize, TextSize, TextSize), + __1: (TextSize, TextSize, TextSize), ) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action108( + __action117( mode, __temp0, __0, __1, - __2, ) } @@ -48665,25 +50079,23 @@ fn __action903< fn __action904< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Parameter + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action168( + __action118( mode, __temp0, __0, __1, - __2, ) } @@ -48692,19 +50104,19 @@ fn __action904< fn __action905< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, TextSize, TextSize), -) -> ast::Parameter +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action166( + __action119( mode, __temp0, __0, @@ -48717,29 +50129,23 @@ fn __action905< fn __action906< >( mode: Mode, - __0: (TextSize, core::option::Option, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, core::option::Option, TextSize), - __3: (TextSize, core::option::Option>, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Expr + __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> Result> { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action208( + __action120( mode, __temp0, __0, __1, - __2, - __3, - __4, ) } @@ -48748,19 +50154,19 @@ fn __action906< fn __action907< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action204( + __action129( mode, __temp0, __0, @@ -48773,25 +50179,23 @@ fn __action907< fn __action908< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action205( + __action130( mode, __temp0, __0, __1, - __2, ) } @@ -48800,25 +50204,23 @@ fn __action908< fn __action909< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), ) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action639( + __action131( mode, __temp0, __0, __1, - __2, ) } @@ -48827,23 +50229,21 @@ fn __action909< fn __action910< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr + __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), +) -> Result> { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action640( + __action132( mode, __temp0, __0, - __1, ) } @@ -48852,27 +50252,25 @@ fn __action910< fn __action911< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action496( + __action134( mode, __temp0, __0, __1, __2, - __3, ) } @@ -48881,27 +50279,29 @@ fn __action911< fn __action912< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action537( + __action659( mode, __temp0, __0, __1, __2, __3, + __4, ) } @@ -48910,31 +50310,27 @@ fn __action912< fn __action913< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action375( + __action660( mode, __temp0, __0, __1, __2, __3, - __4, - __5, ) } @@ -48943,23 +50339,23 @@ fn __action913< fn __action914< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), + __2: (TextSize, ast::Identifier, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), __5: (TextSize, TextSize, TextSize), -) -> ast::Expr +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action405( + __action661( mode, __temp0, __0, @@ -48977,24 +50373,28 @@ fn __action915< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Suite, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Mod + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1( + __action662( mode, __temp0, __0, __1, __2, + __3, + __4, ) } @@ -49004,26 +50404,34 @@ fn __action916< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Mod + __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Identifier, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action2( + __action663( mode, __temp0, __0, __1, __2, __3, + __4, + __5, + __6, + __7, ) } @@ -49033,23 +50441,23 @@ fn __action917< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, core::option::Option, TextSize), - __5: (TextSize, core::option::Option, TextSize), + __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Identifier, TextSize), + __5: (TextSize, token::Tok, TextSize), __6: (TextSize, TextSize, TextSize), -) -> ast::Stmt +) -> ast::Pattern { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action148( + __action664( mode, __temp0, __0, @@ -49068,23 +50476,137 @@ fn __action918< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, core::option::Option, TextSize), - __5: (TextSize, core::option::Option, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> ast::Stmt + __1: (TextSize, ast::Pattern, TextSize), + __2: (TextSize, core::option::Option, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Suite, TextSize), +) -> ast::MatchCase { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action149( + __action88( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action919< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action122( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action920< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action123( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action921< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action124( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action922< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action85( mode, __temp0, __0, @@ -49099,24 +50621,133 @@ fn __action918< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action919< +fn __action923< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, ast::Suite, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), ) -> ast::Stmt { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action150( + __action86( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action924< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action665( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action925< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action666( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action926< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, TextSize, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action182( mode, __temp0, __0, @@ -49128,22 +50759,103 @@ fn __action919< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action920< +fn __action927< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Stmt { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action162( + __action72( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action928< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action456( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action929< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action503( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action930< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action97( mode, __temp0, __0, @@ -49153,26 +50865,1209 @@ fn __action920< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action921< +fn __action931< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), + __0: (TextSize, alloc::vec::Vec, TextSize), __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, core::option::Option, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Stmt + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action163( + __action242( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action932< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action482( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action933< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action667( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action934< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action668( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action935< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action714( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action936< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action715( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action937< +>( + mode: Mode, + __0: (TextSize, (Option>, Vec, Option>), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action671( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action938< +>( + mode: Mode, + __0: (TextSize, (Option>, Vec, Option>), TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action672( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action939< +>( + mode: Mode, + __0: (TextSize, Option>, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action673( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action940< +>( + mode: Mode, + __0: (TextSize, Option>, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action674( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action941< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action675( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action942< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, core::option::Option<(Option>, Vec, Option>)>, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action676( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action943< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action719( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action944< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action720( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action945< +>( + mode: Mode, + __0: (TextSize, (Option>, Vec, Option>), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action679( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action946< +>( + mode: Mode, + __0: (TextSize, (Option>, Vec, Option>), TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action680( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action947< +>( + mode: Mode, + __0: (TextSize, Option>, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action681( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action948< +>( + mode: Mode, + __0: (TextSize, Option>, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Parameters +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action682( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action949< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action739( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action950< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action740( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action951< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action741( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action952< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action742( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action953< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action743( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action954< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action744( + mode, + __temp0, + __0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action955< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action745( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action956< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action746( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action957< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action735( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action958< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action736( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action959< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action737( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action960< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action738( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action961< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action166( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action962< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action24( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action963< +>( + mode: Mode, + __0: (TextSize, ast::Pattern, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action90( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action964< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action683( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action965< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action684( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action966< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action523( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action967< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action521( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action968< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action599( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action969< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action58( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action970< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, core::option::Option, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action59( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action971< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Pattern, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action105( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action972< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action106( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action973< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Pattern, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action107( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action974< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Pattern, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action685( mode, __temp0, __0, @@ -49186,7 +52081,854 @@ fn __action921< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action922< +fn __action975< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Pattern, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action686( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action976< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action109( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action977< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action488( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action978< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action490( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action979< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action541( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action980< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Expr, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> ast::Comprehension +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action709( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action981< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Comprehension +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action710( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action982< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), +) -> Option +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action211( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action983< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action223( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action984< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Identifier, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action110( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action985< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Parameter +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action170( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action986< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Parameter +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action168( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action987< +>( + mode: Mode, + __0: (TextSize, core::option::Option, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, core::option::Option, TextSize), + __3: (TextSize, core::option::Option>, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action210( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action988< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action206( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action989< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action207( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action990< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action689( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action991< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action690( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action992< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action509( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action993< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action511( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action994< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action593( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action995< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Expr, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action382( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action996< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Expr, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action414( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action997< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Suite, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Mod +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action998< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Mod +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action2( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action999< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, core::option::Option, TextSize), + __5: (TextSize, core::option::Option, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action150( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1000< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, core::option::Option, TextSize), + __5: (TextSize, core::option::Option, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action151( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1001< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action152( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1002< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action164( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1003< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, core::option::Option, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Expr, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action165( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1004< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -49196,61 +52938,7 @@ fn __action922< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action172( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action923< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Identifier, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::TypeParam -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action173( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action924< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Identifier, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::TypeParam -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -49267,83 +52955,23 @@ fn __action924< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action925< +fn __action1005< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::TypeParams -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action641( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action926< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::TypeParams -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action642( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action927< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, core::option::Option, TextSize), + __1: (TextSize, ast::Identifier, TextSize), __2: (TextSize, TextSize, TextSize), -) -> ast::ParameterWithDefault +) -> ast::TypeParam { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action167( + __action175( mode, __temp0, __0, @@ -49354,378 +52982,17 @@ fn __action927< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action928< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::ParameterWithDefault -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action165( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action929< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action123( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action930< +fn __action1006< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), - __4: (TextSize, core::option::Option, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action146( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action931< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::WithItem -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action297( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action932< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::WithItem -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action298( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action933< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::WithItem -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action299( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action934< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::WithItem -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action292( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action935< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::WithItem -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action293( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action936< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> Vec -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action160( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action937< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action661( - mode, - __temp0, - __0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action938< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action662( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action939< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action426( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action940< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> ast::Expr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action389( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action502( - mode, - __temp0, - __0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action941< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), + __1: (TextSize, ast::Identifier, TextSize), __2: (TextSize, TextSize, TextSize), -) -> ast::Expr +) -> ast::TypeParam { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, @@ -49742,7 +53009,511 @@ fn __action941< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action942< +fn __action1007< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::TypeParams +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action691( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1008< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::TypeParams +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action692( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1009< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::ParameterWithDefault +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action169( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1010< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::ParameterWithDefault +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action167( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1011< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action125( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1012< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Suite, TextSize), + __4: (TextSize, core::option::Option, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action148( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1013< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::WithItem +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action299( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1014< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::WithItem +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action300( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1015< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::WithItem +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action301( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1016< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::WithItem +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action294( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1017< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::WithItem +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action295( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1018< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> Vec +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action162( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1019< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action711( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1020< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action712( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1021< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action406( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1022< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action435( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1023< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action525( + mode, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1024< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Expr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action396( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action178( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1025< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -49753,13 +53524,13 @@ fn __action942< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action389( + let __temp0 = __action396( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action177( + __action179( mode, __temp0, __0, @@ -49769,2365 +53540,32 @@ fn __action942< ) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action943< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __4.2; - let __temp0 = __action870( - mode, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action414( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action944< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __3.2; - let __temp0 = __action871( - mode, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action414( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action945< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __5.2; - let __temp0 = __action872( - mode, - __1, - __2, - __3, - __4, - __5, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action414( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action946< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __4.2; - let __temp0 = __action873( - mode, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action414( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action947< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action874( - mode, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action414( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action948< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action875( - mode, - __1, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action414( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action949< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __3.2; - let __temp0 = __action876( - mode, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action414( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action950< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action877( - mode, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action414( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action951< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action870( - mode, - __0, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action858( - mode, - __temp0, - __4, - __5, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action952< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action871( - mode, - __0, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action858( - mode, - __temp0, - __3, - __4, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action953< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __4.2; - let __temp0 = __action872( - mode, - __0, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action858( - mode, - __temp0, - __5, - __6, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action954< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action873( - mode, - __0, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action858( - mode, - __temp0, - __4, - __5, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action955< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action874( - mode, - __0, - __1, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action858( - mode, - __temp0, - __2, - __3, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action956< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action875( - mode, - __0, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action858( - mode, - __temp0, - __1, - __2, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action957< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action876( - mode, - __0, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action858( - mode, - __temp0, - __3, - __4, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action958< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action877( - mode, - __0, - __1, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action858( - mode, - __temp0, - __2, - __3, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action959< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action870( - mode, - __0, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action859( - mode, - __temp0, - __4, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action960< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action871( - mode, - __0, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action859( - mode, - __temp0, - __3, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action961< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __4.2; - let __temp0 = __action872( - mode, - __0, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action859( - mode, - __temp0, - __5, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action962< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action873( - mode, - __0, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action859( - mode, - __temp0, - __4, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action963< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action874( - mode, - __0, - __1, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action859( - mode, - __temp0, - __2, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action964< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action875( - mode, - __0, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action859( - mode, - __temp0, - __1, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action965< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action876( - mode, - __0, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action859( - mode, - __temp0, - __3, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action966< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action877( - mode, - __0, - __1, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action859( - mode, - __temp0, - __2, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action967< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __4.2; - let __temp0 = __action943( - mode, - __0, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action412( - mode, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action968< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action944( - mode, - __0, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action412( - mode, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action969< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), -) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __5.2; - let __temp0 = __action945( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action412( - mode, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action970< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __4.2; - let __temp0 = __action946( - mode, - __0, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action412( - mode, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action971< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), -) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action947( - mode, - __0, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action412( - mode, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action972< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action948( - mode, - __0, - __1, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action412( - mode, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action973< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), -) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action949( - mode, - __0, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action412( - mode, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action974< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), -) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action950( - mode, - __0, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action412( - mode, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action975< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __5.2; - let __temp0 = __action967( - mode, - __1, - __2, - __3, - __4, - __5, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action854( - mode, - __0, - __temp0, - __6, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action976< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __4.2; - let __temp0 = __action968( - mode, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action854( - mode, - __0, - __temp0, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action977< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, Option>, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __6.2; - let __temp0 = __action969( - mode, - __1, - __2, - __3, - __4, - __5, - __6, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action854( - mode, - __0, - __temp0, - __7, - __8, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action978< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __5.2; - let __temp0 = __action970( - mode, - __1, - __2, - __3, - __4, - __5, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action854( - mode, - __0, - __temp0, - __6, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action979< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __3.2; - let __temp0 = __action971( - mode, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action854( - mode, - __0, - __temp0, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action980< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action972( - mode, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action854( - mode, - __0, - __temp0, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action981< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __4.2; - let __temp0 = __action973( - mode, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action854( - mode, - __0, - __temp0, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action982< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __3.2; - let __temp0 = __action974( - mode, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action854( - mode, - __0, - __temp0, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action983< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action413( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action854( - mode, - __0, - __temp0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action984< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __5.2; - let __temp0 = __action967( - mode, - __1, - __2, - __3, - __4, - __5, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action855( - mode, - __0, - __temp0, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action985< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __4.2; - let __temp0 = __action968( - mode, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action855( - mode, - __0, - __temp0, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action986< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, Option>, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __6.2; - let __temp0 = __action969( - mode, - __1, - __2, - __3, - __4, - __5, - __6, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action855( - mode, - __0, - __temp0, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action987< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __5.2; - let __temp0 = __action970( - mode, - __1, - __2, - __3, - __4, - __5, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action855( - mode, - __0, - __temp0, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action988< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __3.2; - let __temp0 = __action971( - mode, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action855( - mode, - __0, - __temp0, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action989< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action972( - mode, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action855( - mode, - __0, - __temp0, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action990< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __4.2; - let __temp0 = __action973( - mode, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action855( - mode, - __0, - __temp0, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action991< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __3.2; - let __temp0 = __action974( - mode, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - __action855( - mode, - __0, - __temp0, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action992< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action413( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action855( - mode, - __0, - __temp0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action993< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), -) -> Option> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action460( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action419( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action994< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), -) -> Option> -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action461( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action419( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action995< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action460( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action878( - mode, - __0, - __temp0, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action996< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action461( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action878( - mode, - __0, - __temp0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action997< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action460( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action879( - mode, - __0, - __temp0, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action998< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action461( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action879( - mode, - __0, - __temp0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action999< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action460( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action880( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1000< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action461( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action880( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1001< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action460( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action881( - mode, - __0, - __temp0, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1002< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action461( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action881( - mode, - __0, - __temp0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1003< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __4.2; - let __temp0 = __action995( - mode, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action422( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1004< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __3.2; - let __temp0 = __action996( - mode, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action422( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1005< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __5.2; - let __temp0 = __action997( - mode, - __1, - __2, - __3, - __4, - __5, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action422( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1006< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __4.2; - let __temp0 = __action998( - mode, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action422( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1007< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action999( - mode, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action422( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1008< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action1000( - mode, - __1, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action422( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1009< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __3.2; - let __temp0 = __action1001( - mode, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action422( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1010< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), -) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1002( - mode, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action422( - mode, - __0, - __temp0, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1011< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action995( - mode, - __0, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action866( - mode, - __temp0, - __4, - __5, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1012< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action996( - mode, - __0, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action866( - mode, - __temp0, - __3, - __4, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1013< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __4.2; - let __temp0 = __action997( - mode, - __0, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action866( - mode, - __temp0, - __5, - __6, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1014< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action998( - mode, - __0, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action866( - mode, - __temp0, - __4, - __5, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1015< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action999( - mode, - __0, - __1, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action866( - mode, - __temp0, - __2, - __3, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1016< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action1000( - mode, - __0, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action866( - mode, - __temp0, - __1, - __2, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1017< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action1001( - mode, - __0, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action866( - mode, - __temp0, - __3, - __4, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1018< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action1002( - mode, - __0, - __1, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action866( - mode, - __temp0, - __2, - __3, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1019< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action995( - mode, - __0, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action867( - mode, - __temp0, - __4, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1020< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action996( - mode, - __0, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action867( - mode, - __temp0, - __3, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1021< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __4.2; - let __temp0 = __action997( - mode, - __0, - __1, - __2, - __3, - __4, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action867( - mode, - __temp0, - __5, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1022< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action998( - mode, - __0, - __1, - __2, - __3, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action867( - mode, - __temp0, - __4, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1023< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action999( - mode, - __0, - __1, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action867( - mode, - __temp0, - __2, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1024< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action1000( - mode, - __0, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action867( - mode, - __temp0, - __1, - )) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1025< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action1001( - mode, - __0, - __1, - __2, - )?; - let __temp0 = (__start0, __temp0, __end0); - Ok(__action867( - mode, - __temp0, - __3, - )) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action1026< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> Result> + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> { - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action1002( + let __start0 = __1.0; + let __end0 = __4.2; + let __temp0 = __action949( mode, - __0, __1, + __2, + __3, + __4, )?; let __temp0 = (__start0, __temp0, __end0); - Ok(__action867( + Ok(__action423( mode, + __0, __temp0, - __2, )) } @@ -52138,24 +53576,22 @@ fn __action1027< mode: Mode, __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Parameter, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> { - let __start0 = __0.0; - let __end0 = __4.2; - let __temp0 = __action1003( + let __start0 = __1.0; + let __end0 = __3.2; + let __temp0 = __action950( mode, - __0, __1, __2, __3, - __4, )?; let __temp0 = (__start0, __temp0, __end0); - Ok(__action420( + Ok(__action423( mode, + __0, __temp0, )) } @@ -52167,22 +53603,26 @@ fn __action1028< mode: Mode, __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> + __2: (TextSize, ast::Parameter, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action1004( + let __start0 = __1.0; + let __end0 = __5.2; + let __temp0 = __action951( mode, - __0, __1, __2, __3, + __4, + __5, )?; let __temp0 = (__start0, __temp0, __end0); - Ok(__action420( + Ok(__action423( mode, + __0, __temp0, )) } @@ -52190,6 +53630,639 @@ fn __action1028< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action1029< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __4.2; + let __temp0 = __action952( + mode, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action423( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1030< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action953( + mode, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action423( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1031< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action954( + mode, + __1, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action423( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1032< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __3.2; + let __temp0 = __action955( + mode, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action423( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1033< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action956( + mode, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action423( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1034< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action949( + mode, + __0, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action937( + mode, + __temp0, + __4, + __5, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1035< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action950( + mode, + __0, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action937( + mode, + __temp0, + __3, + __4, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1036< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __4.2; + let __temp0 = __action951( + mode, + __0, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action937( + mode, + __temp0, + __5, + __6, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1037< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action952( + mode, + __0, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action937( + mode, + __temp0, + __4, + __5, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1038< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action953( + mode, + __0, + __1, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action937( + mode, + __temp0, + __2, + __3, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1039< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action954( + mode, + __0, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action937( + mode, + __temp0, + __1, + __2, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1040< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action955( + mode, + __0, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action937( + mode, + __temp0, + __3, + __4, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1041< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action956( + mode, + __0, + __1, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action937( + mode, + __temp0, + __2, + __3, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1042< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action949( + mode, + __0, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action938( + mode, + __temp0, + __4, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1043< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action950( + mode, + __0, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action938( + mode, + __temp0, + __3, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1044< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __4.2; + let __temp0 = __action951( + mode, + __0, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action938( + mode, + __temp0, + __5, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1045< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action952( + mode, + __0, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action938( + mode, + __temp0, + __4, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1046< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action953( + mode, + __0, + __1, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action938( + mode, + __temp0, + __2, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1047< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action954( + mode, + __0, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action938( + mode, + __temp0, + __1, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1048< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action955( + mode, + __0, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action938( + mode, + __temp0, + __3, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1049< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action956( + mode, + __0, + __1, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action938( + mode, + __temp0, + __2, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1050< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __4.2; + let __temp0 = __action1026( + mode, + __0, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action421( + mode, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1051< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), +) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action1027( + mode, + __0, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action421( + mode, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1052< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -52202,7 +54275,7 @@ fn __action1029< { let __start0 = __0.0; let __end0 = __5.2; - let __temp0 = __action1005( + let __temp0 = __action1028( mode, __0, __1, @@ -52212,7 +54285,7 @@ fn __action1029< __5, )?; let __temp0 = (__start0, __temp0, __end0); - Ok(__action420( + Ok(__action421( mode, __temp0, )) @@ -52220,7 +54293,7 @@ fn __action1029< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1030< +fn __action1053< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -52232,7 +54305,7 @@ fn __action1030< { let __start0 = __0.0; let __end0 = __4.2; - let __temp0 = __action1006( + let __temp0 = __action1029( mode, __0, __1, @@ -52241,7 +54314,7 @@ fn __action1030< __4, )?; let __temp0 = (__start0, __temp0, __end0); - Ok(__action420( + Ok(__action421( mode, __temp0, )) @@ -52249,7 +54322,7 @@ fn __action1030< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1031< +fn __action1054< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -52259,14 +54332,14 @@ fn __action1031< { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action1007( + let __temp0 = __action1030( mode, __0, __1, __2, )?; let __temp0 = (__start0, __temp0, __end0); - Ok(__action420( + Ok(__action421( mode, __temp0, )) @@ -52274,7 +54347,7 @@ fn __action1031< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1032< +fn __action1055< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -52283,13 +54356,13 @@ fn __action1032< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action1008( + let __temp0 = __action1031( mode, __0, __1, )?; let __temp0 = (__start0, __temp0, __end0); - Ok(__action420( + Ok(__action421( mode, __temp0, )) @@ -52297,7 +54370,7 @@ fn __action1032< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1033< +fn __action1056< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -52308,7 +54381,7 @@ fn __action1033< { let __start0 = __0.0; let __end0 = __3.2; - let __temp0 = __action1009( + let __temp0 = __action1032( mode, __0, __1, @@ -52316,7 +54389,7 @@ fn __action1033< __3, )?; let __temp0 = (__start0, __temp0, __end0); - Ok(__action420( + Ok(__action421( mode, __temp0, )) @@ -52324,7 +54397,7 @@ fn __action1033< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1034< +fn __action1057< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -52334,14 +54407,14 @@ fn __action1034< { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action1010( + let __temp0 = __action1033( mode, __0, __1, __2, )?; let __temp0 = (__start0, __temp0, __end0); - Ok(__action420( + Ok(__action421( mode, __temp0, )) @@ -52349,7 +54422,7 @@ fn __action1034< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1035< +fn __action1058< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52364,7 +54437,7 @@ fn __action1035< { let __start0 = __1.0; let __end0 = __5.2; - let __temp0 = __action1027( + let __temp0 = __action1050( mode, __1, __2, @@ -52373,7 +54446,7 @@ fn __action1035< __5, )?; let __temp0 = (__start0, __temp0, __end0); - __action862( + __action933( mode, __0, __temp0, @@ -52384,7 +54457,7 @@ fn __action1035< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1036< +fn __action1059< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52398,7 +54471,7 @@ fn __action1036< { let __start0 = __1.0; let __end0 = __4.2; - let __temp0 = __action1028( + let __temp0 = __action1051( mode, __1, __2, @@ -52406,7 +54479,7 @@ fn __action1036< __4, )?; let __temp0 = (__start0, __temp0, __end0); - __action862( + __action933( mode, __0, __temp0, @@ -52417,7 +54490,7 @@ fn __action1036< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1037< +fn __action1060< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52433,7 +54506,7 @@ fn __action1037< { let __start0 = __1.0; let __end0 = __6.2; - let __temp0 = __action1029( + let __temp0 = __action1052( mode, __1, __2, @@ -52443,7 +54516,7 @@ fn __action1037< __6, )?; let __temp0 = (__start0, __temp0, __end0); - __action862( + __action933( mode, __0, __temp0, @@ -52454,7 +54527,7 @@ fn __action1037< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1038< +fn __action1061< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52469,7 +54542,7 @@ fn __action1038< { let __start0 = __1.0; let __end0 = __5.2; - let __temp0 = __action1030( + let __temp0 = __action1053( mode, __1, __2, @@ -52478,7 +54551,7 @@ fn __action1038< __5, )?; let __temp0 = (__start0, __temp0, __end0); - __action862( + __action933( mode, __0, __temp0, @@ -52489,7 +54562,7 @@ fn __action1038< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1039< +fn __action1062< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52502,14 +54575,14 @@ fn __action1039< { let __start0 = __1.0; let __end0 = __3.2; - let __temp0 = __action1031( + let __temp0 = __action1054( mode, __1, __2, __3, )?; let __temp0 = (__start0, __temp0, __end0); - __action862( + __action933( mode, __0, __temp0, @@ -52520,7 +54593,7 @@ fn __action1039< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1040< +fn __action1063< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52532,13 +54605,13 @@ fn __action1040< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action1032( + let __temp0 = __action1055( mode, __1, __2, )?; let __temp0 = (__start0, __temp0, __end0); - __action862( + __action933( mode, __0, __temp0, @@ -52549,7 +54622,7 @@ fn __action1040< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1041< +fn __action1064< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52563,7 +54636,7 @@ fn __action1041< { let __start0 = __1.0; let __end0 = __4.2; - let __temp0 = __action1033( + let __temp0 = __action1056( mode, __1, __2, @@ -52571,7 +54644,7 @@ fn __action1041< __4, )?; let __temp0 = (__start0, __temp0, __end0); - __action862( + __action933( mode, __0, __temp0, @@ -52582,7 +54655,7 @@ fn __action1041< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1042< +fn __action1065< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52595,14 +54668,14 @@ fn __action1042< { let __start0 = __1.0; let __end0 = __3.2; - let __temp0 = __action1034( + let __temp0 = __action1057( mode, __1, __2, __3, )?; let __temp0 = (__start0, __temp0, __end0); - __action862( + __action933( mode, __0, __temp0, @@ -52613,7 +54686,7 @@ fn __action1042< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1043< +fn __action1066< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52623,13 +54696,13 @@ fn __action1043< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action421( + let __temp0 = __action422( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action862( + __action933( mode, __0, __temp0, @@ -52640,7 +54713,7 @@ fn __action1043< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1044< +fn __action1067< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52654,7 +54727,7 @@ fn __action1044< { let __start0 = __1.0; let __end0 = __5.2; - let __temp0 = __action1027( + let __temp0 = __action1050( mode, __1, __2, @@ -52663,7 +54736,7 @@ fn __action1044< __5, )?; let __temp0 = (__start0, __temp0, __end0); - __action863( + __action934( mode, __0, __temp0, @@ -52673,7 +54746,7 @@ fn __action1044< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1045< +fn __action1068< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52686,7 +54759,7 @@ fn __action1045< { let __start0 = __1.0; let __end0 = __4.2; - let __temp0 = __action1028( + let __temp0 = __action1051( mode, __1, __2, @@ -52694,7 +54767,7 @@ fn __action1045< __4, )?; let __temp0 = (__start0, __temp0, __end0); - __action863( + __action934( mode, __0, __temp0, @@ -52704,7 +54777,7 @@ fn __action1045< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1046< +fn __action1069< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52719,7 +54792,7 @@ fn __action1046< { let __start0 = __1.0; let __end0 = __6.2; - let __temp0 = __action1029( + let __temp0 = __action1052( mode, __1, __2, @@ -52729,7 +54802,7 @@ fn __action1046< __6, )?; let __temp0 = (__start0, __temp0, __end0); - __action863( + __action934( mode, __0, __temp0, @@ -52739,7 +54812,7 @@ fn __action1046< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1047< +fn __action1070< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52753,7 +54826,7 @@ fn __action1047< { let __start0 = __1.0; let __end0 = __5.2; - let __temp0 = __action1030( + let __temp0 = __action1053( mode, __1, __2, @@ -52762,7 +54835,7 @@ fn __action1047< __5, )?; let __temp0 = (__start0, __temp0, __end0); - __action863( + __action934( mode, __0, __temp0, @@ -52772,7 +54845,7 @@ fn __action1047< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1048< +fn __action1071< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52784,14 +54857,14 @@ fn __action1048< { let __start0 = __1.0; let __end0 = __3.2; - let __temp0 = __action1031( + let __temp0 = __action1054( mode, __1, __2, __3, )?; let __temp0 = (__start0, __temp0, __end0); - __action863( + __action934( mode, __0, __temp0, @@ -52801,7 +54874,7 @@ fn __action1048< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1049< +fn __action1072< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52812,13 +54885,13 @@ fn __action1049< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action1032( + let __temp0 = __action1055( mode, __1, __2, )?; let __temp0 = (__start0, __temp0, __end0); - __action863( + __action934( mode, __0, __temp0, @@ -52828,7 +54901,7 @@ fn __action1049< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1050< +fn __action1073< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52841,7 +54914,7 @@ fn __action1050< { let __start0 = __1.0; let __end0 = __4.2; - let __temp0 = __action1033( + let __temp0 = __action1056( mode, __1, __2, @@ -52849,7 +54922,7 @@ fn __action1050< __4, )?; let __temp0 = (__start0, __temp0, __end0); - __action863( + __action934( mode, __0, __temp0, @@ -52859,7 +54932,7 @@ fn __action1050< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1051< +fn __action1074< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52871,14 +54944,14 @@ fn __action1051< { let __start0 = __1.0; let __end0 = __3.2; - let __temp0 = __action1034( + let __temp0 = __action1057( mode, __1, __2, __3, )?; let __temp0 = (__start0, __temp0, __end0); - __action863( + __action934( mode, __0, __temp0, @@ -52888,7 +54961,7 @@ fn __action1051< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1052< +fn __action1075< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -52897,13 +54970,13 @@ fn __action1052< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action421( + let __temp0 = __action422( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action863( + __action934( mode, __0, __temp0, @@ -52913,7 +54986,1705 @@ fn __action1052< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1053< +fn __action1076< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), +) -> Option> +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action467( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action428( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1077< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> Option> +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action468( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action428( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1078< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action467( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action957( + mode, + __0, + __temp0, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1079< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action468( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action957( + mode, + __0, + __temp0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1080< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action467( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action958( + mode, + __0, + __temp0, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1081< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action468( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action958( + mode, + __0, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1082< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action467( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action959( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1083< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action468( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action959( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1084< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action467( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action960( + mode, + __0, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1085< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action468( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action960( + mode, + __0, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1086< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __4.2; + let __temp0 = __action1078( + mode, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action431( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1087< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __3.2; + let __temp0 = __action1079( + mode, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action431( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1088< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __5.2; + let __temp0 = __action1080( + mode, + __1, + __2, + __3, + __4, + __5, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action431( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1089< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __4.2; + let __temp0 = __action1081( + mode, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action431( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1090< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1082( + mode, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action431( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1091< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action1083( + mode, + __1, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action431( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1092< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __3.2; + let __temp0 = __action1084( + mode, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action431( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1093< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), +) -> Result<(Option>, Vec, Option>),__lalrpop_util::ParseError> +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1085( + mode, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action431( + mode, + __0, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1094< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action1078( + mode, + __0, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action945( + mode, + __temp0, + __4, + __5, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1095< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action1079( + mode, + __0, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action945( + mode, + __temp0, + __3, + __4, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1096< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __4.2; + let __temp0 = __action1080( + mode, + __0, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action945( + mode, + __temp0, + __5, + __6, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1097< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action1081( + mode, + __0, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action945( + mode, + __temp0, + __4, + __5, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1098< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action1082( + mode, + __0, + __1, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action945( + mode, + __temp0, + __2, + __3, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1099< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action1083( + mode, + __0, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action945( + mode, + __temp0, + __1, + __2, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1100< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action1084( + mode, + __0, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action945( + mode, + __temp0, + __3, + __4, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1101< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action1085( + mode, + __0, + __1, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action945( + mode, + __temp0, + __2, + __3, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1102< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action1078( + mode, + __0, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action946( + mode, + __temp0, + __4, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1103< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action1079( + mode, + __0, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action946( + mode, + __temp0, + __3, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1104< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __4.2; + let __temp0 = __action1080( + mode, + __0, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action946( + mode, + __temp0, + __5, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1105< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action1081( + mode, + __0, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action946( + mode, + __temp0, + __4, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1106< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action1082( + mode, + __0, + __1, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action946( + mode, + __temp0, + __2, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1107< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action1083( + mode, + __0, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action946( + mode, + __temp0, + __1, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1108< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action1084( + mode, + __0, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action946( + mode, + __temp0, + __3, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1109< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action1085( + mode, + __0, + __1, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action946( + mode, + __temp0, + __2, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1110< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __4.2; + let __temp0 = __action1086( + mode, + __0, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action429( + mode, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1111< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), +) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action1087( + mode, + __0, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action429( + mode, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1112< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), +) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __5.2; + let __temp0 = __action1088( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action429( + mode, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1113< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __4.2; + let __temp0 = __action1089( + mode, + __0, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action429( + mode, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1114< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), +) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action1090( + mode, + __0, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action429( + mode, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1115< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action1091( + mode, + __0, + __1, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action429( + mode, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1116< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Parameter, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), +) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action1092( + mode, + __0, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action429( + mode, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1117< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), +) -> Result>, Vec, Option>)>,__lalrpop_util::ParseError> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action1093( + mode, + __0, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + Ok(__action429( + mode, + __temp0, + )) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1118< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __5.2; + let __temp0 = __action1110( + mode, + __1, + __2, + __3, + __4, + __5, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action941( + mode, + __0, + __temp0, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1119< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __4.2; + let __temp0 = __action1111( + mode, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action941( + mode, + __0, + __temp0, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1120< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, Option>, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __6.2; + let __temp0 = __action1112( + mode, + __1, + __2, + __3, + __4, + __5, + __6, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action941( + mode, + __0, + __temp0, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1121< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __5.2; + let __temp0 = __action1113( + mode, + __1, + __2, + __3, + __4, + __5, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action941( + mode, + __0, + __temp0, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1122< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __3.2; + let __temp0 = __action1114( + mode, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action941( + mode, + __0, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1123< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1115( + mode, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action941( + mode, + __0, + __temp0, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1124< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __4.2; + let __temp0 = __action1116( + mode, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action941( + mode, + __0, + __temp0, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1125< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __3.2; + let __temp0 = __action1117( + mode, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action941( + mode, + __0, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1126< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action430( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action941( + mode, + __0, + __temp0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1127< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __5.2; + let __temp0 = __action1110( + mode, + __1, + __2, + __3, + __4, + __5, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action942( + mode, + __0, + __temp0, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1128< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __4.2; + let __temp0 = __action1111( + mode, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action942( + mode, + __0, + __temp0, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1129< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, Option>, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __6.2; + let __temp0 = __action1112( + mode, + __1, + __2, + __3, + __4, + __5, + __6, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action942( + mode, + __0, + __temp0, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1130< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __5.2; + let __temp0 = __action1113( + mode, + __1, + __2, + __3, + __4, + __5, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action942( + mode, + __0, + __temp0, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1131< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __3.2; + let __temp0 = __action1114( + mode, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action942( + mode, + __0, + __temp0, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1132< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1115( + mode, + __1, + __2, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action942( + mode, + __0, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1133< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __4.2; + let __temp0 = __action1116( + mode, + __1, + __2, + __3, + __4, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action942( + mode, + __0, + __temp0, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1134< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __3.2; + let __temp0 = __action1117( + mode, + __1, + __2, + __3, + )?; + let __temp0 = (__start0, __temp0, __end0); + __action942( + mode, + __0, + __temp0, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1135< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action430( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action942( + mode, + __0, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1136< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -52922,13 +56693,13 @@ fn __action1053< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action350( + let __temp0 = __action357( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action348( + __action355( mode, __temp0, ) @@ -52936,7 +56707,7 @@ fn __action1053< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1054< +fn __action1137< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -52948,13 +56719,13 @@ fn __action1054< { let __start0 = __2.0; let __end0 = __3.2; - let __temp0 = __action1053( + let __temp0 = __action1136( mode, __2, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action709( + __action761( mode, __0, __1, @@ -52965,7 +56736,7 @@ fn __action1054< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1055< +fn __action1138< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -52975,13 +56746,13 @@ fn __action1055< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action349( + let __temp0 = __action356( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action709( + __action761( mode, __0, __1, @@ -52992,7 +56763,7 @@ fn __action1055< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1056< +fn __action1139< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53001,13 +56772,13 @@ fn __action1056< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action543( + let __temp0 = __action587( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action549( + __action597( mode, __temp0, ) @@ -53015,7 +56786,7 @@ fn __action1056< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1057< +fn __action1140< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -53025,13 +56796,13 @@ fn __action1057< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action543( + let __temp0 = __action587( mode, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action550( + __action598( mode, __0, __temp0, @@ -53040,7 +56811,7 @@ fn __action1057< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1058< +fn __action1141< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53053,13 +56824,13 @@ fn __action1058< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action541( + let __temp0 = __action585( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action717( + __action769( mode, __0, __1, @@ -53073,7 +56844,7 @@ fn __action1058< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1059< +fn __action1142< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53087,12 +56858,12 @@ fn __action1059< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action542( + let __temp0 = __action586( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action717( + __action769( mode, __0, __1, @@ -53106,7 +56877,7 @@ fn __action1059< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1060< +fn __action1143< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53118,13 +56889,13 @@ fn __action1060< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action541( + let __temp0 = __action585( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action718( + __action770( mode, __0, __1, @@ -53137,7 +56908,7 @@ fn __action1060< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1061< +fn __action1144< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53150,12 +56921,12 @@ fn __action1061< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action542( + let __temp0 = __action586( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action718( + __action770( mode, __0, __1, @@ -53168,7 +56939,7 @@ fn __action1061< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1062< +fn __action1145< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53181,13 +56952,13 @@ fn __action1062< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action541( + let __temp0 = __action585( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action735( + __action789( mode, __0, __1, @@ -53201,7 +56972,7 @@ fn __action1062< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1063< +fn __action1146< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53215,12 +56986,12 @@ fn __action1063< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action542( + let __temp0 = __action586( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action735( + __action789( mode, __0, __1, @@ -53234,7 +57005,7 @@ fn __action1063< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1064< +fn __action1147< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53246,13 +57017,13 @@ fn __action1064< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action541( + let __temp0 = __action585( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action736( + __action790( mode, __0, __1, @@ -53265,7 +57036,7 @@ fn __action1064< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1065< +fn __action1148< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53278,12 +57049,12 @@ fn __action1065< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action542( + let __temp0 = __action586( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action736( + __action790( mode, __0, __1, @@ -53296,7 +57067,135 @@ fn __action1065< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1066< +fn __action1149< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action585( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action807( + mode, + __0, + __1, + __2, + __temp0, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1150< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action586( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action807( + mode, + __0, + __1, + __2, + __temp0, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1151< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __2.2; + let __end0 = __3.0; + let __temp0 = __action585( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action808( + mode, + __0, + __1, + __2, + __temp0, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1152< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action586( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action808( + mode, + __0, + __1, + __2, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1153< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53305,13 +57204,13 @@ fn __action1066< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action296( + let __temp0 = __action298( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action290( + __action292( mode, __temp0, ) @@ -53319,7 +57218,7 @@ fn __action1066< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1067< +fn __action1154< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -53329,13 +57228,13 @@ fn __action1067< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action296( + let __temp0 = __action298( mode, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action291( + __action293( mode, __0, __temp0, @@ -53344,7 +57243,7 @@ fn __action1067< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1068< +fn __action1155< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53356,13 +57255,13 @@ fn __action1068< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action294( + let __temp0 = __action296( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action645( + __action695( mode, __0, __1, @@ -53375,7 +57274,7 @@ fn __action1068< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1069< +fn __action1156< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53388,12 +57287,12 @@ fn __action1069< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action295( + let __temp0 = __action297( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action645( + __action695( mode, __0, __1, @@ -53406,7 +57305,7 @@ fn __action1069< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1070< +fn __action1157< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53417,13 +57316,13 @@ fn __action1070< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action294( + let __temp0 = __action296( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action646( + __action696( mode, __0, __1, @@ -53435,7 +57334,7 @@ fn __action1070< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1071< +fn __action1158< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53447,12 +57346,12 @@ fn __action1071< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action295( + let __temp0 = __action297( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action646( + __action696( mode, __0, __1, @@ -53464,7 +57363,7 @@ fn __action1071< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1072< +fn __action1159< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53473,13 +57372,13 @@ fn __action1072< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action283( + let __temp0 = __action285( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action281( + __action283( mode, __temp0, ) @@ -53487,7 +57386,7 @@ fn __action1072< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1073< +fn __action1160< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -53504,13 +57403,13 @@ fn __action1073< { let __start0 = __6.0; let __end0 = __7.2; - let __temp0 = __action1072( + let __temp0 = __action1159( mode, __6, __7, ); let __temp0 = (__start0, __temp0, __end0); - __action798( + __action876( mode, __0, __1, @@ -53526,7 +57425,7 @@ fn __action1073< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1074< +fn __action1161< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -53541,13 +57440,13 @@ fn __action1074< { let __start0 = __5.2; let __end0 = __6.0; - let __temp0 = __action282( + let __temp0 = __action284( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action798( + __action876( mode, __0, __1, @@ -53563,7 +57462,7 @@ fn __action1074< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1075< +fn __action1162< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -53579,13 +57478,13 @@ fn __action1075< { let __start0 = __5.0; let __end0 = __6.2; - let __temp0 = __action1072( + let __temp0 = __action1159( mode, __5, __6, ); let __temp0 = (__start0, __temp0, __end0); - __action799( + __action877( mode, __0, __1, @@ -53600,7 +57499,7 @@ fn __action1075< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1076< +fn __action1163< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -53614,13 +57513,13 @@ fn __action1076< { let __start0 = __4.2; let __end0 = __5.0; - let __temp0 = __action282( + let __temp0 = __action284( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action799( + __action877( mode, __0, __1, @@ -53635,7 +57534,7 @@ fn __action1076< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1077< +fn __action1164< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53644,13 +57543,13 @@ fn __action1077< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action355( + let __temp0 = __action362( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action353( + __action360( mode, __temp0, ) @@ -53658,7 +57557,7 @@ fn __action1077< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1078< +fn __action1165< >( mode: Mode, __0: (TextSize, alloc::vec::Vec<(token::Tok, ast::Identifier)>, TextSize), @@ -53668,13 +57567,13 @@ fn __action1078< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action355( + let __temp0 = __action362( mode, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action354( + __action361( mode, __0, __temp0, @@ -53683,7 +57582,7 @@ fn __action1078< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1079< +fn __action1166< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53692,13 +57591,13 @@ fn __action1079< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action273( + let __temp0 = __action275( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action271( + __action273( mode, __temp0, ) @@ -53706,7 +57605,7 @@ fn __action1079< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1080< +fn __action1167< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -53717,13 +57616,13 @@ fn __action1080< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action1079( + let __temp0 = __action1166( mode, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action780( + __action856( mode, __0, __temp0, @@ -53733,7 +57632,7 @@ fn __action1080< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1081< +fn __action1168< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -53742,13 +57641,13 @@ fn __action1081< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action272( + let __temp0 = __action274( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action780( + __action856( mode, __0, __temp0, @@ -53758,7 +57657,7 @@ fn __action1081< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1082< +fn __action1169< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -53769,13 +57668,13 @@ fn __action1082< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action1079( + let __temp0 = __action1166( mode, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action922( + __action1004( mode, __0, __temp0, @@ -53785,7 +57684,7 @@ fn __action1082< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1083< +fn __action1170< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -53794,13 +57693,13 @@ fn __action1083< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action272( + let __temp0 = __action274( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action922( + __action1004( mode, __0, __temp0, @@ -53810,7 +57709,7 @@ fn __action1083< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1084< +fn __action1171< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -53821,13 +57720,13 @@ fn __action1084< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action1079( + let __temp0 = __action1166( mode, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action927( + __action1009( mode, __0, __temp0, @@ -53837,7 +57736,7 @@ fn __action1084< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1085< +fn __action1172< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -53846,13 +57745,13 @@ fn __action1085< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action272( + let __temp0 = __action274( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action927( + __action1009( mode, __0, __temp0, @@ -53862,7 +57761,7 @@ fn __action1085< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1086< +fn __action1173< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53871,13 +57770,13 @@ fn __action1086< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action270( + let __temp0 = __action272( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action268( + __action270( mode, __temp0, ) @@ -53885,7 +57784,7 @@ fn __action1086< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1087< +fn __action1174< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -53896,13 +57795,13 @@ fn __action1087< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action1086( + let __temp0 = __action1173( mode, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action904( + __action985( mode, __0, __temp0, @@ -53912,7 +57811,7 @@ fn __action1087< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1088< +fn __action1175< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -53921,13 +57820,13 @@ fn __action1088< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action269( + let __temp0 = __action271( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action904( + __action985( mode, __0, __temp0, @@ -53937,7 +57836,7 @@ fn __action1088< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1089< +fn __action1176< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53945,12 +57844,12 @@ fn __action1089< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action387( + let __temp0 = __action352( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action390( + __action350( mode, __temp0, ) @@ -53958,7 +57857,7 @@ fn __action1089< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1090< +fn __action1177< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -53967,12 +57866,12 @@ fn __action1090< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action387( + let __temp0 = __action352( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action391( + __action351( mode, __0, __temp0, @@ -53981,7 +57880,51 @@ fn __action1090< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1091< +fn __action1178< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action394( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action397( + mode, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1179< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action394( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action398( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1180< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -53991,13 +57934,13 @@ fn __action1091< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action385( + let __temp0 = __action392( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action916( + __action998( mode, __0, __1, @@ -54008,7 +57951,7 @@ fn __action1091< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1092< +fn __action1181< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -54019,12 +57962,12 @@ fn __action1092< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action386( + let __temp0 = __action393( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action916( + __action998( mode, __0, __1, @@ -54035,7 +57978,7 @@ fn __action1092< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1093< +fn __action1182< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -54044,13 +57987,13 @@ fn __action1093< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action398( + let __temp0 = __action405( mode, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action396( + __action403( mode, __temp0, ) @@ -54058,7 +58001,7 @@ fn __action1093< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1094< +fn __action1183< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -54069,13 +58012,13 @@ fn __action1094< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action1093( + let __temp0 = __action1182( mode, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action811( + __action889( mode, __0, __temp0, @@ -54085,7 +58028,7 @@ fn __action1094< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1095< +fn __action1184< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -54094,13 +58037,13 @@ fn __action1095< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action397( + let __temp0 = __action404( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action811( + __action889( mode, __0, __temp0, @@ -54110,7 +58053,7 @@ fn __action1095< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1096< +fn __action1185< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -54121,13 +58064,13 @@ fn __action1096< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action1093( + let __temp0 = __action1182( mode, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action812( + __action890( mode, __0, __temp0, @@ -54137,7 +58080,7 @@ fn __action1096< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1097< +fn __action1186< >( mode: Mode, __0: (TextSize, ast::Identifier, TextSize), @@ -54146,13 +58089,13 @@ fn __action1097< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action397( + let __temp0 = __action404( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action812( + __action890( mode, __0, __temp0, @@ -54162,7 +58105,7 @@ fn __action1097< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1098< +fn __action1187< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -54172,14 +58115,14 @@ fn __action1098< { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action317( + let __temp0 = __action319( mode, __0, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action315( + __action317( mode, __temp0, ) @@ -54187,7 +58130,7 @@ fn __action1098< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1099< +fn __action1188< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -54204,14 +58147,14 @@ fn __action1099< { let __start0 = __7.0; let __end0 = __9.2; - let __temp0 = __action1098( + let __temp0 = __action1187( mode, __7, __8, __9, ); let __temp0 = (__start0, __temp0, __end0); - __action796( + __action874( mode, __0, __1, @@ -54226,7 +58169,7 @@ fn __action1099< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1100< +fn __action1189< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -54240,13 +58183,13 @@ fn __action1100< { let __start0 = __6.2; let __end0 = __6.2; - let __temp0 = __action316( + let __temp0 = __action318( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action796( + __action874( mode, __0, __1, @@ -54261,7 +58204,7 @@ fn __action1100< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1101< +fn __action1190< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -54277,14 +58220,14 @@ fn __action1101< { let __start0 = __6.0; let __end0 = __8.2; - let __temp0 = __action1098( + let __temp0 = __action1187( mode, __6, __7, __8, ); let __temp0 = (__start0, __temp0, __end0); - __action797( + __action875( mode, __0, __1, @@ -54298,7 +58241,7 @@ fn __action1101< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1102< +fn __action1191< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -54311,13 +58254,13 @@ fn __action1102< { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action316( + let __temp0 = __action318( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action797( + __action875( mode, __0, __1, @@ -54329,2601 +58272,40 @@ fn __action1102< ) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1103< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), - __7: (TextSize, core::option::Option, TextSize), - __8: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __4.0; - let __end0 = __6.2; - let __temp0 = __action1098( - mode, - __4, - __5, - __6, - ); - let __temp0 = (__start0, __temp0, __end0); - __action917( - mode, - __0, - __1, - __2, - __3, - __temp0, - __7, - __8, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1104< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, core::option::Option, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action316( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action917( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1105< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), - __7: (TextSize, core::option::Option, TextSize), - __8: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __4.0; - let __end0 = __6.2; - let __temp0 = __action1098( - mode, - __4, - __5, - __6, - ); - let __temp0 = (__start0, __temp0, __end0); - __action918( - mode, - __0, - __1, - __2, - __3, - __temp0, - __7, - __8, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1106< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, core::option::Option, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action316( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action918( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1107< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __4.0; - let __end0 = __6.2; - let __temp0 = __action1098( - mode, - __4, - __5, - __6, - ); - let __temp0 = (__start0, __temp0, __end0); - __action930( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1108< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action316( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action930( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1109< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), -) -> core::option::Option -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action310( - mode, - __0, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action308( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1110< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.0; - let __end0 = __5.2; - let __temp0 = __action310( - mode, - __3, - __4, - __5, - ); - let __temp0 = (__start0, __temp0, __end0); - __action919( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1111< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, token::Tok, TextSize), - __9: (TextSize, ast::Suite, TextSize), - __10: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __7.0; - let __end0 = __9.2; - let __temp0 = __action1109( - mode, - __7, - __8, - __9, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1103( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __temp0, - __10, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1112< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __6.2; - let __end0 = __7.0; - let __temp0 = __action309( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1103( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __temp0, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1113< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __4.0; - let __end0 = __6.2; - let __temp0 = __action1109( - mode, - __4, - __5, - __6, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1104( - mode, - __0, - __1, - __2, - __3, - __temp0, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1114< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action309( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1104( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1115< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, token::Tok, TextSize), - __9: (TextSize, ast::Suite, TextSize), - __10: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __7.0; - let __end0 = __9.2; - let __temp0 = __action1109( - mode, - __7, - __8, - __9, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1105( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __temp0, - __10, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1116< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __6.2; - let __end0 = __7.0; - let __temp0 = __action309( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1105( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __temp0, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1117< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __4.0; - let __end0 = __6.2; - let __temp0 = __action1109( - mode, - __4, - __5, - __6, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1106( - mode, - __0, - __1, - __2, - __3, - __temp0, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1118< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action309( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1106( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1119< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> core::option::Option -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action370( - mode, - __0, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action368( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1120< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __2.0; - let __end0 = __3.2; - let __temp0 = __action1119( - mode, - __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action890( - mode, - __0, - __1, - __temp0, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1121< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::Stmt -{ - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action369( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action890( - mode, - __0, - __1, - __temp0, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1122< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), -) -> alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)> -{ - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action697( - mode, - __0, - __1, - __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action403( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1123< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Suite, TextSize), -) -> alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)> -{ - let __start0 = __1.0; - let __end0 = __4.2; - let __temp0 = __action697( - mode, - __1, - __2, - __3, - __4, - ); - let __temp0 = (__start0, __temp0, __end0); - __action404( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1124< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), - __4: (TextSize, core::option::Option<(TextSize, ast::Suite)>, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action321( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action810( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1125< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), - __4: (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), - __5: (TextSize, core::option::Option<(TextSize, ast::Suite)>, TextSize), -) -> ast::Stmt -{ - let __start0 = __4.0; - let __end0 = __4.2; - let __temp0 = __action322( - mode, - __4, - ); - let __temp0 = (__start0, __temp0, __end0); - __action810( - mode, - __0, - __1, - __2, - __3, - __temp0, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1126< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), -) -> core::option::Option<(TextSize, ast::Suite)> -{ - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action698( - mode, - __0, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action318( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1127< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __4.0; - let __end0 = __6.2; - let __temp0 = __action1126( - mode, - __4, - __5, - __6, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1124( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1128< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action319( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1124( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1129< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), - __4: (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __5.0; - let __end0 = __7.2; - let __temp0 = __action1126( - mode, - __5, - __6, - __7, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1125( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1130< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), - __4: (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), -) -> ast::Stmt -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action319( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1125( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1131< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action432( - mode, - __0, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action430( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1132< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action432( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action431( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1133< ->( - mode: Mode, - __0: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action441( - mode, - __0, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action442( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1134< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), - __1: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action441( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action443( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1135< ->( - mode: Mode, - __0: (TextSize, core::option::Option<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), -) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action439( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action237( - mode, - __temp0, - __0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1136< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), - __1: (TextSize, core::option::Option<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), -) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action440( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action237( - mode, - __temp0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1137< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action446( - mode, - __0, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action444( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1138< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action446( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action445( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1139< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> core::option::Option> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action546( - mode, - __0, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action544( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1140< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1139( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1058( - mode, - __0, - __temp0, - __3, - __4, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1141< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action545( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1058( - mode, - __0, - __temp0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1142< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1139( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1059( - mode, - __0, - __temp0, - __3, - __4, - __5, - __6, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1143< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action545( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1059( - mode, - __0, - __temp0, - __1, - __2, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1144< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1139( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1060( - mode, - __0, - __temp0, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1145< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action545( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1060( - mode, - __0, - __temp0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1146< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1139( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1061( - mode, - __0, - __temp0, - __3, - __4, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1147< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action545( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1061( - mode, - __0, - __temp0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1148< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1139( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1062( - mode, - __0, - __temp0, - __3, - __4, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1149< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action545( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1062( - mode, - __0, - __temp0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1150< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1139( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1063( - mode, - __0, - __temp0, - __3, - __4, - __5, - __6, - __7, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1151< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action545( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1063( - mode, - __0, - __temp0, - __1, - __2, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1152< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1139( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1064( - mode, - __0, - __temp0, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1153< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action545( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1064( - mode, - __0, - __temp0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1154< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1139( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1065( - mode, - __0, - __temp0, - __3, - __4, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1155< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, TextSize, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action545( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1065( - mode, - __0, - __temp0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1156< ->( - mode: Mode, - __0: (TextSize, ast::Pattern, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action336( - mode, - __0, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action334( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1157< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Pattern, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action336( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action335( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1158< ->( - mode: Mode, - __0: (TextSize, core::option::Option, TextSize), -) -> Vec -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action401( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action333( - mode, - __temp0, - __0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1159< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, core::option::Option, TextSize), -) -> Vec -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action402( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action333( - mode, - __temp0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1160< ->( - mode: Mode, - __0: (TextSize, ast::Stmt, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action384( - mode, - __0, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action392( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1161< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> alloc::vec::Vec -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action384( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action393( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1162< ->( - mode: Mode, - __0: (TextSize, ast::Suite, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Suite -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action382( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action647( - mode, - __0, - __temp0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1163< ->( - mode: Mode, - __0: (TextSize, ast::Suite, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Stmt, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> ast::Suite -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action383( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action647( - mode, - __0, - __temp0, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1164< ->( - mode: Mode, - __0: (TextSize, ast::Suite, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Suite -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action382( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action648( - mode, - __0, - __temp0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1165< ->( - mode: Mode, - __0: (TextSize, ast::Suite, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Stmt, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Suite -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action383( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action648( - mode, - __0, - __temp0, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1166< ->( - mode: Mode, - __0: (TextSize, ast::Stmt, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action382( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action649( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1167< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action383( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action649( - mode, - __temp0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1168< ->( - mode: Mode, - __0: (TextSize, ast::Stmt, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action382( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action650( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1169< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action383( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action650( - mode, - __temp0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1170< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action382( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action651( - mode, - __0, - __temp0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1171< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Stmt, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action383( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action651( - mode, - __0, - __temp0, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1172< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action382( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action652( - mode, - __0, - __temp0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1173< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Stmt, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action383( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action652( - mode, - __0, - __temp0, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1174< ->( - mode: Mode, - __0: (TextSize, ast::Stmt, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Suite -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action382( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action653( - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1175< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Suite -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action383( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action653( - mode, - __temp0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1176< ->( - mode: Mode, - __0: (TextSize, ast::Stmt, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Suite -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action382( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action654( - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1177< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Stmt, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Suite -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action383( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action654( - mode, - __temp0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1178< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Identifier, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Suite, TextSize), -) -> ast::ExceptHandler -{ - let __start0 = __1.0; - let __end0 = __3.2; - let __temp0 = __action305( - mode, - __1, - __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action782( - mode, - __0, - __temp0, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1179< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Identifier, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::ExceptHandler -{ - let __start0 = __2.0; - let __end0 = __4.2; - let __temp0 = __action305( - mode, - __2, - __3, - __4, - ); - let __temp0 = (__start0, __temp0, __end0); - __action784( - mode, - __0, - __1, - __temp0, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1180< ->( - mode: Mode, - __0: (TextSize, (String, StringKind, bool), TextSize), -) -> (TextSize, (String, StringKind, bool), TextSize) -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action699( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1181< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action700( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1182< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action701( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1183< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action702( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1184< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action703( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1185< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action704( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1186< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action705( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1187< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action706( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1188< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action707( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1189< ->( - mode: Mode, - __0: (TextSize, ast::Pattern, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action708( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1190< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1054( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1191< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> ast::Stmt -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1055( - mode, - __0, - __1, - __temp0, - ) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action1192< >( mode: Mode, - __0: (TextSize, ast::Constant, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), + __7: (TextSize, core::option::Option, TextSize), + __8: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __4.0; + let __end0 = __6.2; + let __temp0 = __action1187( mode, - &__start0, - &__end0, + __4, + __5, + __6, ); let __temp0 = (__start0, __temp0, __end0); - __action711( + __action999( mode, __0, + __1, + __2, + __3, __temp0, + __7, + __8, ) } @@ -56932,21 +58314,31 @@ fn __action1192< fn __action1193< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, core::option::Option, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __4.0; + let __temp0 = __action318( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action712( + __action999( mode, __0, + __1, + __2, + __3, __temp0, + __4, + __5, ) } @@ -56956,24 +58348,34 @@ fn __action1194< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), + __7: (TextSize, core::option::Option, TextSize), + __8: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( + let __start0 = __4.0; + let __end0 = __6.2; + let __temp0 = __action1187( mode, - &__start0, - &__end0, + __4, + __5, + __6, ); let __temp0 = (__start0, __temp0, __end0); - __action713( + __action1000( mode, __0, __1, __2, + __3, __temp0, + __7, + __8, ) } @@ -56983,26 +58385,30 @@ fn __action1195< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, core::option::Option, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> ast::Stmt { let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __end0 = __4.0; + let __temp0 = __action318( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action714( + __action1000( mode, __0, __1, __2, __3, __temp0, + __4, + __5, ) } @@ -57012,20 +58418,24 @@ fn __action1196< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __3: (TextSize, ast::Suite, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __4.0; + let __end0 = __6.2; + let __temp0 = __action1187( mode, - &__start0, - &__end0, + __4, + __5, + __6, ); let __temp0 = (__start0, __temp0, __end0); - __action715( + __action1012( mode, __0, __1, @@ -57041,23 +58451,25 @@ fn __action1197< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __3: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action318( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action716( + __action1012( mode, __0, __1, __2, + __3, __temp0, ) } @@ -57068,29 +58480,21 @@ fn __action1198< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), +) -> core::option::Option { - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1140( + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action312( mode, __0, __1, __2, - __3, - __4, - __5, + ); + let __temp0 = (__start0, __temp0, __end0); + __action310( + mode, __temp0, ) } @@ -57101,25 +58505,27 @@ fn __action1199< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), __3: (TextSize, token::Tok, TextSize), -) -> Result> + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __3.0; + let __end0 = __5.2; + let __temp0 = __action312( mode, - &__start0, - &__end0, + __3, + __4, + __5, ); let __temp0 = (__start0, __temp0, __end0); - __action1141( + __action1001( mode, __0, __1, __2, - __3, __temp0, ) } @@ -57130,23 +58536,28 @@ fn __action1200< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> + __6: (TextSize, ast::Suite, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, token::Tok, TextSize), + __9: (TextSize, ast::Suite, TextSize), + __10: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action388( + let __start0 = __7.0; + let __end0 = __9.2; + let __temp0 = __action1198( mode, - &__start0, - &__end0, + __7, + __8, + __9, ); let __temp0 = (__start0, __temp0, __end0); - __action1142( + __action1192( mode, __0, __1, @@ -57156,6 +58567,7 @@ fn __action1200< __5, __6, __temp0, + __10, ) } @@ -57165,28 +58577,34 @@ fn __action1201< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), __4: (TextSize, token::Tok, TextSize), -) -> Result> + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( + let __start0 = __6.2; + let __end0 = __7.0; + let __temp0 = __action311( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1143( + __action1192( mode, __0, __1, __2, __3, __4, + __5, + __6, __temp0, + __7, ) } @@ -57196,28 +58614,32 @@ fn __action1202< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), __4: (TextSize, token::Tok, TextSize), -) -> Result> + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( + let __start0 = __4.0; + let __end0 = __6.2; + let __temp0 = __action1198( mode, - &__start0, - &__end0, + __4, + __5, + __6, ); let __temp0 = (__start0, __temp0, __end0); - __action1144( + __action1193( mode, __0, __1, __2, __3, - __4, __temp0, + __7, ) } @@ -57227,24 +58649,28 @@ fn __action1203< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __4.0; + let __temp0 = __action311( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1145( + __action1193( mode, __0, __1, __2, + __3, __temp0, + __4, ) } @@ -57254,22 +58680,28 @@ fn __action1204< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), __5: (TextSize, token::Tok, TextSize), -) -> Result> + __6: (TextSize, ast::Suite, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, token::Tok, TextSize), + __9: (TextSize, ast::Suite, TextSize), + __10: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action388( + let __start0 = __7.0; + let __end0 = __9.2; + let __temp0 = __action1198( mode, - &__start0, - &__end0, + __7, + __8, + __9, ); let __temp0 = (__start0, __temp0, __end0); - __action1146( + __action1194( mode, __0, __1, @@ -57277,7 +58709,9 @@ fn __action1204< __3, __4, __5, + __6, __temp0, + __10, ) } @@ -57287,26 +58721,34 @@ fn __action1205< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __6.2; + let __end0 = __7.0; + let __temp0 = __action311( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1147( + __action1194( mode, __0, __1, __2, __3, + __4, + __5, + __6, __temp0, + __7, ) } @@ -57317,21 +58759,31 @@ fn __action1206< mode: Mode, __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __start0 = __4.0; + let __end0 = __6.2; + let __temp0 = __action1198( mode, - &__start0, - &__end0, + __4, + __5, + __6, ); let __temp0 = (__start0, __temp0, __end0); - __action719( + __action1195( mode, __0, __1, + __2, + __3, __temp0, + __7, ) } @@ -57341,26 +58793,28 @@ fn __action1207< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Stmt { let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __end0 = __4.0; + let __temp0 = __action311( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action720( + __action1195( mode, __0, __1, __2, __3, __temp0, + __4, ) } @@ -57370,25 +58824,19 @@ fn __action1208< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> + __1: (TextSize, ast::Expr, TextSize), +) -> core::option::Option { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action721( + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action377( mode, __0, __1, - __2, - __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action375( + mode, __temp0, ) } @@ -57399,24 +58847,26 @@ fn __action1209< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, ast::Expr)>>, TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( + let __start0 = __2.0; + let __end0 = __3.2; + let __temp0 = __action1208( mode, - &__start0, - &__end0, + __2, + __3, ); let __temp0 = (__start0, __temp0, __end0); - __action722( + __action970( mode, __0, __1, - __2, __temp0, + __4, ) } @@ -57426,26 +58876,24 @@ fn __action1210< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, (ast::Expr, ast::Expr), TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::Stmt { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __1.2; + let __end0 = __2.0; + let __temp0 = __action376( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action723( + __action970( mode, __0, __1, - __2, - __3, __temp0, + __2, ) } @@ -57455,23 +58903,23 @@ fn __action1211< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __3: (TextSize, ast::Suite, TextSize), +) -> alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)> { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action724( + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action747( mode, __0, __1, __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action412( + mode, __temp0, ) } @@ -57481,26 +58929,26 @@ fn __action1211< fn __action1212< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, Vec, TextSize), + __0: (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), __3: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __4: (TextSize, ast::Suite, TextSize), +) -> alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __1.0; + let __end0 = __4.2; + let __temp0 = __action747( mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action725( - mode, - __0, __1, __2, __3, + __4, + ); + let __temp0 = (__start0, __temp0, __end0); + __action413( + mode, + __0, __temp0, ) } @@ -57511,20 +58959,28 @@ fn __action1213< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Suite, TextSize), + __4: (TextSize, core::option::Option<(TextSize, ast::Suite)>, TextSize), +) -> ast::Stmt { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __4.0; + let __temp0 = __action323( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action726( + __action888( mode, __0, + __1, + __2, + __3, __temp0, + __4, ) } @@ -57534,20 +58990,28 @@ fn __action1214< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Suite, TextSize), + __4: (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), + __5: (TextSize, core::option::Option<(TextSize, ast::Suite)>, TextSize), +) -> ast::Stmt { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __4.0; + let __end0 = __4.2; + let __temp0 = __action324( mode, - &__start0, - &__end0, + __4, ); let __temp0 = (__start0, __temp0, __end0); - __action727( + __action888( mode, __0, + __1, + __2, + __3, __temp0, + __5, ) } @@ -57557,19 +59021,21 @@ fn __action1215< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), +) -> core::option::Option<(TextSize, ast::Suite)> { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action728( + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action748( mode, __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action320( + mode, __temp0, ) } @@ -57580,19 +59046,29 @@ fn __action1216< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Suite, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __4.0; + let __end0 = __6.2; + let __temp0 = __action1215( mode, - &__start0, - &__end0, + __4, + __5, + __6, ); let __temp0 = (__start0, __temp0, __end0); - __action729( + __action1213( mode, __0, + __1, + __2, + __3, __temp0, ) } @@ -57602,20 +59078,26 @@ fn __action1216< fn __action1217< >( mode: Mode, - __0: (TextSize, ast::Constant, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action321( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action731( + __action1213( mode, __0, + __1, + __2, + __3, __temp0, ) } @@ -57625,20 +59107,32 @@ fn __action1217< fn __action1218< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Suite, TextSize), + __4: (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __5.0; + let __end0 = __7.2; + let __temp0 = __action1215( mode, - &__start0, - &__end0, + __5, + __6, + __7, ); let __temp0 = (__start0, __temp0, __end0); - __action732( + __action1214( mode, __0, + __1, + __2, + __3, + __4, __temp0, ) } @@ -57649,23 +59143,27 @@ fn __action1219< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __3: (TextSize, ast::Suite, TextSize), + __4: (TextSize, alloc::vec::Vec<(TextSize, ast::Expr, ast::Suite)>, TextSize), +) -> ast::Stmt { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action321( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action733( + __action1214( mode, __0, __1, __2, + __3, + __4, __temp0, ) } @@ -57675,26 +59173,20 @@ fn __action1219< fn __action1220< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action734( + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action441( mode, __0, __1, - __2, - __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action439( + mode, __temp0, ) } @@ -57704,30 +59196,22 @@ fn __action1220< fn __action1221< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> +) -> alloc::vec::Vec { - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action388( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action441( mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1148( - mode, - __0, __1, __2, - __3, - __4, - __5, + ); + let __temp0 = (__start0, __temp0, __end0); + __action440( + mode, + __0, __temp0, ) } @@ -57737,26 +59221,20 @@ fn __action1221< fn __action1222< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1149( + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action450( mode, __0, __1, - __2, - __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action451( + mode, __temp0, ) } @@ -57766,32 +59244,22 @@ fn __action1222< fn __action1223< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), + __0: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), + __1: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> +) -> alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> { - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action388( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action450( mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1150( - mode, - __0, __1, __2, - __3, - __4, - __5, - __6, + ); + let __temp0 = (__start0, __temp0, __end0); + __action452( + mode, + __0, __temp0, ) } @@ -57801,29 +59269,21 @@ fn __action1223< fn __action1224< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, core::option::Option<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), +) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> { - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action448( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1151( + __action239( mode, - __0, - __1, - __2, - __3, - __4, __temp0, + __0, ) } @@ -57832,29 +59292,21 @@ fn __action1224< fn __action1225< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), + __1: (TextSize, core::option::Option<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), +) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> { - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1152( + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action449( mode, __0, - __1, - __2, - __3, - __4, + ); + let __temp0 = (__start0, __temp0, __end0); + __action239( + mode, __temp0, + __1, ) } @@ -57863,24 +59315,20 @@ fn __action1225< fn __action1226< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1153( + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action455( mode, __0, __1, - __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action453( + mode, __temp0, ) } @@ -57890,30 +59338,22 @@ fn __action1226< fn __action1227< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> +) -> alloc::vec::Vec { - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action388( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action455( mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1154( - mode, - __0, __1, __2, - __3, - __4, - __5, + ); + let __temp0 = (__start0, __temp0, __end0); + __action454( + mode, + __0, __temp0, ) } @@ -57923,26 +59363,20 @@ fn __action1227< fn __action1228< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> core::option::Option> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1155( + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action590( mode, __0, __1, - __2, - __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action588( + mode, __temp0, ) } @@ -57953,22 +59387,30 @@ fn __action1229< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( mode, - &__start0, - &__end0, + __1, + __2, ); let __temp0 = (__start0, __temp0, __end0); - __action737( + __action1141( mode, __0, - __1, __temp0, + __3, + __4, + __5, + __6, ) } @@ -57979,25 +59421,27 @@ fn __action1230< mode: Mode, __0: (TextSize, token::Tok, TextSize), __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), __3: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __4: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action589( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action738( + __action1141( mode, __0, + __temp0, __1, __2, __3, - __temp0, + __4, ) } @@ -58007,26 +59451,32 @@ fn __action1231< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), ) -> Result> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action739( - mode, - __0, __1, __2, - __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1142( + mode, + __0, __temp0, + __3, + __4, + __5, + __6, + __7, ) } @@ -58036,24 +59486,30 @@ fn __action1232< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option>, ast::Expr)>>, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action589( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action740( + __action1142( mode, __0, + __temp0, __1, __2, - __temp0, + __3, + __4, + __5, ) } @@ -58063,26 +59519,28 @@ fn __action1233< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, (ast::Expr, ast::Expr), TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action741( - mode, - __0, __1, __2, - __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1143( + mode, + __0, __temp0, + __3, + __4, + __5, ) } @@ -58092,24 +59550,26 @@ fn __action1234< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __3: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action589( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action742( + __action1143( mode, __0, + __temp0, __1, __2, - __temp0, + __3, ) } @@ -58119,26 +59579,30 @@ fn __action1235< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action743( - mode, - __0, __1, __2, - __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1144( + mode, + __0, __temp0, + __3, + __4, + __5, + __6, ) } @@ -58148,20 +59612,28 @@ fn __action1236< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> { let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __end0 = __1.0; + let __temp0 = __action589( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action744( + __action1144( mode, __0, __temp0, + __1, + __2, + __3, + __4, ) } @@ -58171,20 +59643,30 @@ fn __action1237< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( mode, - &__start0, - &__end0, + __1, + __2, ); let __temp0 = (__start0, __temp0, __end0); - __action745( + __action1145( mode, __0, __temp0, + __3, + __4, + __5, + __6, ) } @@ -58194,20 +59676,28 @@ fn __action1238< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> { let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __end0 = __1.0; + let __temp0 = __action589( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action746( + __action1145( mode, __0, __temp0, + __1, + __2, + __3, + __4, ) } @@ -58217,20 +59707,32 @@ fn __action1239< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( mode, - &__start0, - &__end0, + __1, + __2, ); let __temp0 = (__start0, __temp0, __end0); - __action747( + __action1146( mode, __0, __temp0, + __3, + __4, + __5, + __6, + __7, ) } @@ -58239,23 +59741,31 @@ fn __action1239< fn __action1240< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Arguments, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action589( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action748( + __action1146( mode, __0, - __1, __temp0, + __1, + __2, + __3, + __4, + __5, ) } @@ -58264,27 +59774,29 @@ fn __action1240< fn __action1241< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action749( - mode, - __0, __1, __2, - __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1147( + mode, + __0, __temp0, + __3, + __4, + __5, ) } @@ -58293,14 +59805,1024 @@ fn __action1241< fn __action1242< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action589( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1147( + mode, + __0, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1243< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( + mode, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1148( + mode, + __0, + __temp0, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1244< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action589( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1148( + mode, + __0, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1245< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( + mode, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1149( + mode, + __0, + __temp0, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1246< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action589( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1149( + mode, + __0, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1247< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( + mode, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1150( + mode, + __0, + __temp0, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1248< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action589( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1150( + mode, + __0, + __temp0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1249< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( + mode, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1151( + mode, + __0, + __temp0, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1250< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action589( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1151( + mode, + __0, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1251< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1228( + mode, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1152( + mode, + __0, + __temp0, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1252< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, TextSize, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action589( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1152( + mode, + __0, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1253< +>( + mode: Mode, + __0: (TextSize, ast::Pattern, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), +) -> alloc::vec::Vec +{ + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action338( + mode, + __0, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action336( + mode, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1254< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Pattern, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action338( + mode, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action337( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1255< +>( + mode: Mode, + __0: (TextSize, core::option::Option, TextSize), +) -> Vec +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action410( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action335( + mode, + __temp0, + __0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1256< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, core::option::Option, TextSize), +) -> Vec +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action411( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action335( + mode, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1257< +>( + mode: Mode, + __0: (TextSize, ast::Stmt, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec +{ + let __start0 = __0.0; + let __end0 = __1.2; + let __temp0 = __action391( + mode, + __0, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action399( + mode, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1258< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> alloc::vec::Vec +{ + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action391( + mode, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action400( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1259< +>( + mode: Mode, + __0: (TextSize, ast::Suite, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action389( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action697( + mode, + __0, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1260< +>( + mode: Mode, + __0: (TextSize, ast::Suite, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Stmt, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action390( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action697( + mode, + __0, + __temp0, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1261< +>( + mode: Mode, + __0: (TextSize, ast::Suite, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action389( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action698( + mode, + __0, + __temp0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1262< +>( + mode: Mode, + __0: (TextSize, ast::Suite, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Stmt, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action390( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action698( + mode, + __0, + __temp0, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1263< +>( + mode: Mode, + __0: (TextSize, ast::Stmt, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action389( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action699( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1264< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action390( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action699( + mode, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1265< +>( + mode: Mode, + __0: (TextSize, ast::Stmt, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action389( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action700( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1266< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action390( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action700( + mode, + __temp0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1267< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action389( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action701( + mode, + __0, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1268< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Stmt, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action390( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action701( + mode, + __0, + __temp0, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1269< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action389( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action702( + mode, + __0, + __temp0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1270< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Stmt, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action390( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action702( + mode, + __0, + __temp0, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1271< +>( + mode: Mode, + __0: (TextSize, ast::Stmt, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action389( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action703( + mode, + __temp0, + __0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1272< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action390( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action703( + mode, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1273< +>( + mode: Mode, + __0: (TextSize, ast::Stmt, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action389( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action704( + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1274< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Stmt, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Suite +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action390( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action704( + mode, + __temp0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1275< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Identifier, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Suite, TextSize), +) -> ast::ExceptHandler +{ + let __start0 = __1.0; + let __end0 = __3.2; + let __temp0 = __action307( + mode, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action858( + mode, + __0, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1276< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Identifier, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), +) -> ast::ExceptHandler +{ + let __start0 = __2.0; + let __end0 = __4.2; + let __temp0 = __action307( + mode, + __2, + __3, + __4, + ); + let __temp0 = (__start0, __temp0, __end0); + __action860( + mode, + __0, + __1, + __temp0, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1277< +>( + mode: Mode, + __0: (TextSize, (String, StringKind, bool), TextSize), +) -> (TextSize, (String, StringKind, bool), TextSize) +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action749( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1278< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), ) -> ast::Expr { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, @@ -58317,16 +60839,17 @@ fn __action1242< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1243< +fn __action1279< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Arguments, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), ) -> ast::Expr { - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -58336,24 +60859,24 @@ fn __action1243< mode, __0, __1, + __2, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1244< +fn __action1280< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), ) -> ast::Expr { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -58364,24 +60887,23 @@ fn __action1244< __0, __1, __2, - __3, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1245< +fn __action1281< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), + __2: (TextSize, ast::Expr, TextSize), ) -> ast::Expr { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, @@ -58398,16 +60920,16 @@ fn __action1245< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1246< +fn __action1282< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), + __0: (TextSize, alloc::vec::Vec, TextSize), __1: (TextSize, ast::Expr, TextSize), ) -> ast::Expr { let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, @@ -58423,16 +60945,16 @@ fn __action1246< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1247< +fn __action1283< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), + __0: (TextSize, alloc::vec::Vec, TextSize), __1: (TextSize, ast::Expr, TextSize), ) -> ast::Expr { let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, @@ -58448,1005 +60970,27 @@ fn __action1247< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1248< +fn __action1284< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::Pattern + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); __action756( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1249< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action758( mode, __0, __1, __2, - __3, - __4, - __5, - __6, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1250< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action759( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1251< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action760( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1252< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action761( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1253< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action762( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1254< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action763( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1255< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action764( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1256< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action765( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1257< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action766( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1258< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action767( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1259< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action768( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1260< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action769( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1261< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action770( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1262< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action771( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1263< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), -) -> ast::Expr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action772( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1264< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), -) -> ast::Expr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action773( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1265< ->( - mode: Mode, - __0: (TextSize, ast::Constant, TextSize), -) -> ast::Expr -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action774( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1266< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action775( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1267< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Decorator -{ - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action776( - mode, - __0, - __1, - __temp0, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1268< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), -) -> ast::Stmt -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action777( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1269< ->( - mode: Mode, - __0: (TextSize, String, TextSize), -) -> ast::Identifier -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action778( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1270< ->( - mode: Mode, - __0: (TextSize, String, TextSize), - __1: (TextSize, alloc::vec::Vec<(token::Tok, ast::Identifier)>, TextSize), -) -> ast::Identifier -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action779( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1271< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Parameter -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1080( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1272< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::Parameter -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1081( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1273< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action785( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1274< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action786( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1275< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), -) -> ast::Stmt -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action787( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1276< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Stmt -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action788( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1277< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, core::option::Option, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action789( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1278< ->( - mode: Mode, - __0: (TextSize, ast::UnaryOp, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action790( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1279< ->( - mode: Mode, - __0: (TextSize, ast::UnaryOp, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action791( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1280< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action792( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1281< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action793( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1282< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), -) -> ast::Stmt -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action794( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1283< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action795( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1284< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, core::option::Option>, TextSize), -) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action800( - mode, - __0, - __1, __temp0, ) } @@ -59456,20 +61000,20 @@ fn __action1284< fn __action1285< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), __2: (TextSize, ast::Expr, TextSize), -) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) +) -> ast::Expr { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action801( + __action757( mode, __0, __1, @@ -59483,22 +61027,24 @@ fn __action1285< fn __action1286< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action802( + __action758( mode, __0, __1, + __2, __temp0, ) } @@ -59508,22 +61054,24 @@ fn __action1286< fn __action1287< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action803( + __action759( mode, __0, __1, + __2, __temp0, ) } @@ -59533,22 +61081,24 @@ fn __action1287< fn __action1288< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Pattern, TextSize), __1: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __2: (TextSize, ast::Identifier, TextSize), +) -> Result> { - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action804( + __action760( mode, __0, __1, + __2, __temp0, ) } @@ -59558,20 +61108,26 @@ fn __action1288< fn __action1289< >( mode: Mode, - __0: (TextSize, Vec, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), +) -> ast::Stmt { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action805( + __action1137( mode, __0, + __1, + __2, + __3, __temp0, ) } @@ -59581,19 +61137,19 @@ fn __action1289< fn __action1290< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Stmt { let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action806( + __action1138( mode, __0, __1, @@ -59606,18 +61162,18 @@ fn __action1290< fn __action1291< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Constant, TextSize), ) -> ast::Expr { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action807( + __action763( mode, __0, __temp0, @@ -59629,22 +61185,20 @@ fn __action1291< fn __action1292< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), -) -> ast::Stmt + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::Expr { - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action808( + __action764( mode, __0, - __1, __temp0, ) } @@ -59654,43 +61208,20 @@ fn __action1292< fn __action1293< >( mode: Mode, - __0: (TextSize, String, TextSize), -) -> ast::Identifier -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action809( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1294< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), -) -> ast::Alias + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1094( + __action765( mode, __0, __1, @@ -59701,23 +61232,58 @@ fn __action1294< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1295< +fn __action1294< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::Alias + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1095( + __action766( mode, __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1295< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action767( + mode, + __0, + __1, + __2, + __3, __temp0, ) } @@ -59727,20 +61293,20 @@ fn __action1295< fn __action1296< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), -) -> ast::Alias + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1096( + __action768( mode, __0, __1, @@ -59754,20 +61320,30 @@ fn __action1296< fn __action1297< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::Alias + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1097( + __action1229( mode, __0, + __1, + __2, + __3, + __4, + __5, __temp0, ) } @@ -59777,20 +61353,26 @@ fn __action1297< fn __action1298< >( mode: Mode, - __0: (TextSize, Vec, TextSize), -) -> Vec + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action813( + __action1230( mode, __0, + __1, + __2, + __3, __temp0, ) } @@ -59801,25 +61383,31 @@ fn __action1299< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Vec + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action814( + __action1231( mode, __0, __1, __2, __3, + __4, + __5, + __6, __temp0, ) } @@ -59830,23 +61418,27 @@ fn __action1300< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Vec + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action815( + __action1232( mode, __0, __1, __2, + __3, + __4, __temp0, ) } @@ -59857,19 +61449,27 @@ fn __action1301< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> Vec + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action816( + __action1233( mode, __0, + __1, + __2, + __3, + __4, __temp0, ) } @@ -59880,21 +61480,23 @@ fn __action1302< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), -) -> ast::Stmt + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action817( + __action1234( mode, __0, __1, + __2, __temp0, ) } @@ -59905,25 +61507,29 @@ fn __action1303< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, (Option, Option), TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Vec, TextSize), -) -> ast::Stmt + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action818( + __action1235( mode, __0, __1, __2, __3, + __4, + __5, __temp0, ) } @@ -59934,35 +61540,26 @@ fn __action1304< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), ) -> Result> { - let __start0 = __1.2; - let __end0 = __2.0; - let __start1 = __3.2; - let __end1 = __3.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - let __temp1 = __action388( - mode, - &__start1, - &__end1, - ); - let __temp1 = (__start1, __temp1, __end1); - __action819( + __action1236( mode, __0, __1, - __temp0, __2, __3, - __temp1, + __temp0, ) } @@ -59971,20 +61568,22 @@ fn __action1304< fn __action1305< >( mode: Mode, - __0: (TextSize, (MagicKind, String), TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Expr { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action820( + __action771( mode, __0, + __1, __temp0, ) } @@ -59994,20 +61593,26 @@ fn __action1305< fn __action1306< >( mode: Mode, - __0: (TextSize, (MagicKind, String), TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action821( + __action772( mode, __0, + __1, + __2, + __3, __temp0, ) } @@ -60018,19 +61623,25 @@ fn __action1307< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> ast::Pattern + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action822( + __action773( mode, __0, + __1, + __2, + __3, __temp0, ) } @@ -60041,19 +61652,23 @@ fn __action1308< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> ast::Pattern + __1: (TextSize, core::option::Option>, ast::Expr)>>, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action823( + __action774( mode, __0, + __1, + __2, __temp0, ) } @@ -60064,19 +61679,25 @@ fn __action1309< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), -) -> ast::Pattern + __1: (TextSize, (ast::Expr, ast::Expr), TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action824( + __action775( mode, __0, + __1, + __2, + __3, __temp0, ) } @@ -60086,20 +61707,24 @@ fn __action1309< fn __action1310< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), -) -> ast::Pattern + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action825( + __action776( mode, __0, + __1, + __2, __temp0, ) } @@ -60109,20 +61734,26 @@ fn __action1310< fn __action1311< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), -) -> ast::Pattern + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action826( + __action777( mode, __0, + __1, + __2, + __3, __temp0, ) } @@ -60132,18 +61763,18 @@ fn __action1311< fn __action1312< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action827( + __action778( mode, __0, __temp0, @@ -60160,13 +61791,13 @@ fn __action1313< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action828( + __action779( mode, __0, __temp0, @@ -60183,13 +61814,13 @@ fn __action1314< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action829( + __action780( mode, __0, __temp0, @@ -60206,13 +61837,13 @@ fn __action1315< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action830( + __action781( mode, __0, __temp0, @@ -60224,22 +61855,20 @@ fn __action1315< fn __action1316< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Pattern + __0: (TextSize, ast::Constant, TextSize), +) -> ast::Expr { - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action832( + __action783( mode, __0, - __1, __temp0, ) } @@ -60249,26 +61878,20 @@ fn __action1316< fn __action1317< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Pattern + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::Expr { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action833( + __action784( mode, __0, - __1, - __2, - __3, __temp0, ) } @@ -60279,19 +61902,19 @@ fn __action1318< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __1: (TextSize, core::option::Option>, TextSize), __2: (TextSize, token::Tok, TextSize), -) -> ast::Pattern +) -> ast::Expr { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action834( + __action785( mode, __0, __1, @@ -60306,27 +61929,25 @@ fn __action1319< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> ast::Pattern +) -> ast::Expr { - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action835( + __action786( mode, __0, __1, __2, __3, - __4, __temp0, ) } @@ -60337,20 +61958,20 @@ fn __action1320< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), __3: (TextSize, token::Tok, TextSize), -) -> ast::Pattern +) -> ast::Expr { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action836( + __action787( mode, __0, __1, @@ -60366,31 +61987,23 @@ fn __action1321< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Identifier, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> ast::Pattern +) -> ast::Expr { - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action837( + __action788( mode, __0, __1, __2, - __3, - __4, - __5, - __6, __temp0, ) } @@ -60401,22 +62014,22 @@ fn __action1322< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), __5: (TextSize, token::Tok, TextSize), -) -> ast::Pattern +) -> Result> { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action838( + __action1237( mode, __0, __1, @@ -60433,20 +62046,26 @@ fn __action1322< fn __action1323< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action840( + __action1238( mode, __0, + __1, + __2, + __3, __temp0, ) } @@ -60454,6 +62073,1170 @@ fn __action1323< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action1324< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1239( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1325< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1240( + mode, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1326< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1241( + mode, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1327< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1242( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1328< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1243( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1329< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1244( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1330< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action791( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1331< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action792( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1332< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action793( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1333< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, ast::Expr)>>, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action794( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1334< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, (ast::Expr, ast::Expr), TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action795( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1335< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action796( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1336< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action797( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1337< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action798( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1338< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action799( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1339< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action800( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1340< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action801( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1341< +>( + mode: Mode, + __0: (TextSize, ast::Constant, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action803( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1342< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action804( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1343< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action805( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1344< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action806( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1345< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1245( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1346< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1246( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1347< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1247( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1348< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1248( + mode, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1349< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1249( + mode, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1350< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1250( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1351< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1251( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1352< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1252( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1353< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action809( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1354< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action810( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1355< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action811( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1356< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option>, ast::Expr)>>, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action812( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1357< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, (ast::Expr, ast::Expr), TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action813( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1358< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action814( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1359< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action815( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1360< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action816( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1361< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action817( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1362< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action818( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1363< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action819( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1364< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Arguments, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action820( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1365< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action821( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1366< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -60463,7 +63246,513 @@ fn __action1324< { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action388( + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action822( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1367< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Arguments, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action823( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1368< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action824( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1369< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action825( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1370< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Arguments, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action826( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1371< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action827( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1372< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action828( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1373< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action829( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1374< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action830( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1375< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action831( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1376< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action832( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1377< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action834( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1378< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action835( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1379< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action836( + mode, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1380< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action837( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1381< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action838( + mode, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1382< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action839( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1383< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action840( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1384< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -60474,23 +63763,30 @@ fn __action1324< __0, __1, __2, + __3, + __4, + __5, + __6, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1325< +fn __action1385< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), -) -> ast::Expr + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> ast::Pattern { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -60501,23 +63797,146 @@ fn __action1325< __0, __1, __2, + __3, + __4, + __5, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1326< +fn __action1386< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> ast::Pattern { - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action388( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action843( + mode, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1387< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action844( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1388< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action845( + mode, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1389< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Vec<(ast::Identifier, ast::Pattern)>, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action846( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1390< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -60526,24 +63945,24 @@ fn __action1326< __action847( mode, __0, - __temp0, __1, __2, + __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1327< +fn __action1391< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), -) -> ast::Stmt + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), +) -> ast::Expr { let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, @@ -60559,16 +63978,16 @@ fn __action1327< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1328< +fn __action1392< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), ) -> ast::Expr { let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, @@ -60584,7 +64003,30 @@ fn __action1328< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1329< +fn __action1393< +>( + mode: Mode, + __0: (TextSize, ast::Constant, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action850( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1394< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -60593,13 +64035,13 @@ fn __action1329< { let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action850( + __action851( mode, __0, __1, @@ -60609,39 +64051,17 @@ fn __action1329< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1330< +fn __action1395< >( mode: Mode, - __0: (TextSize, Vec, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action851( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1331< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, ast::Expr, TextSize), -) -> ast::Expr + __2: (TextSize, token::Tok, TextSize), +) -> ast::Decorator { let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __end0 = __2.0; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -60652,21 +64072,22 @@ fn __action1331< __0, __1, __temp0, + __2, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1332< +fn __action1396< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> ast::Expr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), +) -> ast::Stmt { let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, @@ -60682,23 +64103,71 @@ fn __action1332< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1333< +fn __action1397< >( mode: Mode, - __0: (TextSize, ast::ParameterWithDefault, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::ParameterWithDefault + __0: (TextSize, String, TextSize), +) -> ast::Identifier { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action470( + __action854( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1398< +>( + mode: Mode, + __0: (TextSize, String, TextSize), + __1: (TextSize, alloc::vec::Vec<(token::Tok, ast::Identifier)>, TextSize), +) -> ast::Identifier +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action855( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1399< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Parameter +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1167( mode, __0, __1, @@ -60709,23 +64178,46 @@ fn __action1333< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1334< +fn __action1400< >( mode: Mode, - __0: (TextSize, ast::ParameterWithDefault, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::ParameterWithDefault + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::Parameter { - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action459( + __action1168( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1401< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action861( mode, __0, __1, @@ -60736,27 +64228,1290 @@ fn __action1334< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1335< +fn __action1402< >( mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action862( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1403< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action863( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1404< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), +) -> ast::Stmt +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action864( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1405< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Stmt +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action865( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1406< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, core::option::Option, TextSize), +) -> ast::Stmt +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action866( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1407< +>( + mode: Mode, + __0: (TextSize, ast::UnaryOp, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action867( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1408< +>( + mode: Mode, + __0: (TextSize, ast::UnaryOp, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action868( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1409< +>( + mode: Mode, + __0: (TextSize, ast::UnaryOp, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action869( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1410< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action870( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1411< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action871( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1412< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), +) -> ast::Stmt +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action872( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1413< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action873( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1414< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, core::option::Option>, TextSize), +) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action878( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1415< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action879( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1416< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action880( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1417< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action881( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1418< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action882( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1419< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action883( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1420< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action884( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1421< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action885( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1422< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), +) -> ast::Stmt +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action886( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1423< +>( + mode: Mode, + __0: (TextSize, String, TextSize), +) -> ast::Identifier +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action887( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1424< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), +) -> ast::Alias +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1183( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1425< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::Alias +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1184( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1426< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), +) -> ast::Alias +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1185( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1427< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::Alias +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1186( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1428< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), +) -> Vec +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action891( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1429< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action892( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1430< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action893( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1431< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> Vec +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action894( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1432< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), +) -> ast::Stmt +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action895( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1433< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, (Option, Option), TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Vec, TextSize), +) -> ast::Stmt +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action896( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1434< +>( + mode: Mode, + __0: (TextSize, (IpyEscapeKind, String), TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action897( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1435< +>( + mode: Mode, + __0: (TextSize, (IpyEscapeKind, String), TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action898( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1436< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action899( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1437< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), +) -> Result> +{ + let __start0 = __1.2; + let __end0 = __2.0; + let __start1 = __3.2; + let __end1 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + let __temp1 = __action395( + mode, + &__start1, + &__end1, + ); + let __temp1 = (__start1, __temp1, __end1); + __action900( + mode, + __0, + __1, + __temp0, + __2, + __3, + __temp1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1438< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action901( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1439< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action902( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1440< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action903( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1441< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action904( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1442< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action905( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1443< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action906( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1444< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action907( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1445< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action908( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1446< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action909( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1447< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action911( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1448< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action912( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1449< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action913( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1450< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, token::Tok, TextSize), __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), +) -> ast::Pattern +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action914( + mode, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1451< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Pattern +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action915( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1452< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Identifier, TextSize), + __5: (TextSize, token::Tok, TextSize), __6: (TextSize, token::Tok, TextSize), -) -> Result> +) -> ast::Pattern { let __start0 = __6.2; let __end0 = __6.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action975( + __action916( mode, __0, __1, @@ -60771,26 +65526,26 @@ fn __action1335< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1336< +fn __action1453< >( mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec<(ast::Expr, ast::Pattern)>, TextSize), __2: (TextSize, token::Tok, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), + __4: (TextSize, ast::Identifier, TextSize), __5: (TextSize, token::Tok, TextSize), -) -> Result> +) -> ast::Pattern { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action976( + __action917( mode, __0, __1, @@ -60804,7 +65559,381 @@ fn __action1336< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1337< +fn __action1454< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action919( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1455< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action920( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1456< +>( + mode: Mode, + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), +) -> ast::Expr +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action921( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1457< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action926( + mode, + __0, + __temp0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1458< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), +) -> ast::Stmt +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action927( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1459< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action928( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1460< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action929( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1461< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), +) -> ast::Pattern +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action930( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1462< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action931( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1463< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Expr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action932( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1464< +>( + mode: Mode, + __0: (TextSize, ast::ParameterWithDefault, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::ParameterWithDefault +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action477( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1465< +>( + mode: Mode, + __0: (TextSize, ast::ParameterWithDefault, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::ParameterWithDefault +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action466( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1466< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1058( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1467< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1059( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1468< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -60819,13 +65948,13 @@ fn __action1337< { let __start0 = __7.2; let __end0 = __7.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action977( + __action1060( mode, __0, __1, @@ -60841,7 +65970,7 @@ fn __action1337< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1338< +fn __action1469< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -60855,13 +65984,13 @@ fn __action1338< { let __start0 = __6.2; let __end0 = __6.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action978( + __action1061( mode, __0, __1, @@ -60876,7 +66005,7 @@ fn __action1338< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1339< +fn __action1470< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -60888,13 +66017,13 @@ fn __action1339< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action979( + __action1062( mode, __0, __1, @@ -60907,7 +66036,7 @@ fn __action1339< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1340< +fn __action1471< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -60918,13 +66047,13 @@ fn __action1340< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action980( + __action1063( mode, __0, __1, @@ -60936,7 +66065,7 @@ fn __action1340< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1341< +fn __action1472< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -60949,13 +66078,13 @@ fn __action1341< { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action981( + __action1064( mode, __0, __1, @@ -60969,7 +66098,7 @@ fn __action1341< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1342< +fn __action1473< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -60981,13 +66110,13 @@ fn __action1342< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action982( + __action1065( mode, __0, __1, @@ -61000,7 +66129,7 @@ fn __action1342< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1343< +fn __action1474< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61009,13 +66138,13 @@ fn __action1343< { let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action983( + __action1066( mode, __0, __1, @@ -61025,7 +66154,7 @@ fn __action1343< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1344< +fn __action1475< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61038,13 +66167,13 @@ fn __action1344< { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action984( + __action1067( mode, __0, __1, @@ -61058,7 +66187,7 @@ fn __action1344< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1345< +fn __action1476< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61070,13 +66199,13 @@ fn __action1345< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action985( + __action1068( mode, __0, __1, @@ -61089,7 +66218,7 @@ fn __action1345< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1346< +fn __action1477< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61103,13 +66232,13 @@ fn __action1346< { let __start0 = __6.2; let __end0 = __6.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action986( + __action1069( mode, __0, __1, @@ -61124,7 +66253,7 @@ fn __action1346< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1347< +fn __action1478< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61137,13 +66266,13 @@ fn __action1347< { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action987( + __action1070( mode, __0, __1, @@ -61157,7 +66286,7 @@ fn __action1347< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1348< +fn __action1479< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61168,13 +66297,13 @@ fn __action1348< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action988( + __action1071( mode, __0, __1, @@ -61186,7 +66315,7 @@ fn __action1348< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1349< +fn __action1480< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61196,13 +66325,13 @@ fn __action1349< { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action989( + __action1072( mode, __0, __1, @@ -61213,7 +66342,7 @@ fn __action1349< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1350< +fn __action1481< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61225,13 +66354,13 @@ fn __action1350< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action990( + __action1073( mode, __0, __1, @@ -61244,7 +66373,7 @@ fn __action1350< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1351< +fn __action1482< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61255,13 +66384,13 @@ fn __action1351< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action991( + __action1074( mode, __0, __1, @@ -61273,7 +66402,7 @@ fn __action1351< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1352< +fn __action1483< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61281,13 +66410,13 @@ fn __action1352< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action992( + __action1075( mode, __0, __temp0, @@ -61296,7 +66425,7 @@ fn __action1352< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1353< +fn __action1484< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61307,13 +66436,13 @@ fn __action1353< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action856( + __action935( mode, __0, __1, @@ -61325,7 +66454,7 @@ fn __action1353< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1354< +fn __action1485< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -61335,13 +66464,13 @@ fn __action1354< { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action857( + __action936( mode, __0, __1, @@ -61352,7 +66481,7 @@ fn __action1354< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1355< +fn __action1486< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -61364,13 +66493,13 @@ fn __action1355< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action951( + __action1034( mode, __0, __1, @@ -61383,7 +66512,7 @@ fn __action1355< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1356< +fn __action1487< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -61394,475 +66523,7 @@ fn __action1356< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action952( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1357< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action953( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1358< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action954( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1359< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action955( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1360< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action956( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1361< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action957( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1362< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action958( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1363< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result> -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action959( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1364< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action960( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1365< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result> -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action961( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1366< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result> -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action962( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1367< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), -) -> Result> -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action963( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1368< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action964( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1369< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action965( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1370< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action966( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1371< ->( - mode: Mode, - __0: (TextSize, Option>, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Parameters -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action860( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1372< ->( - mode: Mode, - __0: (TextSize, Option>, TextSize), -) -> ast::Parameters -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action861( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1373< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, @@ -61874,21 +66535,18 @@ fn __action1373< __1, __2, __3, - __4, - __5, - __6, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1374< +fn __action1488< >( mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), __3: (TextSize, token::Tok, TextSize), __4: (TextSize, Option>, TextSize), __5: (TextSize, token::Tok, TextSize), @@ -61896,7 +66554,7 @@ fn __action1374< { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, @@ -61916,22 +66574,19 @@ fn __action1374< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1375< +fn __action1489< >( mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, Option>, TextSize), - __7: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), + __4: (TextSize, token::Tok, TextSize), ) -> Result> { - let __start0 = __7.2; - let __end0 = __7.2; - let __temp0 = __action388( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -61944,30 +66599,23 @@ fn __action1375< __2, __3, __4, - __5, - __6, - __7, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1376< +fn __action1490< >( mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), - __6: (TextSize, token::Tok, TextSize), ) -> Result> { - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -61978,29 +66626,22 @@ fn __action1376< __0, __1, __2, - __3, - __4, - __5, - __6, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1377< +fn __action1491< >( mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, token::Tok, TextSize), ) -> Result> { - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -62010,27 +66651,24 @@ fn __action1377< mode, __0, __1, - __2, - __3, - __4, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1378< +fn __action1492< >( mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), __3: (TextSize, token::Tok, TextSize), ) -> Result> { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, @@ -62048,20 +66686,17 @@ fn __action1378< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1379< +fn __action1493< >( mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), ) -> Result> { - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -62072,28 +66707,24 @@ fn __action1379< __0, __1, __2, - __3, - __4, - __5, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1380< +fn __action1494< >( mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), ) -> Result> { - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -62105,23 +66736,23 @@ fn __action1380< __1, __2, __3, - __4, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1381< +fn __action1495< >( mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), ) -> Result> { - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -62131,26 +66762,26 @@ fn __action1381< mode, __0, __1, + __2, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1382< +fn __action1496< >( mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), ) -> Result> { - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action388( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( mode, &__start0, &__end0, @@ -62163,14 +66794,225 @@ fn __action1382< __2, __3, __4, - __5, __temp0, ) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1383< +fn __action1497< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1045( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1498< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), +) -> Result> +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1046( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1499< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1047( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1500< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1048( + mode, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1501< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1049( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1502< +>( + mode: Mode, + __0: (TextSize, Option>, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Parameters +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action939( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1503< +>( + mode: Mode, + __0: (TextSize, Option>, TextSize), +) -> ast::Parameters +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action940( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1504< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1118( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1505< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -62178,17 +67020,122 @@ fn __action1383< __2: (TextSize, token::Tok, TextSize), __3: (TextSize, token::Tok, TextSize), __4: (TextSize, Option>, TextSize), + __5: (TextSize, token::Tok, TextSize), ) -> Result> { - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1045( + __action1119( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1506< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, Option>, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __7.2; + let __end0 = __7.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1120( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1507< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1121( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1508< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1122( mode, __0, __1, @@ -62201,7 +67148,189 @@ fn __action1383< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1384< +fn __action1509< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1123( + mode, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1510< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1124( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1511< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1125( + mode, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1512< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1126( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1513< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1127( + mode, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1514< +>( + mode: Mode, + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1128( + mode, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1515< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -62215,13 +67344,13 @@ fn __action1384< { let __start0 = __6.2; let __end0 = __6.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1046( + __action1129( mode, __0, __1, @@ -62236,7 +67365,7 @@ fn __action1384< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1385< +fn __action1516< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -62249,13 +67378,13 @@ fn __action1385< { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1047( + __action1130( mode, __0, __1, @@ -62269,7 +67398,7 @@ fn __action1385< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1386< +fn __action1517< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -62280,13 +67409,13 @@ fn __action1386< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1048( + __action1131( mode, __0, __1, @@ -62298,7 +67427,7 @@ fn __action1386< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1387< +fn __action1518< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -62308,13 +67437,13 @@ fn __action1387< { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1049( + __action1132( mode, __0, __1, @@ -62325,7 +67454,7 @@ fn __action1387< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1388< +fn __action1519< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -62337,13 +67466,13 @@ fn __action1388< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1050( + __action1133( mode, __0, __1, @@ -62356,7 +67485,7 @@ fn __action1388< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1389< +fn __action1520< >( mode: Mode, __0: (TextSize, (Vec, Vec), TextSize), @@ -62367,13 +67496,13 @@ fn __action1389< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action388( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1051( + __action1134( mode, __0, __1, @@ -62383,3531 +67512,26 @@ fn __action1389< ) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1390< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1052( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1391< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action864( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1392< ->( - mode: Mode, - __0: (TextSize, (Vec, Vec), TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action865( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1393< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1011( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1394< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1012( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1395< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1013( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1396< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1014( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1397< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1015( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1398< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1016( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1399< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1017( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1400< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1018( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1401< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result> -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1019( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1402< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1020( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1403< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result> -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1021( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1404< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, Option>, TextSize), -) -> Result> -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1022( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1405< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), -) -> Result> -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1023( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1406< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1024( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1407< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1025( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1408< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1026( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1409< ->( - mode: Mode, - __0: (TextSize, Option>, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Parameters -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action868( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1410< ->( - mode: Mode, - __0: (TextSize, Option>, TextSize), -) -> ast::Parameters -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action869( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1411< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action882( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1412< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action883( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1413< ->( - mode: Mode, - __0: (TextSize, ast::Pattern, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action884( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1414< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action885( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1415< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action886( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1416< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action887( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1417< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action888( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1418< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action889( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1419< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1120( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1420< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> ast::Stmt -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1121( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1421< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Pattern, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action891( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1422< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action892( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1423< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Pattern, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action893( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1424< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Pattern, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action894( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1425< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Pattern, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action895( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1426< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action896( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1427< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action897( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1428< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action898( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1429< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), -) -> ast::Comprehension -{ - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action899( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1430< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), -) -> ast::Comprehension -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action900( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1431< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action902( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1432< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Identifier, TextSize), -) -> ast::Pattern -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action903( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1433< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Parameter -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1087( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1434< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::Parameter -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1088( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1435< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::Parameter -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action905( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1436< ->( - mode: Mode, - __0: (TextSize, core::option::Option, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, core::option::Option, TextSize), - __3: (TextSize, core::option::Option>, TextSize), -) -> ast::Expr -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action906( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1437< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action907( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1438< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Expr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action908( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1439< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Expr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action909( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1440< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), -) -> ast::Expr -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action910( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1441< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action911( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1442< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, ast::Operator, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action912( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1443< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action913( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1444< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action914( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1445< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Suite, TextSize), -) -> ast::Mod -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action915( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1446< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> ast::Mod -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1091( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1447< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), -) -> ast::Mod -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1092( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1448< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, token::Tok, TextSize), - __9: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __9.2; - let __end0 = __9.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1111( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __7, - __8, - __9, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1449< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1112( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1450< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1113( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1451< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1114( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1452< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, token::Tok, TextSize), - __9: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __9.2; - let __end0 = __9.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1115( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __7, - __8, - __9, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1453< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1116( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1454< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1117( - mode, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1455< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Suite, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1118( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1456< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::Expr -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action920( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1457< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, core::option::Option, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), -) -> ast::Stmt -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action921( - mode, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1458< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::TypeParam -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1082( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1459< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::TypeParam -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1083( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1460< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Identifier, TextSize), -) -> ast::TypeParam -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action923( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1461< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Identifier, TextSize), -) -> ast::TypeParam -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action924( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1462< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::TypeParams -{ - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action925( - mode, - __0, - __1, - __2, - __3, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1463< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::TypeParams -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action926( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1464< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::ParameterWithDefault -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1084( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1465< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::ParameterWithDefault -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1085( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1466< ->( - mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> ast::ParameterWithDefault -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action928( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1467< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action929( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1468< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), -) -> ast::WithItem -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action931( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1469< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::WithItem -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action932( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1470< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::WithItem -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action933( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1471< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), -) -> ast::WithItem -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action934( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1472< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::WithItem -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action935( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1473< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), -) -> Vec -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action936( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1474< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action939( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1475< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action940( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1476< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, core::option::Option, TextSize), -) -> ast::Expr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action941( - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1477< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Expr -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action388( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action942( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1478< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action1473( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action302( - mode, - __temp0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1479< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action1473( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action643( - mode, - __0, - __temp0, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1480< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action1473( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action644( - mode, - __0, - __temp0, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1481< ->( - mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> core::option::Option> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action1478( - mode, - __0, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action300( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1482< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::WithItem, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1481( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1068( - mode, - __0, - __temp0, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1483< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::WithItem, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action301( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1068( - mode, - __0, - __temp0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1484< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::WithItem, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1481( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1069( - mode, - __0, - __temp0, - __3, - __4, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1485< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::WithItem, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action301( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1069( - mode, - __0, - __temp0, - __1, - __2, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1486< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::WithItem, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1481( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1070( - mode, - __0, - __temp0, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1487< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::WithItem, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action301( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1070( - mode, - __0, - __temp0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1488< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::WithItem, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1481( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1071( - mode, - __0, - __temp0, - __3, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1489< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::WithItem, TextSize), - __2: (TextSize, alloc::vec::Vec, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Vec -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action301( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1071( - mode, - __0, - __temp0, - __1, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1490< ->( - mode: Mode, - __0: (TextSize, (String, StringKind, bool), TextSize), -) -> alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)> -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action1180( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action330( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1491< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), - __1: (TextSize, (String, StringKind, bool), TextSize), -) -> alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action1180( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action331( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1492< ->( - mode: Mode, - __0: (TextSize, ast::CmpOp, TextSize), - __1: (TextSize, ast::Expr, TextSize), -) -> alloc::vec::Vec<(ast::CmpOp, ast::Expr)> -{ - let __start0 = __0.0; - let __end0 = __1.2; - let __temp0 = __action489( - mode, - __0, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action487( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1493< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), - __1: (TextSize, ast::CmpOp, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> alloc::vec::Vec<(ast::CmpOp, ast::Expr)> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action489( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action488( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1494< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), -) -> core::option::Option -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action343( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action341( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1495< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Pattern, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Suite, TextSize), -) -> ast::MatchCase -{ - let __start0 = __2.0; - let __end0 = __2.2; - let __temp0 = __action1494( - mode, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action839( - mode, - __0, - __1, - __temp0, - __3, - __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1496< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Pattern, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Suite, TextSize), -) -> ast::MatchCase -{ - let __start0 = __1.2; - let __end0 = __2.0; - let __temp0 = __action342( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action839( - mode, - __0, - __1, - __temp0, - __2, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1497< ->( - mode: Mode, - __0: (TextSize, ast::Parameters, TextSize), -) -> core::option::Option -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action276( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action274( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1498< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameters, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action1497( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1411( - mode, - __0, - __temp0, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1499< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action275( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1411( - mode, - __0, - __temp0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1500< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, core::option::Option, TextSize), - __4: (TextSize, ast::Arguments, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __4.0; - let __end0 = __4.2; - let __temp0 = __action266( - mode, - __4, - ); - let __temp0 = (__start0, __temp0, __end0); - __action757( - mode, - __0, - __1, - __2, - __3, - __temp0, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1501< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, core::option::Option, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.2; - let __end0 = __4.0; - let __temp0 = __action267( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action757( - mode, - __0, - __1, - __2, - __3, - __temp0, - __4, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1502< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), -) -> ast::Stmt -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action378( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1275( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1503< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), -) -> ast::Stmt -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action379( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1275( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1504< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, ast::Expr, TextSize), -) -> ast::Stmt -{ - let __start0 = __3.0; - let __end0 = __3.2; - let __temp0 = __action373( - mode, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1277( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1505< ->( - mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), -) -> ast::Stmt -{ - let __start0 = __2.2; - let __end0 = __2.2; - let __temp0 = __action374( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1277( - mode, - __0, - __1, - __2, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1506< ->( - mode: Mode, - __0: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), -) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action437( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1135( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1507< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - let __start0 = *__lookbehind; - let __end0 = *__lookahead; - let __temp0 = __action438( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1135( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1508< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), - __1: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), -) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action437( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1136( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1509< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), -) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action438( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1136( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1510< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action1506( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1186( - mode, - __0, - __temp0, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1511< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action1507( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1186( - mode, - __0, - __temp0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1512< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), - __2: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1508( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1186( - mode, - __0, - __temp0, - __3, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1513< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action1509( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1186( - mode, - __0, - __temp0, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1514< ->( - mode: Mode, - __0: (TextSize, ast::Pattern, TextSize), -) -> Vec -{ - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action399( - mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1158( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1515< ->( - mode: Mode, - __lookbehind: &TextSize, - __lookahead: &TextSize, -) -> Vec -{ - let __start0 = *__lookbehind; - let __end0 = *__lookahead; - let __temp0 = __action400( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1158( - mode, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1516< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Pattern, TextSize), -) -> Vec -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action399( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1159( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1517< ->( - mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), -) -> Vec -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action400( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1159( - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1518< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Pattern, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action1514( - mode, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1426( - mode, - __0, - __temp0, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1519< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action1515( - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1426( - mode, - __0, - __temp0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1520< ->( - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, ast::Pattern, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> ast::Pattern -{ - let __start0 = __1.0; - let __end0 = __2.2; - let __temp0 = __action1516( - mode, - __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1426( - mode, - __0, - __temp0, - __3, - ) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action1521< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, alloc::vec::Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Pattern + __0: (TextSize, (Vec, Vec), TextSize), +) -> Result> { - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action1517( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, - __1, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1426( + __action1135( mode, __0, __temp0, - __2, ) } @@ -65916,20 +67540,26 @@ fn __action1521< fn __action1522< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), - __1: (TextSize, Vec, TextSize), -) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action235( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, - __1, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1284( + __action943( mode, __0, + __1, + __2, + __3, __temp0, ) } @@ -65939,20 +67569,24 @@ fn __action1522< fn __action1523< >( mode: Mode, - __0: (TextSize, ast::Expr, TextSize), -) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) + __0: (TextSize, (Vec, Vec), TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), +) -> Result> { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action236( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1284( + __action944( mode, __0, + __1, + __2, __temp0, ) } @@ -65963,21 +67597,21 @@ fn __action1524< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), -) -> ast::Comprehension + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action238( + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1429( + __action1094( mode, __0, __1, @@ -65995,26 +67629,24 @@ fn __action1525< mode: Mode, __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Expr, TextSize), + __2: (TextSize, Option>, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Expr, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), -) -> ast::Comprehension +) -> Result> { - let __start0 = __5.0; - let __end0 = __5.2; - let __temp0 = __action239( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, - __5, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1429( + __action1095( mode, __0, __1, __2, __3, - __4, __temp0, ) } @@ -66025,25 +67657,29 @@ fn __action1526< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), -) -> ast::Comprehension + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action238( + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1430( + __action1096( mode, __0, __1, __2, __3, + __4, + __5, __temp0, ) } @@ -66054,25 +67690,27 @@ fn __action1527< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Expr, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Expr, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), -) -> ast::Comprehension + __3: (TextSize, Option>, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __4.0; + let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action239( + let __temp0 = __action395( mode, - __4, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1430( + __action1097( mode, __0, __1, __2, __3, + __4, __temp0, ) } @@ -66083,30 +67721,24 @@ fn __action1528< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Identifier, TextSize), - __2: (TextSize, core::option::Option, TextSize), - __3: (TextSize, ast::Arguments, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action286( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1500( + __action1098( mode, - __temp0, __0, __1, __2, - __3, - __4, - __5, + __temp0, ) } @@ -66115,31 +67747,23 @@ fn __action1528< fn __action1529< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, core::option::Option, TextSize), - __4: (TextSize, ast::Arguments, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action287( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1500( + __action1099( mode, - __temp0, + __0, __1, - __2, - __3, - __4, - __5, - __6, + __temp0, ) } @@ -66149,28 +67773,26 @@ fn __action1530< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Identifier, TextSize), - __2: (TextSize, core::option::Option, TextSize), + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action286( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1501( + __action1100( mode, - __temp0, __0, __1, __2, __3, - __4, + __temp0, ) } @@ -66179,29 +67801,25 @@ fn __action1530< fn __action1531< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, core::option::Option, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action287( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1501( + __action1101( mode, - __temp0, + __0, __1, __2, - __3, - __4, - __5, + __temp0, ) } @@ -66211,36 +67829,26 @@ fn __action1532< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, core::option::Option, TextSize), - __4: (TextSize, ast::Parameters, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Expr, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, Option>, TextSize), +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action286( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1073( + __action1102( mode, - __temp0, __0, __1, __2, __3, - __4, - __5, - __6, - __7, - __8, + __temp0, ) } @@ -66249,37 +67857,25 @@ fn __action1532< fn __action1533< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Identifier, TextSize), - __4: (TextSize, core::option::Option, TextSize), - __5: (TextSize, ast::Parameters, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, ast::Expr, TextSize), - __8: (TextSize, token::Tok, TextSize), - __9: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt + __2: (TextSize, Option>, TextSize), +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action287( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1073( + __action1103( mode, - __temp0, + __0, __1, __2, - __3, - __4, - __5, - __6, - __7, - __8, - __9, + __temp0, ) } @@ -66289,32 +67885,28 @@ fn __action1534< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, core::option::Option, TextSize), - __4: (TextSize, ast::Parameters, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action286( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1074( + __action1104( mode, - __temp0, __0, __1, __2, __3, __4, - __5, - __6, + __temp0, ) } @@ -66323,33 +67915,27 @@ fn __action1534< fn __action1535< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Identifier, TextSize), - __4: (TextSize, core::option::Option, TextSize), - __5: (TextSize, ast::Parameters, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt + __3: (TextSize, Option>, TextSize), +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action287( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1074( + __action1105( mode, - __temp0, + __0, __1, __2, __3, - __4, - __5, - __6, - __7, + __temp0, ) } @@ -66359,34 +67945,22 @@ fn __action1536< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Identifier, TextSize), - __2: (TextSize, core::option::Option, TextSize), - __3: (TextSize, ast::Parameters, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Expr, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt + __1: (TextSize, ast::Parameter, TextSize), +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action286( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1075( + __action1106( mode, - __temp0, __0, __1, - __2, - __3, - __4, - __5, - __6, - __7, + __temp0, ) } @@ -66395,35 +67969,21 @@ fn __action1536< fn __action1537< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, core::option::Option, TextSize), - __4: (TextSize, ast::Parameters, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Expr, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt + __0: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __0.0; + let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action287( + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1075( + __action1107( mode, + __0, __temp0, - __1, - __2, - __3, - __4, - __5, - __6, - __7, - __8, ) } @@ -66433,30 +67993,24 @@ fn __action1538< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Identifier, TextSize), - __2: (TextSize, core::option::Option, TextSize), - __3: (TextSize, ast::Parameters, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt + __1: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action286( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1076( + __action1108( mode, - __temp0, __0, __1, __2, - __3, - __4, - __5, + __temp0, ) } @@ -66465,31 +68019,23 @@ fn __action1538< fn __action1539< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, core::option::Option, TextSize), - __4: (TextSize, ast::Parameters, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Suite, TextSize), -) -> ast::Stmt + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action287( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1076( + __action1109( mode, - __temp0, + __0, __1, - __2, - __3, - __4, - __5, - __6, + __temp0, ) } @@ -66498,23 +68044,23 @@ fn __action1539< fn __action1540< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(Option>, ast::Expr)>, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __0: (TextSize, Option>, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Parameters { - let __start0 = __1.0; + let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action539( + let __temp0 = __action395( mode, - __1, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1209( + __action947( mode, __0, + __1, __temp0, - __2, ) } @@ -66523,23 +68069,21 @@ fn __action1540< fn __action1541< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __0: (TextSize, Option>, TextSize), +) -> ast::Parameters { let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action540( + let __end0 = __0.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1209( + __action948( mode, __0, __temp0, - __1, ) } @@ -66549,22 +68093,24 @@ fn __action1542< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec<(Option>, ast::Expr)>, TextSize), + __1: (TextSize, core::option::Option, TextSize), __2: (TextSize, token::Tok, TextSize), -) -> ast::Expr +) -> Result> { - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action539( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, - __1, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1232( + __action961( mode, __0, - __temp0, + __1, __2, + __temp0, ) } @@ -66574,22 +68120,20 @@ fn __action1543< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Expr +) -> ast::Stmt { let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action540( + let __end0 = __0.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1232( + __action962( mode, __0, __temp0, - __1, ) } @@ -66598,20 +68142,22 @@ fn __action1543< fn __action1544< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::Parameter, TextSize), -) -> Option> + __0: (TextSize, ast::Pattern, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Pattern { - let __start0 = __1.0; + let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action473( + let __temp0 = __action395( mode, - __1, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action411( + __action963( mode, __0, + __1, __temp0, ) } @@ -66621,20 +68167,22 @@ fn __action1544< fn __action1545< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), -) -> Option> + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Pattern { - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action474( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action411( + __action964( mode, __0, + __1, __temp0, ) } @@ -66644,22 +68192,20 @@ fn __action1545< fn __action1546< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), -) -> Vec + __0: (TextSize, Vec, TextSize), +) -> ast::Pattern { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action1294( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, - __0, - __1, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action365( + __action965( mode, + __0, __temp0, ) } @@ -66669,18 +68215,24 @@ fn __action1546< fn __action1547< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> Vec + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action1295( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action365( + __action966( mode, + __0, + __1, + __2, __temp0, ) } @@ -66690,26 +68242,24 @@ fn __action1547< fn __action1548< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Identifier, TextSize), -) -> Vec + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __2.0; - let __end0 = __4.2; - let __temp0 = __action1294( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, - __2, - __3, - __4, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action366( + __action967( mode, __0, __1, + __2, __temp0, ) } @@ -66719,22 +68269,24 @@ fn __action1548< fn __action1549< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), -) -> Vec + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __2.0; + let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action1295( + let __temp0 = __action395( mode, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action366( + __action968( mode, __0, __1, + __2, __temp0, ) } @@ -66744,22 +68296,20 @@ fn __action1549< fn __action1550< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), -) -> Vec + __0: (TextSize, token::Tok, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action1296( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, - __0, - __1, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action358( + __action969( mode, + __0, __temp0, ) } @@ -66769,18 +68319,26 @@ fn __action1550< fn __action1551< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> Vec + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Expr, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action1297( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action358( + __action1209( mode, + __0, + __1, + __2, + __3, __temp0, ) } @@ -66790,23 +68348,19 @@ fn __action1551< fn __action1552< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, ast::Identifier, TextSize), -) -> Vec + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Stmt { - let __start0 = __2.0; - let __end0 = __4.2; - let __temp0 = __action1296( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( mode, - __2, - __3, - __4, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action359( + __action1210( mode, __0, __1, @@ -66819,22 +68373,24 @@ fn __action1552< fn __action1553< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, ast::Identifier, TextSize), -) -> Vec + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Pattern, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Pattern { - let __start0 = __2.0; + let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action1297( + let __temp0 = __action395( mode, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action359( + __action971( mode, __0, __1, + __2, __temp0, ) } @@ -66844,21 +68400,23 @@ fn __action1553< fn __action1554< >( mode: Mode, - __0: (TextSize, ast::Identifier, TextSize), -) -> (Option, Option) + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Pattern { - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action363( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action61( + __action972( mode, - __temp0, __0, + __1, + __temp0, ) } @@ -66867,21 +68425,27 @@ fn __action1554< fn __action1555< >( mode: Mode, - __0: (TextSize, alloc::vec::Vec, TextSize), - __1: (TextSize, ast::Identifier, TextSize), -) -> (Option, Option) + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Pattern, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Pattern { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action364( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action61( + __action973( mode, - __temp0, + __0, __1, + __2, + __3, + __temp0, ) } @@ -66891,22 +68455,28 @@ fn __action1556< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Pattern, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> ast::Pattern { - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action547( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( mode, - __1, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1194( + __action974( mode, __0, - __temp0, + __1, __2, + __3, + __4, + __temp0, ) } @@ -66916,22 +68486,26 @@ fn __action1557< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::Expr + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Pattern, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Pattern { - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action548( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1194( + __action975( mode, __0, - __temp0, __1, + __2, + __3, + __temp0, ) } @@ -66941,22 +68515,24 @@ fn __action1558< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), -) -> ast::Expr +) -> ast::Pattern { - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action547( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, - __1, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1219( + __action976( mode, __0, - __temp0, + __1, __2, + __temp0, ) } @@ -66965,23 +68541,25 @@ fn __action1558< fn __action1559< >( mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), ) -> ast::Expr { - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action548( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1219( + __action977( mode, __0, - __temp0, __1, + __2, + __temp0, ) } @@ -66990,31 +68568,25 @@ fn __action1559< fn __action1560< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1335( + __action978( mode, - __temp0, + __0, __1, __2, - __3, - __4, - __5, - __6, + __temp0, ) } @@ -67023,35 +68595,25 @@ fn __action1560< fn __action1561< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), - __8: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; + let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action675( + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action979( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1335( - mode, __temp0, - __3, - __4, - __5, - __6, - __7, - __8, ) } @@ -67060,37 +68622,31 @@ fn __action1561< fn __action1562< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), - __9: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Expr, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), +) -> ast::Comprehension { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action980( mode, __0, __1, __2, __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1335( - mode, - __temp0, __4, __5, - __6, - __7, - __8, - __9, + __temp0, ) } @@ -67099,29 +68655,29 @@ fn __action1562< fn __action1563< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), +) -> ast::Comprehension { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1336( + __action981( mode, - __temp0, + __0, __1, __2, __3, __4, - __5, + __temp0, ) } @@ -67130,33 +68686,23 @@ fn __action1563< fn __action1564< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, Option>, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action983( mode, __0, __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1336( - mode, __temp0, - __3, - __4, - __5, - __6, - __7, ) } @@ -67165,35 +68711,23 @@ fn __action1564< fn __action1565< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), - __8: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Identifier, TextSize), +) -> ast::Pattern { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action984( mode, __0, __1, - __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1336( - mode, __temp0, - __4, - __5, - __6, - __7, - __8, ) } @@ -67202,33 +68736,25 @@ fn __action1565< fn __action1566< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Identifier, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, Option>, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Parameter { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1337( + __action1174( mode, - __temp0, + __0, __1, __2, - __3, - __4, - __5, - __6, - __7, + __temp0, ) } @@ -67237,37 +68763,21 @@ fn __action1566< fn __action1567< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), - __9: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::Parameter { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, - __0, - __1, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1337( + __action1175( mode, + __0, __temp0, - __3, - __4, - __5, - __6, - __7, - __8, - __9, ) } @@ -67276,39 +68786,21 @@ fn __action1567< fn __action1568< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, alloc::vec::Vec, TextSize), - __8: (TextSize, token::Tok, TextSize), - __9: (TextSize, Option>, TextSize), - __10: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::Parameter { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, - __0, - __1, - __2, - __3, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1337( + __action986( mode, + __0, __temp0, - __4, - __5, - __6, - __7, - __8, - __9, - __10, ) } @@ -67317,31 +68809,27 @@ fn __action1568< fn __action1569< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, core::option::Option, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, core::option::Option, TextSize), + __3: (TextSize, core::option::Option>, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1338( + __action987( mode, - __temp0, + __0, __1, __2, __3, - __4, - __5, - __6, + __temp0, ) } @@ -67350,35 +68838,21 @@ fn __action1569< fn __action1570< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), - __8: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, - __0, - __1, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1338( + __action988( mode, + __0, __temp0, - __3, - __4, - __5, - __6, - __7, - __8, ) } @@ -67387,37 +68861,23 @@ fn __action1570< fn __action1571< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), - __9: (TextSize, token::Tok, TextSize), -) -> Result> +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action989( mode, __0, __1, - __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1338( - mode, __temp0, - __4, - __5, - __6, - __7, - __8, - __9, ) } @@ -67426,27 +68886,23 @@ fn __action1571< fn __action1572< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, Vec, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Result> +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1339( + __action990( mode, - __temp0, + __0, __1, - __2, - __3, - __4, + __temp0, ) } @@ -67455,31 +68911,21 @@ fn __action1572< fn __action1573< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, Vec, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, - __0, - __1, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1339( + __action991( mode, + __0, __temp0, - __3, - __4, - __5, - __6, ) } @@ -67488,33 +68934,25 @@ fn __action1573< fn __action1574< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action992( mode, __0, __1, __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1339( - mode, __temp0, - __4, - __5, - __6, - __7, ) } @@ -67523,25 +68961,25 @@ fn __action1574< fn __action1575< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1340( + __action993( mode, - __temp0, + __0, __1, __2, - __3, + __temp0, ) } @@ -67550,29 +68988,25 @@ fn __action1575< fn __action1576< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, ast::Operator, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; + let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action675( + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action994( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1340( - mode, __temp0, - __3, - __4, - __5, ) } @@ -67581,31 +69015,29 @@ fn __action1576< fn __action1577< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action995( mode, __0, __1, __2, __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1340( - mode, - __temp0, __4, - __5, - __6, + __temp0, ) } @@ -67614,29 +69046,29 @@ fn __action1577< fn __action1578< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1341( + __action996( mode, - __temp0, + __0, __1, __2, __3, __4, - __5, + __temp0, ) } @@ -67645,33 +69077,23 @@ fn __action1578< fn __action1579< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Suite, TextSize), +) -> ast::Mod { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action997( mode, __0, __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1341( - mode, __temp0, - __3, - __4, - __5, - __6, - __7, ) } @@ -67680,35 +69102,23 @@ fn __action1579< fn __action1580< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, alloc::vec::Vec, TextSize), - __8: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> ast::Mod { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1180( mode, __0, __1, - __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1341( - mode, __temp0, - __4, - __5, - __6, - __7, - __8, ) } @@ -67717,27 +69127,25 @@ fn __action1580< fn __action1581< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), +) -> ast::Mod { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1342( + __action1181( mode, - __temp0, + __0, __1, __2, - __3, - __4, + __temp0, ) } @@ -67746,31 +69154,39 @@ fn __action1581< fn __action1582< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, token::Tok, TextSize), + __9: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __9.2; + let __end0 = __9.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1200( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1342( - mode, - __temp0, __3, __4, __5, __6, + __7, + __8, + __9, + __temp0, ) } @@ -67779,33 +69195,33 @@ fn __action1582< fn __action1583< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), __4: (TextSize, token::Tok, TextSize), __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> Result> + __6: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1201( mode, __0, __1, __2, __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1342( - mode, - __temp0, __4, __5, __6, - __7, + __temp0, ) } @@ -67814,21 +69230,33 @@ fn __action1583< fn __action1584< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1343( + __action1202( mode, - __temp0, + __0, __1, + __2, + __3, + __4, + __5, + __6, + __temp0, ) } @@ -67837,25 +69265,27 @@ fn __action1584< fn __action1585< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1203( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1343( - mode, - __temp0, __3, + __temp0, ) } @@ -67864,27 +69294,39 @@ fn __action1585< fn __action1586< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), __4: (TextSize, token::Tok, TextSize), -) -> Result> + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, token::Tok, TextSize), + __9: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __9.2; + let __end0 = __9.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1204( mode, __0, __1, __2, __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1343( - mode, - __temp0, __4, + __5, + __6, + __7, + __8, + __9, + __temp0, ) } @@ -67893,29 +69335,33 @@ fn __action1586< fn __action1587< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), -) -> Result> + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1344( + __action1205( mode, - __temp0, + __0, __1, __2, __3, __4, __5, + __6, + __temp0, ) } @@ -67924,33 +69370,33 @@ fn __action1587< fn __action1588< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), -) -> Result> + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1206( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1344( - mode, - __temp0, __3, __4, __5, __6, - __7, + __temp0, ) } @@ -67959,35 +69405,27 @@ fn __action1588< fn __action1589< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), -) -> Result> + __2: (TextSize, ast::Suite, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; + let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action676( + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1207( mode, __0, __1, __2, __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1344( - mode, __temp0, - __4, - __5, - __6, - __7, - __8, ) } @@ -67996,27 +69434,21 @@ fn __action1589< fn __action1590< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::Expr { - let __start0 = __0.0; + let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action416( + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1345( + __action1002( mode, + __0, __temp0, - __1, - __2, - __3, - __4, ) } @@ -68025,31 +69457,29 @@ fn __action1590< fn __action1591< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), + __2: (TextSize, core::option::Option, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, Option>, TextSize), -) -> Result> + __4: (TextSize, ast::Expr, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1003( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1345( - mode, - __temp0, __3, __4, - __5, - __6, + __temp0, ) } @@ -68058,33 +69488,25 @@ fn __action1591< fn __action1592< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Identifier, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), +) -> ast::TypeParam { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1169( mode, __0, __1, __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1345( - mode, __temp0, - __4, - __5, - __6, - __7, ) } @@ -68093,31 +69515,21 @@ fn __action1592< fn __action1593< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::TypeParam { - let __start0 = __0.0; + let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action416( + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1346( + __action1170( mode, + __0, __temp0, - __1, - __2, - __3, - __4, - __5, - __6, ) } @@ -68126,35 +69538,23 @@ fn __action1593< fn __action1594< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Identifier, TextSize), +) -> ast::TypeParam { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1005( mode, __0, __1, - __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1346( - mode, __temp0, - __3, - __4, - __5, - __6, - __7, - __8, ) } @@ -68163,37 +69563,23 @@ fn __action1594< fn __action1595< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, alloc::vec::Vec, TextSize), - __8: (TextSize, token::Tok, TextSize), - __9: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Identifier, TextSize), +) -> ast::TypeParam { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1006( mode, __0, __1, - __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1346( - mode, __temp0, - __4, - __5, - __6, - __7, - __8, - __9, ) } @@ -68202,29 +69588,27 @@ fn __action1595< fn __action1596< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), -) -> Result> + __3: (TextSize, token::Tok, TextSize), +) -> ast::TypeParams { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1347( + __action1007( mode, - __temp0, + __0, __1, __2, __3, - __4, - __5, + __temp0, ) } @@ -68233,33 +69617,25 @@ fn __action1596< fn __action1597< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), -) -> Result> +) -> ast::TypeParams { - let __start0 = __0.0; + let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action675( + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1008( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1347( - mode, __temp0, - __3, - __4, - __5, - __6, - __7, ) } @@ -68268,35 +69644,25 @@ fn __action1597< fn __action1598< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Identifier, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), +) -> ast::ParameterWithDefault { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1171( mode, __0, __1, __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1347( - mode, __temp0, - __4, - __5, - __6, - __7, - __8, ) } @@ -68305,25 +69671,21 @@ fn __action1598< fn __action1599< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), -) -> Result> + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::ParameterWithDefault { - let __start0 = __0.0; + let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action416( + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1348( + __action1172( mode, + __0, __temp0, - __1, - __2, - __3, ) } @@ -68332,29 +69694,21 @@ fn __action1599< fn __action1600< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), -) -> Result> + __0: (TextSize, ast::Identifier, TextSize), +) -> ast::ParameterWithDefault { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, - __0, - __1, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1348( + __action1010( mode, + __0, __temp0, - __3, - __4, - __5, ) } @@ -68363,31 +69717,21 @@ fn __action1600< fn __action1601< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), +) -> ast::Pattern { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, - __0, - __1, - __2, - __3, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1348( + __action1011( mode, + __0, __temp0, - __4, - __5, - __6, ) } @@ -68396,23 +69740,21 @@ fn __action1601< fn __action1602< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), +) -> ast::WithItem { - let __start0 = __0.0; + let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action416( + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1349( + __action1013( mode, + __0, __temp0, - __1, - __2, ) } @@ -68421,27 +69763,25 @@ fn __action1602< fn __action1603< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), +) -> ast::WithItem { - let __start0 = __0.0; + let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action675( + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1014( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1349( - mode, __temp0, - __3, - __4, ) } @@ -68450,29 +69790,25 @@ fn __action1603< fn __action1604< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), +) -> ast::WithItem { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1015( mode, __0, __1, __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1349( - mode, __temp0, - __4, - __5, ) } @@ -68481,27 +69817,21 @@ fn __action1604< fn __action1605< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), +) -> ast::WithItem { - let __start0 = __0.0; + let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action416( + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1350( + __action1016( mode, + __0, __temp0, - __1, - __2, - __3, - __4, ) } @@ -68510,31 +69840,25 @@ fn __action1605< fn __action1606< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), +) -> ast::WithItem { - let __start0 = __0.0; + let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action675( + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1017( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1350( - mode, __temp0, - __3, - __4, - __5, - __6, ) } @@ -68543,33 +69867,21 @@ fn __action1606< fn __action1607< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> + __0: (TextSize, Vec, TextSize), +) -> Vec { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action395( mode, - __0, - __1, - __2, - __3, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1350( + __action1018( mode, + __0, __temp0, - __4, - __5, - __6, - __7, ) } @@ -68578,25 +69890,25 @@ fn __action1607< fn __action1608< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1351( + __action1021( mode, - __temp0, + __0, __1, __2, - __3, + __temp0, ) } @@ -68605,29 +69917,25 @@ fn __action1608< fn __action1609< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; + let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action675( + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1022( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1351( - mode, __temp0, - __3, - __4, - __5, ) } @@ -68636,31 +69944,25 @@ fn __action1609< fn __action1610< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1023( mode, __0, __1, __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1351( - mode, __temp0, - __4, - __5, - __6, ) } @@ -68669,18 +69971,22 @@ fn __action1610< fn __action1611< >( mode: Mode, - __0: (TextSize, Vec, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, core::option::Option, TextSize), +) -> ast::Expr { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action395( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1352( + __action1024( mode, + __0, + __1, __temp0, ) } @@ -68690,22 +69996,24 @@ fn __action1611< fn __action1612< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Expr { - let __start0 = __0.0; + let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action675( + let __temp0 = __action395( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1025( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1352( - mode, __temp0, ) } @@ -68715,25 +70023,21 @@ fn __action1612< fn __action1613< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, Vec, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> +) -> Vec { let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __end0 = __0.2; + let __temp0 = __action1607( mode, __0, - __1, - __2, - __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1352( + __action304( mode, __temp0, + __1, ) } @@ -68742,23 +70046,23 @@ fn __action1613< fn __action1614< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), __3: (TextSize, token::Tok, TextSize), -) -> Result> +) -> Vec { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action1607( mode, - __0, + __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1353( + __action693( mode, + __0, __temp0, - __1, __2, __3, ) @@ -68769,29 +70073,23 @@ fn __action1614< fn __action1615< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> +) -> Vec { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action1607( mode, - __0, __1, - __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1353( + __action694( mode, + __0, __temp0, - __3, - __4, - __5, + __2, ) } @@ -68800,31 +70098,21 @@ fn __action1615< fn __action1616< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, Vec, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> +) -> core::option::Option> { let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __end0 = __1.2; + let __temp0 = __action1613( mode, __0, __1, - __2, - __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1353( + __action302( mode, __temp0, - __4, - __5, - __6, ) } @@ -68833,23 +70121,29 @@ fn __action1616< fn __action1617< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::WithItem, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Vec { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action416( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1616( mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1354( - mode, - __temp0, __1, __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1155( + mode, + __0, + __temp0, + __3, + __4, + __5, ) } @@ -68858,27 +70152,27 @@ fn __action1617< fn __action1618< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::WithItem, TextSize), __2: (TextSize, token::Tok, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result> +) -> Vec { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action675( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action303( mode, - __0, - __1, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1354( + __action1155( mode, + __0, __temp0, + __1, + __2, __3, - __4, ) } @@ -68887,29 +70181,31 @@ fn __action1618< fn __action1619< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), -) -> Result> + __3: (TextSize, ast::WithItem, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Vec { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action676( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1616( mode, - __0, __1, __2, - __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1354( + __action1156( mode, + __0, __temp0, + __3, __4, __5, + __6, ) } @@ -68918,31 +70214,29 @@ fn __action1619< fn __action1620< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::WithItem, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), + __3: (TextSize, token::Tok, TextSize), __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> +) -> Vec { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action303( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1373( + __action1156( mode, + __0, __temp0, __1, __2, __3, __4, - __5, - __6, ) } @@ -68951,35 +70245,27 @@ fn __action1620< fn __action1621< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::WithItem, TextSize), __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), - __8: (TextSize, token::Tok, TextSize), -) -> Result> +) -> Vec { - let __start0 = __0.0; + let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action683( + let __temp0 = __action1616( mode, - __0, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1373( + __action1157( mode, + __0, __temp0, __3, __4, - __5, - __6, - __7, - __8, ) } @@ -68988,37 +70274,25 @@ fn __action1621< fn __action1622< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::WithItem, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), - __9: (TextSize, token::Tok, TextSize), -) -> Result> +) -> Vec { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action303( mode, - __0, - __1, - __2, - __3, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1373( + __action1157( mode, + __0, __temp0, - __4, - __5, - __6, - __7, - __8, - __9, + __1, + __2, ) } @@ -69027,26 +70301,26 @@ fn __action1622< fn __action1623< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), + __3: (TextSize, ast::WithItem, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), __5: (TextSize, token::Tok, TextSize), -) -> Result> +) -> Vec { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1616( mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1374( - mode, - __temp0, __1, __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1158( + mode, + __0, + __temp0, __3, __4, __5, @@ -69058,33 +70332,27 @@ fn __action1623< fn __action1624< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::WithItem, TextSize), + __2: (TextSize, alloc::vec::Vec, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, Option>, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> Result> +) -> Vec { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action303( mode, - __0, - __1, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1374( + __action1158( mode, + __0, __temp0, + __1, + __2, __3, - __4, - __5, - __6, - __7, ) } @@ -69093,35 +70361,19 @@ fn __action1624< fn __action1625< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), - __8: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, (String, StringKind, bool), TextSize), +) -> alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)> { let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __end0 = __0.2; + let __temp0 = __action1277( mode, __0, - __1, - __2, - __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1374( + __action332( mode, __temp0, - __4, - __5, - __6, - __7, - __8, ) } @@ -69130,33 +70382,21 @@ fn __action1625< fn __action1626< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, Option>, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)>, TextSize), + __1: (TextSize, (String, StringKind, bool), TextSize), +) -> alloc::vec::Vec<(TextSize, (String, StringKind, bool), TextSize)> { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action1277( mode, - __0, + __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1375( + __action333( mode, + __0, __temp0, - __1, - __2, - __3, - __4, - __5, - __6, - __7, ) } @@ -69165,37 +70405,21 @@ fn __action1626< fn __action1627< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), - __9: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::CmpOp, TextSize), + __1: (TextSize, ast::Expr, TextSize), +) -> alloc::vec::Vec<(ast::CmpOp, ast::Expr)> { let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __end0 = __1.2; + let __temp0 = __action502( mode, __0, __1, - __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1375( + __action500( mode, __temp0, - __3, - __4, - __5, - __6, - __7, - __8, - __9, ) } @@ -69204,39 +70428,23 @@ fn __action1627< fn __action1628< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, alloc::vec::Vec, TextSize), - __8: (TextSize, token::Tok, TextSize), - __9: (TextSize, Option>, TextSize), - __10: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, alloc::vec::Vec<(ast::CmpOp, ast::Expr)>, TextSize), + __1: (TextSize, ast::CmpOp, TextSize), + __2: (TextSize, ast::Expr, TextSize), +) -> alloc::vec::Vec<(ast::CmpOp, ast::Expr)> { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action502( mode, - __0, __1, __2, - __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1375( + __action501( mode, + __0, __temp0, - __4, - __5, - __6, - __7, - __8, - __9, - __10, ) } @@ -69245,31 +70453,19 @@ fn __action1628< fn __action1629< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), +) -> core::option::Option { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action424( + let __temp0 = __action345( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1376( + __action343( mode, __temp0, - __1, - __2, - __3, - __4, - __5, - __6, ) } @@ -69278,35 +70474,27 @@ fn __action1629< fn __action1630< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Pattern, TextSize), + __2: (TextSize, ast::Expr, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), - __8: (TextSize, token::Tok, TextSize), -) -> Result> + __4: (TextSize, ast::Suite, TextSize), +) -> ast::MatchCase { - let __start0 = __0.0; + let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action683( + let __temp0 = __action1629( mode, - __0, - __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1376( + __action918( mode, + __0, + __1, __temp0, __3, __4, - __5, - __6, - __7, - __8, ) } @@ -69315,37 +70503,27 @@ fn __action1630< fn __action1631< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Pattern, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), - __9: (TextSize, token::Tok, TextSize), -) -> Result> + __3: (TextSize, ast::Suite, TextSize), +) -> ast::MatchCase { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __start0 = __1.2; + let __end0 = __2.0; + let __temp0 = __action344( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action918( mode, __0, __1, + __temp0, __2, __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1376( - mode, - __temp0, - __4, - __5, - __6, - __7, - __8, - __9, ) } @@ -69354,27 +70532,19 @@ fn __action1631< fn __action1632< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Parameters, TextSize), +) -> core::option::Option { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action424( + let __temp0 = __action278( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1377( + __action276( mode, __temp0, - __1, - __2, - __3, - __4, ) } @@ -69383,31 +70553,23 @@ fn __action1632< fn __action1633< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameters, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, token::Tok, TextSize), ) -> Result> { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action1632( mode, - __0, __1, - __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1377( + __action1542( mode, + __0, __temp0, - __3, - __4, - __5, - __6, + __2, ) } @@ -69416,33 +70578,23 @@ fn __action1633< fn __action1634< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, token::Tok, TextSize), ) -> Result> { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action277( mode, - __0, - __1, - __2, - __3, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1377( + __action1542( mode, + __0, __temp0, - __4, - __5, - __6, - __7, + __1, ) } @@ -69451,25 +70603,31 @@ fn __action1634< fn __action1635< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, alloc::vec::Vec, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, core::option::Option, TextSize), + __4: (TextSize, ast::Arguments, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __start0 = __4.0; + let __end0 = __4.2; + let __temp0 = __action268( mode, - __0, + __4, ); let __temp0 = (__start0, __temp0, __end0); - __action1378( + __action833( mode, - __temp0, + __0, __1, __2, __3, + __temp0, + __5, + __6, ) } @@ -69478,27 +70636,29 @@ fn __action1635< fn __action1636< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, alloc::vec::Vec, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, core::option::Option, TextSize), __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> + __5: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __start0 = __3.2; + let __end0 = __4.0; + let __temp0 = __action269( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action833( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1378( - mode, - __temp0, __3, + __temp0, __4, __5, ) @@ -69509,31 +70669,21 @@ fn __action1636< fn __action1637< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action385( mode, - __0, - __1, - __2, - __3, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1378( + __action1404( mode, + __0, __temp0, - __4, - __5, - __6, ) } @@ -69542,29 +70692,21 @@ fn __action1637< fn __action1638< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action386( mode, - __0, + __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1379( + __action1404( mode, + __0, __temp0, - __1, - __2, - __3, - __4, - __5, ) } @@ -69573,33 +70715,25 @@ fn __action1638< fn __action1639< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, ast::Expr, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __start0 = __3.0; + let __end0 = __3.2; + let __temp0 = __action380( + mode, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1406( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1379( - mode, __temp0, - __3, - __4, - __5, - __6, - __7, ) } @@ -69608,35 +70742,25 @@ fn __action1639< fn __action1640< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, ast::Expr, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, alloc::vec::Vec, TextSize), - __8: (TextSize, token::Tok, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), +) -> ast::Stmt { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action381( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1406( mode, __0, __1, __2, - __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1379( - mode, __temp0, - __4, - __5, - __6, - __7, - __8, ) } @@ -69645,27 +70769,19 @@ fn __action1640< fn __action1641< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), +) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action424( + let __temp0 = __action446( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1380( + __action1224( mode, __temp0, - __1, - __2, - __3, - __4, ) } @@ -69674,31 +70790,21 @@ fn __action1641< fn __action1642< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), - __6: (TextSize, token::Tok, TextSize), -) -> Result> + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __start0 = *__lookbehind; + let __end0 = *__lookahead; + let __temp0 = __action447( mode, - __0, - __1, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1380( + __action1224( mode, __temp0, - __3, - __4, - __5, - __6, ) } @@ -69707,33 +70813,21 @@ fn __action1642< fn __action1643< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), + __1: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), +) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action446( mode, - __0, __1, - __2, - __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1380( + __action1225( mode, + __0, __temp0, - __4, - __5, - __6, - __7, ) } @@ -69742,21 +70836,21 @@ fn __action1643< fn __action1644< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> Result> + __0: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), +) -> Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)> { - let __start0 = __0.0; + let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action424( + let __temp0 = __action447( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1381( + __action1225( mode, + __0, __temp0, - __1, ) } @@ -69765,25 +70859,23 @@ fn __action1644< fn __action1645< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), -) -> Result> +) -> Result> { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action1641( mode, - __0, __1, - __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1381( + __action1284( mode, + __0, __temp0, - __3, + __2, ) } @@ -69792,27 +70884,23 @@ fn __action1645< fn __action1646< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), -) -> Result> +) -> Result> { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action1642( mode, - __0, - __1, - __2, - __3, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1381( + __action1284( mode, + __0, __temp0, - __4, + __1, ) } @@ -69821,29 +70909,25 @@ fn __action1646< fn __action1647< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), + __2: (TextSize, (Option<(TextSize, TextSize, Option)>, ast::Expr), TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1643( mode, - __0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1382( - mode, - __temp0, __1, __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1284( + mode, + __0, + __temp0, __3, - __4, - __5, ) } @@ -69852,33 +70936,23 @@ fn __action1647< fn __action1648< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), -) -> Result> +) -> Result> { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action1644( mode, - __0, __1, - __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1382( + __action1284( mode, + __0, __temp0, - __3, - __4, - __5, - __6, - __7, + __2, ) } @@ -69887,35 +70961,19 @@ fn __action1648< fn __action1649< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, ast::Pattern, TextSize), +) -> Vec { let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __end0 = __0.2; + let __temp0 = __action408( mode, __0, - __1, - __2, - __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1382( + __action1255( mode, __temp0, - __4, - __5, - __6, - __7, - __8, ) } @@ -69924,27 +70982,21 @@ fn __action1649< fn __action1650< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, Option>, TextSize), -) -> Result> + __lookbehind: &TextSize, + __lookahead: &TextSize, +) -> Vec { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __start0 = *__lookbehind; + let __end0 = *__lookahead; + let __temp0 = __action409( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1383( + __action1255( mode, __temp0, - __1, - __2, - __3, - __4, ) } @@ -69953,31 +71005,21 @@ fn __action1650< fn __action1651< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Pattern, TextSize), +) -> Vec { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action408( mode, - __0, __1, - __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1383( + __action1256( mode, + __0, __temp0, - __3, - __4, - __5, - __6, ) } @@ -69986,33 +71028,21 @@ fn __action1651< fn __action1652< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, alloc::vec::Vec, TextSize), +) -> Vec { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action409( mode, - __0, - __1, - __2, - __3, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1383( + __action1256( mode, + __0, __temp0, - __4, - __5, - __6, - __7, ) } @@ -70021,31 +71051,23 @@ fn __action1652< fn __action1653< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Pattern, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, Option>, TextSize), -) -> Result> +) -> ast::Pattern { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action1649( mode, - __0, + __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1384( + __action1558( mode, + __0, __temp0, - __1, __2, - __3, - __4, - __5, - __6, ) } @@ -70054,35 +71076,23 @@ fn __action1653< fn __action1654< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), -) -> Result> +) -> ast::Pattern { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action1650( mode, - __0, - __1, - __2, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1384( + __action1558( mode, + __0, __temp0, - __3, - __4, - __5, - __6, - __7, - __8, + __1, ) } @@ -70091,37 +71101,25 @@ fn __action1654< fn __action1655< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), - __7: (TextSize, alloc::vec::Vec, TextSize), - __8: (TextSize, token::Tok, TextSize), - __9: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), + __2: (TextSize, ast::Pattern, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> ast::Pattern { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __start0 = __1.0; + let __end0 = __2.2; + let __temp0 = __action1651( mode, - __0, __1, __2, - __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1384( + __action1558( mode, + __0, __temp0, - __4, - __5, - __6, - __7, - __8, - __9, + __3, ) } @@ -70130,29 +71128,23 @@ fn __action1655< fn __action1656< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, alloc::vec::Vec, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, Option>, TextSize), -) -> Result> +) -> ast::Pattern { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action1652( mode, - __0, + __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1385( + __action1558( mode, + __0, __temp0, - __1, __2, - __3, - __4, - __5, ) } @@ -70161,33 +71153,21 @@ fn __action1656< fn __action1657< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, alloc::vec::Vec, TextSize), - __6: (TextSize, token::Tok, TextSize), - __7: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), + __1: (TextSize, Vec, TextSize), +) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action237( mode, - __0, __1, - __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1385( + __action1414( mode, + __0, __temp0, - __3, - __4, - __5, - __6, - __7, ) } @@ -70196,35 +71176,21 @@ fn __action1657< fn __action1658< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, alloc::vec::Vec, TextSize), - __7: (TextSize, token::Tok, TextSize), - __8: (TextSize, Option>, TextSize), -) -> Result> + __0: (TextSize, ast::Expr, TextSize), +) -> (Option<(TextSize, TextSize, Option)>, ast::Expr) { - let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action238( mode, - __0, - __1, - __2, - __3, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1385( + __action1414( mode, + __0, __temp0, - __4, - __5, - __6, - __7, - __8, ) } @@ -70233,25 +71199,29 @@ fn __action1658< fn __action1659< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), -) -> Result> + __2: (TextSize, ast::Expr, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Expr, TextSize), +) -> ast::Comprehension { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action240( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1386( + __action1562( mode, - __temp0, + __0, __1, __2, __3, + __4, + __temp0, ) } @@ -70260,29 +71230,29 @@ fn __action1659< fn __action1660< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, token::Tok, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Expr, TextSize), __3: (TextSize, token::Tok, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, ast::Parameter, TextSize), -) -> Result> + __4: (TextSize, ast::Expr, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), +) -> ast::Comprehension { - let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __start0 = __5.0; + let __end0 = __5.2; + let __temp0 = __action241( + mode, + __5, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1562( mode, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1386( - mode, - __temp0, __3, __4, - __5, + __temp0, ) } @@ -70291,31 +71261,27 @@ fn __action1660< fn __action1661< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), - __5: (TextSize, token::Tok, TextSize), - __6: (TextSize, ast::Parameter, TextSize), -) -> Result> + __3: (TextSize, ast::Expr, TextSize), +) -> ast::Comprehension { - let __start0 = __0.0; + let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action684( + let __temp0 = __action240( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1563( mode, __0, __1, __2, __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1386( - mode, __temp0, - __4, - __5, - __6, ) } @@ -70324,23 +71290,27 @@ fn __action1661< fn __action1662< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Expr, TextSize), __2: (TextSize, token::Tok, TextSize), -) -> Result> + __3: (TextSize, ast::Expr, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), +) -> ast::Comprehension { - let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __start0 = __4.0; + let __end0 = __4.2; + let __temp0 = __action241( mode, - __0, + __4, ); let __temp0 = (__start0, __temp0, __end0); - __action1387( + __action1563( mode, - __temp0, + __0, __1, __2, + __3, + __temp0, ) } @@ -70349,27 +71319,31 @@ fn __action1662< fn __action1663< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, token::Tok, TextSize), + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Identifier, TextSize), + __2: (TextSize, core::option::Option, TextSize), + __3: (TextSize, ast::Arguments, TextSize), __4: (TextSize, token::Tok, TextSize), -) -> Result> + __5: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { let __start0 = __0.0; - let __end0 = __2.2; - let __temp0 = __action683( + let __end0 = __0.0; + let __temp0 = __action288( mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1635( + mode, + __temp0, __0, __1, __2, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1387( - mode, - __temp0, __3, __4, + __5, ) } @@ -70378,29 +71352,31 @@ fn __action1663< fn __action1664< >( mode: Mode, - __0: (TextSize, Vec, TextSize), + __0: (TextSize, alloc::vec::Vec, TextSize), __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, alloc::vec::Vec, TextSize), - __4: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, core::option::Option, TextSize), + __4: (TextSize, ast::Arguments, TextSize), __5: (TextSize, token::Tok, TextSize), -) -> Result> + __6: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { let __start0 = __0.0; - let __end0 = __3.2; - let __temp0 = __action684( + let __end0 = __0.2; + let __temp0 = __action289( mode, __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1635( + mode, + __temp0, __1, __2, __3, - ); - let __temp0 = (__start0, __temp0, __end0); - __action1387( - mode, - __temp0, __4, __5, + __6, ) } @@ -70409,23 +71385,25 @@ fn __action1664< fn __action1665< >( mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), - __2: (TextSize, token::Tok, TextSize), - __3: (TextSize, ast::Parameter, TextSize), - __4: (TextSize, alloc::vec::Vec, TextSize), -) -> Result> + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Identifier, TextSize), + __2: (TextSize, core::option::Option, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt { let __start0 = __0.0; - let __end0 = __0.2; - let __temp0 = __action424( + let __end0 = __0.0; + let __temp0 = __action288( mode, - __0, + &__start0, + &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1388( + __action1636( mode, __temp0, + __0, __1, __2, __3, @@ -70436,6 +71414,1164 @@ fn __action1665< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action1666< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, core::option::Option, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action289( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1636( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1667< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, core::option::Option, TextSize), + __4: (TextSize, ast::Parameters, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Expr, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action288( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1160( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1668< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Identifier, TextSize), + __4: (TextSize, core::option::Option, TextSize), + __5: (TextSize, ast::Parameters, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, ast::Expr, TextSize), + __8: (TextSize, token::Tok, TextSize), + __9: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action289( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1160( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + __8, + __9, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1669< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, core::option::Option, TextSize), + __4: (TextSize, ast::Parameters, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action288( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1161( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1670< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Identifier, TextSize), + __4: (TextSize, core::option::Option, TextSize), + __5: (TextSize, ast::Parameters, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action289( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1161( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1671< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Identifier, TextSize), + __2: (TextSize, core::option::Option, TextSize), + __3: (TextSize, ast::Parameters, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Expr, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action288( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1162( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1672< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, core::option::Option, TextSize), + __4: (TextSize, ast::Parameters, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Expr, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action289( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1162( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1673< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Identifier, TextSize), + __2: (TextSize, core::option::Option, TextSize), + __3: (TextSize, ast::Parameters, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action288( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1163( + mode, + __temp0, + __0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1674< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, core::option::Option, TextSize), + __4: (TextSize, ast::Parameters, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Suite, TextSize), +) -> ast::Stmt +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action289( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1163( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1675< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec<(Option>, ast::Expr)>, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action583( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1308( + mode, + __0, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1676< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action584( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1308( + mode, + __0, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1677< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec<(Option>, ast::Expr)>, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action583( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1333( + mode, + __0, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1678< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action584( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1333( + mode, + __0, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1679< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec<(Option>, ast::Expr)>, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action583( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1356( + mode, + __0, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1680< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action584( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1356( + mode, + __0, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1681< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::Parameter, TextSize), +) -> Option> +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action480( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action420( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1682< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), +) -> Option> +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action481( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action420( + mode, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1683< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), +) -> Vec +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action1424( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action372( + mode, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1684< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), +) -> Vec +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action1425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action372( + mode, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1685< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Identifier, TextSize), +) -> Vec +{ + let __start0 = __2.0; + let __end0 = __4.2; + let __temp0 = __action1424( + mode, + __2, + __3, + __4, + ); + let __temp0 = (__start0, __temp0, __end0); + __action373( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1686< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), +) -> Vec +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action1425( + mode, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action373( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1687< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), +) -> Vec +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action1426( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action365( + mode, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1688< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), +) -> Vec +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action1427( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action365( + mode, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1689< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, ast::Identifier, TextSize), +) -> Vec +{ + let __start0 = __2.0; + let __end0 = __4.2; + let __temp0 = __action1426( + mode, + __2, + __3, + __4, + ); + let __temp0 = (__start0, __temp0, __end0); + __action366( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1690< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, ast::Identifier, TextSize), +) -> Vec +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action1427( + mode, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action366( + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1691< +>( + mode: Mode, + __0: (TextSize, ast::Identifier, TextSize), +) -> (Option, Option) +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action370( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action62( + mode, + __temp0, + __0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1692< +>( + mode: Mode, + __0: (TextSize, alloc::vec::Vec, TextSize), + __1: (TextSize, ast::Identifier, TextSize), +) -> (Option, Option) +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action371( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action62( + mode, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1693< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action591( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1293( + mode, + __0, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1694< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action592( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1293( + mode, + __0, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1695< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action591( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1318( + mode, + __0, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1696< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action592( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1318( + mode, + __0, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1697< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action591( + mode, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1343( + mode, + __0, + __temp0, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1698< +>( + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::Expr +{ + let __start0 = __0.2; + let __end0 = __1.0; + let __temp0 = __action592( + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1343( + mode, + __0, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1699< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1466( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1700< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), + __8: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1466( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1701< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), + __9: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1466( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + __9, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1702< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1467( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1703< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, Option>, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1467( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1704< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), + __8: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1467( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1705< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, Option>, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1468( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1706< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70445,18 +72581,236 @@ fn __action1666< __4: (TextSize, token::Tok, TextSize), __5: (TextSize, ast::Parameter, TextSize), __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), + __9: (TextSize, token::Tok, TextSize), ) -> Result> { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action683( + let __temp0 = __action725( mode, __0, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1388( + __action1468( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + __8, + __9, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1707< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, alloc::vec::Vec, TextSize), + __8: (TextSize, token::Tok, TextSize), + __9: (TextSize, Option>, TextSize), + __10: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1468( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + __9, + __10, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1708< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1469( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1709< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), + __8: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1469( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1710< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), + __9: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1469( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + __9, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1711< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1470( + mode, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1712< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1470( mode, __temp0, __3, @@ -70468,7 +72822,1062 @@ fn __action1666< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1667< +fn __action1713< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1470( + mode, + __temp0, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1714< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1471( + mode, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1715< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1471( + mode, + __temp0, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1716< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1471( + mode, + __temp0, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1717< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1472( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1718< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1472( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1719< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, alloc::vec::Vec, TextSize), + __8: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1472( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1720< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1473( + mode, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1721< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1473( + mode, + __temp0, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1722< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1473( + mode, + __temp0, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1723< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1474( + mode, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1724< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1474( + mode, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1725< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1474( + mode, + __temp0, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1726< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1475( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1727< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1475( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1728< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1475( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1729< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1476( + mode, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1730< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1476( + mode, + __temp0, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1731< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1476( + mode, + __temp0, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1732< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1477( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1733< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1477( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1734< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, alloc::vec::Vec, TextSize), + __8: (TextSize, token::Tok, TextSize), + __9: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1477( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + __9, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1735< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1478( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1736< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1478( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1737< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1478( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1738< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1479( + mode, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1739< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1479( + mode, + __temp0, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1740< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1479( + mode, + __temp0, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1741< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1480( + mode, + __temp0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1742< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1480( + mode, + __temp0, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1743< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action726( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1480( + mode, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1744< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action425( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1481( + mode, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1745< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action725( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1481( + mode, + __temp0, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1746< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70483,7 +73892,7 @@ fn __action1667< { let __start0 = __0.0; let __end0 = __3.2; - let __temp0 = __action684( + let __temp0 = __action726( mode, __0, __1, @@ -70491,7 +73900,7 @@ fn __action1667< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1388( + __action1481( mode, __temp0, __4, @@ -70503,7 +73912,7 @@ fn __action1667< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1668< +fn __action1747< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70514,12 +73923,12 @@ fn __action1668< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action424( + let __temp0 = __action425( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1389( + __action1482( mode, __temp0, __1, @@ -70530,7 +73939,7 @@ fn __action1668< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1669< +fn __action1748< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70543,14 +73952,14 @@ fn __action1669< { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action683( + let __temp0 = __action725( mode, __0, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1389( + __action1482( mode, __temp0, __3, @@ -70561,7 +73970,7 @@ fn __action1669< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1670< +fn __action1749< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70575,7 +73984,7 @@ fn __action1670< { let __start0 = __0.0; let __end0 = __3.2; - let __temp0 = __action684( + let __temp0 = __action726( mode, __0, __1, @@ -70583,7 +73992,7 @@ fn __action1670< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1389( + __action1482( mode, __temp0, __4, @@ -70594,7 +74003,7 @@ fn __action1670< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1671< +fn __action1750< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70602,12 +74011,12 @@ fn __action1671< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action424( + let __temp0 = __action425( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1390( + __action1483( mode, __temp0, ) @@ -70615,7 +74024,7 @@ fn __action1671< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1672< +fn __action1751< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70625,14 +74034,14 @@ fn __action1672< { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action683( + let __temp0 = __action725( mode, __0, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1390( + __action1483( mode, __temp0, ) @@ -70640,7 +74049,7 @@ fn __action1672< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1673< +fn __action1752< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70651,7 +74060,7 @@ fn __action1673< { let __start0 = __0.0; let __end0 = __3.2; - let __temp0 = __action684( + let __temp0 = __action726( mode, __0, __1, @@ -70659,7 +74068,7 @@ fn __action1673< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1390( + __action1483( mode, __temp0, ) @@ -70667,7 +74076,7 @@ fn __action1673< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1674< +fn __action1753< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70678,12 +74087,12 @@ fn __action1674< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action424( + let __temp0 = __action425( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1391( + __action1484( mode, __temp0, __1, @@ -70694,7 +74103,7 @@ fn __action1674< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1675< +fn __action1754< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70707,14 +74116,14 @@ fn __action1675< { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action683( + let __temp0 = __action725( mode, __0, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1391( + __action1484( mode, __temp0, __3, @@ -70725,7 +74134,7 @@ fn __action1675< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1676< +fn __action1755< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70739,7 +74148,7 @@ fn __action1676< { let __start0 = __0.0; let __end0 = __3.2; - let __temp0 = __action684( + let __temp0 = __action726( mode, __0, __1, @@ -70747,7 +74156,7 @@ fn __action1676< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1391( + __action1484( mode, __temp0, __4, @@ -70758,7 +74167,7 @@ fn __action1676< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1677< +fn __action1756< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70768,12 +74177,12 @@ fn __action1677< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action424( + let __temp0 = __action425( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1392( + __action1485( mode, __temp0, __1, @@ -70783,7 +74192,7 @@ fn __action1677< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1678< +fn __action1757< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70795,14 +74204,14 @@ fn __action1678< { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action683( + let __temp0 = __action725( mode, __0, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1392( + __action1485( mode, __temp0, __3, @@ -70812,7 +74221,7 @@ fn __action1678< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1679< +fn __action1758< >( mode: Mode, __0: (TextSize, Vec, TextSize), @@ -70825,7 +74234,7 @@ fn __action1679< { let __start0 = __0.0; let __end0 = __3.2; - let __temp0 = __action684( + let __temp0 = __action726( mode, __0, __1, @@ -70833,7 +74242,7 @@ fn __action1679< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1392( + __action1485( mode, __temp0, __4, @@ -70843,7 +74252,1935 @@ fn __action1679< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1680< +fn __action1759< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1504( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1760< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), + __8: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1504( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1761< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), + __9: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1504( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + __9, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1762< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1505( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1763< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, Option>, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1505( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1764< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), + __8: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1505( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1765< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, Option>, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1506( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1766< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), + __9: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1506( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + __8, + __9, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1767< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, alloc::vec::Vec, TextSize), + __8: (TextSize, token::Tok, TextSize), + __9: (TextSize, Option>, TextSize), + __10: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1506( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + __9, + __10, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1768< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1507( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1769< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), + __8: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1507( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1770< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), + __9: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1507( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + __9, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1771< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1508( + mode, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1772< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1508( + mode, + __temp0, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1773< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1508( + mode, + __temp0, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1774< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1509( + mode, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1775< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1509( + mode, + __temp0, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1776< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1509( + mode, + __temp0, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1777< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1510( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1778< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1510( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1779< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, alloc::vec::Vec, TextSize), + __8: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1510( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1780< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1511( + mode, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1781< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1511( + mode, + __temp0, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1782< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1511( + mode, + __temp0, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1783< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1512( + mode, + __temp0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1784< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1512( + mode, + __temp0, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1785< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1512( + mode, + __temp0, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1786< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1513( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1787< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1513( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1788< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1513( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1789< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1514( + mode, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1790< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1514( + mode, + __temp0, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1791< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1514( + mode, + __temp0, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1792< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1515( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1793< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1515( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1794< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, alloc::vec::Vec, TextSize), + __8: (TextSize, token::Tok, TextSize), + __9: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1515( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + __9, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1795< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1516( + mode, + __temp0, + __1, + __2, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1796< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), + __6: (TextSize, token::Tok, TextSize), + __7: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1516( + mode, + __temp0, + __3, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1797< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), + __7: (TextSize, token::Tok, TextSize), + __8: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1516( + mode, + __temp0, + __4, + __5, + __6, + __7, + __8, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1798< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1517( + mode, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1799< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1517( + mode, + __temp0, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1800< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1517( + mode, + __temp0, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1801< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1518( + mode, + __temp0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1802< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1518( + mode, + __temp0, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1803< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1518( + mode, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1804< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, ast::Parameter, TextSize), + __4: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1519( + mode, + __temp0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1805< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, ast::Parameter, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1519( + mode, + __temp0, + __3, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1806< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, ast::Parameter, TextSize), + __7: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1519( + mode, + __temp0, + __4, + __5, + __6, + __7, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1807< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1520( + mode, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1808< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1520( + mode, + __temp0, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1809< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, token::Tok, TextSize), + __6: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1520( + mode, + __temp0, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1810< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1521( + mode, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1811< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1521( + mode, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1812< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1521( + mode, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1813< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), + __3: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1522( + mode, + __temp0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1814< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), + __5: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1522( + mode, + __temp0, + __3, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1815< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), + __6: (TextSize, token::Tok, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1522( + mode, + __temp0, + __4, + __5, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1816< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __0.2; + let __temp0 = __action433( + mode, + __0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1523( + mode, + __temp0, + __1, + __2, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1817< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, token::Tok, TextSize), + __4: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __2.2; + let __temp0 = __action733( + mode, + __0, + __1, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1523( + mode, + __temp0, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1818< +>( + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), + __2: (TextSize, token::Tok, TextSize), + __3: (TextSize, alloc::vec::Vec, TextSize), + __4: (TextSize, token::Tok, TextSize), + __5: (TextSize, Option>, TextSize), +) -> Result> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action734( + mode, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action1523( + mode, + __temp0, + __4, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1819< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -70854,12 +76191,12 @@ fn __action1680< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action258( + let __temp0 = __action260( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1304( + __action1437( mode, __0, __temp0, @@ -70870,7 +76207,7 @@ fn __action1680< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1681< +fn __action1820< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -70880,13 +76217,13 @@ fn __action1681< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action259( + let __temp0 = __action261( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1304( + __action1437( mode, __0, __temp0, @@ -70897,7 +76234,7 @@ fn __action1681< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1682< +fn __action1821< >( mode: Mode, __0: (TextSize, core::option::Option, TextSize), @@ -70908,12 +76245,12 @@ fn __action1682< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action254( + let __temp0 = __action256( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1436( + __action1569( mode, __0, __1, @@ -70924,7 +76261,7 @@ fn __action1682< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1683< +fn __action1822< >( mode: Mode, __0: (TextSize, core::option::Option, TextSize), @@ -70934,13 +76271,13 @@ fn __action1683< { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action255( + let __temp0 = __action257( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1436( + __action1569( mode, __0, __1, @@ -70951,7 +76288,7 @@ fn __action1683< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1684< +fn __action1823< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -70962,12 +76299,12 @@ fn __action1684< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action303( + let __temp0 = __action305( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action781( + __action857( mode, __0, __temp0, @@ -70978,7 +76315,7 @@ fn __action1684< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1685< +fn __action1824< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -70988,13 +76325,13 @@ fn __action1685< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action304( + let __temp0 = __action306( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action781( + __action857( mode, __0, __temp0, @@ -71005,7 +76342,7 @@ fn __action1685< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1686< +fn __action1825< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71014,12 +76351,12 @@ fn __action1686< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action303( + let __temp0 = __action305( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action901( + __action982( mode, __0, __temp0, @@ -71028,7 +76365,7 @@ fn __action1686< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1687< +fn __action1826< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71036,13 +76373,13 @@ fn __action1687< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action304( + let __temp0 = __action306( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action901( + __action982( mode, __0, __temp0, @@ -71051,7 +76388,7 @@ fn __action1687< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1688< +fn __action1827< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -71064,17 +76401,17 @@ fn __action1688< let __end0 = __0.2; let __start1 = __2.0; let __end1 = __2.2; - let __temp0 = __action303( + let __temp0 = __action305( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - let __temp1 = __action303( + let __temp1 = __action305( mode, __2, ); let __temp1 = (__start1, __temp1, __end1); - __action1682( + __action1821( mode, __temp0, __1, @@ -71085,7 +76422,7 @@ fn __action1688< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1689< +fn __action1828< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -71097,18 +76434,18 @@ fn __action1689< let __end0 = __0.2; let __start1 = __1.2; let __end1 = __2.0; - let __temp0 = __action303( + let __temp0 = __action305( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - let __temp1 = __action304( + let __temp1 = __action306( mode, &__start1, &__end1, ); let __temp1 = (__start1, __temp1, __end1); - __action1682( + __action1821( mode, __temp0, __1, @@ -71119,7 +76456,7 @@ fn __action1689< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1690< +fn __action1829< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71131,18 +76468,18 @@ fn __action1690< let __end0 = __0.0; let __start1 = __1.0; let __end1 = __1.2; - let __temp0 = __action304( + let __temp0 = __action306( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - let __temp1 = __action303( + let __temp1 = __action305( mode, __1, ); let __temp1 = (__start1, __temp1, __end1); - __action1682( + __action1821( mode, __temp0, __0, @@ -71153,7 +76490,7 @@ fn __action1690< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1691< +fn __action1830< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71164,19 +76501,19 @@ fn __action1691< let __end0 = __0.0; let __start1 = __0.2; let __end1 = __1.0; - let __temp0 = __action304( + let __temp0 = __action306( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - let __temp1 = __action304( + let __temp1 = __action306( mode, &__start1, &__end1, ); let __temp1 = (__start1, __temp1, __end1); - __action1682( + __action1821( mode, __temp0, __0, @@ -71187,7 +76524,7 @@ fn __action1691< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1692< +fn __action1831< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -71199,17 +76536,17 @@ fn __action1692< let __end0 = __0.2; let __start1 = __2.0; let __end1 = __2.2; - let __temp0 = __action303( + let __temp0 = __action305( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - let __temp1 = __action303( + let __temp1 = __action305( mode, __2, ); let __temp1 = (__start1, __temp1, __end1); - __action1683( + __action1822( mode, __temp0, __1, @@ -71219,7 +76556,7 @@ fn __action1692< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1693< +fn __action1832< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -71230,18 +76567,18 @@ fn __action1693< let __end0 = __0.2; let __start1 = __1.2; let __end1 = __1.2; - let __temp0 = __action303( + let __temp0 = __action305( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - let __temp1 = __action304( + let __temp1 = __action306( mode, &__start1, &__end1, ); let __temp1 = (__start1, __temp1, __end1); - __action1683( + __action1822( mode, __temp0, __1, @@ -71251,7 +76588,7 @@ fn __action1693< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1694< +fn __action1833< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71262,18 +76599,18 @@ fn __action1694< let __end0 = __0.0; let __start1 = __1.0; let __end1 = __1.2; - let __temp0 = __action304( + let __temp0 = __action306( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - let __temp1 = __action303( + let __temp1 = __action305( mode, __1, ); let __temp1 = (__start1, __temp1, __end1); - __action1683( + __action1822( mode, __temp0, __0, @@ -71283,7 +76620,7 @@ fn __action1694< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1695< +fn __action1834< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71293,19 +76630,19 @@ fn __action1695< let __end0 = __0.0; let __start1 = __0.2; let __end1 = __0.2; - let __temp0 = __action304( + let __temp0 = __action306( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - let __temp1 = __action304( + let __temp1 = __action306( mode, &__start1, &__end1, ); let __temp1 = (__start1, __temp1, __end1); - __action1683( + __action1822( mode, __temp0, __0, @@ -71315,7 +76652,7 @@ fn __action1695< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1696< +fn __action1835< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71332,12 +76669,12 @@ fn __action1696< { let __start0 = __4.0; let __end0 = __4.2; - let __temp0 = __action220( + let __temp0 = __action222( mode, __4, ); let __temp0 = (__start0, __temp0, __end0); - __action1099( + __action1188( mode, __0, __1, @@ -71354,7 +76691,7 @@ fn __action1696< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1697< +fn __action1836< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71368,12 +76705,12 @@ fn __action1697< { let __start0 = __4.0; let __end0 = __4.2; - let __temp0 = __action220( + let __temp0 = __action222( mode, __4, ); let __temp0 = (__start0, __temp0, __end0); - __action1100( + __action1189( mode, __0, __1, @@ -71387,7 +76724,7 @@ fn __action1697< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1698< +fn __action1837< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71403,12 +76740,12 @@ fn __action1698< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action220( + let __temp0 = __action222( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1101( + __action1190( mode, __0, __1, @@ -71424,7 +76761,7 @@ fn __action1698< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1699< +fn __action1838< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71437,12 +76774,12 @@ fn __action1699< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action220( + let __temp0 = __action222( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1102( + __action1191( mode, __0, __1, @@ -71455,7 +76792,7 @@ fn __action1699< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1700< +fn __action1839< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -71463,12 +76800,12 @@ fn __action1700< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action220( + let __temp0 = __action222( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action371( + __action378( mode, __temp0, ) @@ -71476,7 +76813,7 @@ fn __action1700< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1701< +fn __action1840< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -71484,12 +76821,12 @@ fn __action1701< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action220( + let __temp0 = __action222( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action30( + __action31( mode, __temp0, ) @@ -71497,7 +76834,7 @@ fn __action1701< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1702< +fn __action1841< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -71505,12 +76842,12 @@ fn __action1702< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action220( + let __temp0 = __action222( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action32( + __action33( mode, __temp0, ) @@ -71518,7 +76855,7 @@ fn __action1702< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1703< +fn __action1842< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71527,12 +76864,12 @@ fn __action1703< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action220( + let __temp0 = __action222( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1446( + __action1580( mode, __0, __temp0, @@ -71541,7 +76878,7 @@ fn __action1703< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1704< +fn __action1843< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71551,12 +76888,12 @@ fn __action1704< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action220( + let __temp0 = __action222( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1447( + __action1581( mode, __0, __temp0, @@ -71566,7 +76903,7 @@ fn __action1704< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1705< +fn __action1844< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71575,12 +76912,12 @@ fn __action1705< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action1700( + let __temp0 = __action1839( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1282( + __action1412( mode, __0, __temp0, @@ -71589,7 +76926,7 @@ fn __action1705< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1706< +fn __action1845< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71597,13 +76934,13 @@ fn __action1706< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action372( + let __temp0 = __action379( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1282( + __action1412( mode, __0, __temp0, @@ -71612,7 +76949,7 @@ fn __action1706< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1707< +fn __action1846< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71621,12 +76958,12 @@ fn __action1707< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action1700( + let __temp0 = __action1839( mode, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1476( + __action1611( mode, __0, __temp0, @@ -71635,7 +76972,7 @@ fn __action1707< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1708< +fn __action1847< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71643,13 +76980,13 @@ fn __action1708< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action372( + let __temp0 = __action379( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1476( + __action1611( mode, __0, __temp0, @@ -71658,7 +76995,7 @@ fn __action1708< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1709< +fn __action1848< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -71666,12 +77003,12 @@ fn __action1709< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action1702( + let __temp0 = __action1841( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1502( + __action1637( mode, __temp0, ) @@ -71679,7 +77016,7 @@ fn __action1709< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1710< +fn __action1849< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -71688,12 +77025,12 @@ fn __action1710< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action1702( + let __temp0 = __action1841( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1503( + __action1638( mode, __temp0, __1, @@ -71702,7 +77039,7 @@ fn __action1710< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1711< +fn __action1850< >( mode: Mode, __0: (TextSize, ast::Expr, TextSize), @@ -71712,12 +77049,12 @@ fn __action1711< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action1702( + let __temp0 = __action1841( mode, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1276( + __action1405( mode, __temp0, __1, @@ -71727,7 +77064,7 @@ fn __action1711< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1712< +fn __action1851< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71740,12 +77077,12 @@ fn __action1712< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1528( + __action1663( mode, __0, __1, @@ -71758,7 +77095,7 @@ fn __action1712< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1713< +fn __action1852< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71770,13 +77107,13 @@ fn __action1713< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1528( + __action1663( mode, __0, __1, @@ -71789,7 +77126,7 @@ fn __action1713< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1714< +fn __action1853< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -71803,12 +77140,12 @@ fn __action1714< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1529( + __action1664( mode, __0, __1, @@ -71822,7 +77159,7 @@ fn __action1714< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1715< +fn __action1854< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -71835,13 +77172,13 @@ fn __action1715< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1529( + __action1664( mode, __0, __1, @@ -71855,7 +77192,7 @@ fn __action1715< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1716< +fn __action1855< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71867,12 +77204,12 @@ fn __action1716< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1530( + __action1665( mode, __0, __1, @@ -71884,7 +77221,7 @@ fn __action1716< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1717< +fn __action1856< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71895,13 +77232,13 @@ fn __action1717< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1530( + __action1665( mode, __0, __1, @@ -71913,7 +77250,7 @@ fn __action1717< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1718< +fn __action1857< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -71926,12 +77263,12 @@ fn __action1718< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1531( + __action1666( mode, __0, __1, @@ -71944,7 +77281,7 @@ fn __action1718< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1719< +fn __action1858< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -71956,13 +77293,13 @@ fn __action1719< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1531( + __action1666( mode, __0, __1, @@ -71975,7 +77312,7 @@ fn __action1719< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1720< +fn __action1859< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -71991,12 +77328,12 @@ fn __action1720< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1532( + __action1667( mode, __0, __1, @@ -72012,7 +77349,7 @@ fn __action1720< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1721< +fn __action1860< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -72027,13 +77364,13 @@ fn __action1721< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1532( + __action1667( mode, __0, __1, @@ -72049,7 +77386,7 @@ fn __action1721< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1722< +fn __action1861< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -72066,12 +77403,12 @@ fn __action1722< { let __start0 = __4.0; let __end0 = __4.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __4, ); let __temp0 = (__start0, __temp0, __end0); - __action1533( + __action1668( mode, __0, __1, @@ -72088,7 +77425,7 @@ fn __action1722< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1723< +fn __action1862< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -72104,13 +77441,13 @@ fn __action1723< { let __start0 = __3.2; let __end0 = __4.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1533( + __action1668( mode, __0, __1, @@ -72127,7 +77464,7 @@ fn __action1723< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1724< +fn __action1863< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -72141,12 +77478,12 @@ fn __action1724< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1534( + __action1669( mode, __0, __1, @@ -72160,7 +77497,7 @@ fn __action1724< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1725< +fn __action1864< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -72173,13 +77510,13 @@ fn __action1725< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1534( + __action1669( mode, __0, __1, @@ -72193,7 +77530,7 @@ fn __action1725< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1726< +fn __action1865< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -72208,12 +77545,12 @@ fn __action1726< { let __start0 = __4.0; let __end0 = __4.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __4, ); let __temp0 = (__start0, __temp0, __end0); - __action1535( + __action1670( mode, __0, __1, @@ -72228,7 +77565,7 @@ fn __action1726< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1727< +fn __action1866< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -72242,13 +77579,13 @@ fn __action1727< { let __start0 = __3.2; let __end0 = __4.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1535( + __action1670( mode, __0, __1, @@ -72263,7 +77600,7 @@ fn __action1727< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1728< +fn __action1867< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -72278,12 +77615,12 @@ fn __action1728< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1536( + __action1671( mode, __0, __1, @@ -72298,7 +77635,7 @@ fn __action1728< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1729< +fn __action1868< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -72312,13 +77649,13 @@ fn __action1729< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1536( + __action1671( mode, __0, __1, @@ -72333,7 +77670,7 @@ fn __action1729< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1730< +fn __action1869< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -72349,12 +77686,12 @@ fn __action1730< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1537( + __action1672( mode, __0, __1, @@ -72370,7 +77707,7 @@ fn __action1730< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1731< +fn __action1870< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -72385,13 +77722,13 @@ fn __action1731< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1537( + __action1672( mode, __0, __1, @@ -72407,7 +77744,7 @@ fn __action1731< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1732< +fn __action1871< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -72420,12 +77757,12 @@ fn __action1732< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1538( + __action1673( mode, __0, __1, @@ -72438,7 +77775,7 @@ fn __action1732< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1733< +fn __action1872< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -72450,13 +77787,13 @@ fn __action1733< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1538( + __action1673( mode, __0, __1, @@ -72469,7 +77806,7 @@ fn __action1733< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1734< +fn __action1873< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -72483,12 +77820,12 @@ fn __action1734< { let __start0 = __3.0; let __end0 = __3.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1539( + __action1674( mode, __0, __1, @@ -72502,7 +77839,7 @@ fn __action1734< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1735< +fn __action1874< >( mode: Mode, __0: (TextSize, alloc::vec::Vec, TextSize), @@ -72515,13 +77852,13 @@ fn __action1735< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1539( + __action1674( mode, __0, __1, @@ -72535,7 +77872,7 @@ fn __action1735< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1736< +fn __action1875< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -72547,12 +77884,12 @@ fn __action1736< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action284( + let __temp0 = __action286( mode, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1457( + __action1591( mode, __0, __1, @@ -72564,7 +77901,7 @@ fn __action1736< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1737< +fn __action1876< >( mode: Mode, __0: (TextSize, token::Tok, TextSize), @@ -72575,13 +77912,13 @@ fn __action1737< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action285( + let __temp0 = __action287( mode, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1457( + __action1591( mode, __0, __1, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_for.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_for.snap index fb74fe3e48..2d4bf6ba9b 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_for.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_for.snap @@ -6,6 +6,7 @@ expression: parse_ast For( StmtFor { range: 0..24, + is_async: false, target: Name( ExprName { range: 4..5, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_with.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_with.snap index c77adbe5f3..f977b37549 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_with.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_with.snap @@ -6,6 +6,7 @@ expression: parse_ast With( StmtWith { range: 0..17, + is_async: false, items: [ WithItem { range: 5..11, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_kw_only_args.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_kw_only_args.snap index 4e6cabe7e1..ad7dbadf9a 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_kw_only_args.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_kw_only_args.snap @@ -7,6 +7,7 @@ Ok( FunctionDef( StmtFunctionDef { range: 0..23, + is_async: false, decorator_list: [], name: Identifier { id: "f", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_kw_only_args_with_defaults.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_kw_only_args_with_defaults.snap index 2008962778..33a05a02ec 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_kw_only_args_with_defaults.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_kw_only_args_with_defaults.snap @@ -7,6 +7,7 @@ Ok( FunctionDef( StmtFunctionDef { range: 0..29, + is_async: false, decorator_list: [], name: Identifier { id: "f", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_no_args.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_no_args.snap index 2c5ceaf090..4e2121628d 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_no_args.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_no_args.snap @@ -7,6 +7,7 @@ Ok( FunctionDef( StmtFunctionDef { range: 0..13, + is_async: false, decorator_list: [], name: Identifier { id: "f", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_no_args_with_ranges.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_no_args_with_ranges.snap index 2c5ceaf090..4e2121628d 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_no_args_with_ranges.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_no_args_with_ranges.snap @@ -7,6 +7,7 @@ Ok( FunctionDef( StmtFunctionDef { range: 0..13, + is_async: false, decorator_list: [], name: Identifier { id: "f", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args.snap index 5e32c2421e..cd12db1311 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args.snap @@ -7,6 +7,7 @@ Ok( FunctionDef( StmtFunctionDef { range: 0..32, + is_async: false, decorator_list: [], name: Identifier { id: "f", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults.snap index fe9ac3afcf..4276b8915b 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults.snap @@ -7,6 +7,7 @@ Ok( FunctionDef( StmtFunctionDef { range: 0..38, + is_async: false, decorator_list: [], name: Identifier { id: "f", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults_and_varargs.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults_and_varargs.snap index 8944370563..ba1ece7a57 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults_and_varargs.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults_and_varargs.snap @@ -7,6 +7,7 @@ Ok( FunctionDef( StmtFunctionDef { range: 0..42, + is_async: false, decorator_list: [], name: Identifier { id: "f", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults_and_varargs_and_kwargs.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults_and_varargs_and_kwargs.snap index e5ef63795f..dc2888c7bd 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults_and_varargs_and_kwargs.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_and_kw_only_args_with_defaults_and_varargs_and_kwargs.snap @@ -7,6 +7,7 @@ Ok( FunctionDef( StmtFunctionDef { range: 0..52, + is_async: false, decorator_list: [], name: Identifier { id: "f", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args.snap index 8a969a82e6..788b1b7a49 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args.snap @@ -7,6 +7,7 @@ Ok( FunctionDef( StmtFunctionDef { range: 0..20, + is_async: false, decorator_list: [], name: Identifier { id: "f", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args_with_defaults.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args_with_defaults.snap index 4f369f862b..7c0459ab6c 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args_with_defaults.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args_with_defaults.snap @@ -7,6 +7,7 @@ Ok( FunctionDef( StmtFunctionDef { range: 0..26, + is_async: false, decorator_list: [], name: Identifier { id: "f", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args_with_ranges.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args_with_ranges.snap index 8a969a82e6..788b1b7a49 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args_with_ranges.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__function_pos_args_with_ranges.snap @@ -7,6 +7,7 @@ Ok( FunctionDef( StmtFunctionDef { range: 0..20, + is_async: false, decorator_list: [], name: Identifier { id: "f", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__decorator_ranges.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__decorator_ranges.snap index b976725751..160699606e 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__decorator_ranges.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__decorator_ranges.snap @@ -6,6 +6,7 @@ expression: parse_ast FunctionDef( StmtFunctionDef { range: 0..34, + is_async: false, decorator_list: [ Decorator { range: 0..13, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__dict_unpacking.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__dict_unpacking.snap index 6d54f4db9e..ff72ab9daf 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__dict_unpacking.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__dict_unpacking.snap @@ -11,7 +11,10 @@ Dict( ExprConstant { range: 1..4, value: Str( - "a", + StringConstant { + value: "a", + implicit_concatenated: false, + }, ), kind: None, }, @@ -23,7 +26,10 @@ Dict( ExprConstant { range: 16..19, value: Str( - "d", + StringConstant { + value: "d", + implicit_concatenated: false, + }, ), kind: None, }, @@ -35,7 +41,10 @@ Dict( ExprConstant { range: 6..9, value: Str( - "b", + StringConstant { + value: "b", + implicit_concatenated: false, + }, ), kind: None, }, @@ -51,7 +60,10 @@ Dict( ExprConstant { range: 21..24, value: Str( - "e", + StringConstant { + value: "e", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__generator_expression_argument.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__generator_expression_argument.snap index 9f5db3c598..4617a2a863 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__generator_expression_argument.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__generator_expression_argument.snap @@ -12,7 +12,10 @@ Call( ExprConstant { range: 0..3, value: Str( - " ", + StringConstant { + value: " ", + implicit_concatenated: false, + }, ), kind: None, }, @@ -68,7 +71,10 @@ Call( ExprConstant { range: 43..53, value: Str( - "LIMIT %d", + StringConstant { + value: "LIMIT %d", + implicit_concatenated: false, + }, ), kind: None, }, @@ -109,7 +115,10 @@ Call( ExprConstant { range: 91..102, value: Str( - "OFFSET %d", + StringConstant { + value: "OFFSET %d", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__jupyter_magic.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__ipython_escape_commands.snap similarity index 69% rename from crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__jupyter_magic.snap rename to crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__ipython_escape_commands.snap index adfa86aeed..3d06cd7aeb 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__jupyter_magic.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__ipython_escape_commands.snap @@ -4,7 +4,7 @@ expression: parse_ast --- Module( ModModule { - range: 0..803, + range: 0..929, body: [ Expr( StmtExpr { @@ -31,92 +31,92 @@ Module( ), }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 66..73, kind: Help2, value: "a.foo", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 74..80, kind: Help, value: "a.foo", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 81..88, kind: Help, - value: "a.foo?", + value: "a.foo", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 89..100, kind: Help2, - value: "a.foo()??", + value: "a.foo()", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 115..128, kind: Magic, value: "timeit a = b", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 129..147, kind: Magic, value: "timeit foo(b) % 3", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 148..176, kind: Magic, value: "alias showPath pwd && ls -a", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 177..205, kind: Magic, value: "timeit a = foo(b); b = 2", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 206..226, kind: Magic, value: "matplotlib --inline", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 227..253, kind: Magic, value: "matplotlib --inline", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 277..309, kind: Shell, value: "pwd && ls -a | sed 's/^/\\ /'", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 310..347, kind: Shell, value: "pwd && ls -a | sed 's/^/\\\\ /'", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 348..393, kind: ShCap, value: "cd /Users/foo/Library/Application\\ Support/", @@ -125,6 +125,7 @@ Module( FunctionDef( StmtFunctionDef { range: 566..626, + is_async: false, decorator_list: [], name: Identifier { id: "foo", @@ -175,22 +176,22 @@ Module( ], }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 656..664, kind: Paren, value: "foo 1 2", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 665..673, kind: Quote2, value: "foo 1 2", }, ), - LineMagic( - StmtLineMagic { + IpyEscapeCommand( + StmtIpyEscapeCommand { range: 674..682, kind: Quote, value: "foo 1 2", @@ -198,30 +199,31 @@ Module( ), For( StmtFor { - range: 701..727, + range: 711..737, + is_async: false, target: Name( ExprName { - range: 705..706, + range: 715..716, id: "a", ctx: Store, }, ), iter: Call( ExprCall { - range: 710..718, + range: 720..728, func: Name( ExprName { - range: 710..715, + range: 720..725, id: "range", ctx: Load, }, ), arguments: Arguments { - range: 715..718, + range: 725..728, args: [ Constant( ExprConstant { - range: 716..717, + range: 726..727, value: Int( 5, ), @@ -234,9 +236,9 @@ Module( }, ), body: [ - LineMagic( - StmtLineMagic { - range: 724..727, + IpyEscapeCommand( + StmtIpyEscapeCommand { + range: 734..737, kind: Shell, value: "ls", }, @@ -247,19 +249,19 @@ Module( ), Assign( StmtAssign { - range: 729..738, + range: 739..748, targets: [ Name( ExprName { - range: 729..731, + range: 739..741, id: "p1", ctx: Store, }, ), ], - value: LineMagic( - ExprLineMagic { - range: 734..738, + value: IpyEscapeCommand( + ExprIpyEscapeCommand { + range: 744..748, kind: Shell, value: "pwd", }, @@ -268,25 +270,25 @@ Module( ), AnnAssign( StmtAnnAssign { - range: 739..753, + range: 749..763, target: Name( ExprName { - range: 739..741, + range: 749..751, id: "p2", ctx: Store, }, ), annotation: Name( ExprName { - range: 743..746, + range: 753..756, id: "str", ctx: Load, }, ), value: Some( - LineMagic( - ExprLineMagic { - range: 749..753, + IpyEscapeCommand( + ExprIpyEscapeCommand { + range: 759..763, kind: Shell, value: "pwd", }, @@ -297,53 +299,102 @@ Module( ), Assign( StmtAssign { - range: 754..774, + range: 764..784, targets: [ Name( ExprName { - range: 754..757, + range: 764..767, id: "foo", ctx: Store, }, ), ], - value: LineMagic( - ExprLineMagic { - range: 760..774, + value: IpyEscapeCommand( + ExprIpyEscapeCommand { + range: 770..784, kind: Magic, value: "foo bar", }, ), }, ), - LineMagic( - StmtLineMagic { - range: 776..781, + IpyEscapeCommand( + StmtIpyEscapeCommand { + range: 786..791, kind: Magic, value: " foo", }, ), Assign( StmtAssign { - range: 782..803, + range: 792..813, targets: [ Name( ExprName { - range: 782..785, + range: 792..795, id: "foo", ctx: Store, }, ), ], - value: LineMagic( - ExprLineMagic { - range: 788..803, + value: IpyEscapeCommand( + ExprIpyEscapeCommand { + range: 798..813, kind: Magic, value: "foo # comment", }, ), }, ), + IpyEscapeCommand( + StmtIpyEscapeCommand { + range: 838..842, + kind: Help, + value: "foo", + }, + ), + IpyEscapeCommand( + StmtIpyEscapeCommand { + range: 843..852, + kind: Help2, + value: "foo.bar", + }, + ), + IpyEscapeCommand( + StmtIpyEscapeCommand { + range: 853..865, + kind: Help, + value: "foo.bar.baz", + }, + ), + IpyEscapeCommand( + StmtIpyEscapeCommand { + range: 866..874, + kind: Help2, + value: "foo[0]", + }, + ), + IpyEscapeCommand( + StmtIpyEscapeCommand { + range: 875..885, + kind: Help, + value: "foo[0][1]", + }, + ), + IpyEscapeCommand( + StmtIpyEscapeCommand { + range: 886..905, + kind: Help2, + value: "foo.bar[0].baz[1]", + }, + ), + IpyEscapeCommand( + StmtIpyEscapeCommand { + range: 906..929, + kind: Help2, + value: "foo.bar[0].baz[2].egg", + }, + ), ], }, ) diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__match.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__match.snap index 69099b2bc2..c862d1c1da 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__match.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__match.snap @@ -15,7 +15,10 @@ expression: parse_ast ExprConstant { range: 8..14, value: Str( - "test", + StringConstant { + value: "test", + implicit_concatenated: false, + }, ), kind: None, }, @@ -100,7 +103,10 @@ expression: parse_ast ExprConstant { range: 81..88, value: Str( - "label", + StringConstant { + value: "label", + implicit_concatenated: false, + }, ), kind: None, }, @@ -112,7 +118,10 @@ expression: parse_ast ExprConstant { range: 90..96, value: Str( - "test", + StringConstant { + value: "test", + implicit_concatenated: false, + }, ), kind: None, }, @@ -131,7 +140,10 @@ expression: parse_ast ExprConstant { range: 118..125, value: Str( - "label", + StringConstant { + value: "label", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_class.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_class.snap index 9ac6469514..e567e1d4e4 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_class.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_class.snap @@ -38,6 +38,7 @@ expression: "parse_suite(source, \"\").unwrap()" FunctionDef( StmtFunctionDef { range: 18..44, + is_async: false, decorator_list: [], name: Identifier { id: "__init__", @@ -78,6 +79,7 @@ expression: "parse_suite(source, \"\").unwrap()" FunctionDef( StmtFunctionDef { range: 46..98, + is_async: false, decorator_list: [], name: Identifier { id: "method_with_default", @@ -115,7 +117,10 @@ expression: "parse_suite(source, \"\").unwrap()" ExprConstant { range: 80..89, value: Str( - "default", + StringConstant { + value: "default", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_f_string.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_f_string.snap index cc110c3f27..f65e153bea 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_f_string.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_f_string.snap @@ -6,20 +6,24 @@ expression: parse_ast Expr( StmtExpr { range: 0..14, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..14, values: [ Constant( ExprConstant { range: 2..13, value: Str( - "Hello world", + StringConstant { + value: "Hello world", + implicit_concatenated: false, + }, ), kind: None, }, ), ], + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_function_definition.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_function_definition.snap index 1c03ac6610..cf0f7df886 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_function_definition.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_function_definition.snap @@ -6,6 +6,7 @@ expression: "parse_suite(source, \"\").unwrap()" FunctionDef( StmtFunctionDef { range: 0..20, + is_async: false, decorator_list: [], name: Identifier { id: "func", @@ -53,6 +54,7 @@ expression: "parse_suite(source, \"\").unwrap()" FunctionDef( StmtFunctionDef { range: 22..53, + is_async: false, decorator_list: [], name: Identifier { id: "func", @@ -132,6 +134,7 @@ expression: "parse_suite(source, \"\").unwrap()" FunctionDef( StmtFunctionDef { range: 55..91, + is_async: false, decorator_list: [], name: Identifier { id: "func", @@ -219,6 +222,7 @@ expression: "parse_suite(source, \"\").unwrap()" FunctionDef( StmtFunctionDef { range: 93..138, + is_async: false, decorator_list: [], name: Identifier { id: "func", @@ -321,6 +325,7 @@ expression: "parse_suite(source, \"\").unwrap()" FunctionDef( StmtFunctionDef { range: 140..171, + is_async: false, decorator_list: [], name: Identifier { id: "func", @@ -393,6 +398,7 @@ expression: "parse_suite(source, \"\").unwrap()" FunctionDef( StmtFunctionDef { range: 173..230, + is_async: false, decorator_list: [], name: Identifier { id: "func", @@ -496,6 +502,7 @@ expression: "parse_suite(source, \"\").unwrap()" FunctionDef( StmtFunctionDef { range: 232..273, + is_async: false, decorator_list: [], name: Identifier { id: "func", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_kwargs.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_kwargs.snap index b9ff2b631a..dbf2ae2258 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_kwargs.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_kwargs.snap @@ -23,7 +23,10 @@ expression: parse_ast ExprConstant { range: 8..20, value: Str( - "positional", + StringConstant { + value: "positional", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_print_2.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_print_2.snap index 57fec3fd7b..583746f9dd 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_print_2.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_print_2.snap @@ -23,7 +23,10 @@ expression: parse_ast ExprConstant { range: 6..19, value: Str( - "Hello world", + StringConstant { + value: "Hello world", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_print_hello.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_print_hello.snap index f78c89031c..fab7de1e6a 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_print_hello.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_print_hello.snap @@ -23,7 +23,10 @@ expression: parse_ast ExprConstant { range: 6..19, value: Str( - "Hello world", + StringConstant { + value: "Hello world", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_string.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_string.snap index 21c12fb897..301501a7d9 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_string.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_string.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..13, value: Str( - "Hello world", + StringConstant { + value: "Hello world", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_type_declaration.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_type_declaration.snap index d2763aee2e..2186cc9152 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_type_declaration.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_type_declaration.snap @@ -82,7 +82,10 @@ expression: "parse_suite(source, \"\").unwrap()" ExprConstant { range: 48..61, value: Str( - "ForwardRefY", + StringConstant { + value: "ForwardRefY", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__patma.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__patma.snap index 0951751f81..a29d01b17a 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__patma.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__patma.snap @@ -522,7 +522,10 @@ expression: parse_ast ExprConstant { range: 484..489, value: Str( - "seq", + StringConstant { + value: "seq", + implicit_concatenated: false, + }, ), kind: None, }, @@ -552,7 +555,10 @@ expression: parse_ast ExprConstant { range: 518..523, value: Str( - "map", + StringConstant { + value: "map", + implicit_concatenated: false, + }, ), kind: None, }, @@ -857,7 +863,10 @@ expression: parse_ast ExprConstant { range: 664..667, value: Str( - "X", + StringConstant { + value: "X", + implicit_concatenated: false, + }, ), kind: None, }, @@ -1617,7 +1626,10 @@ expression: parse_ast ExprConstant { range: 1287..1292, value: Str( - "foo", + StringConstant { + value: "foo", + implicit_concatenated: false, + }, ), kind: None, }, @@ -2565,7 +2577,10 @@ expression: parse_ast ExprConstant { range: 2036..2038, value: Str( - "", + StringConstant { + value: "", + implicit_concatenated: false, + }, ), kind: None, }, @@ -2611,7 +2626,10 @@ expression: parse_ast ExprConstant { range: 2064..2066, value: Str( - "", + StringConstant { + value: "", + implicit_concatenated: false, + }, ), kind: None, }, @@ -3251,7 +3269,10 @@ expression: parse_ast ExprConstant { range: 2449..2452, value: Str( - "X", + StringConstant { + value: "X", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__try.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__try.snap index 3b349a0b60..e3fd432492 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__try.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__try.snap @@ -79,15 +79,18 @@ expression: parse_ast arguments: Arguments { range: 61..82, args: [ - JoinedStr( - ExprJoinedStr { + FString( + ExprFString { range: 62..81, values: [ Constant( ExprConstant { range: 64..71, value: Str( - "caught ", + StringConstant { + value: "caught ", + implicit_concatenated: false, + }, ), kind: None, }, @@ -126,6 +129,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: false, }, ), ], @@ -173,15 +177,18 @@ expression: parse_ast arguments: Arguments { range: 113..134, args: [ - JoinedStr( - ExprJoinedStr { + FString( + ExprFString { range: 114..133, values: [ Constant( ExprConstant { range: 116..123, value: Str( - "caught ", + StringConstant { + value: "caught ", + implicit_concatenated: false, + }, ), kind: None, }, @@ -220,6 +227,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: false, }, ), ], @@ -235,6 +243,7 @@ expression: parse_ast ], orelse: [], finalbody: [], + is_star: false, }, ), ] diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__try_star.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__try_star.snap index f11ce2f994..7940ea7359 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__try_star.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__try_star.snap @@ -3,8 +3,8 @@ source: crates/ruff_python_parser/src/parser.rs expression: parse_ast --- [ - TryStar( - StmtTryStar { + Try( + StmtTry { range: 0..260, body: [ Raise( @@ -28,7 +28,10 @@ expression: parse_ast ExprConstant { range: 30..34, value: Str( - "eg", + StringConstant { + value: "eg", + implicit_concatenated: false, + }, ), kind: None, }, @@ -195,15 +198,18 @@ expression: parse_ast arguments: Arguments { range: 132..180, args: [ - JoinedStr( - ExprJoinedStr { + FString( + ExprFString { range: 133..179, values: [ Constant( ExprConstant { range: 135..142, value: Str( - "caught ", + StringConstant { + value: "caught ", + implicit_concatenated: false, + }, ), kind: None, }, @@ -245,7 +251,10 @@ expression: parse_ast ExprConstant { range: 151..164, value: Str( - " with nested ", + StringConstant { + value: " with nested ", + implicit_concatenated: false, + }, ), kind: None, }, @@ -276,6 +285,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: false, }, ), ], @@ -323,15 +333,18 @@ expression: parse_ast arguments: Arguments { range: 212..260, args: [ - JoinedStr( - ExprJoinedStr { + FString( + ExprFString { range: 213..259, values: [ Constant( ExprConstant { range: 215..222, value: Str( - "caught ", + StringConstant { + value: "caught ", + implicit_concatenated: false, + }, ), kind: None, }, @@ -373,7 +386,10 @@ expression: parse_ast ExprConstant { range: 231..244, value: Str( - " with nested ", + StringConstant { + value: " with nested ", + implicit_concatenated: false, + }, ), kind: None, }, @@ -404,6 +420,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: false, }, ), ], @@ -419,6 +436,7 @@ expression: parse_ast ], orelse: [], finalbody: [], + is_star: true, }, ), ] diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__variadic_generics.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__variadic_generics.snap index ec38d5c16b..891e02d914 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__variadic_generics.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__variadic_generics.snap @@ -6,6 +6,7 @@ expression: parse_ast FunctionDef( StmtFunctionDef { range: 1..49, + is_async: false, decorator_list: [], name: Identifier { id: "args_to_tuple", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__with_statement.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__with_statement.snap index 668b5381fe..abae0fb4bc 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__with_statement.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__with_statement.snap @@ -1,11 +1,12 @@ --- source: crates/ruff_python_parser/src/parser.rs -expression: "ast::Suite::parse(source, \"\").unwrap()" +expression: "parse_suite(source, \"\").unwrap()" --- [ With( StmtWith { range: 0..12, + is_async: false, items: [ WithItem { range: 5..6, @@ -33,6 +34,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 13..30, + is_async: false, items: [ WithItem { range: 18..24, @@ -68,6 +70,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 31..46, + is_async: false, items: [ WithItem { range: 36..37, @@ -108,6 +111,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 47..72, + is_async: false, items: [ WithItem { range: 52..58, @@ -164,6 +168,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 73..97, + is_async: false, items: [ WithItem { range: 78..91, @@ -214,6 +219,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 98..127, + is_async: false, items: [ WithItem { range: 103..121, @@ -272,6 +278,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 128..141, + is_async: false, items: [ WithItem { range: 133..135, @@ -297,6 +304,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 142..160, + is_async: false, items: [ WithItem { range: 147..154, @@ -330,6 +338,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 161..175, + is_async: false, items: [ WithItem { range: 167..168, @@ -357,6 +366,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 176..195, + is_async: false, items: [ WithItem { range: 181..189, @@ -392,6 +402,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 196..211, + is_async: false, items: [ WithItem { range: 202..203, @@ -419,6 +430,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 212..232, + is_async: false, items: [ WithItem { range: 217..226, @@ -462,6 +474,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 233..250, + is_async: false, items: [ WithItem { range: 239..243, @@ -502,6 +515,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 251..273, + is_async: false, items: [ WithItem { range: 256..267, @@ -554,6 +568,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 274..290, + is_async: false, items: [ WithItem { range: 279..284, @@ -593,6 +608,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 291..312, + is_async: false, items: [ WithItem { range: 296..306, @@ -640,6 +656,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 313..331, + is_async: false, items: [ WithItem { range: 318..325, @@ -688,6 +705,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 332..355, + is_async: false, items: [ WithItem { range: 337..349, @@ -744,6 +762,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 356..375, + is_async: false, items: [ WithItem { range: 361..369, @@ -783,6 +802,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 376..400, + is_async: false, items: [ WithItem { range: 381..394, @@ -830,6 +850,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 401..428, + is_async: false, items: [ WithItem { range: 406..422, @@ -898,6 +919,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 429..461, + is_async: false, items: [ WithItem { range: 434..455, @@ -974,6 +996,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 462..481, + is_async: false, items: [ WithItem { range: 468..474, @@ -1009,6 +1032,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 482..502, + is_async: false, items: [ WithItem { range: 488..494, @@ -1044,6 +1068,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 503..530, + is_async: false, items: [ WithItem { range: 509..515, @@ -1100,6 +1125,7 @@ expression: "ast::Suite::parse(source, \"\").unwrap()" With( StmtWith { range: 531..559, + is_async: false, items: [ WithItem { range: 537..543, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__backspace_alias.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__backspace_alias.snap index 11ee52f9fc..1d1aef73a6 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__backspace_alias.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__backspace_alias.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..15, value: Str( - "\u{8}", + StringConstant { + value: "\u{8}", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__bell_alias.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__bell_alias.snap index 3d40adcad1..5c4b9fda0f 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__bell_alias.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__bell_alias.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..9, value: Str( - "\u{7}", + StringConstant { + value: "\u{7}", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__carriage_return_alias.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__carriage_return_alias.snap index 6b57141008..f16ca7fce6 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__carriage_return_alias.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__carriage_return_alias.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..21, value: Str( - "\r", + StringConstant { + value: "\r", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__character_tabulation_with_justification_alias.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__character_tabulation_with_justification_alias.snap index b172239e13..ba1969efc4 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__character_tabulation_with_justification_alias.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__character_tabulation_with_justification_alias.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..45, value: Str( - "\u{89}", + StringConstant { + value: "\u{89}", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__delete_alias.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__delete_alias.snap index 9bd9b1231d..4c9ef1738a 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__delete_alias.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__delete_alias.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..12, value: Str( - "\u{7f}", + StringConstant { + value: "\u{7f}", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__double_quoted_byte.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__double_quoted_byte.snap index 1b6f47e27a..7ec79b41ff 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__double_quoted_byte.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__double_quoted_byte.snap @@ -10,264 +10,267 @@ expression: parse_ast ExprConstant { range: 0..738, value: Bytes( - [ - 0, - 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, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - ], + BytesConstant { + value: [ + 0, + 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, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + ], + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_alias.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_alias.snap index 83ac74c136..7777636fcc 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_alias.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_alias.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..12, value: Str( - "\u{1b}", + StringConstant { + value: "\u{1b}", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_char_in_byte_literal.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_char_in_byte_literal.snap index c0da7019e9..85a4d7705d 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_char_in_byte_literal.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_char_in_byte_literal.snap @@ -10,18 +10,21 @@ expression: parse_ast ExprConstant { range: 0..13, value: Bytes( - [ - 111, - 109, - 107, - 109, - 111, - 107, - 92, - 88, - 97, - 97, - ], + BytesConstant { + value: [ + 111, + 109, + 107, + 109, + 111, + 107, + 92, + 88, + 97, + 97, + ], + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_octet.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_octet.snap index 856ca44647..fc484d7a07 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_octet.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__escape_octet.snap @@ -10,13 +10,16 @@ expression: parse_ast ExprConstant { range: 0..14, value: Bytes( - [ - 35, - 97, - 4, - 83, - 52, - ], + BytesConstant { + value: [ + 35, + 97, + 4, + 83, + 52, + ], + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__form_feed_alias.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__form_feed_alias.snap index 4773e4f2d3..2ec6f9f544 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__form_feed_alias.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__form_feed_alias.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..15, value: Str( - "\u{c}", + StringConstant { + value: "\u{c}", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_constant_range.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_constant_range.snap index 102e64ae26..6b4a1a92c8 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_constant_range.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_constant_range.snap @@ -6,15 +6,18 @@ expression: parse_ast Expr( StmtExpr { range: 0..22, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..22, values: [ Constant( ExprConstant { range: 2..5, value: Str( - "aaa", + StringConstant { + value: "aaa", + implicit_concatenated: false, + }, ), kind: None, }, @@ -38,7 +41,10 @@ expression: parse_ast ExprConstant { range: 10..13, value: Str( - "ccc", + StringConstant { + value: "ccc", + implicit_concatenated: false, + }, ), kind: None, }, @@ -62,12 +68,16 @@ expression: parse_ast ExprConstant { range: 18..21, value: Str( - "eee", + StringConstant { + value: "eee", + implicit_concatenated: false, + }, ), kind: None, }, ), ], + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_escaped_character.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_escaped_character.snap index 0e906d3f0b..d96a1cef58 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_escaped_character.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_escaped_character.snap @@ -6,15 +6,18 @@ expression: parse_ast Expr( StmtExpr { range: 0..8, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..8, values: [ Constant( ExprConstant { range: 2..4, value: Str( - "\\", + StringConstant { + value: "\\", + implicit_concatenated: false, + }, ), kind: None, }, @@ -35,6 +38,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_escaped_newline.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_escaped_newline.snap index ff4ea50d1c..fe3c6d028e 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_escaped_newline.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_escaped_newline.snap @@ -6,15 +6,18 @@ expression: parse_ast Expr( StmtExpr { range: 0..8, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..8, values: [ Constant( ExprConstant { range: 2..4, value: Str( - "\n", + StringConstant { + value: "\n", + implicit_concatenated: false, + }, ), kind: None, }, @@ -35,6 +38,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_line_continuation.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_line_continuation.snap index 934f1939f6..35cff59a24 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_line_continuation.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_line_continuation.snap @@ -6,15 +6,18 @@ expression: parse_ast Expr( StmtExpr { range: 0..9, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..9, values: [ Constant( ExprConstant { range: 3..5, value: Str( - "\\\n", + StringConstant { + value: "\\\n", + implicit_concatenated: false, + }, ), kind: None, }, @@ -35,6 +38,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_parse_self_documenting_base_more.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_parse_self_documenting_base_more.snap index dda8ce1dce..655b3cc3d8 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_parse_self_documenting_base_more.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_parse_self_documenting_base_more.snap @@ -7,7 +7,10 @@ expression: parse_ast ExprConstant { range: 2..6, value: Str( - "mix ", + StringConstant { + value: "mix ", + implicit_concatenated: false, + }, ), kind: None, }, @@ -36,7 +39,10 @@ expression: parse_ast ExprConstant { range: 13..28, value: Str( - " with text and ", + StringConstant { + value: " with text and ", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_parse_self_documenting_format.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_parse_self_documenting_format.snap index 5363ceac88..22b250a8ce 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_parse_self_documenting_format.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_parse_self_documenting_format.snap @@ -21,20 +21,24 @@ expression: parse_ast ), conversion: None, format_spec: Some( - JoinedStr( - ExprJoinedStr { + FString( + ExprFString { range: 9..12, values: [ Constant( ExprConstant { range: 9..12, value: Str( - ">10", + StringConstant { + value: ">10", + implicit_concatenated: false, + }, ), kind: None, }, ), ], + implicit_concatenated: false, }, ), ), diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_unescaped_newline.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_unescaped_newline.snap index 4f176ac117..0b711c8cc9 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_unescaped_newline.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__fstring_unescaped_newline.snap @@ -6,15 +6,18 @@ expression: parse_ast Expr( StmtExpr { range: 0..11, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..11, values: [ Constant( ExprConstant { range: 4..5, value: Str( - "\n", + StringConstant { + value: "\n", + implicit_concatenated: false, + }, ), kind: None, }, @@ -35,6 +38,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__hts_alias.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__hts_alias.snap index 3d25aecfae..8017bb4b35 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__hts_alias.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__hts_alias.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..9, value: Str( - "\u{88}", + StringConstant { + value: "\u{88}", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_1.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_1.snap index 5212d6292e..8680272f60 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_1.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_1.snap @@ -6,20 +6,24 @@ expression: parse_ast Expr( StmtExpr { range: 0..17, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..17, values: [ Constant( ExprConstant { range: 1..16, value: Str( - "Hello world", + StringConstant { + value: "Hello world", + implicit_concatenated: true, + }, ), kind: None, }, ), ], + implicit_concatenated: true, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_2.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_2.snap index 5212d6292e..8680272f60 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_2.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_2.snap @@ -6,20 +6,24 @@ expression: parse_ast Expr( StmtExpr { range: 0..17, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..17, values: [ Constant( ExprConstant { range: 1..16, value: Str( - "Hello world", + StringConstant { + value: "Hello world", + implicit_concatenated: true, + }, ), kind: None, }, ), ], + implicit_concatenated: true, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_3.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_3.snap index f634b86a19..2c5e80aad5 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_3.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_3.snap @@ -6,15 +6,18 @@ expression: parse_ast Expr( StmtExpr { range: 0..22, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..22, values: [ Constant( ExprConstant { range: 1..16, value: Str( - "Hello world", + StringConstant { + value: "Hello world", + implicit_concatenated: true, + }, ), kind: None, }, @@ -26,7 +29,10 @@ expression: parse_ast ExprConstant { range: 17..20, value: Str( - "!", + StringConstant { + value: "!", + implicit_concatenated: false, + }, ), kind: None, }, @@ -37,6 +43,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: true, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_4.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_4.snap new file mode 100644 index 0000000000..19e8b7ae04 --- /dev/null +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_f_string_concat_4.snap @@ -0,0 +1,63 @@ +--- +source: crates/ruff_python_parser/src/string.rs +expression: parse_ast +--- +[ + Expr( + StmtExpr { + range: 0..31, + value: FString( + ExprFString { + range: 0..31, + values: [ + Constant( + ExprConstant { + range: 1..16, + value: Str( + StringConstant { + value: "Hello world", + implicit_concatenated: true, + }, + ), + kind: None, + }, + ), + FormattedValue( + ExprFormattedValue { + range: 16..21, + value: Constant( + ExprConstant { + range: 17..20, + value: Str( + StringConstant { + value: "!", + implicit_concatenated: false, + }, + ), + kind: None, + }, + ), + debug_text: None, + conversion: None, + format_spec: None, + }, + ), + Constant( + ExprConstant { + range: 24..30, + value: Str( + StringConstant { + value: "again!", + implicit_concatenated: true, + }, + ), + kind: None, + }, + ), + ], + implicit_concatenated: true, + }, + ), + }, + ), +] diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring.snap index 12a39ccb92..282eb79f97 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring.snap @@ -37,7 +37,10 @@ expression: parse_ast ExprConstant { range: 10..17, value: Str( - "{foo}", + StringConstant { + value: "{foo}", + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_nested_concatenation_string_spec.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_nested_concatenation_string_spec.snap new file mode 100644 index 0000000000..97525a5e10 --- /dev/null +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_nested_concatenation_string_spec.snap @@ -0,0 +1,50 @@ +--- +source: crates/ruff_python_parser/src/string.rs +expression: parse_ast +--- +[ + FormattedValue( + ExprFormattedValue { + range: 2..15, + value: Name( + ExprName { + range: 3..6, + id: "foo", + ctx: Load, + }, + ), + debug_text: None, + conversion: None, + format_spec: Some( + FString( + ExprFString { + range: 7..14, + values: [ + FormattedValue( + ExprFormattedValue { + range: 7..14, + value: Constant( + ExprConstant { + range: 8..13, + value: Str( + StringConstant { + value: "", + implicit_concatenated: true, + }, + ), + kind: None, + }, + ), + debug_text: None, + conversion: None, + format_spec: None, + }, + ), + ], + implicit_concatenated: false, + }, + ), + ), + }, + ), +] diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_nested_spec.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_nested_spec.snap index b88ece7331..d93be4602f 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_nested_spec.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_nested_spec.snap @@ -16,8 +16,8 @@ expression: parse_ast debug_text: None, conversion: None, format_spec: Some( - JoinedStr( - ExprJoinedStr { + FString( + ExprFString { range: 7..13, values: [ FormattedValue( @@ -36,6 +36,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: false, }, ), ), diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_nested_string_spec.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_nested_string_spec.snap new file mode 100644 index 0000000000..31db5e6cf8 --- /dev/null +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_nested_string_spec.snap @@ -0,0 +1,50 @@ +--- +source: crates/ruff_python_parser/src/string.rs +expression: parse_ast +--- +[ + FormattedValue( + ExprFormattedValue { + range: 2..12, + value: Name( + ExprName { + range: 3..6, + id: "foo", + ctx: Load, + }, + ), + debug_text: None, + conversion: None, + format_spec: Some( + FString( + ExprFString { + range: 7..11, + values: [ + FormattedValue( + ExprFormattedValue { + range: 7..11, + value: Constant( + ExprConstant { + range: 8..10, + value: Str( + StringConstant { + value: "", + implicit_concatenated: false, + }, + ), + kind: None, + }, + ), + debug_text: None, + conversion: None, + format_spec: None, + }, + ), + ], + implicit_concatenated: false, + }, + ), + ), + }, + ), +] diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_not_nested_spec.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_not_nested_spec.snap index 98f2635d01..5a621fc857 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_not_nested_spec.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_not_nested_spec.snap @@ -16,20 +16,24 @@ expression: parse_ast debug_text: None, conversion: None, format_spec: Some( - JoinedStr( - ExprJoinedStr { + FString( + ExprFString { range: 7..11, values: [ Constant( ExprConstant { range: 7..11, value: Str( - "spec", + StringConstant { + value: "spec", + implicit_concatenated: false, + }, ), kind: None, }, ), ], + implicit_concatenated: false, }, ), ), diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_string_concat.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_string_concat.snap index 68f419ced0..2c5d32050d 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_string_concat.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_string_concat.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..16, value: Str( - "Hello world", + StringConstant { + value: "Hello world", + implicit_concatenated: true, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_string_triple_quotes_with_kind.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_string_triple_quotes_with_kind.snap index b6561e362d..8e2e003f91 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_string_triple_quotes_with_kind.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_string_triple_quotes_with_kind.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..20, value: Str( - "Hello, world!", + StringConstant { + value: "Hello, world!", + implicit_concatenated: false, + }, ), kind: Some( "u", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_f_string_concat_1.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_f_string_concat_1.snap index 51f75d9b69..23593fee07 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_f_string_concat_1.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_f_string_concat_1.snap @@ -6,15 +6,18 @@ expression: parse_ast Expr( StmtExpr { range: 0..18, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..18, values: [ Constant( ExprConstant { range: 2..17, value: Str( - "Hello world", + StringConstant { + value: "Hello world", + implicit_concatenated: true, + }, ), kind: Some( "u", @@ -22,6 +25,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: true, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_f_string_concat_2.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_f_string_concat_2.snap index 30f7c37ff0..e6a8a74995 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_f_string_concat_2.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_f_string_concat_2.snap @@ -6,15 +6,18 @@ expression: parse_ast Expr( StmtExpr { range: 0..22, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..22, values: [ Constant( ExprConstant { range: 2..21, value: Str( - "Hello world!", + StringConstant { + value: "Hello world!", + implicit_concatenated: true, + }, ), kind: Some( "u", @@ -22,6 +25,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: true, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_string_concat_1.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_string_concat_1.snap index 629c241e8e..cb8d2848a9 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_string_concat_1.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_string_concat_1.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..17, value: Str( - "Hello world", + StringConstant { + value: "Hello world", + implicit_concatenated: true, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_string_concat_2.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_string_concat_2.snap index f89a6bd7f7..6fdde47ad2 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_string_concat_2.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_u_string_concat_2.snap @@ -10,7 +10,10 @@ expression: parse_ast ExprConstant { range: 0..17, value: Str( - "Hello world", + StringConstant { + value: "Hello world", + implicit_concatenated: true, + }, ), kind: Some( "u", diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_byte_literal_1.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_byte_literal_1.snap index 55f2380f02..37273bc676 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_byte_literal_1.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_byte_literal_1.snap @@ -10,12 +10,15 @@ expression: parse_ast ExprConstant { range: 0..8, value: Bytes( - [ - 92, - 120, - 49, - 122, - ], + BytesConstant { + value: [ + 92, + 120, + 49, + 122, + ], + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_byte_literal_2.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_byte_literal_2.snap index 8a44d4ee8f..558aae8c95 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_byte_literal_2.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_byte_literal_2.snap @@ -10,10 +10,13 @@ expression: parse_ast ExprConstant { range: 0..6, value: Bytes( - [ - 92, - 92, - ], + BytesConstant { + value: [ + 92, + 92, + ], + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_fstring.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_fstring.snap index 6fcffbfb92..65f4daf83d 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_fstring.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__raw_fstring.snap @@ -6,8 +6,8 @@ expression: parse_ast Expr( StmtExpr { range: 0..7, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..7, values: [ FormattedValue( @@ -26,6 +26,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__single_quoted_byte.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__single_quoted_byte.snap index 1b6f47e27a..7ec79b41ff 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__single_quoted_byte.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__single_quoted_byte.snap @@ -10,264 +10,267 @@ expression: parse_ast ExprConstant { range: 0..738, value: Bytes( - [ - 0, - 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, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - ], + BytesConstant { + value: [ + 0, + 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, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + ], + implicit_concatenated: false, + }, ), kind: None, }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__triple_quoted_raw_fstring.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__triple_quoted_raw_fstring.snap index 410327f969..6793e65f73 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__triple_quoted_raw_fstring.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__triple_quoted_raw_fstring.snap @@ -6,8 +6,8 @@ expression: parse_ast Expr( StmtExpr { range: 0..11, - value: JoinedStr( - ExprJoinedStr { + value: FString( + ExprFString { range: 0..11, values: [ FormattedValue( @@ -26,6 +26,7 @@ expression: parse_ast }, ), ], + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/string.rs b/crates/ruff_python_parser/src/string.rs index b6aea76f5d..9f154d071c 100644 --- a/crates/ruff_python_parser/src/string.rs +++ b/crates/ruff_python_parser/src/string.rs @@ -1,6 +1,4 @@ -use itertools::Itertools; - -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, BytesConstant, Constant, Expr, StringConstant}; use ruff_python_ast::{ConversionFlag, Ranged}; use ruff_text_size::{TextLen, TextRange, TextSize}; @@ -243,8 +241,9 @@ impl<'a> StringParser<'a> { let start_location = self.get_pos(); let parsed_spec = self.parse_spec(nested)?; - spec = Some(Box::new(Expr::from(ast::ExprJoinedStr { + spec = Some(Box::new(Expr::from(ast::ExprFString { values: parsed_spec, + implicit_concatenated: false, range: self.range(start_location), }))); } @@ -387,7 +386,7 @@ impl<'a> StringParser<'a> { '{' => { if !constant_piece.is_empty() { spec_constructor.push(Expr::from(ast::ExprConstant { - value: constant_piece.drain(..).collect::().into(), + value: std::mem::take(&mut constant_piece).into(), kind: None, range: self.range(start_location), })); @@ -408,7 +407,7 @@ impl<'a> StringParser<'a> { } if !constant_piece.is_empty() { spec_constructor.push(Expr::from(ast::ExprConstant { - value: constant_piece.drain(..).collect::().into(), + value: std::mem::take(&mut constant_piece).into(), kind: None, range: self.range(start_location), })); @@ -446,7 +445,7 @@ impl<'a> StringParser<'a> { } if !content.is_empty() { values.push(Expr::from(ast::ExprConstant { - value: content.drain(..).collect::().into(), + value: std::mem::take(&mut content).into(), kind: None, range: self.range(start_location), })); @@ -513,25 +512,25 @@ impl<'a> StringParser<'a> { } Ok(Expr::from(ast::ExprConstant { - value: Constant::Bytes(content.chars().map(|c| c as u8).collect()), + value: content.chars().map(|c| c as u8).collect::>().into(), kind: None, range: self.range(start_location), })) } fn parse_string(&mut self) -> Result { - let mut content = String::new(); + let mut value = String::new(); let start_location = self.get_pos(); while let Some(ch) = self.next_char() { match ch { '\\' if !self.kind.is_raw() => { - content.push_str(&self.parse_escaped_char()?); + value.push_str(&self.parse_escaped_char()?); } - ch => content.push(ch), + ch => value.push(ch), } } Ok(Expr::from(ast::ExprConstant { - value: Constant::Str(content), + value: value.into(), kind: self.kind.is_unicode().then(|| "u".to_string()), range: self.range(start_location), })) @@ -577,6 +576,7 @@ pub(crate) fn parse_strings( .filter(|(_, (_, kind, ..), _)| kind.is_any_bytes()) .count(); let has_bytes = num_bytes > 0; + let implicit_concatenated = values.len() > 1; if has_bytes && num_bytes < values.len() { return Err(LexicalError { @@ -593,7 +593,7 @@ pub(crate) fn parse_strings( for value in parse_string(&source, kind, triple_quoted, start)? { match value { Expr::Constant(ast::ExprConstant { - value: Constant::Bytes(value), + value: Constant::Bytes(BytesConstant { value, .. }), .. }) => content.extend(value), _ => unreachable!("Unexpected non-bytes expression."), @@ -601,7 +601,10 @@ pub(crate) fn parse_strings( } } return Ok(ast::ExprConstant { - value: Constant::Bytes(content), + value: Constant::Bytes(BytesConstant { + value: content, + implicit_concatenated, + }), kind: None, range: TextRange::new(initial_start, last_end), } @@ -614,7 +617,7 @@ pub(crate) fn parse_strings( for value in parse_string(&source, kind, triple_quoted, start)? { match value { Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), + value: Constant::Str(StringConstant { value, .. }), .. }) => content.push(value), _ => unreachable!("Unexpected non-string expression."), @@ -622,7 +625,10 @@ pub(crate) fn parse_strings( } } return Ok(ast::ExprConstant { - value: Constant::Str(content.join("")), + value: Constant::Str(StringConstant { + value: content.join(""), + implicit_concatenated, + }), kind: initial_kind, range: TextRange::new(initial_start, last_end), } @@ -637,7 +643,10 @@ pub(crate) fn parse_strings( let take_current = |current: &mut Vec, start, end| -> Expr { Expr::Constant(ast::ExprConstant { - value: Constant::Str(current.drain(..).join("")), + value: Constant::Str(StringConstant { + value: current.drain(..).collect::(), + implicit_concatenated, + }), kind: initial_kind.clone(), range: TextRange::new(start, end), }) @@ -654,14 +663,14 @@ pub(crate) fn parse_strings( deduped.push(value); } Expr::Constant(ast::ExprConstant { - value: Constant::Str(inner), + value: Constant::Str(StringConstant { value, .. }), .. }) => { if current.is_empty() { current_start = value_range.start(); } current_end = value_range.end(); - current.push(inner); + current.push(value); } _ => unreachable!("Unexpected non-string expression."), } @@ -671,8 +680,9 @@ pub(crate) fn parse_strings( deduped.push(take_current(&mut current, current_start, current_end)); } - Ok(Expr::JoinedStr(ast::ExprJoinedStr { + Ok(Expr::FString(ast::ExprFString { values: deduped, + implicit_concatenated, range: TextRange::new(initial_start, last_end), })) } @@ -963,6 +973,13 @@ mod tests { insta::assert_debug_snapshot!(parse_ast); } + #[test] + fn test_parse_f_string_concat_4() { + let source = "'Hello ' f'world{\"!\"}' 'again!'"; + let parse_ast = parse_suite(source, "").unwrap(); + insta::assert_debug_snapshot!(parse_ast); + } + #[test] fn test_parse_u_f_string_concat_1() { let source = "u'Hello ' f'world'"; @@ -1003,7 +1020,7 @@ mod tests { #[test] fn test_escape_char_in_byte_literal() { // backslash does not escape - let source = r##"b"omkmok\Xaa""##; // spell-checker:ignore omkmok + let source = r#"b"omkmok\Xaa""#; // spell-checker:ignore omkmok let parse_ast = parse_suite(source, "").unwrap(); insta::assert_debug_snapshot!(parse_ast); } @@ -1024,7 +1041,7 @@ mod tests { #[test] fn test_escape_octet() { - let source = r##"b'\43a\4\1234'"##; + let source = r"b'\43a\4\1234'"; let parse_ast = parse_suite(source, "").unwrap(); insta::assert_debug_snapshot!(parse_ast); } @@ -1080,6 +1097,22 @@ mod tests { insta::assert_debug_snapshot!(parse_ast); } + #[test] + fn test_parse_fstring_nested_string_spec() { + let source = "{foo:{''}}"; + let parse_ast = parse_fstring(source).unwrap(); + + insta::assert_debug_snapshot!(parse_ast); + } + + #[test] + fn test_parse_fstring_nested_concatenation_string_spec() { + let source = "{foo:{'' ''}}"; + let parse_ast = parse_fstring(source).unwrap(); + + insta::assert_debug_snapshot!(parse_ast); + } + macro_rules! test_aliases_parse { ($($name:ident: $alias:expr,)*) => { $( diff --git a/crates/ruff_python_parser/src/token.rs b/crates/ruff_python_parser/src/token.rs index 526081ac26..db159a0340 100644 --- a/crates/ruff_python_parser/src/token.rs +++ b/crates/ruff_python_parser/src/token.rs @@ -6,7 +6,7 @@ //! [CPython source]: https://github.com/python/cpython/blob/dfc2e065a2e71011017077e549cd2f9bf4944c54/Include/internal/pycore_token.h; use crate::Mode; use num_bigint::BigInt; -use ruff_python_ast::MagicKind; +use ruff_python_ast::IpyEscapeKind; use ruff_text_size::TextSize; use std::fmt; @@ -44,13 +44,13 @@ pub enum Tok { /// Whether the string is triple quoted. triple_quoted: bool, }, - /// Token value for a Jupyter magic commands. These are filtered out of the token stream - /// prior to parsing when the mode is [`Mode::Jupyter`]. - MagicCommand { + /// Token value for IPython escape commands. These are recognized by the lexer + /// only when the mode is [`Mode::Jupyter`]. + IpyEscapeCommand { /// The magic command value. value: String, /// The kind of magic command. - kind: MagicKind, + kind: IpyEscapeKind, }, /// Token value for a comment. These are filtered out of the token stream prior to parsing. Comment(String), @@ -64,6 +64,8 @@ pub enum Tok { /// Token value for a dedent. Dedent, EndOfFile, + /// Token value for a question mark `?`. This is only used in [`Mode::Jupyter`]. + Question, /// Token value for a left parenthesis `(`. Lpar, /// Token value for a right parenthesis `)`. @@ -232,7 +234,7 @@ impl fmt::Display for Tok { let quotes = "\"".repeat(if *triple_quoted { 3 } else { 1 }); write!(f, "{kind}{quotes}{value}{quotes}") } - MagicCommand { kind, value } => write!(f, "{kind}{value}"), + IpyEscapeCommand { kind, value } => write!(f, "{kind}{value}"), Newline => f.write_str("Newline"), NonLogicalNewline => f.write_str("NonLogicalNewline"), Indent => f.write_str("Indent"), @@ -240,6 +242,7 @@ impl fmt::Display for Tok { StartModule => f.write_str("StartProgram"), StartExpression => f.write_str("StartExpression"), EndOfFile => f.write_str("EOF"), + Question => f.write_str("'?'"), Lpar => f.write_str("'('"), Rpar => f.write_str("')'"), Lsqb => f.write_str("'['"), @@ -447,8 +450,8 @@ pub enum TokenKind { Complex, /// Token value for a string. String, - /// Token value for a Jupyter magic command. - MagicCommand, + /// Token value for a IPython escape command. + EscapeCommand, /// Token value for a comment. These are filtered out of the token stream prior to parsing. Comment, /// Token value for a newline. @@ -461,6 +464,8 @@ pub enum TokenKind { /// Token value for a dedent. Dedent, EndOfFile, + /// Token value for a question mark `?`. + Question, /// Token value for a left parenthesis `(`. Lpar, /// Token value for a right parenthesis `)`. @@ -776,13 +781,14 @@ impl TokenKind { Tok::Float { .. } => TokenKind::Float, Tok::Complex { .. } => TokenKind::Complex, Tok::String { .. } => TokenKind::String, - Tok::MagicCommand { .. } => TokenKind::MagicCommand, + Tok::IpyEscapeCommand { .. } => TokenKind::EscapeCommand, Tok::Comment(_) => TokenKind::Comment, Tok::Newline => TokenKind::Newline, Tok::NonLogicalNewline => TokenKind::NonLogicalNewline, Tok::Indent => TokenKind::Indent, Tok::Dedent => TokenKind::Dedent, Tok::EndOfFile => TokenKind::EndOfFile, + Tok::Question => TokenKind::Question, Tok::Lpar => TokenKind::Lpar, Tok::Rpar => TokenKind::Rpar, Tok::Lsqb => TokenKind::Lsqb, diff --git a/crates/ruff_python_semantic/Cargo.toml b/crates/ruff_python_semantic/Cargo.toml index 9b37767711..58484d140d 100644 --- a/crates/ruff_python_semantic/Cargo.toml +++ b/crates/ruff_python_semantic/Cargo.toml @@ -23,6 +23,7 @@ bitflags = { workspace = true } is-macro = { workspace = true } num-traits = { workspace = true } rustc-hash = { workspace = true } - - smallvec = { workspace = true } + +[dev-dependencies] +ruff_python_parser = { path = "../ruff_python_parser" } diff --git a/crates/ruff_python_semantic/src/analyze/branch_detection.rs b/crates/ruff_python_semantic/src/analyze/branch_detection.rs index 3e68dc20b9..e7bbf1b428 100644 --- a/crates/ruff_python_semantic/src/analyze/branch_detection.rs +++ b/crates/ruff_python_semantic/src/analyze/branch_detection.rs @@ -3,15 +3,15 @@ use std::iter; use ruff_python_ast::{self as ast, ExceptHandler, Stmt}; -use crate::node::{NodeId, Nodes}; +use crate::statements::{StatementId, Statements}; /// Return the common ancestor of `left` and `right` below `stop`, or `None`. fn common_ancestor( - left: NodeId, - right: NodeId, - stop: Option, - node_tree: &Nodes, -) -> Option { + left: StatementId, + right: StatementId, + stop: Option, + node_tree: &Statements, +) -> Option { if stop.is_some_and(|stop| left == stop || right == stop) { return None; } @@ -59,12 +59,6 @@ fn alternatives(stmt: &Stmt) -> Vec> { handlers, orelse, .. - }) - | Stmt::TryStar(ast::StmtTryStar { - body, - handlers, - orelse, - .. }) => vec![body.iter().chain(orelse.iter()).collect()] .into_iter() .chain(handlers.iter().map(|handler| { @@ -83,13 +77,13 @@ fn alternatives(stmt: &Stmt) -> Vec> { /// Return `true` if `stmt` is a descendent of any of the nodes in `ancestors`. fn descendant_of<'a>( - stmt: NodeId, + stmt: StatementId, ancestors: &[&'a Stmt], - stop: NodeId, - node_tree: &Nodes<'a, Stmt>, + stop: StatementId, + node_tree: &Statements<'a>, ) -> bool { ancestors.iter().any(|ancestor| { - node_tree.node_id(ancestor).is_some_and(|ancestor| { + node_tree.statement_id(ancestor).is_some_and(|ancestor| { common_ancestor(stmt, ancestor, Some(stop), node_tree).is_some() }) }) @@ -97,7 +91,7 @@ fn descendant_of<'a>( /// Return `true` if `left` and `right` are on different branches of an `if` or /// `try` statement. -pub fn different_forks(left: NodeId, right: NodeId, node_tree: &Nodes) -> bool { +pub fn different_forks(left: StatementId, right: StatementId, node_tree: &Statements) -> bool { if let Some(ancestor) = common_ancestor(left, right, None, node_tree) { for items in alternatives(node_tree[ancestor]) { let l = descendant_of(left, &items, ancestor, node_tree); diff --git a/crates/ruff_python_semantic/src/analyze/type_inference.rs b/crates/ruff_python_semantic/src/analyze/type_inference.rs index d65b544b2a..4bba5b9826 100644 --- a/crates/ruff_python_semantic/src/analyze/type_inference.rs +++ b/crates/ruff_python_semantic/src/analyze/type_inference.rs @@ -1,7 +1,317 @@ //! Analysis rules to perform basic type inference on individual expressions. +use rustc_hash::FxHashSet; + use ruff_python_ast as ast; -use ruff_python_ast::{Constant, Expr}; +use ruff_python_ast::{Constant, Expr, Operator, UnaryOp}; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum ResolvedPythonType { + /// The expression resolved to a single known type, like `str` or `int`. + Atom(PythonType), + /// The expression resolved to a union of known types, like `str | int`. + Union(FxHashSet), + /// The expression resolved to an unknown type, like a variable or function call. + Unknown, + /// The expression resolved to a `TypeError`, like `1 + "hello"`. + TypeError, +} + +impl ResolvedPythonType { + #[must_use] + pub fn union(self, other: Self) -> Self { + match (self, other) { + (Self::TypeError, _) | (_, Self::TypeError) => Self::TypeError, + (Self::Unknown, _) | (_, Self::Unknown) => Self::Unknown, + (Self::Atom(a), Self::Atom(b)) => { + if a == b { + Self::Atom(a) + } else { + Self::Union(FxHashSet::from_iter([a, b])) + } + } + (Self::Atom(a), Self::Union(mut b)) => { + b.insert(a); + Self::Union(b) + } + (Self::Union(mut a), Self::Atom(b)) => { + a.insert(b); + Self::Union(a) + } + (Self::Union(mut a), Self::Union(b)) => { + a.extend(b); + Self::Union(a) + } + } + } +} + +impl From<&Expr> for ResolvedPythonType { + fn from(expr: &Expr) -> Self { + match expr { + // Primitives. + Expr::Dict(_) => ResolvedPythonType::Atom(PythonType::Dict), + Expr::DictComp(_) => ResolvedPythonType::Atom(PythonType::Dict), + Expr::Set(_) => ResolvedPythonType::Atom(PythonType::Set), + Expr::SetComp(_) => ResolvedPythonType::Atom(PythonType::Set), + Expr::List(_) => ResolvedPythonType::Atom(PythonType::List), + Expr::ListComp(_) => ResolvedPythonType::Atom(PythonType::List), + Expr::Tuple(_) => ResolvedPythonType::Atom(PythonType::Tuple), + Expr::GeneratorExp(_) => ResolvedPythonType::Atom(PythonType::Generator), + Expr::FString(_) => ResolvedPythonType::Atom(PythonType::String), + Expr::Constant(ast::ExprConstant { value, .. }) => match value { + Constant::Str(_) => ResolvedPythonType::Atom(PythonType::String), + Constant::Int(_) => { + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Integer)) + } + Constant::Float(_) => { + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Float)) + } + Constant::Bool(_) => ResolvedPythonType::Atom(PythonType::Number(NumberLike::Bool)), + Constant::Complex { .. } => { + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Complex)) + } + Constant::None => ResolvedPythonType::Atom(PythonType::None), + Constant::Ellipsis => ResolvedPythonType::Atom(PythonType::Ellipsis), + Constant::Bytes(_) => ResolvedPythonType::Atom(PythonType::Bytes), + }, + // Simple container expressions. + Expr::NamedExpr(ast::ExprNamedExpr { value, .. }) => { + ResolvedPythonType::from(value.as_ref()) + } + Expr::IfExp(ast::ExprIfExp { body, orelse, .. }) => { + let body = ResolvedPythonType::from(body.as_ref()); + let orelse = ResolvedPythonType::from(orelse.as_ref()); + body.union(orelse) + } + + // Boolean operators. + Expr::BoolOp(ast::ExprBoolOp { values, .. }) => values + .iter() + .map(ResolvedPythonType::from) + .reduce(ResolvedPythonType::union) + .unwrap_or(ResolvedPythonType::Unknown), + + // Unary operators. + Expr::UnaryOp(ast::ExprUnaryOp { operand, op, .. }) => match op { + UnaryOp::Invert => { + return match ResolvedPythonType::from(operand.as_ref()) { + ResolvedPythonType::Atom(PythonType::Number( + NumberLike::Bool | NumberLike::Integer, + )) => ResolvedPythonType::Atom(PythonType::Number(NumberLike::Integer)), + ResolvedPythonType::Atom(_) => ResolvedPythonType::TypeError, + _ => ResolvedPythonType::Unknown, + } + } + // Ex) `not 1.0` + UnaryOp::Not => ResolvedPythonType::Atom(PythonType::Number(NumberLike::Bool)), + // Ex) `+1` or `-1` + UnaryOp::UAdd | UnaryOp::USub => { + return match ResolvedPythonType::from(operand.as_ref()) { + ResolvedPythonType::Atom(PythonType::Number(number)) => { + ResolvedPythonType::Atom(PythonType::Number( + if number == NumberLike::Bool { + NumberLike::Integer + } else { + number + }, + )) + } + ResolvedPythonType::Atom(_) => ResolvedPythonType::TypeError, + _ => ResolvedPythonType::Unknown, + } + } + }, + + // Binary operators. + Expr::BinOp(ast::ExprBinOp { + left, op, right, .. + }) => { + match op { + Operator::Add => { + match ( + ResolvedPythonType::from(left.as_ref()), + ResolvedPythonType::from(right.as_ref()), + ) { + // Ex) `"Hello" + "world"` + ( + ResolvedPythonType::Atom(PythonType::String), + ResolvedPythonType::Atom(PythonType::String), + ) => return ResolvedPythonType::Atom(PythonType::String), + // Ex) `b"Hello" + b"world"` + ( + ResolvedPythonType::Atom(PythonType::Bytes), + ResolvedPythonType::Atom(PythonType::Bytes), + ) => return ResolvedPythonType::Atom(PythonType::Bytes), + // Ex) `[1] + [2]` + ( + ResolvedPythonType::Atom(PythonType::List), + ResolvedPythonType::Atom(PythonType::List), + ) => return ResolvedPythonType::Atom(PythonType::List), + // Ex) `(1, 2) + (3, 4)` + ( + ResolvedPythonType::Atom(PythonType::Tuple), + ResolvedPythonType::Atom(PythonType::Tuple), + ) => return ResolvedPythonType::Atom(PythonType::Tuple), + // Ex) `1 + 1.0` + ( + ResolvedPythonType::Atom(PythonType::Number(left)), + ResolvedPythonType::Atom(PythonType::Number(right)), + ) => { + return ResolvedPythonType::Atom(PythonType::Number( + left.coerce(right), + )); + } + // Ex) `"a" + 1` + (ResolvedPythonType::Atom(_), ResolvedPythonType::Atom(_)) => { + return ResolvedPythonType::TypeError; + } + _ => {} + } + } + Operator::Sub => { + match ( + ResolvedPythonType::from(left.as_ref()), + ResolvedPythonType::from(right.as_ref()), + ) { + // Ex) `1 - 1` + ( + ResolvedPythonType::Atom(PythonType::Number(left)), + ResolvedPythonType::Atom(PythonType::Number(right)), + ) => { + return ResolvedPythonType::Atom(PythonType::Number( + left.coerce(right), + )); + } + // Ex) `{1, 2} - {2}` + ( + ResolvedPythonType::Atom(PythonType::Set), + ResolvedPythonType::Atom(PythonType::Set), + ) => return ResolvedPythonType::Atom(PythonType::Set), + // Ex) `"a" - "b"` + (ResolvedPythonType::Atom(_), ResolvedPythonType::Atom(_)) => { + return ResolvedPythonType::TypeError; + } + _ => {} + } + } + // Ex) "a" % "b" + Operator::Mod => match ( + ResolvedPythonType::from(left.as_ref()), + ResolvedPythonType::from(right.as_ref()), + ) { + // Ex) `"Hello" % "world"` + (ResolvedPythonType::Atom(PythonType::String), _) => { + return ResolvedPythonType::Atom(PythonType::String) + } + // Ex) `b"Hello" % b"world"` + (ResolvedPythonType::Atom(PythonType::Bytes), _) => { + return ResolvedPythonType::Atom(PythonType::Bytes) + } + // Ex) `1 % 2` + ( + ResolvedPythonType::Atom(PythonType::Number(left)), + ResolvedPythonType::Atom(PythonType::Number(right)), + ) => { + return ResolvedPythonType::Atom(PythonType::Number( + left.coerce(right), + )); + } + _ => {} + }, + // Standard arithmetic operators, which coerce to the "highest" number type. + Operator::Mult | Operator::FloorDiv | Operator::Pow => match ( + ResolvedPythonType::from(left.as_ref()), + ResolvedPythonType::from(right.as_ref()), + ) { + // Ex) `1 - 2` + ( + ResolvedPythonType::Atom(PythonType::Number(left)), + ResolvedPythonType::Atom(PythonType::Number(right)), + ) => { + return ResolvedPythonType::Atom(PythonType::Number( + left.coerce(right), + )); + } + (ResolvedPythonType::Atom(_), ResolvedPythonType::Atom(_)) => { + return ResolvedPythonType::TypeError; + } + _ => {} + }, + // Division, which returns at least `float`. + Operator::Div => match ( + ResolvedPythonType::from(left.as_ref()), + ResolvedPythonType::from(right.as_ref()), + ) { + // Ex) `1 / 2` + ( + ResolvedPythonType::Atom(PythonType::Number(left)), + ResolvedPythonType::Atom(PythonType::Number(right)), + ) => { + let resolved = left.coerce(right); + return ResolvedPythonType::Atom(PythonType::Number( + if resolved == NumberLike::Integer { + NumberLike::Float + } else { + resolved + }, + )); + } + (ResolvedPythonType::Atom(_), ResolvedPythonType::Atom(_)) => { + return ResolvedPythonType::TypeError; + } + _ => {} + }, + // Bitwise operators, which only work on `int` and `bool`. + Operator::BitAnd + | Operator::BitOr + | Operator::BitXor + | Operator::LShift + | Operator::RShift => { + match ( + ResolvedPythonType::from(left.as_ref()), + ResolvedPythonType::from(right.as_ref()), + ) { + // Ex) `1 & 2` + ( + ResolvedPythonType::Atom(PythonType::Number(left)), + ResolvedPythonType::Atom(PythonType::Number(right)), + ) => { + let resolved = left.coerce(right); + return if resolved == NumberLike::Integer { + ResolvedPythonType::Atom(PythonType::Number( + NumberLike::Integer, + )) + } else { + ResolvedPythonType::TypeError + }; + } + (ResolvedPythonType::Atom(_), ResolvedPythonType::Atom(_)) => { + return ResolvedPythonType::TypeError; + } + _ => {} + } + } + Operator::MatMult => {} + } + ResolvedPythonType::Unknown + } + Expr::Lambda(_) + | Expr::Await(_) + | Expr::Yield(_) + | Expr::YieldFrom(_) + | Expr::Compare(_) + | Expr::Call(_) + | Expr::FormattedValue(_) + | Expr::Attribute(_) + | Expr::Subscript(_) + | Expr::Starred(_) + | Expr::Name(_) + | Expr::Slice(_) + | Expr::IpyEscapeCommand(_) => ResolvedPythonType::Unknown, + } + } +} /// An extremely simple type inference system for individual expressions. /// @@ -9,20 +319,14 @@ use ruff_python_ast::{Constant, Expr}; /// such as strings, integers, floats, and containers. It cannot infer the /// types of variables or expressions that are not statically known from /// individual AST nodes alone. -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum PythonType { /// A string literal, such as `"hello"`. String, /// A bytes literal, such as `b"hello"`. Bytes, - /// An integer literal, such as `1` or `0x1`. - Integer, - /// A floating-point literal, such as `1.0` or `1e10`. - Float, - /// A complex literal, such as `1j` or `1+1j`. - Complex, - /// A boolean literal, such as `True` or `False`. - Bool, + /// An integer, float, or complex literal, such as `1` or `1.0`. + Number(NumberLike), /// A `None` literal, such as `None`. None, /// An ellipsis literal, such as `...`. @@ -37,59 +341,149 @@ pub enum PythonType { Tuple, /// A generator expression, such as `(x for x in range(10))`. Generator, - /// An unknown type, such as a variable or function call. - Unknown, } -impl From<&Expr> for PythonType { - fn from(expr: &Expr) -> Self { - match expr { - Expr::NamedExpr(ast::ExprNamedExpr { value, .. }) => (value.as_ref()).into(), - Expr::UnaryOp(ast::ExprUnaryOp { operand, .. }) => (operand.as_ref()).into(), - Expr::Dict(_) => PythonType::Dict, - Expr::DictComp(_) => PythonType::Dict, - Expr::Set(_) => PythonType::Set, - Expr::SetComp(_) => PythonType::Set, - Expr::List(_) => PythonType::List, - Expr::ListComp(_) => PythonType::List, - Expr::Tuple(_) => PythonType::Tuple, - Expr::GeneratorExp(_) => PythonType::Generator, - Expr::JoinedStr(_) => PythonType::String, - Expr::BinOp(ast::ExprBinOp { left, op, .. }) => { - // Ex) "a" % "b" - if op.is_mod() { - if matches!( - left.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Str(..), - .. - }) - ) { - return PythonType::String; - } - if matches!( - left.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Bytes(..), - .. - }) - ) { - return PythonType::Bytes; - } - } - PythonType::Unknown - } - Expr::Constant(ast::ExprConstant { value, .. }) => match value { - Constant::Str(_) => PythonType::String, - Constant::Int(_) => PythonType::Integer, - Constant::Float(_) => PythonType::Float, - Constant::Bool(_) => PythonType::Bool, - Constant::Complex { .. } => PythonType::Complex, - Constant::None => PythonType::None, - Constant::Ellipsis => PythonType::Ellipsis, - Constant::Bytes(_) => PythonType::Bytes, - }, - _ => PythonType::Unknown, +/// A numeric type, or a type that can be trivially coerced to a numeric type. +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +pub enum NumberLike { + /// An integer literal, such as `1` or `0x1`. + Integer, + /// A floating-point literal, such as `1.0` or `1e10`. + Float, + /// A complex literal, such as `1j` or `1+1j`. + Complex, + /// A boolean literal, such as `True` or `False`. + Bool, +} + +impl NumberLike { + /// Coerces two number-like types to the "highest" number-like type. + #[must_use] + pub fn coerce(self, other: NumberLike) -> NumberLike { + match (self, other) { + (NumberLike::Complex, _) | (_, NumberLike::Complex) => NumberLike::Complex, + (NumberLike::Float, _) | (_, NumberLike::Float) => NumberLike::Float, + _ => NumberLike::Integer, } } } + +#[cfg(test)] +mod tests { + use rustc_hash::FxHashSet; + + use ruff_python_ast::Expr; + use ruff_python_parser::parse_expression; + + use crate::analyze::type_inference::{NumberLike, PythonType, ResolvedPythonType}; + + fn parse(expression: &str) -> Expr { + parse_expression(expression, "").unwrap() + } + + #[test] + fn type_inference() { + // Atoms. + assert_eq!( + ResolvedPythonType::from(&parse("1")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Integer)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("'Hello, world'")), + ResolvedPythonType::Atom(PythonType::String) + ); + assert_eq!( + ResolvedPythonType::from(&parse("b'Hello, world'")), + ResolvedPythonType::Atom(PythonType::Bytes) + ); + assert_eq!( + ResolvedPythonType::from(&parse("'Hello' % 'world'")), + ResolvedPythonType::Atom(PythonType::String) + ); + + // Boolean operators. + assert_eq!( + ResolvedPythonType::from(&parse("1 and 2")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Integer)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("1 and True")), + ResolvedPythonType::Union(FxHashSet::from_iter([ + PythonType::Number(NumberLike::Integer), + PythonType::Number(NumberLike::Bool) + ])) + ); + + // Binary operators. + assert_eq!( + ResolvedPythonType::from(&parse("1.0 * 2")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Float)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("2 * 1.0")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Float)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("1.0 * 2j")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Complex)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("1 / True")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Float)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("1 / 2")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Float)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("{1, 2} - {2}")), + ResolvedPythonType::Atom(PythonType::Set) + ); + + // Unary operators. + assert_eq!( + ResolvedPythonType::from(&parse("-1")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Integer)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("-1.0")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Float)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("-1j")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Complex)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("-True")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Integer)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("not 'Hello'")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Bool)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("not x.y.z")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Bool)) + ); + + // Conditional expressions. + assert_eq!( + ResolvedPythonType::from(&parse("1 if True else 2")), + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Integer)) + ); + assert_eq!( + ResolvedPythonType::from(&parse("1 if True else 2.0")), + ResolvedPythonType::Union(FxHashSet::from_iter([ + PythonType::Number(NumberLike::Integer), + PythonType::Number(NumberLike::Float) + ])) + ); + assert_eq!( + ResolvedPythonType::from(&parse("1 if True else False")), + ResolvedPythonType::Union(FxHashSet::from_iter([ + PythonType::Number(NumberLike::Integer), + PythonType::Number(NumberLike::Bool) + ])) + ); + } +} diff --git a/crates/ruff_python_semantic/src/analyze/visibility.rs b/crates/ruff_python_semantic/src/analyze/visibility.rs index bc2d536938..28dae7c0c6 100644 --- a/crates/ruff_python_semantic/src/analyze/visibility.rs +++ b/crates/ruff_python_semantic/src/analyze/visibility.rs @@ -1,6 +1,6 @@ use std::path::Path; -use ruff_python_ast::{self as ast, Decorator, Stmt}; +use ruff_python_ast::{self as ast, Decorator}; use ruff_python_ast::call_path::{collect_call_path, CallPath}; use ruff_python_ast::helpers::map_callable; @@ -176,67 +176,42 @@ impl ModuleSource<'_> { } } -pub(crate) fn function_visibility(stmt: &Stmt) -> Visibility { - match stmt { - Stmt::FunctionDef(ast::StmtFunctionDef { name, .. }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { name, .. }) => { - if name.starts_with('_') { - Visibility::Private - } else { - Visibility::Public - } - } - _ => panic!("Found non-FunctionDef in function_visibility"), +pub(crate) fn function_visibility(function: &ast::StmtFunctionDef) -> Visibility { + if function.name.starts_with('_') { + Visibility::Private + } else { + Visibility::Public } } -pub(crate) fn method_visibility(stmt: &Stmt) -> Visibility { - match stmt { - Stmt::FunctionDef(ast::StmtFunctionDef { - name, - decorator_list, - .. +pub(crate) fn method_visibility(function: &ast::StmtFunctionDef) -> Visibility { + // Is this a setter or deleter? + if function.decorator_list.iter().any(|decorator| { + collect_call_path(&decorator.expression).is_some_and(|call_path| { + call_path.as_slice() == [function.name.as_str(), "setter"] + || call_path.as_slice() == [function.name.as_str(), "deleter"] }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { - name, - decorator_list, - .. - }) => { - // Is this a setter or deleter? - if decorator_list.iter().any(|decorator| { - collect_call_path(&decorator.expression).is_some_and(|call_path| { - call_path.as_slice() == [name, "setter"] - || call_path.as_slice() == [name, "deleter"] - }) - }) { - return Visibility::Private; - } - - // Is the method non-private? - if !name.starts_with('_') { - return Visibility::Public; - } - - // Is this a magic method? - if name.starts_with("__") && name.ends_with("__") { - return Visibility::Public; - } - - Visibility::Private - } - _ => panic!("Found non-FunctionDef in method_visibility"), + }) { + return Visibility::Private; } + + // Is the method non-private? + if !function.name.starts_with('_') { + return Visibility::Public; + } + + // Is this a magic method? + if function.name.starts_with("__") && function.name.ends_with("__") { + return Visibility::Public; + } + + Visibility::Private } -pub(crate) fn class_visibility(stmt: &Stmt) -> Visibility { - match stmt { - Stmt::ClassDef(ast::StmtClassDef { name, .. }) => { - if name.starts_with('_') { - Visibility::Private - } else { - Visibility::Public - } - } - _ => panic!("Found non-ClassDef in function_visibility"), +pub(crate) fn class_visibility(class: &ast::StmtClassDef) -> Visibility { + if class.name.starts_with('_') { + Visibility::Private + } else { + Visibility::Public } } diff --git a/crates/ruff_python_semantic/src/binding.rs b/crates/ruff_python_semantic/src/binding.rs index 10e1900888..1d910bbab3 100644 --- a/crates/ruff_python_semantic/src/binding.rs +++ b/crates/ruff_python_semantic/src/binding.rs @@ -11,8 +11,8 @@ use ruff_text_size::TextRange; use crate::context::ExecutionContext; use crate::model::SemanticModel; -use crate::node::NodeId; use crate::reference::ResolvedReferenceId; +use crate::statements::StatementId; use crate::ScopeId; #[derive(Debug, Clone)] @@ -24,7 +24,7 @@ pub struct Binding<'a> { /// The context in which the [`Binding`] was created. pub context: ExecutionContext, /// The statement in which the [`Binding`] was defined. - pub source: Option, + pub source: Option, /// The references to the [`Binding`]. pub references: Vec, /// The exceptions that were handled when the [`Binding`] was defined. @@ -185,7 +185,7 @@ impl<'a> Binding<'a> { /// Returns the range of the binding's parent. pub fn parent_range(&self, semantic: &SemanticModel) -> Option { self.source - .map(|node_id| semantic.stmts[node_id]) + .map(|statement_id| semantic.statement(statement_id)) .and_then(|parent| { if parent.is_import_from_stmt() { Some(parent.range()) @@ -585,7 +585,7 @@ impl<'a> Imported<'a> for FromImport<'a> { } /// A wrapper around an import [`BindingKind`] that can be any of the three types of imports. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, is_macro::Is)] pub enum AnyImport<'a> { Import(&'a Import<'a>), SubmoduleImport(&'a SubmoduleImport<'a>), diff --git a/crates/ruff_python_semantic/src/definition.rs b/crates/ruff_python_semantic/src/definition.rs index aec18d62f5..9c0a202971 100644 --- a/crates/ruff_python_semantic/src/definition.rs +++ b/crates/ruff_python_semantic/src/definition.rs @@ -5,7 +5,8 @@ use std::fmt::Debug; use std::ops::Deref; use ruff_index::{newtype_index, IndexSlice, IndexVec}; -use ruff_python_ast::{self as ast, Stmt}; +use ruff_python_ast::{self as ast, Ranged, Stmt}; +use ruff_text_size::TextRange; use crate::analyze::visibility::{ class_visibility, function_visibility, method_visibility, ModuleSource, Visibility, @@ -23,7 +24,7 @@ impl DefinitionId { } } -#[derive(Debug)] +#[derive(Debug, is_macro::Is)] pub enum ModuleKind { /// A Python file that represents a module within a package. Module, @@ -57,36 +58,60 @@ impl<'a> Module<'a> { } } -#[derive(Debug, Copy, Clone)] -pub enum MemberKind { +#[derive(Debug, Copy, Clone, is_macro::Is)] +pub enum MemberKind<'a> { /// A class definition within a program. - Class, + Class(&'a ast::StmtClassDef), /// A nested class definition within a program. - NestedClass, + NestedClass(&'a ast::StmtClassDef), /// A function definition within a program. - Function, + Function(&'a ast::StmtFunctionDef), /// A nested function definition within a program. - NestedFunction, + NestedFunction(&'a ast::StmtFunctionDef), /// A method definition within a program. - Method, + Method(&'a ast::StmtFunctionDef), } /// A member of a Python module. #[derive(Debug)] pub struct Member<'a> { - pub kind: MemberKind, + pub kind: MemberKind<'a>, pub parent: DefinitionId, - pub stmt: &'a Stmt, } impl<'a> Member<'a> { /// Return the name of the member. - pub fn name(&self) -> Option<&'a str> { - match &self.stmt { - Stmt::FunctionDef(ast::StmtFunctionDef { name, .. }) - | Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { name, .. }) - | Stmt::ClassDef(ast::StmtClassDef { name, .. }) => Some(name), - _ => None, + pub fn name(&self) -> &str { + match self.kind { + MemberKind::Class(class) => &class.name, + MemberKind::NestedClass(class) => &class.name, + MemberKind::Function(function) => &function.name, + MemberKind::NestedFunction(function) => &function.name, + MemberKind::Method(method) => &method.name, + } + } + + /// Return the body of the member. + pub fn body(&self) -> &[Stmt] { + match self.kind { + MemberKind::Class(class) => &class.body, + MemberKind::NestedClass(class) => &class.body, + MemberKind::Function(function) => &function.body, + MemberKind::NestedFunction(function) => &function.body, + MemberKind::Method(method) => &method.body, + } + } +} + +impl Ranged for Member<'_> { + /// Return the range of the member. + fn range(&self) -> TextRange { + match self.kind { + MemberKind::Class(class) => class.range(), + MemberKind::NestedClass(class) => class.range(), + MemberKind::Function(function) => function.range(), + MemberKind::NestedFunction(function) => function.range(), + MemberKind::Method(method) => method.range(), } } } @@ -104,16 +129,42 @@ impl Definition<'_> { matches!( self, Definition::Member(Member { - kind: MemberKind::Method, + kind: MemberKind::Method(_), .. }) ) } + /// Return the name of the definition. pub fn name(&self) -> Option<&str> { match self { Definition::Module(module) => module.name(), - Definition::Member(member) => member.name(), + Definition::Member(member) => Some(member.name()), + } + } + + /// Return the [`ast::StmtFunctionDef`] of the definition, if it's a function definition. + pub fn as_function_def(&self) -> Option<&ast::StmtFunctionDef> { + match self { + Definition::Member(Member { + kind: + MemberKind::Function(function) + | MemberKind::NestedFunction(function) + | MemberKind::Method(function), + .. + }) => Some(function), + _ => None, + } + } + + /// Return the [`ast::StmtClassDef`] of the definition, if it's a class definition. + pub fn as_class_def(&self) -> Option<&ast::StmtClassDef> { + match self { + Definition::Member(Member { + kind: MemberKind::Class(class) | MemberKind::NestedClass(class), + .. + }) => Some(class), + _ => None, } } } @@ -147,55 +198,43 @@ impl<'a> Definitions<'a> { match &definition { Definition::Module(module) => module.source.to_visibility(), Definition::Member(member) => match member.kind { - MemberKind::Class => { + MemberKind::Class(class) => { let parent = &definitions[member.parent]; if parent.visibility.is_private() - || exports.is_some_and(|exports| { - member.name().is_some_and(|name| !exports.contains(&name)) - }) + || exports.is_some_and(|exports| !exports.contains(&member.name())) { Visibility::Private } else { - class_visibility(member.stmt) + class_visibility(class) } } - MemberKind::NestedClass => { + MemberKind::NestedClass(class) => { let parent = &definitions[member.parent]; if parent.visibility.is_private() - || matches!( - parent.definition, - Definition::Member(Member { - kind: MemberKind::Function - | MemberKind::NestedFunction - | MemberKind::Method, - .. - }) - ) + || parent.definition.as_function_def().is_some() { Visibility::Private } else { - class_visibility(member.stmt) + class_visibility(class) } } - MemberKind::Function => { + MemberKind::Function(function) => { let parent = &definitions[member.parent]; if parent.visibility.is_private() - || exports.is_some_and(|exports| { - member.name().is_some_and(|name| !exports.contains(&name)) - }) + || exports.is_some_and(|exports| !exports.contains(&member.name())) { Visibility::Private } else { - function_visibility(member.stmt) + function_visibility(function) } } - MemberKind::NestedFunction => Visibility::Private, - MemberKind::Method => { + MemberKind::NestedFunction(_) => Visibility::Private, + MemberKind::Method(function) => { let parent = &definitions[member.parent]; if parent.visibility.is_private() { Visibility::Private } else { - method_visibility(member.stmt) + method_visibility(function) } } }, diff --git a/crates/ruff_python_semantic/src/expressions.rs b/crates/ruff_python_semantic/src/expressions.rs new file mode 100644 index 0000000000..344e6d073b --- /dev/null +++ b/crates/ruff_python_semantic/src/expressions.rs @@ -0,0 +1,58 @@ +use std::ops::Index; + +use ruff_index::{newtype_index, IndexVec}; +use ruff_python_ast::Expr; + +/// Id uniquely identifying an expression in a program. +/// +/// Using a `u32` is sufficient because Ruff only supports parsing documents with a size of max +/// `u32::max` and it is impossible to have more nodes than characters in the file. We use a +/// `NonZeroU32` to take advantage of memory layout optimizations. +#[newtype_index] +#[derive(Ord, PartialOrd)] +pub struct ExpressionId; + +/// An [`Expr`] AST node in a program, along with a pointer to its parent expression (if any). +#[derive(Debug)] +struct ExpressionWithParent<'a> { + /// A pointer to the AST node. + node: &'a Expr, + /// The ID of the parent of this node, if any. + parent: Option, +} + +/// The nodes of a program indexed by [`ExpressionId`] +#[derive(Debug, Default)] +pub struct Expressions<'a> { + nodes: IndexVec>, +} + +impl<'a> Expressions<'a> { + /// Inserts a new expression into the node tree and returns its unique id. + pub(crate) fn insert(&mut self, node: &'a Expr, parent: Option) -> ExpressionId { + self.nodes.push(ExpressionWithParent { node, parent }) + } + + /// Return the [`ExpressionId`] of the parent node. + #[inline] + pub fn parent_id(&self, node_id: ExpressionId) -> Option { + self.nodes[node_id].parent + } + + /// Returns an iterator over all [`ExpressionId`] ancestors, starting from the given [`ExpressionId`]. + pub(crate) fn ancestor_ids( + &self, + node_id: ExpressionId, + ) -> impl Iterator + '_ { + std::iter::successors(Some(node_id), |&node_id| self.nodes[node_id].parent) + } +} + +impl<'a> Index for Expressions<'a> { + type Output = &'a Expr; + + #[inline] + fn index(&self, index: ExpressionId) -> &Self::Output { + &self.nodes[index].node + } +} diff --git a/crates/ruff_python_semantic/src/globals.rs b/crates/ruff_python_semantic/src/globals.rs index a17b79b6f8..ffaf1b16f9 100644 --- a/crates/ruff_python_semantic/src/globals.rs +++ b/crates/ruff_python_semantic/src/globals.rs @@ -80,7 +80,7 @@ impl<'a> StatementVisitor<'a> for GlobalsVisitor<'a> { self.0.insert(name.as_str(), *range); } } - Stmt::FunctionDef(_) | Stmt::AsyncFunctionDef(_) | Stmt::ClassDef(_) => { + Stmt::FunctionDef(_) | Stmt::ClassDef(_) => { // Don't recurse. } _ => walk_stmt(self, stmt), diff --git a/crates/ruff_python_semantic/src/lib.rs b/crates/ruff_python_semantic/src/lib.rs index 3b7ce9a7a5..7fd04143d4 100644 --- a/crates/ruff_python_semantic/src/lib.rs +++ b/crates/ruff_python_semantic/src/lib.rs @@ -2,19 +2,21 @@ pub mod analyze; mod binding; mod context; mod definition; +mod expressions; mod globals; mod model; -mod node; mod reference; mod scope; mod star_import; +mod statements; pub use binding::*; pub use context::*; pub use definition::*; +pub use expressions::*; pub use globals::*; pub use model::*; -pub use node::*; pub use reference::*; pub use scope::*; pub use star_import::*; +pub use statements::*; diff --git a/crates/ruff_python_semantic/src/model.rs b/crates/ruff_python_semantic/src/model.rs index bede85c5fd..1221883920 100644 --- a/crates/ruff_python_semantic/src/model.rs +++ b/crates/ruff_python_semantic/src/model.rs @@ -6,7 +6,7 @@ use smallvec::smallvec; use ruff_python_ast::call_path::{collect_call_path, from_unqualified_name, CallPath}; use ruff_python_ast::helpers::from_relative_import; -use ruff_python_ast::{self as ast, Expr, Ranged, Stmt}; +use ruff_python_ast::{self as ast, Expr, Operator, Ranged, Stmt}; use ruff_python_stdlib::path::is_python_stub_file; use ruff_python_stdlib::typing::is_typing_extension; use ruff_text_size::{TextRange, TextSize}; @@ -17,13 +17,15 @@ use crate::binding::{ }; use crate::context::ExecutionContext; use crate::definition::{Definition, DefinitionId, Definitions, Member, Module}; +use crate::expressions::{ExpressionId, Expressions}; use crate::globals::{Globals, GlobalsArena}; -use crate::node::{NodeId, Nodes}; use crate::reference::{ - ResolvedReference, ResolvedReferenceId, ResolvedReferences, UnresolvedReferences, + ResolvedReference, ResolvedReferenceId, ResolvedReferences, UnresolvedReference, + UnresolvedReferenceFlags, UnresolvedReferences, }; use crate::scope::{Scope, ScopeId, ScopeKind, Scopes}; -use crate::{Imported, UnresolvedReference, UnresolvedReferenceFlags}; +use crate::statements::{StatementId, Statements}; +use crate::Imported; /// A semantic model for a Python module, to enable querying the module's semantic information. pub struct SemanticModel<'a> { @@ -31,13 +33,16 @@ pub struct SemanticModel<'a> { module_path: Option<&'a [String]>, /// Stack of all visited statements. - pub stmts: Nodes<'a, Stmt>, + statements: Statements<'a>, /// The identifier of the current statement. - stmt_id: Option, + statement_id: Option, - /// Stack of current expressions. - exprs: Vec<&'a Expr>, + /// Stack of all visited expressions. + expressions: Expressions<'a>, + + /// The identifier of the current expression. + expression_id: Option, /// Stack of all scopes, along with the identifier of the current scope. pub scopes: Scopes<'a>, @@ -129,9 +134,10 @@ impl<'a> SemanticModel<'a> { Self { typing_modules, module_path: module.path(), - stmts: Nodes::::default(), - stmt_id: None, - exprs: Vec::default(), + statements: Statements::default(), + statement_id: None, + expressions: Expressions::default(), + expression_id: None, scopes: Scopes::default(), scope_id: ScopeId::global(), definitions: Definitions::for_module(module), @@ -221,19 +227,12 @@ impl<'a> SemanticModel<'a> { flags, references: Vec::new(), scope: self.scope_id, - source: self.stmt_id, + source: self.statement_id, context: self.execution_context(), exceptions: self.exceptions(), }) } - /// Return the current [`Binding`] for a given `name`. - pub fn find_binding(&self, member: &str) -> Option<&Binding> { - self.scopes() - .find_map(|scope| scope.get(member)) - .map(|binding_id| &self.bindings[binding_id]) - } - /// Return the [`BindingId`] that the given [`BindingId`] shadows, if any. /// /// Note that this will only return bindings that are shadowed by a binding in a parent scope. @@ -243,14 +242,16 @@ impl<'a> SemanticModel<'a> { /// Return `true` if `member` is bound as a builtin. pub fn is_builtin(&self, member: &str) -> bool { - self.find_binding(member) + self.lookup_symbol(member) + .map(|binding_id| &self.bindings[binding_id]) .is_some_and(|binding| binding.kind.is_builtin()) } /// Return `true` if `member` is an "available" symbol, i.e., a symbol that has not been bound /// in the current scope, or in any containing scope. pub fn is_available(&self, member: &str) -> bool { - self.find_binding(member) + self.lookup_symbol(member) + .map(|binding_id| &self.bindings[binding_id]) .map_or(true, |binding| binding.kind.is_builtin()) } @@ -472,7 +473,7 @@ impl<'a> SemanticModel<'a> { } } - seen_function |= scope.kind.is_any_function(); + seen_function |= scope.kind.is_function(); import_starred = import_starred || scope.uses_star_imports(); } @@ -534,7 +535,7 @@ impl<'a> SemanticModel<'a> { } } - seen_function |= scope.kind.is_any_function(); + seen_function |= scope.kind.is_function(); } None @@ -584,20 +585,37 @@ impl<'a> SemanticModel<'a> { // print(pa.csv.read_csv("test.csv")) // ``` let import = self.bindings[binding_id].as_any_import()?; + if !import.is_import() { + return None; + } + + // Grab, e.g., `pyarrow` from `import pyarrow as pa`. let call_path = import.call_path(); let segment = call_path.last()?; if *segment == symbol { return None; } + // Locate the submodule import (e.g., `pyarrow.csv`) that `pa` aliases. let binding_id = self.scopes[scope_id].get(segment)?; - if !self.bindings[binding_id].kind.is_submodule_import() { + let submodule = &self.bindings[binding_id].as_any_import()?; + if !submodule.is_submodule_import() { + return None; + } + + // Ensure that the submodule import and the aliased import are from the same module. + if import.module_name() != submodule.module_name() { return None; } Some(binding_id) } + /// Resolves the [`ast::ExprName`] to the [`BindingId`] of the symbol it refers to, if any. + pub fn resolve_name(&self, name: &ast::ExprName) -> Option { + self.resolved_names.get(&name.into()).copied() + } + /// Resolves the [`Expr`] to a fully-qualified symbol-name, if `value` resolves to an imported /// or builtin symbol. /// @@ -622,11 +640,10 @@ impl<'a> SemanticModel<'a> { // If the name was already resolved, look it up; otherwise, search for the symbol. let head = match_head(value)?; - let binding = if let Some(id) = self.resolved_names.get(&head.into()) { - self.binding(*id) - } else { - self.find_binding(&head.id)? - }; + let binding = self + .resolve_name(head) + .or_else(|| self.lookup_symbol(&head.id)) + .map(|id| self.binding(id))?; match &binding.kind { BindingKind::Import(Import { call_path }) => { @@ -682,103 +699,110 @@ impl<'a> SemanticModel<'a> { ) -> Option { // TODO(charlie): Pass in a slice. let module_path: Vec<&str> = module.split('.').collect(); - self.scopes().enumerate().find_map(|(scope_index, scope)| { - scope.bindings().find_map(|(name, binding_id)| { - let binding = &self.bindings[binding_id]; - match &binding.kind { - // Ex) Given `module="sys"` and `object="exit"`: - // `import sys` -> `sys.exit` - // `import sys as sys2` -> `sys2.exit` - BindingKind::Import(Import { call_path }) => { - if call_path.as_ref() == module_path.as_slice() { - if let Some(source) = binding.source { - // Verify that `sys` isn't bound in an inner scope. - if self - .scopes() - .take(scope_index) - .all(|scope| !scope.has(name)) - { - return Some(ImportedName { - name: format!("{name}.{member}"), - range: self.stmts[source].range(), - context: binding.context, - }); - } - } - } - } - // Ex) Given `module="os.path"` and `object="join"`: - // `from os.path import join` -> `join` - // `from os.path import join as join2` -> `join2` - BindingKind::FromImport(FromImport { call_path }) => { - if let Some((target_member, target_module)) = call_path.split_last() { - if target_module == module_path.as_slice() && target_member == &member { + self.current_scopes() + .enumerate() + .find_map(|(scope_index, scope)| { + scope.bindings().find_map(|(name, binding_id)| { + let binding = &self.bindings[binding_id]; + match &binding.kind { + // Ex) Given `module="sys"` and `object="exit"`: + // `import sys` -> `sys.exit` + // `import sys as sys2` -> `sys2.exit` + BindingKind::Import(Import { call_path }) => { + if call_path.as_ref() == module_path.as_slice() { if let Some(source) = binding.source { - // Verify that `join` isn't bound in an inner scope. + // Verify that `sys` isn't bound in an inner scope. if self - .scopes() + .current_scopes() .take(scope_index) .all(|scope| !scope.has(name)) { return Some(ImportedName { - name: (*name).to_string(), - range: self.stmts[source].range(), + name: format!("{name}.{member}"), + range: self.statements[source].range(), context: binding.context, }); } } } } - } - // Ex) Given `module="os"` and `object="name"`: - // `import os.path ` -> `os.name` - BindingKind::SubmoduleImport(SubmoduleImport { .. }) => { - if name == module { - if let Some(source) = binding.source { - // Verify that `os` isn't bound in an inner scope. - if self - .scopes() - .take(scope_index) - .all(|scope| !scope.has(name)) + // Ex) Given `module="os.path"` and `object="join"`: + // `from os.path import join` -> `join` + // `from os.path import join as join2` -> `join2` + BindingKind::FromImport(FromImport { call_path }) => { + if let Some((target_member, target_module)) = call_path.split_last() { + if target_module == module_path.as_slice() + && target_member == &member { - return Some(ImportedName { - name: format!("{name}.{member}"), - range: self.stmts[source].range(), - context: binding.context, - }); + if let Some(source) = binding.source { + // Verify that `join` isn't bound in an inner scope. + if self + .current_scopes() + .take(scope_index) + .all(|scope| !scope.has(name)) + { + return Some(ImportedName { + name: (*name).to_string(), + range: self.statements[source].range(), + context: binding.context, + }); + } + } } } } + // Ex) Given `module="os"` and `object="name"`: + // `import os.path ` -> `os.name` + BindingKind::SubmoduleImport(SubmoduleImport { .. }) => { + if name == module { + if let Some(source) = binding.source { + // Verify that `os` isn't bound in an inner scope. + if self + .current_scopes() + .take(scope_index) + .all(|scope| !scope.has(name)) + { + return Some(ImportedName { + name: format!("{name}.{member}"), + range: self.statements[source].range(), + context: binding.context, + }); + } + } + } + } + // Non-imports. + _ => {} } - // Non-imports. - _ => {} - } - None + None + }) }) - }) } /// Push a [`Stmt`] onto the stack. - pub fn push_stmt(&mut self, stmt: &'a Stmt) { - self.stmt_id = Some(self.stmts.insert(stmt, self.stmt_id)); + pub fn push_statement(&mut self, stmt: &'a Stmt) { + self.statement_id = Some(self.statements.insert(stmt, self.statement_id)); } /// Pop the current [`Stmt`] off the stack. - pub fn pop_stmt(&mut self) { - let node_id = self.stmt_id.expect("Attempted to pop without statement"); - self.stmt_id = self.stmts.parent_id(node_id); + pub fn pop_statement(&mut self) { + let node_id = self + .statement_id + .expect("Attempted to pop without statement"); + self.statement_id = self.statements.parent_id(node_id); } - /// Push an [`Expr`] onto the stack. - pub fn push_expr(&mut self, expr: &'a Expr) { - self.exprs.push(expr); + /// Push a [`Expr`] onto the stack. + pub fn push_expression(&mut self, expr: &'a Expr) { + self.expression_id = Some(self.expressions.insert(expr, self.expression_id)); } /// Pop the current [`Expr`] off the stack. - pub fn pop_expr(&mut self) { - self.exprs - .pop() + pub fn pop_expression(&mut self) { + let node_id = self + .expression_id .expect("Attempted to pop without expression"); + self.expression_id = self.expressions.parent_id(node_id); } /// Push a [`Scope`] with the given [`ScopeKind`] onto the stack. @@ -808,59 +832,99 @@ impl<'a> SemanticModel<'a> { } /// Return the current `Stmt`. - pub fn stmt(&self) -> &'a Stmt { - let node_id = self.stmt_id.expect("No current statement"); - self.stmts[node_id] + pub fn current_statement(&self) -> &'a Stmt { + let node_id = self.statement_id.expect("No current statement"); + self.statements[node_id] + } + + /// Returns an [`Iterator`] over the current statement hierarchy, from the current [`Stmt`] + /// through to any parents. + pub fn current_statements(&self) -> impl Iterator + '_ { + self.statement_id + .iter() + .flat_map(|id| { + self.statements + .ancestor_ids(*id) + .map(|id| &self.statements[id]) + }) + .copied() } /// Return the parent `Stmt` of the current `Stmt`, if any. - pub fn stmt_parent(&self) -> Option<&'a Stmt> { - let node_id = self.stmt_id.expect("No current statement"); - let parent_id = self.stmts.parent_id(node_id)?; - Some(self.stmts[parent_id]) + pub fn current_statement_parent(&self) -> Option<&'a Stmt> { + self.current_statements().nth(1) + } + + /// Return the grandparent `Stmt` of the current `Stmt`, if any. + pub fn current_statement_grandparent(&self) -> Option<&'a Stmt> { + self.current_statements().nth(2) } /// Return the current `Expr`. - pub fn expr(&self) -> Option<&'a Expr> { - self.exprs.iter().last().copied() + pub fn current_expression(&self) -> Option<&'a Expr> { + let node_id = self.expression_id?; + Some(self.expressions[node_id]) } - /// Return the parent `Expr` of the current `Expr`. - pub fn expr_parent(&self) -> Option<&'a Expr> { - self.exprs.iter().rev().nth(1).copied() + /// Returns an [`Iterator`] over the current statement hierarchy, from the current [`Expr`] + /// through to any parents. + pub fn current_expressions(&self) -> impl Iterator + '_ { + self.expression_id + .iter() + .flat_map(|id| { + self.expressions + .ancestor_ids(*id) + .map(|id| &self.expressions[id]) + }) + .copied() } - /// Return the grandparent `Expr` of the current `Expr`. - pub fn expr_grandparent(&self) -> Option<&'a Expr> { - self.exprs.iter().rev().nth(2).copied() + /// Return the parent [`Expr`] of the current [`Expr`], if any. + pub fn current_expression_parent(&self) -> Option<&'a Expr> { + self.current_expressions().nth(1) } - /// Return an [`Iterator`] over the current `Expr` parents. - pub fn expr_ancestors(&self) -> impl Iterator { - self.exprs.iter().rev().skip(1) + /// Return the grandparent [`Expr`] of the current [`Expr`], if any. + pub fn current_expression_grandparent(&self) -> Option<&'a Expr> { + self.current_expressions().nth(2) } - /// Returns a reference to the global scope + /// Returns a reference to the global [`Scope`]. pub fn global_scope(&self) -> &Scope<'a> { self.scopes.global() } - /// Returns a mutable reference to the global scope + /// Returns a mutable reference to the global [`Scope`]. pub fn global_scope_mut(&mut self) -> &mut Scope<'a> { self.scopes.global_mut() } - /// Returns the current top most scope. - pub fn scope(&self) -> &Scope<'a> { + /// Returns the current top-most [`Scope`]. + pub fn current_scope(&self) -> &Scope<'a> { &self.scopes[self.scope_id] } - /// Returns the parent of the given scope, if any. + /// Returns a mutable reference to the current top-most [`Scope`]. + pub fn current_scope_mut(&mut self) -> &mut Scope<'a> { + &mut self.scopes[self.scope_id] + } + + /// Returns an iterator over all scopes, starting from the current [`Scope`]. + pub fn current_scopes(&self) -> impl Iterator { + self.scopes.ancestors(self.scope_id) + } + + /// Returns an iterator over all scopes IDs, starting from the current [`Scope`]. + pub fn current_scope_ids(&self) -> impl Iterator + '_ { + self.scopes.ancestor_ids(self.scope_id) + } + + /// Returns the parent of the given [`Scope`], if any. pub fn parent_scope(&self, scope: &Scope) -> Option<&Scope<'a>> { scope.parent.map(|scope_id| &self.scopes[scope_id]) } - /// Returns the first parent of the given scope that is not a [`ScopeKind::Type`] scope, if any. + /// Returns the first parent of the given [`Scope`] that is not of [`ScopeKind::Type`], if any. pub fn first_non_type_parent_scope(&self, scope: &Scope) -> Option<&Scope<'a>> { let mut current_scope = scope; while let Some(parent) = self.parent_scope(current_scope) { @@ -873,20 +937,29 @@ impl<'a> SemanticModel<'a> { None } - /// Returns a mutable reference to the current top most scope. - pub fn scope_mut(&mut self) -> &mut Scope<'a> { - &mut self.scopes[self.scope_id] + /// Return the [`Statements`] vector of all statements. + pub const fn statements(&self) -> &Statements<'a> { + &self.statements } - /// Returns an iterator over all scopes, starting from the current scope. - pub fn scopes(&self) -> impl Iterator { - self.scopes.ancestors(self.scope_id) + /// Return the [`StatementId`] corresponding to the given [`Stmt`]. + #[inline] + pub fn statement_id(&self, statement: &Stmt) -> Option { + self.statements.statement_id(statement) } - /// Returns an iterator over all parent statements. - pub fn parents(&self) -> impl Iterator + '_ { - let node_id = self.stmt_id.expect("No current statement"); - self.stmts.ancestor_ids(node_id).map(|id| self.stmts[id]) + /// Return the [`Stmt]` corresponding to the given [`StatementId`]. + #[inline] + pub fn statement(&self, statement_id: StatementId) -> &'a Stmt { + self.statements[statement_id] + } + + /// Given a [`Stmt`], return its parent, if any. + #[inline] + pub fn parent_statement(&self, statement_id: StatementId) -> Option<&'a Stmt> { + self.statements + .parent_id(statement_id) + .map(|id| self.statements[id]) } /// Set the [`Globals`] for the current [`Scope`]. @@ -903,7 +976,7 @@ impl<'a> SemanticModel<'a> { range: *range, references: Vec::new(), scope: self.scope_id, - source: self.stmt_id, + source: self.statement_id, context: self.execution_context(), exceptions: self.exceptions(), flags: BindingFlags::empty(), @@ -951,23 +1024,48 @@ impl<'a> SemanticModel<'a> { pub fn at_top_level(&self) -> bool { self.scope_id.is_global() && self - .stmt_id - .map_or(true, |stmt_id| self.stmts.parent_id(stmt_id).is_none()) + .statement_id + .map_or(true, |stmt_id| self.statements.parent_id(stmt_id).is_none()) } /// Return `true` if the model is in an async context. pub fn in_async_context(&self) -> bool { - for scope in self.scopes() { - if scope.kind.is_async_function() { - return true; - } - if scope.kind.is_function() { - return false; + for scope in self.current_scopes() { + if let ScopeKind::Function(ast::StmtFunctionDef { is_async, .. }) = scope.kind { + return *is_async; } } false } + /// Return `true` if the model is in a nested union expression (e.g., the inner `Union` in + /// `Union[Union[int, str], float]`). + pub fn in_nested_union(&self) -> bool { + // Ex) `Union[Union[int, str], float]` + if self + .current_expression_grandparent() + .and_then(Expr::as_subscript_expr) + .is_some_and(|parent| self.match_typing_expr(&parent.value, "Union")) + { + return true; + } + + // Ex) `int | Union[str, float]` + if self.current_expression_parent().is_some_and(|parent| { + matches!( + parent, + Expr::BinOp(ast::ExprBinOp { + op: Operator::BitOr, + .. + }) + ) + }) { + return true; + } + + false + } + /// Returns `true` if the given [`BindingId`] is used. pub fn is_used(&self, binding_id: BindingId) -> bool { self.bindings[binding_id].is_used() @@ -1031,26 +1129,29 @@ impl<'a> SemanticModel<'a> { exceptions } - /// Generate a [`Snapshot`] of the current model. + /// Generate a [`Snapshot`] of the current semantic model. pub fn snapshot(&self) -> Snapshot { Snapshot { scope_id: self.scope_id, - stmt_id: self.stmt_id, + stmt_id: self.statement_id, + expr_id: self.expression_id, definition_id: self.definition_id, flags: self.flags, } } - /// Restore the model to the given [`Snapshot`]. + /// Restore the semantic model to the given [`Snapshot`]. pub fn restore(&mut self, snapshot: Snapshot) { let Snapshot { scope_id, stmt_id, + expr_id, definition_id, flags, } = snapshot; self.scope_id = scope_id; - self.stmt_id = stmt_id; + self.statement_id = stmt_id; + self.expression_id = expr_id; self.definition_id = definition_id; self.flags = flags; } @@ -1463,7 +1564,8 @@ impl SemanticModelFlags { #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct Snapshot { scope_id: ScopeId, - stmt_id: Option, + stmt_id: Option, + expr_id: Option, definition_id: DefinitionId, flags: SemanticModelFlags, } diff --git a/crates/ruff_python_semantic/src/node.rs b/crates/ruff_python_semantic/src/node.rs deleted file mode 100644 index b7d4b82f94..0000000000 --- a/crates/ruff_python_semantic/src/node.rs +++ /dev/null @@ -1,105 +0,0 @@ -use std::ops::{Index, IndexMut}; - -use ruff_index::{newtype_index, IndexVec}; -use rustc_hash::FxHashMap; - -use ruff_python_ast::types::RefEquality; - -/// Id uniquely identifying an AST node in a program. -/// -/// Using a `u32` is sufficient because Ruff only supports parsing documents with a size of max `u32::max` -/// and it is impossible to have more nodes than characters in the file. We use a `NonZeroU32` to -/// take advantage of memory layout optimizations. -#[newtype_index] -#[derive(Ord, PartialOrd)] -pub struct NodeId; - -/// A [`Node`] represents an AST node in a program, along with a pointer to its parent (if any). -#[derive(Debug)] -struct Node<'a, T> { - /// A pointer to the AST node. - node: &'a T, - /// The ID of the parent of this node, if any. - parent: Option, - /// The depth of this node in the tree. - depth: u32, -} - -/// The nodes of a program indexed by [`NodeId`] -#[derive(Debug)] -pub struct Nodes<'a, T> { - nodes: IndexVec>, - node_to_id: FxHashMap, NodeId>, -} - -impl<'a, T> Default for Nodes<'a, T> { - fn default() -> Self { - Self { - nodes: IndexVec::default(), - node_to_id: FxHashMap::default(), - } - } -} - -impl<'a, T> Nodes<'a, T> { - /// Inserts a new node into the node tree and returns its unique id. - /// - /// Panics if a node with the same pointer already exists. - pub(crate) fn insert(&mut self, node: &'a T, parent: Option) -> NodeId { - let next_id = self.nodes.next_index(); - if let Some(existing_id) = self.node_to_id.insert(RefEquality(node), next_id) { - panic!("Node already exists with id {existing_id:?}"); - } - self.nodes.push(Node { - node, - parent, - depth: parent.map_or(0, |parent| self.nodes[parent].depth + 1), - }) - } - - /// Returns the [`NodeId`] of the given node. - #[inline] - pub fn node_id(&self, node: &'a T) -> Option { - self.node_to_id.get(&RefEquality(node)).copied() - } - - /// Return the [`NodeId`] of the parent node. - #[inline] - pub fn parent_id(&self, node_id: NodeId) -> Option { - self.nodes[node_id].parent - } - - /// Return the parent of the given node. - pub fn parent(&self, node: &'a T) -> Option<&'a T> { - let node_id = self.node_to_id.get(&RefEquality(node))?; - let parent_id = self.nodes[*node_id].parent?; - Some(self[parent_id]) - } - - /// Return the depth of the node. - #[inline] - pub(crate) fn depth(&self, node_id: NodeId) -> u32 { - self.nodes[node_id].depth - } - - /// Returns an iterator over all [`NodeId`] ancestors, starting from the given [`NodeId`]. - pub(crate) fn ancestor_ids(&self, node_id: NodeId) -> impl Iterator + '_ { - std::iter::successors(Some(node_id), |&node_id| self.nodes[node_id].parent) - } -} - -impl<'a, T> Index for Nodes<'a, T> { - type Output = &'a T; - - #[inline] - fn index(&self, index: NodeId) -> &Self::Output { - &self.nodes[index].node - } -} - -impl<'a, T> IndexMut for Nodes<'a, T> { - #[inline] - fn index_mut(&mut self, index: NodeId) -> &mut Self::Output { - &mut self.nodes[index].node - } -} diff --git a/crates/ruff_python_semantic/src/scope.rs b/crates/ruff_python_semantic/src/scope.rs index b80d612784..3de3b058f9 100644 --- a/crates/ruff_python_semantic/src/scope.rs +++ b/crates/ruff_python_semantic/src/scope.rs @@ -178,19 +178,12 @@ bitflags! { pub enum ScopeKind<'a> { Class(&'a ast::StmtClassDef), Function(&'a ast::StmtFunctionDef), - AsyncFunction(&'a ast::StmtAsyncFunctionDef), Generator, Module, Type, Lambda(&'a ast::ExprLambda), } -impl ScopeKind<'_> { - pub const fn is_any_function(&self) -> bool { - matches!(self, ScopeKind::Function(_) | ScopeKind::AsyncFunction(_)) - } -} - /// Id uniquely identifying a scope in a program. /// /// Using a `u32` is sufficient because Ruff only supports parsing documents with a size of max `u32::max` diff --git a/crates/ruff_python_semantic/src/statements.rs b/crates/ruff_python_semantic/src/statements.rs new file mode 100644 index 0000000000..8295a04a7d --- /dev/null +++ b/crates/ruff_python_semantic/src/statements.rs @@ -0,0 +1,104 @@ +use std::ops::Index; + +use rustc_hash::FxHashMap; + +use ruff_index::{newtype_index, IndexVec}; +use ruff_python_ast::{Ranged, Stmt}; +use ruff_text_size::TextSize; + +/// Id uniquely identifying a statement AST node. +/// +/// Using a `u32` is sufficient because Ruff only supports parsing documents with a size of max +/// `u32::max` and it is impossible to have more nodes than characters in the file. We use a +/// `NonZeroU32` to take advantage of memory layout optimizations. +#[newtype_index] +#[derive(Ord, PartialOrd)] +pub struct StatementId; + +/// A [`Stmt`] AST node, along with a pointer to its parent statement (if any). +#[derive(Debug)] +struct StatementWithParent<'a> { + /// A pointer to the AST node. + statement: &'a Stmt, + /// The ID of the parent of this node, if any. + parent: Option, + /// The depth of this node in the tree. + depth: u32, +} + +/// The statements of a program indexed by [`StatementId`] +#[derive(Debug, Default)] +pub struct Statements<'a> { + statements: IndexVec>, + statement_to_id: FxHashMap, +} + +/// A unique key for a statement AST node. No two statements can appear at the same location +/// in the source code, since compound statements must be delimited by _at least_ one character +/// (a colon), so the starting offset is a cheap and sufficient unique identifier. +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub struct StatementKey(TextSize); + +impl From<&Stmt> for StatementKey { + fn from(statement: &Stmt) -> Self { + Self(statement.start()) + } +} + +impl<'a> Statements<'a> { + /// Inserts a new statement into the statement vector and returns its unique ID. + /// + /// Panics if a statement with the same pointer already exists. + pub(crate) fn insert( + &mut self, + statement: &'a Stmt, + parent: Option, + ) -> StatementId { + let next_id = self.statements.next_index(); + if let Some(existing_id) = self + .statement_to_id + .insert(StatementKey::from(statement), next_id) + { + panic!("Statements already exists with ID: {existing_id:?}"); + } + self.statements.push(StatementWithParent { + statement, + parent, + depth: parent.map_or(0, |parent| self.statements[parent].depth + 1), + }) + } + + /// Returns the [`StatementId`] of the given statement. + #[inline] + pub fn statement_id(&self, statement: &'a Stmt) -> Option { + self.statement_to_id + .get(&StatementKey::from(statement)) + .copied() + } + + /// Return the [`StatementId`] of the parent statement. + #[inline] + pub fn parent_id(&self, statement_id: StatementId) -> Option { + self.statements[statement_id].parent + } + + /// Return the depth of the statement. + #[inline] + pub(crate) fn depth(&self, id: StatementId) -> u32 { + self.statements[id].depth + } + + /// Returns an iterator over all [`StatementId`] ancestors, starting from the given [`StatementId`]. + pub(crate) fn ancestor_ids(&self, id: StatementId) -> impl Iterator + '_ { + std::iter::successors(Some(id), |&id| self.statements[id].parent) + } +} + +impl<'a> Index for Statements<'a> { + type Output = &'a Stmt; + + #[inline] + fn index(&self, index: StatementId) -> &Self::Output { + &self.statements[index].statement + } +} diff --git a/crates/ruff_python_trivia/Cargo.toml b/crates/ruff_python_trivia/Cargo.toml index a9c5d4a44e..f0f9861e5a 100644 --- a/crates/ruff_python_trivia/Cargo.toml +++ b/crates/ruff_python_trivia/Cargo.toml @@ -24,4 +24,3 @@ unic-ucd-ident = "0.9.0" insta = { workspace = true } ruff_python_ast = { path = "../ruff_python_ast" } ruff_python_parser = { path = "../ruff_python_parser" } - diff --git a/crates/ruff_python_trivia/src/cursor.rs b/crates/ruff_python_trivia/src/cursor.rs index 43a750cb4f..336720269c 100644 --- a/crates/ruff_python_trivia/src/cursor.rs +++ b/crates/ruff_python_trivia/src/cursor.rs @@ -30,6 +30,14 @@ impl<'a> Cursor<'a> { self.chars.clone().next().unwrap_or(EOF_CHAR) } + /// Peeks the second character from the input stream without consuming it. + /// Returns [`EOF_CHAR`] if the position is past the end of the file. + pub fn second(&self) -> char { + let mut chars = self.chars.clone(); + chars.next(); + chars.next().unwrap_or(EOF_CHAR) + } + /// Peeks the next character from the input stream without consuming it. /// Returns [`EOF_CHAR`] if the file is at the end of the file. pub fn last(&self) -> char { diff --git a/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_eq.snap b/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_eq.snap new file mode 100644 index 0000000000..26f9c5ae2c --- /dev/null +++ b/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_eq.snap @@ -0,0 +1,14 @@ +--- +source: crates/ruff_python_trivia/src/tokenizer.rs +expression: test_case.tokens() +--- +[ + SimpleToken { + kind: EqEqual, + range: 0..2, + }, + SimpleToken { + kind: Equals, + range: 2..3, + }, +] diff --git a/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_invalid_operators.snap b/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_invalid_operators.snap new file mode 100644 index 0000000000..cee59e0ba3 --- /dev/null +++ b/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_invalid_operators.snap @@ -0,0 +1,22 @@ +--- +source: crates/ruff_python_trivia/src/tokenizer.rs +expression: test_case.tokens() +--- +[ + SimpleToken { + kind: RArrow, + range: 0..2, + }, + SimpleToken { + kind: Whitespace, + range: 2..3, + }, + SimpleToken { + kind: Other, + range: 3..4, + }, + SimpleToken { + kind: Bogus, + range: 4..5, + }, +] diff --git a/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_not_eq.snap b/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_not_eq.snap new file mode 100644 index 0000000000..00a7d9c1fc --- /dev/null +++ b/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_not_eq.snap @@ -0,0 +1,14 @@ +--- +source: crates/ruff_python_trivia/src/tokenizer.rs +expression: test_case.tokens() +--- +[ + SimpleToken { + kind: NotEqual, + range: 0..2, + }, + SimpleToken { + kind: Equals, + range: 2..3, + }, +] diff --git a/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_operators.snap b/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_operators.snap new file mode 100644 index 0000000000..f0f92f80c0 --- /dev/null +++ b/crates/ruff_python_trivia/src/snapshots/ruff_python_trivia__tokenizer__tests__tokenize_operators.snap @@ -0,0 +1,106 @@ +--- +source: crates/ruff_python_trivia/src/tokenizer.rs +expression: test_case.tokens() +--- +[ + SimpleToken { + kind: RArrow, + range: 0..2, + }, + SimpleToken { + kind: Whitespace, + range: 2..3, + }, + SimpleToken { + kind: StarEqual, + range: 3..5, + }, + SimpleToken { + kind: Whitespace, + range: 5..6, + }, + SimpleToken { + kind: LParen, + range: 6..7, + }, + SimpleToken { + kind: Whitespace, + range: 7..8, + }, + SimpleToken { + kind: MinusEqual, + range: 8..10, + }, + SimpleToken { + kind: Whitespace, + range: 10..11, + }, + SimpleToken { + kind: RParen, + range: 11..12, + }, + SimpleToken { + kind: Whitespace, + range: 12..13, + }, + SimpleToken { + kind: Tilde, + range: 13..14, + }, + SimpleToken { + kind: Whitespace, + range: 14..15, + }, + SimpleToken { + kind: DoubleSlash, + range: 15..17, + }, + SimpleToken { + kind: Whitespace, + range: 17..18, + }, + SimpleToken { + kind: DoubleStar, + range: 18..20, + }, + SimpleToken { + kind: Whitespace, + range: 20..21, + }, + SimpleToken { + kind: DoubleStarEqual, + range: 21..24, + }, + SimpleToken { + kind: Whitespace, + range: 24..25, + }, + SimpleToken { + kind: Circumflex, + range: 25..26, + }, + SimpleToken { + kind: Whitespace, + range: 26..27, + }, + SimpleToken { + kind: CircumflexEqual, + range: 27..29, + }, + SimpleToken { + kind: Whitespace, + range: 29..30, + }, + SimpleToken { + kind: Vbar, + range: 30..31, + }, + SimpleToken { + kind: Whitespace, + range: 31..32, + }, + SimpleToken { + kind: VbarEqual, + range: 32..34, + }, +] diff --git a/crates/ruff_python_trivia/src/tokenizer.rs b/crates/ruff_python_trivia/src/tokenizer.rs index e36d0772b9..d767e1d59e 100644 --- a/crates/ruff_python_trivia/src/tokenizer.rs +++ b/crates/ruff_python_trivia/src/tokenizer.rs @@ -1,7 +1,8 @@ use memchr::{memchr2, memchr3, memrchr3_iter}; -use ruff_text_size::{TextLen, TextRange, TextSize}; use unic_ucd_ident::{is_xid_continue, is_xid_start}; +use ruff_text_size::{TextLen, TextRange, TextSize}; + use crate::{is_python_whitespace, Cursor}; /// Searches for the first non-trivia character in `range`. @@ -85,7 +86,11 @@ pub fn lines_after_ignoring_trivia(offset: TextSize, code: &str) -> u32 { } fn is_identifier_start(c: char) -> bool { - c.is_ascii_alphabetic() || c == '_' || is_non_ascii_identifier_start(c) + if c.is_ascii() { + c.is_ascii_alphabetic() || c == '_' + } else { + is_xid_start(c) + } } // Checks if the character c is a valid continuation character as described @@ -98,10 +103,6 @@ fn is_identifier_continuation(c: char) -> bool { } } -fn is_non_ascii_identifier_start(c: char) -> bool { - is_xid_start(c) -} - #[derive(Clone, Debug, Eq, PartialEq, Hash)] pub struct SimpleToken { pub kind: SimpleTokenKind, @@ -168,6 +169,9 @@ pub enum SimpleTokenKind { /// `:` Colon, + /// `;` + Semi, + /// '/' Slash, @@ -177,29 +181,215 @@ pub enum SimpleTokenKind { /// `.`. Dot, - /// `else` - Else, + /// `+` + Plus, - /// `if` - If, + /// `-` + Minus, - /// `elif` - Elif, + /// `=` + Equals, - /// `in` - In, + /// `>` + Greater, + + /// `<` + Less, + + /// `%` + Percent, + + /// `&` + Ampersand, + + /// `^` + Circumflex, + + /// `|` + Vbar, + + /// `@` + At, + + /// `~` + Tilde, + + /// `==` + EqEqual, + + /// `!=` + NotEqual, + + /// `<=` + LessEqual, + + /// `>=` + GreaterEqual, + + /// `<<` + LeftShift, + + /// `>>` + RightShift, + + /// `**` + DoubleStar, + + /// `**=` + DoubleStarEqual, + + /// `+=` + PlusEqual, + + /// `-=` + MinusEqual, + + /// `*=` + StarEqual, + + /// `/=` + SlashEqual, + + /// `%=` + PercentEqual, + + /// `&=` + AmperEqual, + + /// `|=` + VbarEqual, + + /// `^=` + CircumflexEqual, + + /// `<<=` + LeftShiftEqual, + + /// `>>=` + RightShiftEqual, + + /// `//` + DoubleSlash, + + /// `//=` + DoubleSlashEqual, + + /// `:=` + ColonEqual, + + /// `...` + Ellipsis, + + /// `@=` + AtEqual, + + /// `->` + RArrow, + + /// `and` + And, /// `as` As, + /// `assert` + Assert, + + /// `async` + Async, + + /// `await` + Await, + + /// `break` + Break, + + /// `class` + Class, + + /// `continue` + Continue, + + /// `def` + Def, + + /// `del` + Del, + + /// `elif` + Elif, + + /// `else` + Else, + + /// `except` + Except, + + /// `finally` + Finally, + + /// `for` + For, + + /// `from` + From, + + /// `global` + Global, + + /// `if` + If, + + /// `import` + Import, + + /// `in` + In, + + /// `is` + Is, + + /// `lambda` + Lambda, + + /// `nonlocal` + Nonlocal, + + /// `not` + Not, + + /// `or` + Or, + + /// `pass` + Pass, + + /// `raise` + Raise, + + /// `return` + Return, + + /// `try` + Try, + + /// `while` + While, + /// `match` Match, + /// `type` + Type, + + /// `case` + Case, + /// `with` With, - /// `async` - Async, + /// `yield` + Yield, /// Any other non trivia token. Other, @@ -209,23 +399,6 @@ pub enum SimpleTokenKind { } impl SimpleTokenKind { - const fn from_non_trivia_char(c: char) -> SimpleTokenKind { - match c { - '(' => SimpleTokenKind::LParen, - ')' => SimpleTokenKind::RParen, - '[' => SimpleTokenKind::LBracket, - ']' => SimpleTokenKind::RBracket, - '{' => SimpleTokenKind::LBrace, - '}' => SimpleTokenKind::RBrace, - ',' => SimpleTokenKind::Comma, - ':' => SimpleTokenKind::Colon, - '/' => SimpleTokenKind::Slash, - '*' => SimpleTokenKind::Star, - '.' => SimpleTokenKind::Dot, - _ => SimpleTokenKind::Other, - } - } - const fn is_trivia(self) -> bool { matches!( self, @@ -289,15 +462,41 @@ impl<'a> SimpleTokenizer<'a> { fn to_keyword_or_other(&self, range: TextRange) -> SimpleTokenKind { let source = &self.source[range]; match source { + "and" => SimpleTokenKind::And, "as" => SimpleTokenKind::As, + "assert" => SimpleTokenKind::Assert, "async" => SimpleTokenKind::Async, - "else" => SimpleTokenKind::Else, + "await" => SimpleTokenKind::Await, + "break" => SimpleTokenKind::Break, + "class" => SimpleTokenKind::Class, + "continue" => SimpleTokenKind::Continue, + "def" => SimpleTokenKind::Def, + "del" => SimpleTokenKind::Del, "elif" => SimpleTokenKind::Elif, + "else" => SimpleTokenKind::Else, + "except" => SimpleTokenKind::Except, + "finally" => SimpleTokenKind::Finally, + "for" => SimpleTokenKind::For, + "from" => SimpleTokenKind::From, + "global" => SimpleTokenKind::Global, "if" => SimpleTokenKind::If, + "import" => SimpleTokenKind::Import, "in" => SimpleTokenKind::In, + "is" => SimpleTokenKind::Is, + "lambda" => SimpleTokenKind::Lambda, + "nonlocal" => SimpleTokenKind::Nonlocal, + "not" => SimpleTokenKind::Not, + "or" => SimpleTokenKind::Or, + "pass" => SimpleTokenKind::Pass, + "raise" => SimpleTokenKind::Raise, + "return" => SimpleTokenKind::Return, + "try" => SimpleTokenKind::Try, + "while" => SimpleTokenKind::While, "match" => SimpleTokenKind::Match, // Match is a soft keyword that depends on the context but we can always lex it as a keyword and leave it to the caller (parser) to decide if it should be handled as an identifier or keyword. + "type" => SimpleTokenKind::Type, // Type is a soft keyword that depends on the context but we can always lex it as a keyword and leave it to the caller (parser) to decide if it should be handled as an identifier or keyword. + "case" => SimpleTokenKind::Case, "with" => SimpleTokenKind::With, - // ..., + "yield" => SimpleTokenKind::Yield, _ => SimpleTokenKind::Other, // Potentially an identifier, but only if it isn't a string prefix. We can ignore this for now https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals } } @@ -323,6 +522,20 @@ impl<'a> SimpleTokenizer<'a> { } let kind = match first { + // Keywords and identifiers + c if is_identifier_start(c) => { + self.cursor.eat_while(is_identifier_continuation); + let token_len = self.cursor.token_len(); + + let range = TextRange::at(self.offset, token_len); + let kind = self.to_keyword_or_other(range); + + if kind == SimpleTokenKind::Other { + self.bogus = true; + } + kind + } + ' ' | '\t' => { self.cursor.eat_while(|c| matches!(c, ' ' | '\t')); SimpleTokenKind::Whitespace @@ -342,21 +555,156 @@ impl<'a> SimpleTokenizer<'a> { '\\' => SimpleTokenKind::Continuation, - c => { - let kind = if is_identifier_start(c) { - self.cursor.eat_while(is_identifier_continuation); - let token_len = self.cursor.token_len(); - - let range = TextRange::at(self.offset, token_len); - self.to_keyword_or_other(range) + // Non-trivia, non-keyword tokens + '=' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::EqEqual } else { - SimpleTokenKind::from_non_trivia_char(c) - }; - - if kind == SimpleTokenKind::Other { - self.bogus = true; + SimpleTokenKind::Equals } - kind + } + '+' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::PlusEqual + } else { + SimpleTokenKind::Plus + } + } + '*' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::StarEqual + } else if self.cursor.eat_char('*') { + if self.cursor.eat_char('=') { + SimpleTokenKind::DoubleStarEqual + } else { + SimpleTokenKind::DoubleStar + } + } else { + SimpleTokenKind::Star + } + } + '/' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::SlashEqual + } else if self.cursor.eat_char('/') { + if self.cursor.eat_char('=') { + SimpleTokenKind::DoubleSlashEqual + } else { + SimpleTokenKind::DoubleSlash + } + } else { + SimpleTokenKind::Slash + } + } + '%' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::PercentEqual + } else { + SimpleTokenKind::Percent + } + } + '|' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::VbarEqual + } else { + SimpleTokenKind::Vbar + } + } + '^' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::CircumflexEqual + } else { + SimpleTokenKind::Circumflex + } + } + '&' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::AmperEqual + } else { + SimpleTokenKind::Ampersand + } + } + '-' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::MinusEqual + } else if self.cursor.eat_char('>') { + SimpleTokenKind::RArrow + } else { + SimpleTokenKind::Minus + } + } + '@' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::AtEqual + } else { + SimpleTokenKind::At + } + } + '!' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::NotEqual + } else { + self.bogus = true; + SimpleTokenKind::Other + } + } + '~' => SimpleTokenKind::Tilde, + ':' => { + if self.cursor.eat_char('=') { + SimpleTokenKind::ColonEqual + } else { + SimpleTokenKind::Colon + } + } + ';' => SimpleTokenKind::Semi, + '<' => { + if self.cursor.eat_char('<') { + if self.cursor.eat_char('=') { + SimpleTokenKind::LeftShiftEqual + } else { + SimpleTokenKind::LeftShift + } + } else if self.cursor.eat_char('=') { + SimpleTokenKind::LessEqual + } else { + SimpleTokenKind::Less + } + } + '>' => { + if self.cursor.eat_char('>') { + if self.cursor.eat_char('=') { + SimpleTokenKind::RightShiftEqual + } else { + SimpleTokenKind::RightShift + } + } else if self.cursor.eat_char('=') { + SimpleTokenKind::GreaterEqual + } else { + SimpleTokenKind::Greater + } + } + ',' => SimpleTokenKind::Comma, + '.' => { + if self.cursor.first() == '.' && self.cursor.second() == '.' { + self.cursor.bump(); + self.cursor.bump(); + SimpleTokenKind::Ellipsis + } else { + SimpleTokenKind::Dot + } + } + + // Bracket tokens + '(' => SimpleTokenKind::LParen, + ')' => SimpleTokenKind::RParen, + '[' => SimpleTokenKind::LBracket, + ']' => SimpleTokenKind::RBracket, + '{' => SimpleTokenKind::LBrace, + '}' => SimpleTokenKind::RBrace, + + _ => { + self.bogus = true; + SimpleTokenKind::Other } }; @@ -457,38 +805,108 @@ impl<'a> SimpleTokenizer<'a> { } SimpleTokenKind::Comment - } else if c == '\\' { - SimpleTokenKind::Continuation } else { - let kind = if is_identifier_continuation(c) { - // if we only have identifier continuations but no start (e.g. 555) we - // don't want to consume the chars, so in that case, we want to rewind the - // cursor to here - let savepoint = self.cursor.clone(); - self.cursor.eat_back_while(is_identifier_continuation); + match c { + // Keywords and identifiers + c if is_identifier_continuation(c) => { + // if we only have identifier continuations but no start (e.g. 555) we + // don't want to consume the chars, so in that case, we want to rewind the + // cursor to here + let savepoint = self.cursor.clone(); + self.cursor.eat_back_while(is_identifier_continuation); - let token_len = self.cursor.token_len(); - let range = TextRange::at(self.back_offset - token_len, token_len); + let token_len = self.cursor.token_len(); + let range = TextRange::at(self.back_offset - token_len, token_len); - if self.source[range] - .chars() - .next() - .is_some_and(is_identifier_start) - { - self.to_keyword_or_other(range) - } else { - self.cursor = savepoint; + if self.source[range] + .chars() + .next() + .is_some_and(is_identifier_start) + { + self.to_keyword_or_other(range) + } else { + self.cursor = savepoint; + self.bogus = true; + SimpleTokenKind::Other + } + } + + // Non-trivia tokens that are unambiguous when lexing backwards. + // In other words: these are characters that _don't_ appear at the + // end of a multi-character token (like `!=`). + '\\' => SimpleTokenKind::Continuation, + ':' => SimpleTokenKind::Colon, + '~' => SimpleTokenKind::Tilde, + '%' => SimpleTokenKind::Percent, + '|' => SimpleTokenKind::Vbar, + ',' => SimpleTokenKind::Comma, + ';' => SimpleTokenKind::Semi, + '(' => SimpleTokenKind::LParen, + ')' => SimpleTokenKind::RParen, + '[' => SimpleTokenKind::LBracket, + ']' => SimpleTokenKind::RBracket, + '{' => SimpleTokenKind::LBrace, + '}' => SimpleTokenKind::RBrace, + '&' => SimpleTokenKind::Ampersand, + '^' => SimpleTokenKind::Circumflex, + '+' => SimpleTokenKind::Plus, + '-' => SimpleTokenKind::Minus, + + // Non-trivia tokens that _are_ ambiguous when lexing backwards. + // In other words: these are characters that _might_ mark the end + // of a multi-character token (like `!=` or `->` or `//` or `**`). + '=' | '*' | '/' | '@' | '!' | '<' | '>' | '.' => { + // This could be a single-token token, like `+` in `x + y`, or a + // multi-character token, like `+=` in `x += y`. It could also be a sequence + // of multi-character tokens, like `x ==== y`, which is invalid, _but_ it's + // important that we produce the same token stream when lexing backwards as + // we do when lexing forwards. So, identify the range of the sequence, lex + // forwards, and return the last token. + let mut cursor = self.cursor.clone(); + cursor.eat_back_while(|c| { + matches!( + c, + ':' | '~' + | '%' + | '|' + | '&' + | '^' + | '+' + | '-' + | '=' + | '*' + | '/' + | '@' + | '!' + | '<' + | '>' + | '.' + ) + }); + + let token_len = cursor.token_len(); + let range = TextRange::at(self.back_offset - token_len, token_len); + + let forward_lexer = Self::new(self.source, range); + if let Some(token) = forward_lexer.last() { + // If the token spans multiple characters, bump the cursor. Note, + // though, that we already bumped the cursor to past the last character + // in the token at the very start of `next_token_back`. + for _ in self.source[token.range].chars().rev().skip(1) { + self.cursor.bump_back().unwrap(); + } + token.kind() + } else { + self.bogus = true; + SimpleTokenKind::Other + } + } + + _ => { + self.bogus = true; SimpleTokenKind::Other } - } else { - SimpleTokenKind::from_non_trivia_char(c) - }; - - if kind == SimpleTokenKind::Other { - self.bogus = true; } - - kind } } }; @@ -716,6 +1134,7 @@ impl QuoteKind { #[cfg(test)] mod tests { use insta::assert_debug_snapshot; + use ruff_text_size::{TextLen, TextRange, TextSize}; use crate::tokenizer::{lines_after, lines_before, SimpleToken, SimpleTokenizer}; @@ -791,6 +1210,30 @@ mod tests { test_case.assert_reverse_tokenization(); } + #[test] + fn tokenize_eq() { + // Should tokenize as `==`, then `=`, regardless of whether we're lexing forwards or + // backwards. + let source = "==="; + + let test_case = tokenize(source); + + assert_debug_snapshot!(test_case.tokens()); + test_case.assert_reverse_tokenization(); + } + + #[test] + fn tokenize_not_eq() { + // Should tokenize as `!=`, then `=`, regardless of whether we're lexing forwards or + // backwards. + let source = "!=="; + + let test_case = tokenize(source); + + assert_debug_snapshot!(test_case.tokens()); + test_case.assert_reverse_tokenization(); + } + #[test] fn tokenize_continuation() { let source = "( \\\n )"; @@ -801,6 +1244,27 @@ mod tests { test_case.assert_reverse_tokenization(); } + #[test] + fn tokenize_operators() { + let source = "-> *= ( -= ) ~ // ** **= ^ ^= | |="; + + let test_case = tokenize(source); + + assert_debug_snapshot!(test_case.tokens()); + test_case.assert_reverse_tokenization(); + } + + #[test] + fn tokenize_invalid_operators() { + let source = "-> $="; + + let test_case = tokenize(source); + + assert_debug_snapshot!(test_case.tokens()); + + // note: not reversible: [other, bogus, bogus] vs [bogus, bogus, other] + } + #[test] fn tricky_unicode() { let source = "មុ"; @@ -877,8 +1341,8 @@ mod tests { #[test] fn single_quoted_multiline_string_containing_comment() { let test_case = tokenize( - r#"'This string contains a hash looking like a comment\ -# This is not a comment'"#, + r"'This string contains a hash looking like a comment\ +# This is not a comment'", ); assert_debug_snapshot!(test_case.tokenize_reverse()); @@ -928,14 +1392,14 @@ mod tests { #[test] fn string_with_escaped_quote() { - let test_case = tokenize(r#"'a string \' # containing a hash ' # finally a comment"#); + let test_case = tokenize(r"'a string \' # containing a hash ' # finally a comment"); assert_debug_snapshot!(test_case.tokenize_reverse()); } #[test] fn string_with_double_escaped_backslash() { - let test_case = tokenize(r#"'a string \\' # a comment '"#); + let test_case = tokenize(r"'a string \\' # a comment '"); assert_debug_snapshot!(test_case.tokenize_reverse()); } diff --git a/crates/ruff_wasm/src/lib.rs b/crates/ruff_wasm/src/lib.rs index d8aa2c0e64..602b18f552 100644 --- a/crates/ruff_wasm/src/lib.rs +++ b/crates/ruff_wasm/src/lib.rs @@ -20,6 +20,7 @@ use ruff::rules::{ }; use ruff::settings::configuration::Configuration; use ruff::settings::options::Options; +use ruff::settings::types::PythonVersion; use ruff::settings::{defaults, flags, Settings}; use ruff_python_ast::PySourceType; use ruff_python_codegen::Stylist; @@ -134,7 +135,7 @@ impl Workspace { line_length: Some(LineLength::default()), select: Some(defaults::PREFIXES.to_vec()), tab_size: Some(TabSize::default()), - target_version: Some(defaults::TARGET_VERSION), + target_version: Some(PythonVersion::default()), // Ignore a bunch of options that don't make sense in a single-file editor. cache_dir: None, exclude: None, diff --git a/docs/configuration.md b/docs/configuration.md index 25b151cf5f..cbe8c31cde 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -53,8 +53,8 @@ line-length = 88 # Allow unused variables when underscore-prefixed. dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" -# Assume Python 3.10. -target-version = "py310" +# Assume Python 3.8 +target-version = "py38" ``` As an example, the following would configure Ruff to: (1) enforce flake8-bugbear rules, in addition @@ -77,6 +77,7 @@ unfixable = ["B"] [tool.ruff.per-file-ignores] "__init__.py" = ["E402"] "path/to/file.py" = ["E402"] +"**/{tests,docs,tools}/*" = ["E402"] ``` Plugin configurations should be expressed as subsections, e.g.: diff --git a/docs/tutorial.md b/docs/tutorial.md index 244467449f..272a89f9d4 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -105,7 +105,7 @@ src = ["src"] ### Rule Selection -Ruff supports [over 500 lint rules](rules.md) split across over 40 built-in plugins, but +Ruff supports [over 600 lint rules](rules.md) split across over 40 built-in plugins, but determining the right set of rules will depend on your project's needs: some rules may be too strict, some are framework-specific, and so on. @@ -242,7 +242,7 @@ This tutorial has focused on Ruff's command-line interface, but Ruff can also be ```yaml - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: v0.0.282 + rev: v0.0.284 hooks: - id: ruff ``` diff --git a/docs/usage.md b/docs/usage.md index 4c2019c44e..5fffdab953 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -22,7 +22,7 @@ Ruff can also be used as a [pre-commit](https://pre-commit.com) hook: ```yaml - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: v0.0.282 + rev: v0.0.284 hooks: - id: ruff ``` @@ -32,7 +32,7 @@ Or, to enable autofix: ```yaml - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: v0.0.282 + rev: v0.0.284 hooks: - id: ruff args: [ --fix, --exit-non-zero-on-fix ] @@ -43,7 +43,7 @@ Or, to run the hook on Jupyter Notebooks too: ```yaml - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: v0.0.282 + rev: v0.0.284 hooks: - id: ruff types_or: [python, pyi, jupyter] diff --git a/playground/README.md b/playground/README.md index 83d302fa8a..4be032034f 100644 --- a/playground/README.md +++ b/playground/README.md @@ -4,11 +4,26 @@ In-browser playground for Ruff. Available [https://play.ruff.rs/](https://play.r ## Getting started -- To build the WASM module, run `npm run build:wasm` - from the `./playground` directory. -- Install TypeScript dependencies with: `npm install`. -- Start the development server with: `npm run dev`. +First, build the WASM module by running `npm run build:wasm` from the `./playground` directory. -## Implementation +Then, install TypeScript dependencies with `npm install`, and run the development server with +`npm run dev`. -Design based on [Tailwind Play](https://play.tailwindcss.com/). Themed with [`ayu`](https://github.com/dempfi/ayu). +To run the datastore, which is based on [Workers KV](https://developers.cloudflare.com/workers/runtime-apis/kv/), +install the [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/install-and-update/), +then run `npx wrangler dev --local` from the `./playground/db` directory. Note that the datastore is +only required to generate shareable URLs for code snippets. The development datastore does not +require Cloudflare authentication or login, but in turn only persists data locally. + +## Architecture + +The playground is implemented as a single-page React application powered by +[Vite](https://vitejs.dev/), with the editor experience itself powered by +[Monaco](https://github.com/microsoft/monaco-editor). + +The playground stores state in `localStorage`, but can supports persisting code snippets to +a persistent datastore based on [Workers KV](https://developers.cloudflare.com/workers/runtime-apis/kv/) +and exposed via a [Cloudflare Worker](https://developers.cloudflare.com/workers/learning/how-workers-works/). + +The playground design is originally based on [Tailwind Play](https://play.tailwindcss.com/), with +additional inspiration from the [Rome Tools Playground](https://docs.rome.tools/playground/). diff --git a/playground/api/.dev.vars b/playground/api/.dev.vars new file mode 100644 index 0000000000..e9d4d6b874 --- /dev/null +++ b/playground/api/.dev.vars @@ -0,0 +1,2 @@ +# See: https://developers.cloudflare.com/workers/wrangler/configuration/#environmental-variables +DEV=1 diff --git a/playground/api/README.md b/playground/api/README.md new file mode 100644 index 0000000000..6e3535e33d --- /dev/null +++ b/playground/api/README.md @@ -0,0 +1,5 @@ +# api + +Key-value store based on [Workers KV](https://developers.cloudflare.com/workers/runtime-apis/kv/). + +Used to persist code snippets in the playground and generate shareable URLs. diff --git a/playground/api/package-lock.json b/playground/api/package-lock.json new file mode 100644 index 0000000000..ee9aa442de --- /dev/null +++ b/playground/api/package-lock.json @@ -0,0 +1,2369 @@ +{ + "name": "api", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "api", + "version": "0.0.0", + "dependencies": { + "@miniflare/kv": "^2.14.0", + "@miniflare/storage-memory": "^2.14.0", + "uuid": "^9.0.0" + }, + "devDependencies": { + "@cloudflare/workers-types": "^4.20230801.0", + "miniflare": "^3.20230801.1", + "typescript": "^5.1.6", + "wrangler": "2.0.27" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", + "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", + "dev": true, + "dependencies": { + "mime": "^3.0.0" + } + }, + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20230801.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20230801.0.tgz", + "integrity": "sha512-f/HaLoQzw0qusw+MXxc4mheFCERj64iJ74EK7klms+Ruv4lGYN2PqoUMAQ8Vq5RqXb/B3nfg3+DUmSP7nbc0Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20230801.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20230801.0.tgz", + "integrity": "sha512-VgfBuT43uN+WOQjVfu96lKcmydQtB08AGG3CxtTLDbbJ36kRUq9lLu2lwhu67GS3264xq2cQngeSx+s6pObHKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20230801.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20230801.0.tgz", + "integrity": "sha512-DVlac5QhxhpmPFC9m4Ztg7La6g5R9uB4dg4C6+8cTckUtAfkXEwO7GIAvsfsumIP6XVOGg58qf/bCzqmJVN62g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20230801.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20230801.0.tgz", + "integrity": "sha512-jbF4sK5x9+w4ovaycfXyOtxe6IK2m0c33hxjmsMYDPGCWfWs6ZOacgFjGwnGG0HirYBv1cglJVMFsnCHoWI4mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20230801.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20230801.0.tgz", + "integrity": "sha512-qTn6cyFUmz3zr0Vr+Y3p2UXdUAV6CB76kD28S+yIqW5nzZYSH5islASeMD9d1NdXhdd1kaAs1t2+1OkGxBP8aw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workers-types": { + "version": "4.20230801.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20230801.0.tgz", + "integrity": "sha512-RzRUR+J/T3h58qbTZHYntYsnZXu3JnrlZIhqP2hhdyfoZAZ/+ko4wX0foAqlYHi+kXWaWtySHBuMcx6ec6TXlQ==", + "dev": true + }, + "node_modules/@esbuild-plugins/node-globals-polyfill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", + "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", + "dev": true, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/@esbuild-plugins/node-modules-polyfill": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz", + "integrity": "sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^4.0.0", + "rollup-plugin-node-polyfills": "^0.2.1" + }, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true + }, + "node_modules/@miniflare/cache": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/cache/-/cache-2.14.0.tgz", + "integrity": "sha512-0mz0OCzTegiX75uMURLJpDo3DaOCSx9M0gv7NMFWDbK/XrvjoENiBZiKu98UBM5fts0qtK19a+MfB4aT0uBCFg==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.14.0", + "@miniflare/shared": "2.14.0", + "http-cache-semantics": "^4.1.0", + "undici": "5.20.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/cache/node_modules/undici": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", + "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/@miniflare/cli-parser": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/cli-parser/-/cli-parser-2.14.0.tgz", + "integrity": "sha512-6Wb0jTMqwI7GRGAhz9WOF8AONUsXXPmwu+Qhg+tnRWtQpJ3DYd5dku1N04L9L1R7np/mD8RrycLyCdg3hLZ3aA==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.14.0", + "kleur": "^4.1.4" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/core": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/core/-/core-2.14.0.tgz", + "integrity": "sha512-BjmV/ZDwsKvXnJntYHt3AQgzVKp/5ZzWPpYWoOnUSNxq6nnRCQyvFvjvBZKnhubcmJCLSqegvz0yHejMA90CTA==", + "dev": true, + "dependencies": { + "@iarna/toml": "^2.2.5", + "@miniflare/queues": "2.14.0", + "@miniflare/shared": "2.14.0", + "@miniflare/watcher": "2.14.0", + "busboy": "^1.6.0", + "dotenv": "^10.0.0", + "kleur": "^4.1.4", + "set-cookie-parser": "^2.4.8", + "undici": "5.20.0", + "urlpattern-polyfill": "^4.0.3" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/core/node_modules/undici": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", + "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/@miniflare/d1": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/d1/-/d1-2.14.0.tgz", + "integrity": "sha512-9YoeLAkZuWGAu9BMsoctHoMue0xHzJYZigAJWGvWrqSFT1gBaT+RlUefQCHXggi8P7sOJ1+BKlsWAhkB5wfMWQ==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.14.0", + "@miniflare/shared": "2.14.0" + }, + "engines": { + "node": ">=16.7" + } + }, + "node_modules/@miniflare/durable-objects": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/durable-objects/-/durable-objects-2.14.0.tgz", + "integrity": "sha512-P8eh1P62BPGpj+MCb1i1lj7Tlt/G3BMmnxHp9duyb0Wro/ILVGPQskZl+iq7DHq1w3C+n0+6/E1B44ff+qn0Mw==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.14.0", + "@miniflare/shared": "2.14.0", + "@miniflare/storage-memory": "2.14.0", + "undici": "5.20.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/durable-objects/node_modules/undici": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", + "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/@miniflare/html-rewriter": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/html-rewriter/-/html-rewriter-2.14.0.tgz", + "integrity": "sha512-7CJZk3xZkxK8tGNofnhgWcChZ8YLx6MhAdN2nn6ONSXrK/TevzEKdL8bnVv1OJ6J8Y23OxvfinOhufr33tMS8g==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.14.0", + "@miniflare/shared": "2.14.0", + "html-rewriter-wasm": "^0.4.1", + "undici": "5.20.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/html-rewriter/node_modules/undici": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", + "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/@miniflare/http-server": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/http-server/-/http-server-2.14.0.tgz", + "integrity": "sha512-APaBlvGRAW+W18ph5ruPXX26/iKdByPz1tZH1OjPAKBDAiKFZSGek4QzUmQALBWLx5VMTMrt7QIe7KE4nM4sdw==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.14.0", + "@miniflare/shared": "2.14.0", + "@miniflare/web-sockets": "2.14.0", + "kleur": "^4.1.4", + "selfsigned": "^2.0.0", + "undici": "5.20.0", + "ws": "^8.2.2", + "youch": "^2.2.2" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/http-server/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@miniflare/http-server/node_modules/undici": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", + "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/@miniflare/http-server/node_modules/youch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/youch/-/youch-2.2.2.tgz", + "integrity": "sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ==", + "dev": true, + "dependencies": { + "@types/stack-trace": "0.0.29", + "cookie": "^0.4.1", + "mustache": "^4.2.0", + "stack-trace": "0.0.10" + } + }, + "node_modules/@miniflare/kv": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/kv/-/kv-2.14.0.tgz", + "integrity": "sha512-FHAnVjmhV/VHxgjNf2whraz+k7kfMKlfM+5gO8WT6HrOsWxSdx8OueWVScnOuuDkSeUg5Ctrf5SuztTV8Uy1cg==", + "dependencies": { + "@miniflare/shared": "2.14.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/queues": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/queues/-/queues-2.14.0.tgz", + "integrity": "sha512-flS4MqlgBKyv6QBqKD0IofjmMDW9wP1prUNQy2wWPih9lA6bFKmml3VdFeDsPnWtE2J67K0vCTf5kj1Q0qdW1w==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.14.0" + }, + "engines": { + "node": ">=16.7" + } + }, + "node_modules/@miniflare/r2": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/r2/-/r2-2.14.0.tgz", + "integrity": "sha512-+WJJP4J0QzY69HPrG6g5OyW23lJ02WHpHZirCxwPSz8CajooqZCJVx+qvUcNmU8MyKASbUZMWnH79LysuBh+jA==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.14.0", + "@miniflare/shared": "2.14.0", + "undici": "5.20.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/r2/node_modules/undici": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", + "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/@miniflare/runner-vm": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/runner-vm/-/runner-vm-2.14.0.tgz", + "integrity": "sha512-01CmNzv74u0RZgT/vjV/ggDzECXTG88ZJAKhXyhAx0s2DOLIXzsGHn6pUJIsfPCrtj8nfqtTCp1Vf0UMVWSpmw==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.14.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/scheduler": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/scheduler/-/scheduler-2.14.0.tgz", + "integrity": "sha512-/D28OeY/HxcOyY0rkPc2qU/wzxCcUv3/F7NRpgDix37sMkYjAAS51ehVIAkPwAdFEMdantcyVuHNQ2kO1xbT+Q==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.14.0", + "@miniflare/shared": "2.14.0", + "cron-schedule": "^3.0.4" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/shared": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/shared/-/shared-2.14.0.tgz", + "integrity": "sha512-O0jAEdMkp8BzrdFCfMWZu76h4Cq+tt3/oDtcTFgzum3fRW5vUhIi/5f6bfndu6rkGbSlzxwor8CJWpzityXGug==", + "dependencies": { + "@types/better-sqlite3": "^7.6.0", + "kleur": "^4.1.4", + "npx-import": "^1.1.4", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/sites": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/sites/-/sites-2.14.0.tgz", + "integrity": "sha512-qI8MFZpD1NV+g+HQ/qheDVwscKzwG58J+kAVTU/1fgub2lMLsxhE3Mmbi5AIpyIiJ7Q5Sezqga234CEkHkS7dA==", + "dev": true, + "dependencies": { + "@miniflare/kv": "2.14.0", + "@miniflare/shared": "2.14.0", + "@miniflare/storage-file": "2.14.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/storage-file": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/storage-file/-/storage-file-2.14.0.tgz", + "integrity": "sha512-Ps0wHhTO+ie33a58efI0p/ppFXSjlbYmykQXfYtMeVLD60CKl+4Lxor0+gD6uYDFbhMWL5/GMDvyr4AM87FA+Q==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.14.0", + "@miniflare/storage-memory": "2.14.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/storage-memory": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/storage-memory/-/storage-memory-2.14.0.tgz", + "integrity": "sha512-5aFjEiTSNrHJ+iAiGMCA/TVPnNMrnokG5r0vKrwj4knbf8pisgfP04x18zCgOlG7kaIWNmqdO/vtVT5BIioiSQ==", + "dependencies": { + "@miniflare/shared": "2.14.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/watcher": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/watcher/-/watcher-2.14.0.tgz", + "integrity": "sha512-O8Abg2eHpGmcZb8WyUaA6Av1Mqt5bSrorzz4CrWwsvJHBdekZPIX0GihC9vn327d/1pKRs81YTiSAfBoSZpVIw==", + "dev": true, + "dependencies": { + "@miniflare/shared": "2.14.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/web-sockets": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@miniflare/web-sockets/-/web-sockets-2.14.0.tgz", + "integrity": "sha512-lB1CB4rBq0mbCuh55WgIEH4L3c4/i4MNDBfrQL+6r+wGcr/BJUqF8BHpsfAt5yHWUJVtK5mlMeesS/xpg4Ao1w==", + "dev": true, + "dependencies": { + "@miniflare/core": "2.14.0", + "@miniflare/shared": "2.14.0", + "undici": "5.20.0", + "ws": "^8.2.2" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@miniflare/web-sockets/node_modules/undici": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", + "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/@types/better-sqlite3": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.4.tgz", + "integrity": "sha512-dzrRZCYPXIXfSR1/surNbJ/grU3scTaygS0OMzjlGf71i9sc2fGyHPXXiXmEvNIoE0cGwsanEFMVJxPXmco9Eg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.4.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.8.tgz", + "integrity": "sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==" + }, + "node_modules/@types/stack-trace": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/stack-trace/-/stack-trace-0.0.29.tgz", + "integrity": "sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/as-table": { + "version": "1.0.55", + "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", + "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", + "dev": true, + "dependencies": { + "printable-characters": "^1.0.42" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/better-sqlite3": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.5.0.tgz", + "integrity": "sha512-vbPcv/Hx5WYdyNg/NbcfyaBZyv9s/NVbxb7yCeC5Bq1pVocNxeL2tZmSu3Rlm4IEOTjYdGyzWQgyx0OSdORBzw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/capnp-ts": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", + "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", + "dev": true, + "dependencies": { + "debug": "^4.3.1", + "tslib": "^2.2.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cron-schedule": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/cron-schedule/-/cron-schedule-3.0.6.tgz", + "integrity": "sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", + "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/esbuild": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz", + "integrity": "sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.51", + "esbuild-android-arm64": "0.14.51", + "esbuild-darwin-64": "0.14.51", + "esbuild-darwin-arm64": "0.14.51", + "esbuild-freebsd-64": "0.14.51", + "esbuild-freebsd-arm64": "0.14.51", + "esbuild-linux-32": "0.14.51", + "esbuild-linux-64": "0.14.51", + "esbuild-linux-arm": "0.14.51", + "esbuild-linux-arm64": "0.14.51", + "esbuild-linux-mips64le": "0.14.51", + "esbuild-linux-ppc64le": "0.14.51", + "esbuild-linux-riscv64": "0.14.51", + "esbuild-linux-s390x": "0.14.51", + "esbuild-netbsd-64": "0.14.51", + "esbuild-openbsd-64": "0.14.51", + "esbuild-sunos-64": "0.14.51", + "esbuild-windows-32": "0.14.51", + "esbuild-windows-64": "0.14.51", + "esbuild-windows-arm64": "0.14.51" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz", + "integrity": "sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz", + "integrity": "sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz", + "integrity": "sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz", + "integrity": "sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz", + "integrity": "sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz", + "integrity": "sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz", + "integrity": "sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz", + "integrity": "sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz", + "integrity": "sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz", + "integrity": "sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz", + "integrity": "sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz", + "integrity": "sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz", + "integrity": "sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz", + "integrity": "sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz", + "integrity": "sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz", + "integrity": "sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz", + "integrity": "sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz", + "integrity": "sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz", + "integrity": "sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz", + "integrity": "sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit-hook": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", + "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-source": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", + "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^2.0.0", + "source-map": "^0.6.1" + } + }, + "node_modules/get-source/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/html-rewriter-wasm": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/html-rewriter-wasm/-/html-rewriter-wasm-0.4.1.tgz", + "integrity": "sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/miniflare": { + "version": "3.20230801.1", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20230801.1.tgz", + "integrity": "sha512-4vdA2X2Bo2q4hIKN0QJp1dtiGmu4+tlxo14d89aHCWH5N6yl5tQtqJhkLJFxUX8wkNAgSUOHDYeTnhJ51X6tsQ==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-walk": "^8.2.0", + "better-sqlite3": "^8.1.0", + "capnp-ts": "^0.7.0", + "exit-hook": "^2.2.1", + "glob-to-regexp": "^0.4.1", + "http-cache-semantics": "^4.1.0", + "kleur": "^4.1.5", + "set-cookie-parser": "^2.6.0", + "source-map-support": "0.5.21", + "stoppable": "^1.1.0", + "undici": "^5.13.0", + "workerd": "1.20230801.0", + "ws": "^8.11.0", + "youch": "^3.2.2", + "zod": "^3.20.6" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true, + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, + "node_modules/node-abi": { + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz", + "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npx-import": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/npx-import/-/npx-import-1.1.4.tgz", + "integrity": "sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==", + "dependencies": { + "execa": "^6.1.0", + "parse-package-name": "^1.0.0", + "semver": "^7.3.7", + "validate-npm-package-name": "^4.0.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-package-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-package-name/-/parse-package-name-1.0.0.tgz", + "integrity": "sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/printable-characters": { + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", + "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rollup-plugin-inject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", + "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" + } + }, + "node_modules/rollup-plugin-node-polyfills": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", + "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "dev": true, + "dependencies": { + "rollup-plugin-inject": "^3.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semiver": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", + "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/stacktracey": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", + "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", + "dev": true, + "dependencies": { + "as-table": "^1.0.36", + "get-source": "^2.0.12" + } + }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "dev": true, + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz", + "integrity": "sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/urlpattern-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-4.0.3.tgz", + "integrity": "sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workerd": { + "version": "1.20230801.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20230801.0.tgz", + "integrity": "sha512-4PjyPTbDy39JTpvF3VB95DyQeEGJa8qZsxeal/6L3FBULQ+d90N99lTpgONNkZIRRbOz6ZQk5nDC2wr4TmA3wA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20230801.0", + "@cloudflare/workerd-darwin-arm64": "1.20230801.0", + "@cloudflare/workerd-linux-64": "1.20230801.0", + "@cloudflare/workerd-linux-arm64": "1.20230801.0", + "@cloudflare/workerd-windows-64": "1.20230801.0" + } + }, + "node_modules/wrangler": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-2.0.27.tgz", + "integrity": "sha512-dH0Nv41OiFsHu+mZFMGv1kEO6lOEoxon8kKHToG0YSpGBsObsxurkoyWJDvkAgtnrM00QF8F1Chy15zs0sjJkg==", + "dev": true, + "dependencies": { + "@cloudflare/kv-asset-handler": "^0.2.0", + "@esbuild-plugins/node-globals-polyfill": "^0.1.1", + "@esbuild-plugins/node-modules-polyfill": "^0.1.4", + "blake3-wasm": "^2.1.5", + "chokidar": "^3.5.3", + "esbuild": "0.14.51", + "miniflare": "^2.6.0", + "nanoid": "^3.3.3", + "path-to-regexp": "^6.2.0", + "selfsigned": "^2.0.1", + "source-map": "^0.7.4", + "xxhash-wasm": "^1.0.1" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=16.7.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/wrangler/node_modules/miniflare": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-2.14.0.tgz", + "integrity": "sha512-xBOUccq1dm5riOfaqoMWCC1uCqT71EW0x4akQQuGYgm+Q44N1ETEmzXSbFVroJgOHe8Hwpqxo2D7OOFwqFevew==", + "dev": true, + "dependencies": { + "@miniflare/cache": "2.14.0", + "@miniflare/cli-parser": "2.14.0", + "@miniflare/core": "2.14.0", + "@miniflare/d1": "2.14.0", + "@miniflare/durable-objects": "2.14.0", + "@miniflare/html-rewriter": "2.14.0", + "@miniflare/http-server": "2.14.0", + "@miniflare/kv": "2.14.0", + "@miniflare/queues": "2.14.0", + "@miniflare/r2": "2.14.0", + "@miniflare/runner-vm": "2.14.0", + "@miniflare/scheduler": "2.14.0", + "@miniflare/shared": "2.14.0", + "@miniflare/sites": "2.14.0", + "@miniflare/storage-file": "2.14.0", + "@miniflare/storage-memory": "2.14.0", + "@miniflare/web-sockets": "2.14.0", + "kleur": "^4.1.4", + "semiver": "^1.1.0", + "source-map-support": "^0.5.20", + "undici": "5.20.0" + }, + "bin": { + "miniflare": "bootstrap.js" + }, + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "@miniflare/storage-redis": "2.14.0", + "cron-schedule": "^3.0.4", + "ioredis": "^4.27.9" + }, + "peerDependenciesMeta": { + "@miniflare/storage-redis": { + "optional": true + }, + "cron-schedule": { + "optional": true + }, + "ioredis": { + "optional": true + } + } + }, + "node_modules/wrangler/node_modules/undici": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", + "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhash-wasm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", + "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/youch": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/youch/-/youch-3.2.3.tgz", + "integrity": "sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==", + "dev": true, + "dependencies": { + "cookie": "^0.5.0", + "mustache": "^4.2.0", + "stacktracey": "^2.1.8" + } + }, + "node_modules/zod": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/playground/api/package.json b/playground/api/package.json new file mode 100644 index 0000000000..278cebe54f --- /dev/null +++ b/playground/api/package.json @@ -0,0 +1,20 @@ +{ + "name": "api", + "version": "0.0.0", + "devDependencies": { + "@cloudflare/workers-types": "^4.20230801.0", + "miniflare": "^3.20230801.1", + "typescript": "^5.1.6", + "wrangler": "2.0.27" + }, + "private": true, + "scripts": { + "start": "wrangler dev", + "deploy": "wrangler publish" + }, + "dependencies": { + "@miniflare/kv": "^2.14.0", + "@miniflare/storage-memory": "^2.14.0", + "uuid": "^9.0.0" + } +} diff --git a/playground/api/src/index.ts b/playground/api/src/index.ts new file mode 100644 index 0000000000..2fbd4eaebf --- /dev/null +++ b/playground/api/src/index.ts @@ -0,0 +1,91 @@ +/** + * A Workers KV-based database for storing shareable code snippets in the Playground. + */ + +export interface Env { + // The Workers KV namespace to use for storing code snippets. + PLAYGROUND: KVNamespace; + // Whether or not we're in a development environment. + DEV?: boolean; +} + +// See: https://developers.cloudflare.com/workers/examples/security-headers/ +const DEFAULT_HEADERS = { + "Permissions-Policy": "interest-cohort=()", + "X-XSS-Protection": "0", + "X-Frame-Options": "DENY", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "strict-origin-when-cross-origin", + "Cross-Origin-Embedder-Policy": 'require-corp; report-to="default";', + "Cross-Origin-Opener-Policy": 'same-site; report-to="default";', + "Cross-Origin-Resource-Policy": "same-site", +}; + +const DEVELOPMENT_HEADERS = { + ...DEFAULT_HEADERS, + "Access-Control-Allow-Origin": "*", +}; + +const PRODUCTION_HEADERS = { + ...DEFAULT_HEADERS, + "Access-Control-Allow-Origin": "https://play.ruff.rs", +}; + +export default { + async fetch( + request: Request, + env: Env, + ctx: ExecutionContext, + ): Promise { + const { DEV, PLAYGROUND } = env; + + const headers = DEV ? DEVELOPMENT_HEADERS : PRODUCTION_HEADERS; + + switch (request.method) { + case "GET": { + // Ex) `https://api.astral-1ad.workers.dev/` + // Given an ID, return the corresponding playground. + const { pathname } = new URL(request.url); + const key = pathname.slice(1); + if (!key) { + return new Response("Not Found", { + status: 404, + headers, + }); + } + + const playground = await PLAYGROUND.get(key); + if (playground === null) { + return new Response("Not Found", { + status: 404, + headers, + }); + } + + return new Response(playground, { + status: 200, + headers, + }); + } + + // Ex) `https://api.astral-1ad.workers.dev` + // Given a playground, save it and return its ID. + case "POST": { + const id = crypto.randomUUID(); + const playground = await request.text(); + await PLAYGROUND.put(id, playground); + return new Response(id, { + status: 200, + headers, + }); + } + + default: { + return new Response("Method Not Allowed", { + status: 405, + headers, + }); + } + } + }, +}; diff --git a/playground/api/tsconfig.json b/playground/api/tsconfig.json new file mode 100644 index 0000000000..39e27fb57f --- /dev/null +++ b/playground/api/tsconfig.json @@ -0,0 +1,105 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + // "incremental": true, /* Enable incremental compilation */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + "lib": [ + "es2021" + ] /* Specify a set of bundled library declaration files that describe the target runtime environment. */, + "jsx": "react" /* Specify what JSX code is generated. */, + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ + // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + + /* Modules */ + "module": "es2022" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ + "types": [ + "@cloudflare/workers-types" + ] /* Specify type package names to be included without being referenced in a source file. */, + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + "resolveJsonModule": true /* Enable importing .json files */, + // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */, + "checkJs": false /* Enable error reporting in type-checked JavaScript files. */, + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + "noEmit": true /* Disable emitting files from a compilation. */, + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + "isolatedModules": true /* Ensure that each file can be safely transpiled without relying on other imports. */, + "allowSyntheticDefaultImports": true /* Allow 'import x from y' when a module doesn't have a default export. */, + // "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ + // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ + // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/playground/api/wrangler.toml b/playground/api/wrangler.toml new file mode 100644 index 0000000000..0b51a9a2a2 --- /dev/null +++ b/playground/api/wrangler.toml @@ -0,0 +1,7 @@ +name = "api" +main = "src/index.ts" +compatibility_date = "2023-08-07" + +kv_namespaces = [ + { binding = "PLAYGROUND", id = "672e16c4fb5e4887845973bf0e9f6021", preview_id = "0a96477e116540e5a6e1eab6d6e7523e" } +] diff --git a/playground/package-lock.json b/playground/package-lock.json index 80222151a8..bc44767abf 100644 --- a/playground/package-lock.json +++ b/playground/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@monaco-editor/react": "^4.4.6", "classnames": "^2.3.2", - "lz-string": "^1.4.4", + "lz-string": "^1.5.0", "monaco-editor": "^0.40.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/playground/package.json b/playground/package.json index 82d08904b6..78b108f4e9 100644 --- a/playground/package.json +++ b/playground/package.json @@ -17,7 +17,7 @@ "dependencies": { "@monaco-editor/react": "^4.4.6", "classnames": "^2.3.2", - "lz-string": "^1.4.4", + "lz-string": "^1.5.0", "monaco-editor": "^0.40.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/playground/src/Editor/Editor.tsx b/playground/src/Editor/Editor.tsx index 7b3e12dd90..79495084d3 100644 --- a/playground/src/Editor/Editor.tsx +++ b/playground/src/Editor/Editor.tsx @@ -5,22 +5,22 @@ import { useMemo, useState, } from "react"; +import { Panel, PanelGroup } from "react-resizable-panels"; import { DEFAULT_PYTHON_SOURCE } from "../constants"; import init, { Diagnostic, Workspace } from "../pkg"; import { ErrorMessage } from "./ErrorMessage"; import Header from "./Header"; -import { useTheme } from "./theme"; -import { persist, persistLocal, restore, stringify } from "./settings"; -import SettingsEditor from "./SettingsEditor"; -import SourceEditor from "./SourceEditor"; -import { Panel, PanelGroup } from "react-resizable-panels"; import PrimarySideBar from "./PrimarySideBar"; -import SecondarySideBar from "./SecondarySideBar"; import { HorizontalResizeHandle } from "./ResizeHandle"; import SecondaryPanel, { SecondaryPanelResult, SecondaryTool, } from "./SecondaryPanel"; +import SecondarySideBar from "./SecondarySideBar"; +import { persist, persistLocal, restore, stringify } from "./settings"; +import SettingsEditor from "./SettingsEditor"; +import SourceEditor from "./SourceEditor"; +import { useTheme } from "./theme"; type Tab = "Source" | "Settings"; @@ -43,11 +43,7 @@ export default function Editor() { error: null, secondary: null, }); - const [source, setSource] = useState({ - pythonSource: "", - settingsSource: "", - revision: 0, - }); + const [source, setSource] = useState(null); const [tab, setTab] = useState("Source"); const [secondaryTool, setSecondaryTool] = useState( @@ -64,9 +60,7 @@ export default function Editor() { ); const [theme, setTheme] = useTheme(); - const initialized = ruffVersion != null; - - // Ideally this would be retrieved right from the URl... but routing without a proper + // Ideally this would be retrieved right from the URL... but routing without a proper // router is hard (there's no location changed event) and pulling in a router // feels overkill. const handleSecondaryToolSelected = (tool: SecondaryTool | null) => { @@ -88,29 +82,32 @@ export default function Editor() { }; useEffect(() => { - init().then(() => { - const [settingsSource, pythonSource] = restore() ?? [ + async function initAsync() { + await init(); + const response = await restore(); + const [settingsSource, pythonSource] = response ?? [ stringify(Workspace.defaultSettings()), DEFAULT_PYTHON_SOURCE, ]; setSource({ - pythonSource, revision: 0, + pythonSource, settingsSource, }); setRuffVersion(Workspace.version()); - }); + } + initAsync().catch(console.error); }, []); const deferredSource = useDeferredValue(source); useEffect(() => { - if (!initialized) { + if (deferredSource == null) { return; } - const { settingsSource, pythonSource } = deferredSource; + const { pythonSource, settingsSource } = deferredSource; try { const config = JSON.parse(settingsSource); @@ -168,46 +165,52 @@ export default function Editor() { secondary: null, }); } - }, [initialized, deferredSource, secondaryTool]); + }, [deferredSource, secondaryTool]); useEffect(() => { - if (initialized) { + if (source != null) { persistLocal(source); } - }, [initialized, source]); + }, [source]); const handleShare = useMemo(() => { - if (!initialized) { + if (source == null) { return undefined; } return () => { - persist(source.settingsSource, source.pythonSource); + return persist(source.settingsSource, source.pythonSource); }; - }, [source, initialized]); + }, [source]); const handlePythonSourceChange = useCallback((pythonSource: string) => { - setSource((state) => ({ - ...state, - pythonSource, - revision: state.revision + 1, - })); + setSource((state) => + state + ? { + ...state, + pythonSource, + revision: state.revision + 1, + } + : null, + ); }, []); const handleSettingsSourceChange = useCallback((settingsSource: string) => { - setSource((state) => ({ - ...state, - settingsSource, - revision: state.revision + 1, - })); + setSource((state) => + state + ? { + ...state, + settingsSource, + revision: state.revision + 1, + } + : null, + ); }, []); - // useMonacoTheme(); - return (

- {initialized ? ( + {source ? ( setTab(tool)} diff --git a/playground/src/Editor/Header.tsx b/playground/src/Editor/Header.tsx index 636e1ae9e5..537f7d332f 100644 --- a/playground/src/Editor/Header.tsx +++ b/playground/src/Editor/Header.tsx @@ -14,7 +14,7 @@ export default function Header({ onChangeTheme, onShare, }: { - edit: number; + edit: number | null; theme: Theme; version: string | null; onChangeTheme: (theme: Theme) => void; diff --git a/playground/src/Editor/api.ts b/playground/src/Editor/api.ts new file mode 100644 index 0000000000..22d3bfc26a --- /dev/null +++ b/playground/src/Editor/api.ts @@ -0,0 +1,33 @@ +const API_URL = import.meta.env.PROD + ? "https://api.astral-1ad.workers.dev" + : "http://0.0.0.0:8787"; + +export type Playground = { + pythonSource: string; + settingsSource: string; +}; + +/** + * Fetch a playground by ID. + */ +export async function fetchPlayground(id: string): Promise { + const response = await fetch(`${API_URL}/${encodeURIComponent(id)}`); + if (!response.ok) { + throw new Error(`Failed to fetch playground ${id}: ${response.status}`); + } + return await response.json(); +} + +/** + * Save a playground and return its ID. + */ +export async function savePlayground(playground: Playground): Promise { + const response = await fetch(API_URL, { + method: "POST", + body: JSON.stringify(playground), + }); + if (!response.ok) { + throw new Error(`Failed to save playground: ${response.status}`); + } + return await response.text(); +} diff --git a/playground/src/Editor/settings.ts b/playground/src/Editor/settings.ts index 34e447eee3..411399da5d 100644 --- a/playground/src/Editor/settings.ts +++ b/playground/src/Editor/settings.ts @@ -1,4 +1,5 @@ import lzstring from "lz-string"; +import { fetchPlayground, savePlayground } from "./api"; export type Settings = { [K: string]: any }; @@ -22,29 +23,43 @@ export function stringify(settings: Settings): string { /** * Persist the configuration to a URL. */ -export async function persist(settingsSource: string, pythonSource: string) { - const hash = lzstring.compressToEncodedURIComponent( - settingsSource.replaceAll("$$$", "$$$$$$") + "$$$" + pythonSource, - ); - await navigator.clipboard.writeText( - window.location.href.split("#")[0] + "#" + hash, - ); +export async function persist( + settingsSource: string, + pythonSource: string, +): Promise { + const id = await savePlayground({ settingsSource, pythonSource }); + await navigator.clipboard.writeText(`${window.location.origin}/${id}`); } /** * Restore the configuration from a URL. */ -export function restore(): [string, string] | null { - const value = lzstring.decompressFromEncodedURIComponent( - window.location.hash.slice(1), - ); - - if (value == null) { - return restoreLocal(); - } else { +export async function restore(): Promise<[string, string] | null> { + // Legacy URLs, stored as encoded strings in the hash, like: + // https://play.ruff.rs/#eyJzZXR0aW5nc1NvdXJjZ... + const hash = window.location.hash.slice(1); + if (hash) { + const value = lzstring.decompressFromEncodedURIComponent( + window.location.hash.slice(1), + )!; const [settingsSource, pythonSource] = value.split("$$$"); return [settingsSource.replaceAll("$$$$$$", "$$$"), pythonSource]; } + + // URLs stored in the database, like: + // https://play.ruff.rs/1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed + const id = window.location.pathname.slice(1); + if (id) { + const playground = await fetchPlayground(id); + if (playground == null) { + return null; + } + const { settingsSource, pythonSource } = playground; + return [settingsSource, pythonSource]; + } + + // If no URL is present, restore from local storage. + return restoreLocal(); } function restoreLocal(): [string, string] | null { diff --git a/pyproject.toml b/pyproject.toml index 304491f392..366670751d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "maturin" [project] name = "ruff" -version = "0.0.282" +version = "0.0.284" description = "An extremely fast Python linter, written in Rust." authors = [{ name = "Charlie Marsh", email = "charlie.r.marsh@gmail.com" }] maintainers = [{ name = "Charlie Marsh", email = "charlie.r.marsh@gmail.com" }] diff --git a/ruff.schema.json b/ruff.schema.json index 770a976bcf..74a05d9fad 100644 --- a/ruff.schema.json +++ b/ruff.schema.json @@ -376,7 +376,7 @@ ] }, "line-length": { - "description": "The line length to use when enforcing long-lines violations (like `E501`).", + "description": "The line length to use when enforcing long-lines violations (like `E501`). Must be greater than `0`.", "anyOf": [ { "$ref": "#/definitions/LineLength" @@ -560,7 +560,7 @@ ] }, "target-version": { - "description": "The minimum Python version to target, e.g., when considering automatic code upgrades, like rewriting type annotations.\n\nIf omitted, and Ruff is configured via a `pyproject.toml` file, the target version will be inferred from its `project.requires-python` field (e.g., `requires-python = \">=3.8\"`). If Ruff is configured via `ruff.toml` or `.ruff.toml`, no such inference will be performed.", + "description": "The minimum Python version to target, e.g., when considering automatic code upgrades, like rewriting type annotations. Ruff will not propose changes using features that are not available in the given version.\n\nFor example, to represent supporting Python >=3.10 or ==3.10 specify `target-version = \"py310\"`.\n\nIf omitted, and Ruff is configured via a `pyproject.toml` file, the target version will be inferred from its `project.requires-python` field (e.g., `requires-python = \">=3.8\"`). If Ruff is configured via `ruff.toml` or `.ruff.toml`, no such inference will be performed.", "anyOf": [ { "$ref": "#/definitions/PythonVersion" @@ -1062,6 +1062,16 @@ "additionalProperties": { "$ref": "#/definitions/ApiBan" } + }, + "banned-module-level-imports": { + "description": "List of specific modules that may not be imported at module level, and should instead be imported lazily (e.g., within a function definition, or an `if TYPE_CHECKING:` block, or some other nested context).", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -1080,7 +1090,7 @@ } }, "runtime-evaluated-base-classes": { - "description": "Exempt classes that list any of the enumerated classes as a base class from needing to be moved into type-checking blocks.", + "description": "Exempt classes that list any of the enumerated classes as a base class from needing to be moved into type-checking blocks.\n\nCommon examples include Pydantic's `pydantic.BaseModel` and SQLAlchemy's `sqlalchemy.orm.DeclarativeBase`, but can also support user-defined classes that inherit from those base classes. For example, if you define a common `DeclarativeBase` subclass that's used throughout your project (e.g., `class Base(DeclarativeBase) ...` in `base.py`), you can add it to this list (`runtime-evaluated-base-classes = [\"base.Base\"]`) to exempt models from being moved into type-checking blocks.", "type": [ "array", "null" @@ -1100,7 +1110,7 @@ } }, "strict": { - "description": "Enforce TC001, TC002, and TC003 rules even when valid runtime imports are present for the same module. See flake8-type-checking's [strict](https://github.com/snok/flake8-type-checking#strict) option.", + "description": "Enforce TC001, TC002, and TC003 rules even when valid runtime imports are present for the same module.\n\nSee flake8-type-checking's [strict](https://github.com/snok/flake8-type-checking#strict) option.", "type": [ "boolean", "null" @@ -1481,7 +1491,7 @@ ] }, "max-doc-length": { - "description": "The maximum line length to allow for line-length violations within documentation (`W505`), including standalone comments.", + "description": "The maximum line length to allow for line-length violations within documentation (`W505`), including standalone comments. By default, this is set to null which disables reporting violations.\n\nSee the [`doc-line-too-long`](https://beta.ruff.rs/docs/rules/doc-line-too-long/) rule for more information.", "anyOf": [ { "$ref": "#/definitions/LineLength" @@ -2283,12 +2293,15 @@ "PLW150", "PLW1508", "PLW1509", + "PLW151", + "PLW1510", "PLW1641", "PLW2", "PLW29", "PLW290", "PLW2901", "PLW3", + "PLW3201", "PLW33", "PLW330", "PLW3301", @@ -2309,6 +2322,7 @@ "PT011", "PT012", "PT013", + "PT014", "PT015", "PT016", "PT017", @@ -2322,6 +2336,7 @@ "PT024", "PT025", "PT026", + "PT027", "PTH", "PTH1", "PTH10", @@ -2608,6 +2623,7 @@ "TID25", "TID251", "TID252", + "TID253", "TRY", "TRY0", "TRY00", @@ -2742,7 +2758,7 @@ "description": "The size of a tab.", "type": "integer", "format": "uint8", - "minimum": 0.0 + "minimum": 1.0 }, "Version": { "type": "string" diff --git a/scripts/check_ecosystem.py b/scripts/check_ecosystem.py index 2b7b5f3775..607819b263 100755 --- a/scripts/check_ecosystem.py +++ b/scripts/check_ecosystem.py @@ -109,6 +109,10 @@ REPOSITORIES: list[Repository] = [ Repository("DisnakeDev", "disnake", "master"), Repository("apache", "airflow", "main", select="ALL"), Repository("bokeh", "bokeh", "branch-3.3", select="ALL"), + Repository("commaai", "openpilot", "master"), + Repository("freedomofpress", "securedrop", "develop"), + Repository("ibis-project", "ibis", "master"), + Repository("jrnl-org", "jrnl", "develop"), Repository("pypa", "build", "main"), Repository("pypa", "cibuildwheel", "main"), Repository("pypa", "pip", "main"), @@ -118,6 +122,7 @@ REPOSITORIES: list[Repository] = [ Repository("python-poetry", "poetry", "master"), Repository("scikit-build", "scikit-build", "main"), Repository("scikit-build", "scikit-build-core", "main"), + Repository("sphinx-doc", "sphinx", "master"), Repository("tiangolo", "fastapi", "master"), Repository("zulip", "zulip", "main", select="ALL"), ] @@ -301,7 +306,6 @@ DIFF_LINE_RE = re.compile( r"^(?P
[+-]) (?P(?P[^:]+):(?P\d+):\d+:) (?P.*)$",
 )
 
-
 T = TypeVar("T")
 
 
diff --git a/scripts/formatter_ecosystem_checks.sh b/scripts/formatter_ecosystem_checks.sh
index c4aa2db57b..7342105c44 100755
--- a/scripts/formatter_ecosystem_checks.sh
+++ b/scripts/formatter_ecosystem_checks.sh
@@ -17,48 +17,55 @@ dir="$target/progress_projects"
 mkdir -p "$dir"
 
 # small util library
-if [ ! -d "$dir/build" ]; then
-  git clone --filter=tree:0 https://github.com/pypa/build "$dir/build"
-  git -C "$dir/build" checkout d90f9ac6503a40ddbfaef94b7a7040f87178a4b3
+if [ ! -d "$dir/twine/.git" ]; then
+  git clone --filter=tree:0 https://github.com/pypa/twine "$dir/twine"
 fi
+git -C "$dir/twine" checkout 0bb428c410b8df64c04dc881ac1db37d932f3066
+
 # web framework that implements a lot of magic
-if [ ! -d "$dir/django" ]; then
+if [ ! -d "$dir/django/.git" ]; then
   git clone --filter=tree:0 https://github.com/django/django "$dir/django"
-  git -C "$dir/django" checkout 95e4d6b81312fdd9f8ebf3385be1c1331168b5cf
 fi
+git -C "$dir/django" checkout 95e4d6b81312fdd9f8ebf3385be1c1331168b5cf
+
 # an ML project
-if [ ! -d "$dir/transformers" ]; then
+if [ ! -d "$dir/transformers/.git" ]; then
   git clone --filter=tree:0 https://github.com/huggingface/transformers "$dir/transformers"
-  git -C "$dir/transformers" checkout c9a82be592ca305180a7ab6a36e884bca1d426b8
 fi
+git -C "$dir/transformers" checkout c9a82be592ca305180a7ab6a36e884bca1d426b8
+
 # type annotations
-if [ ! -d "$dir/typeshed" ]; then
+if [ ! -d "$dir/typeshed/.git" ]; then
   git clone --filter=tree:0 https://github.com/python/typeshed "$dir/typeshed"
-  git -C "$dir/typeshed" checkout 7d33060e6ae3ebe54462a891f0c566c97371915b
 fi
+git -C "$dir/typeshed" checkout 7d33060e6ae3ebe54462a891f0c566c97371915b
+
 # python 3.11, typing and 100% test coverage
-if [ ! -d "$dir/warehouse" ]; then
+if [ ! -d "$dir/warehouse/.git" ]; then
   git clone --filter=tree:0 https://github.com/pypi/warehouse "$dir/warehouse"
-  git -C "$dir/warehouse" checkout fe6455c0a946e81f61d72edc1049f536d8bba903
 fi
+git -C "$dir/warehouse" checkout fe6455c0a946e81f61d72edc1049f536d8bba903
+
 # zulip, a django user
-if [ ! -d "$dir/zulip" ]; then
+if [ ! -d "$dir/zulip/.git" ]; then
   git clone --filter=tree:0 https://github.com/zulip/zulip "$dir/zulip"
-  git -C "$dir/zulip" checkout 6cb080c4479546a7f5cb017fcddea56605910b48
 fi
+git -C "$dir/zulip" checkout 6cb080c4479546a7f5cb017fcddea56605910b48
+
 # cpython itself
-if [ ! -d "$dir/cpython" ]; then
+if [ ! -d "$dir/cpython/.git" ]; then
   git clone --filter=tree:0 https://github.com/python/cpython "$dir/cpython"
-  git -C "$dir/cpython" checkout 45de31db9cc9be945702f3a7ca35bbb9f98476af
 fi
+git -C "$dir/cpython" checkout 45de31db9cc9be945702f3a7ca35bbb9f98476af
 
 # Uncomment if you want to update the hashes
 # for i in "$dir"/*/; do git -C "$i" switch main && git -C "$i" pull && echo "# $(basename "$i") $(git -C "$i" rev-parse HEAD)"; done
 
-time cargo run --bin ruff_dev -- format-dev --stability-check --error-file "$target/progress_projects_errors.txt" \
-  --log-file "$target/progress_projects_log.txt" --files-with-errors 25 --multi-project "$dir" || (
+time cargo run --bin ruff_dev -- format-dev --stability-check \
+  --error-file "$target/progress_projects_errors.txt" --log-file "$target/progress_projects_log.txt" --stats-file "$target/progress_projects_stats.txt" \
+  --files-with-errors 25 --multi-project "$dir" || (
   echo "Ecosystem check failed"
   cat "$target/progress_projects_log.txt"
   exit 1
 )
-grep "similarity index" "$target/progress_projects_log.txt" | sort
+cat "$target/progress_projects_stats.txt"