From 230c9ce23603515245c55e3c0cfbd23c3f22cbe5 Mon Sep 17 00:00:00 2001 From: Dhruv Manilawala Date: Mon, 30 Oct 2023 12:13:23 +0530 Subject: [PATCH] Split `Constant` to individual literal nodes (#8064) ## Summary This PR splits the `Constant` enum as individual literal nodes. It introduces the following new nodes for each variant: * `ExprStringLiteral` * `ExprBytesLiteral` * `ExprNumberLiteral` * `ExprBooleanLiteral` * `ExprNoneLiteral` * `ExprEllipsisLiteral` The main motivation behind this refactor is to introduce the new AST node for implicit string concatenation in the coming PR. The elements of that node will be either a string literal, bytes literal or a f-string which can be implemented using an enum. This means that a string or bytes literal cannot be represented by `Constant::Str` / `Constant::Bytes` which creates an inconsistency. This PR avoids that inconsistency by splitting the constant nodes into it's own literal nodes, literal being the more appropriate naming convention from a static analysis tool perspective. This also makes working with literals in the linter and formatter much more ergonomic like, for example, if one would want to check if this is a string literal, it can be done easily using `Expr::is_string_literal_expr` or matching against `Expr::StringLiteral` as oppose to matching against the `ExprConstant` and enum `Constant`. A few AST helper methods can be simplified as well which will be done in a follow-up PR. This introduces a new `Expr::is_literal_expr` method which is the same as `Expr::is_constant_expr`. There are also intermediary changes related to implicit string concatenation which are quiet less. This is done so as to avoid having a huge PR which this already is. ## Test Plan 1. Verify and update all of the existing snapshots (parser, visitor) 2. Verify that the ecosystem check output remains **unchanged** for both the linter and formatter ### Formatter ecosystem check #### `main` | project | similarity index | total files | changed files | |----------------|------------------:|------------------:|------------------:| | cpython | 0.75803 | 1799 | 1647 | | django | 0.99983 | 2772 | 34 | | home-assistant | 0.99953 | 10596 | 186 | | poetry | 0.99891 | 317 | 17 | | transformers | 0.99966 | 2657 | 330 | | twine | 1.00000 | 33 | 0 | | typeshed | 0.99978 | 3669 | 20 | | warehouse | 0.99977 | 654 | 13 | | zulip | 0.99970 | 1459 | 22 | #### `dhruv/constant-to-literal` | project | similarity index | total files | changed files | |----------------|------------------:|------------------:|------------------:| | cpython | 0.75803 | 1799 | 1647 | | django | 0.99983 | 2772 | 34 | | home-assistant | 0.99953 | 10596 | 186 | | poetry | 0.99891 | 317 | 17 | | transformers | 0.99966 | 2657 | 330 | | twine | 1.00000 | 33 | 0 | | typeshed | 0.99978 | 3669 | 20 | | warehouse | 0.99977 | 654 | 13 | | zulip | 0.99970 | 1459 | 22 | --- .../src/checkers/ast/analyze/definitions.rs | 2 +- .../src/checkers/ast/analyze/expression.rs | 41 +- crates/ruff_linter/src/checkers/ast/mod.rs | 16 +- crates/ruff_linter/src/doc_lines.rs | 18 +- .../ruff_linter/src/docstrings/extraction.rs | 19 +- crates/ruff_linter/src/docstrings/mod.rs | 5 +- .../rules/airflow/rules/task_variable_name.rs | 9 +- .../src/rules/flake8_2020/rules/compare.rs | 25 +- .../src/rules/flake8_2020/rules/subscript.rs | 10 +- .../flake8_annotations/rules/definition.rs | 12 +- .../src/rules/flake8_bandit/helpers.rs | 7 +- .../rules/bad_file_permissions.rs | 6 +- .../rules/hardcoded_bind_all_interfaces.rs | 9 +- .../rules/hardcoded_password_string.rs | 7 +- .../rules/hardcoded_tmp_directory.rs | 9 +- .../rules/jinja2_autoescape_false.rs | 7 +- .../flake8_bandit/rules/shell_injection.rs | 10 +- .../rules/snmp_insecure_version.rs | 6 +- .../rules/suspicious_function_call.rs | 2 +- .../rules/weak_cryptographic_key.rs | 6 +- .../src/rules/flake8_boolean_trap/helpers.rs | 13 +- ...olean_default_value_positional_argument.rs | 7 +- .../rules/boolean_positional_value_in_call.rs | 4 +- .../boolean_type_hint_positional_argument.rs | 7 +- .../rules/abstract_base_class.rs | 14 +- .../flake8_bugbear/rules/duplicate_value.rs | 6 +- .../rules/getattr_with_constant.rs | 8 +- .../flake8_bugbear/rules/raise_literal.rs | 2 +- .../rules/setattr_with_constant.rs | 8 +- .../rules/strip_with_multi_characters.rs | 8 +- .../rules/unreliable_callable_check.rs | 8 +- .../rules/useless_expression.rs | 8 +- .../rules/unnecessary_subscript_reversal.rs | 6 +- .../call_datetime_strptime_without_zone.rs | 8 +- .../rules/all_with_model_form.rs | 11 +- .../rules/string_in_exception.rs | 9 +- .../rules/printf_in_gettext_func_call.rs | 8 +- .../rules/explicit.rs | 14 +- .../rules/logging_call.rs | 10 +- .../rules/unnecessary_dict_kwargs.rs | 12 +- .../rules/unnecessary_range_start.rs | 6 +- .../flake8_pyi/rules/docstring_in_stubs.rs | 6 +- .../rules/ellipsis_in_non_empty_class_body.rs | 10 +- .../flake8_pyi/rules/non_empty_stub_body.rs | 8 +- .../rules/redundant_literal_union.rs | 18 +- .../rules/flake8_pyi/rules/simple_defaults.rs | 51 +- .../rules/string_or_bytes_too_long.rs | 12 +- .../flake8_pyi/rules/unrecognized_platform.rs | 8 +- .../rules/unrecognized_version_info.rs | 14 +- .../flake8_pytest_style/rules/helpers.rs | 15 +- .../flake8_pytest_style/rules/parametrize.rs | 73 +- .../rules/unittest_assert.rs | 5 +- .../src/rules/flake8_return/helpers.rs | 11 +- .../rules/flake8_simplify/rules/ast_expr.rs | 32 +- .../flake8_simplify/rules/collapsible_if.rs | 16 +- .../if_else_block_instead_of_dict_lookup.rs | 28 +- .../flake8_simplify/rules/needless_bool.rs | 7 +- .../rules/reimplemented_builtin.rs | 18 +- .../rules/suppressible_exception.rs | 10 +- .../flake8_simplify/rules/yoda_conditions.rs | 5 +- .../rules/flake8_unused_arguments/helpers.rs | 12 +- .../path_constructor_current_directory.rs | 8 +- .../rules/replaceable_by_pathlib.rs | 17 +- crates/ruff_linter/src/rules/flynt/helpers.rs | 25 +- .../flynt/rules/static_join_to_fstring.rs | 25 +- .../src/rules/pandas_vet/helpers.rs | 7 +- .../rules/nunique_constant_series_check.rs | 6 +- .../src/rules/pandas_vet/rules/read_table.rs | 7 +- .../pycodestyle/rules/lambda_assignment.rs | 7 +- .../pycodestyle/rules/literal_comparisons.rs | 14 +- .../src/rules/pydocstyle/helpers.rs | 11 - .../src/rules/pydocstyle/rules/capitalized.rs | 2 +- .../rules/newline_after_last_paragraph.rs | 4 +- .../src/rules/pyflakes/rules/repeated_keys.rs | 9 +- .../src/rules/pyflakes/rules/strings.rs | 12 +- .../ruff_linter/src/rules/pylint/helpers.rs | 8 +- .../pylint/rules/assert_on_string_literal.rs | 69 +- .../src/rules/pylint/rules/bad_open_mode.rs | 8 +- .../rules/pylint/rules/bad_str_strip_call.rs | 13 +- .../pylint/rules/bad_string_format_type.rs | 10 +- .../pylint/rules/compare_to_empty_string.rs | 52 +- .../pylint/rules/comparison_of_constant.rs | 18 +- .../pylint/rules/invalid_envvar_default.rs | 7 +- .../pylint/rules/invalid_envvar_value.rs | 2 +- .../src/rules/pylint/rules/logging.rs | 8 +- .../pylint/rules/magic_value_comparison.rs | 47 +- .../rules/pylint/rules/single_string_slots.rs | 18 +- .../pylint/rules/unspecified_encoding.rs | 2 +- .../src/rules/pylint/rules/useless_return.rs | 10 +- .../ruff_linter/src/rules/pylint/settings.rs | 27 +- ...convert_named_tuple_functional_to_class.rs | 9 +- .../convert_typed_dict_functional_to_class.rs | 9 +- .../src/rules/pyupgrade/rules/f_strings.rs | 14 +- .../rules/pyupgrade/rules/native_literals.rs | 81 +- .../pyupgrade/rules/outdated_version_block.rs | 10 +- .../rules/printf_string_formatting.rs | 20 +- .../pyupgrade/rules/redundant_open_modes.rs | 16 +- .../pyupgrade/rules/type_of_primitive.rs | 7 +- .../pyupgrade/rules/unicode_kind_prefix.rs | 10 +- .../rules/unnecessary_encode_utf8.rs | 13 +- .../pyupgrade/rules/use_pep604_annotation.rs | 12 +- .../pyupgrade/rules/use_pep695_type_alias.rs | 18 +- .../ruff_linter/src/rules/pyupgrade/types.rs | 20 +- .../src/rules/refurb/rules/implicit_cwd.rs | 10 +- .../refurb/rules/isinstance_type_none.rs | 11 +- .../rules/refurb/rules/print_empty_string.rs | 6 +- .../src/rules/refurb/rules/read_whole_file.rs | 4 +- .../rules/single_item_membership_test.rs | 13 +- .../refurb/rules/unnecessary_enumerate.rs | 6 +- .../src/rules/ruff/rules/implicit_optional.rs | 10 +- .../rules/ruff/rules/invalid_index_type.rs | 161 +- .../rules/ruff/rules/pairwise_over_zipped.rs | 10 +- ...y_iterable_allocation_for_first_element.rs | 6 +- .../src/rules/ruff/rules/unreachable.rs | 13 +- crates/ruff_linter/src/rules/ruff/typing.rs | 12 +- .../tryceratops/rules/raise_vanilla_args.rs | 7 +- crates/ruff_python_ast/src/all.rs | 8 +- crates/ruff_python_ast/src/comparable.rs | 89 +- crates/ruff_python_ast/src/expression.rs | 61 +- crates/ruff_python_ast/src/helpers.rs | 110 +- crates/ruff_python_ast/src/node.rs | 399 +- crates/ruff_python_ast/src/nodes.rs | 353 +- crates/ruff_python_ast/src/relocate.rs | 17 +- crates/ruff_python_ast/src/visitor.rs | 7 +- .../ruff_python_ast/src/visitor/preorder.rs | 17 +- crates/ruff_python_ast/tests/preorder.rs | 8 +- .../preorder__class_type_parameters.snap | 3 +- .../tests/snapshots/preorder__compare.snap | 6 +- .../preorder__dict_comprehension.snap | 3 +- .../preorder__function_arguments.snap | 9 +- ...function_positional_only_with_default.snap | 6 +- .../preorder__function_type_parameters.snap | 3 +- .../preorder__match_class_pattern.snap | 21 +- .../visitor__class_type_parameters.snap | 2 +- .../tests/snapshots/visitor__compare.snap | 4 +- .../visitor__dict_comprehension.snap | 2 +- .../visitor__function_arguments.snap | 6 +- ...function_positional_only_with_default.snap | 4 +- .../visitor__function_type_parameters.snap | 2 +- .../visitor__match_class_pattern.snap | 14 +- crates/ruff_python_codegen/src/generator.rs | 113 +- .../src/comments/placement.rs | 2 +- ...inary_expression_left_operand_comment.snap | 4 +- ..._operand_trailing_end_of_line_comment.snap | 4 +- ...ents__tests__nested_binary_expression.snap | 4 +- ...ents__tests__parenthesized_expression.snap | 2 +- ...ts__tests__trailing_most_outer_nested.snap | 2 +- .../src/expression/binary_like.rs | 13 +- .../src/expression/expr_attribute.rs | 10 +- .../src/expression/expr_bin_op.rs | 10 +- .../src/expression/expr_boolean_literal.rs | 28 + .../src/expression/expr_bytes_literal.rs | 42 + .../src/expression/expr_compare.rs | 10 +- .../src/expression/expr_constant.rs | 99 - .../src/expression/expr_ellipsis_literal.rs | 24 + .../src/expression/expr_none_literal.rs | 24 + .../src/expression/expr_number_literal.rs | 29 + .../src/expression/expr_slice.rs | 2 +- .../src/expression/expr_string_literal.rs | 71 + .../src/expression/mod.rs | 53 +- .../src/expression/number.rs | 32 +- .../src/expression/string.rs | 41 +- crates/ruff_python_formatter/src/generated.rs | 204 +- .../src/statement/suite.rs | 33 +- crates/ruff_python_parser/src/python.lalrpop | 51 +- crates/ruff_python_parser/src/python.rs | 4359 ++++++++--------- ...rser__context__tests__ann_assign_name.snap | 4 +- ...ser__context__tests__assign_attribute.snap | 12 +- ...on_parser__context__tests__assign_for.snap | 12 +- ...n_parser__context__tests__assign_list.snap | 12 +- ...ser__context__tests__assign_list_comp.snap | 12 +- ...n_parser__context__tests__assign_name.snap | 12 +- ...er__context__tests__assign_named_expr.snap | 4 +- ...rser__context__tests__assign_set_comp.snap | 12 +- ...arser__context__tests__assign_starred.snap | 12 +- ...ser__context__tests__assign_subscript.snap | 12 +- ..._parser__context__tests__assign_tuple.snap | 12 +- ...n_parser__context__tests__assign_with.snap | 4 +- ..._context__tests__aug_assign_attribute.snap | 12 +- ...rser__context__tests__aug_assign_name.snap | 4 +- ..._context__tests__aug_assign_subscript.snap | 12 +- ...__function_kw_only_args_with_defaults.snap | 8 +- ...on_pos_and_kw_only_args_with_defaults.snap | 8 +- ...w_only_args_with_defaults_and_varargs.snap | 8 +- ..._with_defaults_and_varargs_and_kwargs.snap | 8 +- ...ests__function_pos_args_with_defaults.snap | 8 +- ..._function__tests__lambda_kw_only_args.snap | 4 +- ...ts__lambda_kw_only_args_with_defaults.snap | 12 +- ...rser__function__tests__lambda_no_args.snap | 4 +- ...n__tests__lambda_pos_and_kw_only_args.snap | 4 +- ...ser__function__tests__lambda_pos_args.snap | 4 +- ..._tests__lambda_pos_args_with_defaults.snap | 12 +- ...parser__parser__tests__dict_unpacking.snap | 56 +- ...ython_parser__parser__tests__fstrings.snap | 274 +- ..._parser__tests__fstrings_with_unicode.snap | 112 +- ..._tests__generator_expression_argument.snap | 52 +- ...arser__tests__ipython_escape_commands.snap | 4 +- ...f_python_parser__parser__tests__match.snap | 92 +- ...r__parser__tests__match_as_identifier.snap | 16 +- ...rser__parser__tests__numeric_literals.snap | 72 +- ...ts__numeric_literals_attribute_access.snap | 77 +- ...__tests__parenthesized_with_statement.snap | 20 +- ...on_parser__parser__tests__parse_class.snap | 14 +- ...ser__tests__parse_class_generic_types.snap | 35 +- ...ests__parse_double_list_comprehension.snap | 8 +- ...parser__parser__tests__parse_f_string.snap | 14 +- ...ser__tests__parse_function_definition.snap | 30 +- ...er__parser__tests__parse_if_elif_else.snap | 20 +- ...n_parser__parser__tests__parse_kwargs.snap | 18 +- ...__parser__tests__parse_lambda_no_args.snap | 4 +- ...ed_expression_generator_comprehension.snap | 4 +- ..._parser__parser__tests__parse_print_2.snap | 18 +- ...ser__parser__tests__parse_print_hello.snap | 14 +- ...n_parser__parser__tests__parse_string.snap | 14 +- ...n_parser__parser__tests__parse_tuples.snap | 8 +- ...parser__tests__parse_type_declaration.snap | 14 +- ...f_python_parser__parser__tests__patma.snap | 586 ++- ...f_python_parser__parser__tests__slice.snap | 12 +- ...hon_parser__parser__tests__star_index.snap | 24 +- ...uff_python_parser__parser__tests__try.snap | 32 +- ...ython_parser__parser__tests__try_star.snap | 86 +- ...er__parser__tests__type_as_identifier.snap | 20 +- ...arser__parser__tests__unicode_aliases.snap | 14 +- ...ser__parser__tests__variadic_generics.snap | 5 +- ...parser__parser__tests__with_statement.snap | 136 +- ...arser__string__tests__backspace_alias.snap | 14 +- ...hon_parser__string__tests__bell_alias.snap | 14 +- ..._string__tests__carriage_return_alias.snap | 14 +- ...r_tabulation_with_justification_alias.snap | 14 +- ...n_parser__string__tests__delete_alias.snap | 14 +- ...er__string__tests__double_quoted_byte.snap | 526 +- ...n_parser__string__tests__escape_alias.snap | 14 +- ...g__tests__escape_char_in_byte_literal.snap | 34 +- ...n_parser__string__tests__escape_octet.snap | 24 +- ...arser__string__tests__form_feed_alias.snap | 14 +- ...string__tests__fstring_constant_range.snap | 42 +- ...ing__tests__fstring_escaped_character.snap | 14 +- ...tring__tests__fstring_escaped_newline.snap | 14 +- ...ing__tests__fstring_line_continuation.snap | 14 +- ...ring_parse_self_documenting_base_more.snap | 28 +- ...fstring_parse_self_documenting_format.snap | 14 +- ...ing__tests__fstring_unescaped_newline.snap | 14 +- ...thon_parser__string__tests__hts_alias.snap | 14 +- ...tring__tests__parse_f_string_concat_1.snap | 14 +- ...tring__tests__parse_f_string_concat_2.snap | 14 +- ...tring__tests__parse_f_string_concat_3.snap | 28 +- ...tring__tests__parse_f_string_concat_4.snap | 42 +- ..._parser__string__tests__parse_fstring.snap | 14 +- ...__string__tests__parse_fstring_equals.snap | 8 +- ...ring_nested_concatenation_string_spec.snap | 14 +- ...sts__parse_fstring_nested_string_spec.snap | 14 +- ...ring__tests__parse_fstring_not_equals.snap | 8 +- ..._tests__parse_fstring_not_nested_spec.snap | 14 +- ...r__string__tests__parse_string_concat.snap | 14 +- ..._parse_string_triple_quotes_with_kind.snap | 14 +- ...ing__tests__parse_u_f_string_concat_1.snap | 14 +- ...ing__tests__parse_u_f_string_concat_2.snap | 14 +- ...tring__tests__parse_u_string_concat_1.snap | 14 +- ...tring__tests__parse_u_string_concat_2.snap | 14 +- ...er__string__tests__raw_byte_literal_1.snap | 22 +- ...er__string__tests__raw_byte_literal_2.snap | 18 +- ...er__string__tests__single_quoted_byte.snap | 526 +- ..._tests__string_parser_escaped_mac_eol.snap | 14 +- ...tests__string_parser_escaped_unix_eol.snap | 14 +- ...ts__string_parser_escaped_windows_eol.snap | 14 +- crates/ruff_python_parser/src/string.rs | 104 +- .../src/analyze/type_inference.rs | 22 +- .../src/analyze/typing.rs | 18 +- 268 files changed, 6020 insertions(+), 6098 deletions(-) create mode 100644 crates/ruff_python_formatter/src/expression/expr_boolean_literal.rs create mode 100644 crates/ruff_python_formatter/src/expression/expr_bytes_literal.rs delete mode 100644 crates/ruff_python_formatter/src/expression/expr_constant.rs create mode 100644 crates/ruff_python_formatter/src/expression/expr_ellipsis_literal.rs create mode 100644 crates/ruff_python_formatter/src/expression/expr_none_literal.rs create mode 100644 crates/ruff_python_formatter/src/expression/expr_number_literal.rs create mode 100644 crates/ruff_python_formatter/src/expression/expr_string_literal.rs diff --git a/crates/ruff_linter/src/checkers/ast/analyze/definitions.rs b/crates/ruff_linter/src/checkers/ast/analyze/definitions.rs index f4b7d3fb34be1..f4c40279096b2 100644 --- a/crates/ruff_linter/src/checkers/ast/analyze/definitions.rs +++ b/crates/ruff_linter/src/checkers/ast/analyze/definitions.rs @@ -170,7 +170,7 @@ pub(crate) fn definitions(checker: &mut Checker) { expr.start(), )); - if pydocstyle::helpers::should_ignore_docstring(expr) { + if expr.implicit_concatenated { #[allow(deprecated)] let location = checker.locator.compute_source_location(expr.start()); warn_user!( diff --git a/crates/ruff_linter/src/checkers/ast/analyze/expression.rs b/crates/ruff_linter/src/checkers/ast/analyze/expression.rs index 4e81220461ce9..b91aceb3c0e01 100644 --- a/crates/ruff_linter/src/checkers/ast/analyze/expression.rs +++ b/crates/ruff_linter/src/checkers/ast/analyze/expression.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Arguments, Constant, Expr, ExprContext, Operator}; +use ruff_python_ast::{self as ast, Arguments, Expr, ExprContext, Operator}; use ruff_python_literal::cformat::{CFormatError, CFormatErrorType}; use ruff_diagnostics::Diagnostic; @@ -363,20 +363,18 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { ]) { if let Expr::Attribute(ast::ExprAttribute { value, attr, .. }) = func.as_ref() { let attr = attr.as_str(); - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(val), - .. - }) = value.as_ref() + if let Expr::StringLiteral(ast::ExprStringLiteral { value: string, .. }) = + value.as_ref() { if attr == "join" { // "...".join(...) call if checker.enabled(Rule::StaticJoinToFString) { - flynt::rules::static_join_to_fstring(checker, expr, val); + flynt::rules::static_join_to_fstring(checker, expr, string); } } else if attr == "format" { // "...".format(...) call let location = expr.range(); - match pyflakes::format::FormatSummary::try_from(val.as_ref()) { + match pyflakes::format::FormatSummary::try_from(string.as_ref()) { Err(e) => { if checker.enabled(Rule::StringDotFormatInvalidFormat) { checker.diagnostics.push(Diagnostic::new( @@ -421,7 +419,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { if checker.enabled(Rule::BadStringFormatCharacter) { pylint::rules::bad_string_format_character::call( - checker, val, location, + checker, string, location, ); } } @@ -993,11 +991,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { right, range: _, }) => { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - }) = left.as_ref() - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = left.as_ref() { if checker.any_enabled(&[ Rule::PercentFormatInvalidFormat, Rule::PercentFormatExpectedMapping, @@ -1234,38 +1228,29 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { refurb::rules::single_item_membership_test(checker, expr, left, ops, comparators); } } - Expr::Constant(ast::ExprConstant { - value: Constant::Int(_) | Constant::Float(_) | Constant::Complex { .. }, - range: _, - }) => { + Expr::NumberLiteral(_) => { if checker.source_type.is_stub() && checker.enabled(Rule::NumericLiteralTooLong) { flake8_pyi::rules::numeric_literal_too_long(checker, expr); } } - Expr::Constant(ast::ExprConstant { - value: Constant::Bytes(_), - range: _, - }) => { + Expr::BytesLiteral(_) => { if checker.source_type.is_stub() && checker.enabled(Rule::StringOrBytesTooLong) { flake8_pyi::rules::string_or_bytes_too_long(checker, expr); } } - Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), - range: _, - }) => { + Expr::StringLiteral(string) => { if checker.enabled(Rule::HardcodedBindAllInterfaces) { if let Some(diagnostic) = - flake8_bandit::rules::hardcoded_bind_all_interfaces(value, expr.range()) + flake8_bandit::rules::hardcoded_bind_all_interfaces(string) { checker.diagnostics.push(diagnostic); } } if checker.enabled(Rule::HardcodedTempFile) { - flake8_bandit::rules::hardcoded_tmp_directory(checker, expr, value); + flake8_bandit::rules::hardcoded_tmp_directory(checker, string); } if checker.enabled(Rule::UnicodeKindPrefix) { - pyupgrade::rules::unicode_kind_prefix(checker, expr, value.unicode); + pyupgrade::rules::unicode_kind_prefix(checker, string); } if checker.source_type.is_stub() { if checker.enabled(Rule::StringOrBytesTooLong) { diff --git a/crates/ruff_linter/src/checkers/ast/mod.rs b/crates/ruff_linter/src/checkers/ast/mod.rs index 2905820fa6590..c3acf77ce8fc8 100644 --- a/crates/ruff_linter/src/checkers/ast/mod.rs +++ b/crates/ruff_linter/src/checkers/ast/mod.rs @@ -31,9 +31,8 @@ use std::path::Path; use itertools::Itertools; use log::debug; use ruff_python_ast::{ - self as ast, Arguments, Comprehension, Constant, ElifElseClause, ExceptHandler, Expr, - ExprContext, Keyword, MatchCase, Parameter, ParameterWithDefault, Parameters, Pattern, Stmt, - Suite, UnaryOp, + self as ast, Arguments, Comprehension, ElifElseClause, ExceptHandler, Expr, ExprContext, + Keyword, MatchCase, Parameter, ParameterWithDefault, Parameters, Pattern, Stmt, Suite, UnaryOp, }; use ruff_text_size::{Ranged, TextRange, TextSize}; @@ -787,11 +786,7 @@ where && self.semantic.in_type_definition() && self.semantic.future_annotations() { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), - .. - }) = expr - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = expr { self.deferred.string_type_definitions.push(( expr.range(), value, @@ -1186,10 +1181,7 @@ where } } } - Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), - range: _, - }) => { + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => { if self.semantic.in_type_definition() && !self.semantic.in_literal() && !self.semantic.in_f_string() diff --git a/crates/ruff_linter/src/doc_lines.rs b/crates/ruff_linter/src/doc_lines.rs index f45dfd0cf60fa..7b69fb866920d 100644 --- a/crates/ruff_linter/src/doc_lines.rs +++ b/crates/ruff_linter/src/doc_lines.rs @@ -3,7 +3,7 @@ use std::iter::FusedIterator; -use ruff_python_ast::{self as ast, Constant, Expr, Stmt, Suite}; +use ruff_python_ast::{self as ast, Stmt, Suite}; use ruff_python_parser::lexer::LexResult; use ruff_python_parser::Tok; use ruff_text_size::{Ranged, TextSize}; @@ -69,15 +69,15 @@ struct StringLinesVisitor<'a> { impl StatementVisitor<'_> for StringLinesVisitor<'_> { fn visit_stmt(&mut self, stmt: &Stmt) { - if let Stmt::Expr(ast::StmtExpr { value, range: _ }) = stmt { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(..), - .. - }) = value.as_ref() - { + if let Stmt::Expr(ast::StmtExpr { + value: expr, + range: _, + }) = stmt + { + if expr.is_string_literal_expr() { for line in UniversalNewlineIterator::with_offset( - self.locator.slice(value.as_ref()), - value.start(), + self.locator.slice(expr.as_ref()), + expr.start(), ) { self.string_lines.push(line.start()); } diff --git a/crates/ruff_linter/src/docstrings/extraction.rs b/crates/ruff_linter/src/docstrings/extraction.rs index c642b7527176e..a0597b06269b6 100644 --- a/crates/ruff_linter/src/docstrings/extraction.rs +++ b/crates/ruff_linter/src/docstrings/extraction.rs @@ -1,30 +1,23 @@ //! Extract docstrings from an AST. -use ruff_python_ast::{self as ast, Constant, Expr, Stmt}; +use ruff_python_ast::{self as ast, Stmt}; use ruff_python_semantic::{Definition, DefinitionId, Definitions, Member, MemberKind}; /// Extract a docstring from a function or class body. -pub(crate) fn docstring_from(suite: &[Stmt]) -> Option<&Expr> { +pub(crate) fn docstring_from(suite: &[Stmt]) -> Option<&ast::ExprStringLiteral> { let stmt = suite.first()?; // Require the docstring to be a standalone expression. let Stmt::Expr(ast::StmtExpr { value, range: _ }) = stmt else { return None; }; // Only match strings. - if !matches!( - value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Str(_), - .. - }) - ) { - return None; - } - Some(value) + value.as_string_literal_expr() } /// Extract a docstring from a `Definition`. -pub(crate) fn extract_docstring<'a>(definition: &'a Definition<'a>) -> Option<&'a Expr> { +pub(crate) fn extract_docstring<'a>( + definition: &'a Definition<'a>, +) -> Option<&'a ast::ExprStringLiteral> { match definition { Definition::Module(module) => docstring_from(module.python_ast), Definition::Member(member) => docstring_from(member.body()), diff --git a/crates/ruff_linter/src/docstrings/mod.rs b/crates/ruff_linter/src/docstrings/mod.rs index aea8b14faa553..7715beea865ba 100644 --- a/crates/ruff_linter/src/docstrings/mod.rs +++ b/crates/ruff_linter/src/docstrings/mod.rs @@ -1,7 +1,7 @@ use std::fmt::{Debug, Formatter}; use std::ops::Deref; -use ruff_python_ast::Expr; +use ruff_python_ast::ExprStringLiteral; use ruff_python_semantic::Definition; use ruff_text_size::{Ranged, TextRange}; @@ -14,7 +14,8 @@ pub(crate) mod styles; #[derive(Debug)] pub(crate) struct Docstring<'a> { pub(crate) definition: &'a Definition<'a>, - pub(crate) expr: &'a Expr, + /// The literal AST node representing the docstring. + pub(crate) expr: &'a ExprStringLiteral, /// The content of the docstring, including the leading and trailing quotes. pub(crate) contents: &'a str, /// The range of the docstring body (without the quotes). The range is relative to [`Self::contents`]. diff --git a/crates/ruff_linter/src/rules/airflow/rules/task_variable_name.rs b/crates/ruff_linter/src/rules/airflow/rules/task_variable_name.rs index fccf1a79aade1..dec0a953081fb 100644 --- a/crates/ruff_linter/src/rules/airflow/rules/task_variable_name.rs +++ b/crates/ruff_linter/src/rules/airflow/rules/task_variable_name.rs @@ -1,7 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast as ast; -use ruff_python_ast::Constant; use ruff_python_ast::Expr; use ruff_text_size::Ranged; @@ -79,13 +78,7 @@ pub(crate) fn variable_name_task_id( let keyword = arguments.find_keyword("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(ast::StringConstant { value, .. }) => value, - _ => return None, - }, - _ => return None, - }; + let ast::ExprStringLiteral { value: task_id, .. } = keyword.value.as_string_literal_expr()?; // If the target name is the same as the task_id, no violation. if id == task_id { diff --git a/crates/ruff_linter/src/rules/flake8_2020/rules/compare.rs b/crates/ruff_linter/src/rules/flake8_2020/rules/compare.rs index debb88697e56a..e2a7b0ccdf776 100644 --- a/crates/ruff_linter/src/rules/flake8_2020/rules/compare.rs +++ b/crates/ruff_linter/src/rules/flake8_2020/rules/compare.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, CmpOp, Constant, Expr}; +use ruff_python_ast::{self as ast, CmpOp, Expr}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -230,16 +230,16 @@ pub(crate) fn compare(checker: &mut Checker, left: &Expr, ops: &[CmpOp], compara Expr::Subscript(ast::ExprSubscript { value, slice, .. }) if is_sys(value, "version_info", checker.semantic()) => { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Int(i), + if let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(i), .. }) = slice.as_ref() { if *i == 0 { if let ( [CmpOp::Eq | CmpOp::NotEq], - [Expr::Constant(ast::ExprConstant { - value: Constant::Int(n), + [Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(n), .. })], ) = (ops, comparators) @@ -253,8 +253,8 @@ pub(crate) fn compare(checker: &mut Checker, left: &Expr, ops: &[CmpOp], compara } else if *i == 1 { if let ( [CmpOp::Lt | CmpOp::LtE | CmpOp::Gt | CmpOp::GtE], - [Expr::Constant(ast::ExprConstant { - value: Constant::Int(_), + [Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(_), .. })], ) = (ops, comparators) @@ -274,8 +274,8 @@ pub(crate) fn compare(checker: &mut Checker, left: &Expr, ops: &[CmpOp], compara { if let ( [CmpOp::Lt | CmpOp::LtE | CmpOp::Gt | CmpOp::GtE], - [Expr::Constant(ast::ExprConstant { - value: Constant::Int(_), + [Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(_), .. })], ) = (ops, comparators) @@ -294,13 +294,10 @@ pub(crate) fn compare(checker: &mut Checker, left: &Expr, ops: &[CmpOp], compara if is_sys(left, "version", checker.semantic()) { if let ( [CmpOp::Lt | CmpOp::LtE | CmpOp::Gt | CmpOp::GtE], - [Expr::Constant(ast::ExprConstant { - value: Constant::Str(s), - .. - })], + [Expr::StringLiteral(ast::ExprStringLiteral { value, .. })], ) = (ops, comparators) { - if s.len() == 1 { + if value.len() == 1 { if checker.enabled(Rule::SysVersionCmpStr10) { checker .diagnostics diff --git a/crates/ruff_linter/src/rules/flake8_2020/rules/subscript.rs b/crates/ruff_linter/src/rules/flake8_2020/rules/subscript.rs index f92c0da03d57a..8f9e4500940e0 100644 --- a/crates/ruff_linter/src/rules/flake8_2020/rules/subscript.rs +++ b/crates/ruff_linter/src/rules/flake8_2020/rules/subscript.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -177,8 +177,8 @@ pub(crate) fn subscript(checker: &mut Checker, value: &Expr, slice: &Expr) { step: None, range: _, }) => { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Int(i), + if let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(i), .. }) = upper.as_ref() { @@ -194,8 +194,8 @@ pub(crate) fn subscript(checker: &mut Checker, value: &Expr, slice: &Expr) { } } - Expr::Constant(ast::ExprConstant { - value: Constant::Int(i), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(i), .. }) => { if *i == 2 && checker.enabled(Rule::SysVersion2) { diff --git a/crates/ruff_linter/src/rules/flake8_annotations/rules/definition.rs b/crates/ruff_linter/src/rules/flake8_annotations/rules/definition.rs index e667fa25328ec..6f8321a055b5e 100644 --- a/crates/ruff_linter/src/rules/flake8_annotations/rules/definition.rs +++ b/crates/ruff_linter/src/rules/flake8_annotations/rules/definition.rs @@ -3,7 +3,7 @@ use ruff_macros::{derive_message_formats, violation}; 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, Stmt}; +use ruff_python_ast::{self as ast, Expr, ParameterWithDefault, Stmt}; use ruff_python_parser::typing::parse_type_annotation; use ruff_python_semantic::analyze::visibility; use ruff_python_semantic::Definition; @@ -431,10 +431,7 @@ fn is_none_returning(body: &[Stmt]) -> bool { visitor.visit_body(body); for stmt in visitor.returns { if let Some(value) = stmt.value.as_deref() { - if !matches!( - value, - Expr::Constant(constant) if constant.value.is_none() - ) { + if !value.is_none_literal_expr() { return false; } } @@ -451,9 +448,10 @@ fn check_dynamically_typed( ) where F: FnOnce() -> String, { - if let Expr::Constant(ast::ExprConstant { + if let Expr::StringLiteral(ast::ExprStringLiteral { range, - value: Constant::Str(string), + value: string, + .. }) = annotation { // Quoted annotations diff --git a/crates/ruff_linter/src/rules/flake8_bandit/helpers.rs b/crates/ruff_linter/src/rules/flake8_bandit/helpers.rs index 0c019360fe5db..ad31e99137728 100644 --- a/crates/ruff_linter/src/rules/flake8_bandit/helpers.rs +++ b/crates/ruff_linter/src/rules/flake8_bandit/helpers.rs @@ -1,6 +1,6 @@ use once_cell::sync::Lazy; use regex::Regex; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_python_semantic::SemanticModel; @@ -10,10 +10,7 @@ static PASSWORD_CANDIDATE_REGEX: Lazy = Lazy::new(|| { pub(super) fn string_literal(expr: &Expr) -> Option<&str> { match expr { - Expr::Constant(ast::ExprConstant { - value: Constant::Str(string), - .. - }) => Some(string), + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => Some(value), _ => None, } } diff --git a/crates/ruff_linter/src/rules/flake8_bandit/rules/bad_file_permissions.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/bad_file_permissions.rs index 61d5bbd77555c..4bc6da38c1aad 100644 --- a/crates/ruff_linter/src/rules/flake8_bandit/rules/bad_file_permissions.rs +++ b/crates/ruff_linter/src/rules/flake8_bandit/rules/bad_file_permissions.rs @@ -3,7 +3,7 @@ use anyhow::Result; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::call_path::CallPath; -use ruff_python_ast::{self as ast, Constant, Expr, Operator}; +use ruff_python_ast::{self as ast, Expr, Operator}; use ruff_python_semantic::SemanticModel; use ruff_text_size::Ranged; @@ -144,8 +144,8 @@ fn py_stat(call_path: &CallPath) -> Option { /// an integer value, but that value is out of range. fn parse_mask(expr: &Expr, semantic: &SemanticModel) -> Result> { match expr { - Expr::Constant(ast::ExprConstant { - value: Constant::Int(int), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(int), .. }) => match int.as_u16() { Some(value) => Ok(Some(value)), diff --git a/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_bind_all_interfaces.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_bind_all_interfaces.rs index ac8090395b776..4fadf908a3f01 100644 --- a/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_bind_all_interfaces.rs +++ b/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_bind_all_interfaces.rs @@ -1,7 +1,6 @@ -use ruff_text_size::TextRange; - use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::ExprStringLiteral; /// ## What it does /// Checks for hardcoded bindings to all network interfaces (`0.0.0.0`). @@ -35,9 +34,9 @@ impl Violation for HardcodedBindAllInterfaces { } /// S104 -pub(crate) fn hardcoded_bind_all_interfaces(value: &str, range: TextRange) -> Option { - if value == "0.0.0.0" { - Some(Diagnostic::new(HardcodedBindAllInterfaces, range)) +pub(crate) fn hardcoded_bind_all_interfaces(string: &ExprStringLiteral) -> Option { + if string.value == "0.0.0.0" { + Some(Diagnostic::new(HardcodedBindAllInterfaces, string.range)) } else { None } diff --git a/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_password_string.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_password_string.rs index 0a3702251a9a1..9839cd58ae283 100644 --- a/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_password_string.rs +++ b/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_password_string.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -55,10 +55,7 @@ fn password_target(target: &Expr) -> Option<&str> { Expr::Name(ast::ExprName { id, .. }) => id.as_str(), // d["password"] = "s3cr3t" Expr::Subscript(ast::ExprSubscript { slice, .. }) => match slice.as_ref() { - Expr::Constant(ast::ExprConstant { - value: Constant::Str(string), - .. - }) => string, + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => value, _ => return None, }, // obj.password = "s3cr3t" diff --git a/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_tmp_directory.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_tmp_directory.rs index 58e9180806ac5..1f5613647f54b 100644 --- a/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_tmp_directory.rs +++ b/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_tmp_directory.rs @@ -2,7 +2,6 @@ use ruff_python_ast::{self as ast, Expr}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -52,13 +51,13 @@ impl Violation for HardcodedTempFile { } /// S108 -pub(crate) fn hardcoded_tmp_directory(checker: &mut Checker, expr: &Expr, value: &str) { +pub(crate) fn hardcoded_tmp_directory(checker: &mut Checker, string: &ast::ExprStringLiteral) { if !checker .settings .flake8_bandit .hardcoded_tmp_directory .iter() - .any(|prefix| value.starts_with(prefix)) + .any(|prefix| string.value.starts_with(prefix)) { return; } @@ -77,8 +76,8 @@ pub(crate) fn hardcoded_tmp_directory(checker: &mut Checker, expr: &Expr, value: checker.diagnostics.push(Diagnostic::new( HardcodedTempFile { - string: value.to_string(), + string: string.value.clone(), }, - expr.range(), + string.range, )); } diff --git a/crates/ruff_linter/src/rules/flake8_bandit/rules/jinja2_autoescape_false.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/jinja2_autoescape_false.rs index 9d7093b35a1b8..2cd35d104971c 100644 --- a/crates/ruff_linter/src/rules/flake8_bandit/rules/jinja2_autoescape_false.rs +++ b/crates/ruff_linter/src/rules/flake8_bandit/rules/jinja2_autoescape_false.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -66,10 +66,7 @@ pub(crate) fn jinja2_autoescape_false(checker: &mut Checker, call: &ast::ExprCal { if let Some(keyword) = call.arguments.find_keyword("autoescape") { match &keyword.value { - Expr::Constant(ast::ExprConstant { - value: Constant::Bool(true), - .. - }) => (), + Expr::BooleanLiteral(ast::ExprBooleanLiteral { value: true, .. }) => (), Expr::Call(ast::ExprCall { func, .. }) => { if let Expr::Name(ast::ExprName { id, .. }) = func.as_ref() { if id != "select_autoescape" { diff --git a/crates/ruff_linter/src/rules/flake8_bandit/rules/shell_injection.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/shell_injection.rs index 6fde131b5b4fc..a3cec2451c1b2 100644 --- a/crates/ruff_linter/src/rules/flake8_bandit/rules/shell_injection.rs +++ b/crates/ruff_linter/src/rules/flake8_bandit/rules/shell_injection.rs @@ -3,7 +3,7 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::Truthiness; -use ruff_python_ast::{self as ast, Arguments, Constant, Expr, Keyword}; +use ruff_python_ast::{self as ast, Arguments, Expr, Keyword}; use ruff_python_semantic::SemanticModel; use ruff_text_size::Ranged; @@ -456,13 +456,7 @@ fn find_shell_keyword<'a>( /// Return `true` if the value provided to the `shell` call seems safe. This is based on Bandit's /// definition: string literals are considered okay, but dynamically-computed values are not. fn shell_call_seems_safe(arg: &Expr) -> bool { - matches!( - arg, - Expr::Constant(ast::ExprConstant { - value: Constant::Str(_), - .. - }) - ) + arg.is_string_literal_expr() } /// Return `true` if the string appears to be a full file path. diff --git a/crates/ruff_linter/src/rules/flake8_bandit/rules/snmp_insecure_version.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/snmp_insecure_version.rs index 62ec65103bc03..23d92d96faa95 100644 --- a/crates/ruff_linter/src/rules/flake8_bandit/rules/snmp_insecure_version.rs +++ b/crates/ruff_linter/src/rules/flake8_bandit/rules/snmp_insecure_version.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr, Int}; +use ruff_python_ast::{self as ast, Expr, Int}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -52,8 +52,8 @@ pub(crate) fn snmp_insecure_version(checker: &mut Checker, call: &ast::ExprCall) if let Some(keyword) = call.arguments.find_keyword("mpModel") { if matches!( keyword.value, - Expr::Constant(ast::ExprConstant { - value: Constant::Int(Int::ZERO | Int::ONE), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(Int::ZERO | Int::ONE), .. }) ) { diff --git a/crates/ruff_linter/src/rules/flake8_bandit/rules/suspicious_function_call.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/suspicious_function_call.rs index 50260a7f8fa17..e705676121cdd 100644 --- a/crates/ruff_linter/src/rules/flake8_bandit/rules/suspicious_function_call.rs +++ b/crates/ruff_linter/src/rules/flake8_bandit/rules/suspicious_function_call.rs @@ -854,7 +854,7 @@ pub(crate) fn suspicious_function_call(checker: &mut Checker, call: &ExprCall) { ["six", "moves", "urllib", "request", "urlopen" | "urlretrieve" | "Request"] => { // If the `url` argument is a string literal, allow `http` and `https` schemes. if call.arguments.args.iter().all(|arg| !arg.is_starred_expr()) && call.arguments.keywords.iter().all(|keyword| keyword.arg.is_some()) { - if let Some(Expr::Constant(ast::ExprConstant { value: ast::Constant::Str(url), .. })) = &call.arguments.find_argument("url", 0) { + if let Some(Expr::StringLiteral(ast::ExprStringLiteral { value: url, .. })) = &call.arguments.find_argument("url", 0) { let url = url.trim_start(); if url.starts_with("http://") || url.starts_with("https://") { return None; diff --git a/crates/ruff_linter/src/rules/flake8_bandit/rules/weak_cryptographic_key.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/weak_cryptographic_key.rs index af4ae9f3d6342..f5ebb656a1f33 100644 --- a/crates/ruff_linter/src/rules/flake8_bandit/rules/weak_cryptographic_key.rs +++ b/crates/ruff_linter/src/rules/flake8_bandit/rules/weak_cryptographic_key.rs @@ -2,7 +2,7 @@ use std::fmt::{Display, Formatter}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr, ExprAttribute, ExprCall}; +use ruff_python_ast::{self as ast, Expr, ExprAttribute, ExprCall}; use ruff_text_size::{Ranged, TextRange}; use crate::checkers::ast::Checker; @@ -151,8 +151,8 @@ fn extract_cryptographic_key( fn extract_int_argument(call: &ExprCall, name: &str, position: usize) -> Option<(u16, TextRange)> { let argument = call.arguments.find_argument(name, position)?; - let Expr::Constant(ast::ExprConstant { - value: Constant::Int(i), + let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(i), .. }) = argument else { diff --git a/crates/ruff_linter/src/rules/flake8_boolean_trap/helpers.rs b/crates/ruff_linter/src/rules/flake8_boolean_trap/helpers.rs index 038ab49c12d2a..f178258261167 100644 --- a/crates/ruff_linter/src/rules/flake8_boolean_trap/helpers.rs +++ b/crates/ruff_linter/src/rules/flake8_boolean_trap/helpers.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, 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,14 +62,3 @@ pub(super) fn allow_boolean_trap(func: &Expr) -> bool { false } - -/// Returns `true` if an expression is a boolean literal. -pub(super) const fn is_boolean(expr: &Expr) -> bool { - matches!( - &expr, - Expr::Constant(ast::ExprConstant { - value: Constant::Bool(_), - .. - }) - ) -} diff --git a/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_default_value_positional_argument.rs b/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_default_value_positional_argument.rs index 63ec019bab764..3a3618fa4d588 100644 --- a/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_default_value_positional_argument.rs +++ b/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_default_value_positional_argument.rs @@ -5,7 +5,7 @@ use ruff_python_ast::{Decorator, ParameterWithDefault, Parameters}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; -use crate::rules::flake8_boolean_trap::helpers::{is_allowed_func_def, is_boolean}; +use crate::rules::flake8_boolean_trap::helpers::is_allowed_func_def; /// ## What it does /// Checks for the use of boolean positional arguments in function definitions, @@ -117,7 +117,10 @@ pub(crate) fn boolean_default_value_positional_argument( range: _, } in parameters.posonlyargs.iter().chain(¶meters.args) { - if default.as_ref().is_some_and(|default| is_boolean(default)) { + if default + .as_ref() + .is_some_and(|default| default.is_boolean_literal_expr()) + { checker.diagnostics.push(Diagnostic::new( BooleanDefaultValuePositionalArgument, parameter.name.range(), diff --git a/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_positional_value_in_call.rs b/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_positional_value_in_call.rs index c278730437b0c..df95dc0ef5bc9 100644 --- a/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_positional_value_in_call.rs +++ b/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_positional_value_in_call.rs @@ -4,7 +4,7 @@ use ruff_python_ast::Expr; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; -use crate::rules::flake8_boolean_trap::helpers::{allow_boolean_trap, is_boolean}; +use crate::rules::flake8_boolean_trap::helpers::allow_boolean_trap; /// ## What it does /// Checks for boolean positional arguments in function calls. @@ -49,7 +49,7 @@ pub(crate) fn boolean_positional_value_in_call(checker: &mut Checker, args: &[Ex if allow_boolean_trap(func) { return; } - for arg in args.iter().filter(|arg| is_boolean(arg)) { + for arg in args.iter().filter(|arg| arg.is_boolean_literal_expr()) { checker .diagnostics .push(Diagnostic::new(BooleanPositionalValueInCall, arg.range())); diff --git a/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_type_hint_positional_argument.rs b/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_type_hint_positional_argument.rs index f6178b7cf13d2..7c8fa6d360301 100644 --- a/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_type_hint_positional_argument.rs +++ b/crates/ruff_linter/src/rules/flake8_boolean_trap/rules/boolean_type_hint_positional_argument.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Decorator, Expr, ParameterWithDefault, Parameters}; +use ruff_python_ast::{self as ast, Decorator, Expr, ParameterWithDefault, Parameters}; use ruff_diagnostics::Diagnostic; use ruff_diagnostics::Violation; @@ -126,10 +126,7 @@ pub(crate) fn boolean_type_hint_positional_argument( // check for both bool (python class) and 'bool' (string annotation) let hint = match annotation.as_ref() { Expr::Name(name) => &name.id == "bool", - Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - }) => value == "bool", + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => value == "bool", _ => false, }; if !hint || !checker.semantic().is_builtin("bool") { diff --git a/crates/ruff_linter/src/rules/flake8_bugbear/rules/abstract_base_class.rs b/crates/ruff_linter/src/rules/flake8_bugbear/rules/abstract_base_class.rs index 2913efc3f9efc..ac98296434e54 100644 --- a/crates/ruff_linter/src/rules/flake8_bugbear/rules/abstract_base_class.rs +++ b/crates/ruff_linter/src/rules/flake8_bugbear/rules/abstract_base_class.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Arguments, Constant, Expr, Keyword, Stmt}; +use ruff_python_ast::{self as ast, Arguments, Expr, Keyword, Stmt}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -121,12 +121,12 @@ fn is_abc_class(bases: &[Expr], keywords: &[Keyword], semantic: &SemanticModel) fn is_empty_body(body: &[Stmt]) -> bool { body.iter().all(|stmt| match stmt { Stmt::Pass(_) => true, - Stmt::Expr(ast::StmtExpr { value, range: _ }) => match value.as_ref() { - Expr::Constant(ast::ExprConstant { value, .. }) => { - matches!(value, Constant::Str(..) | Constant::Ellipsis) - } - _ => false, - }, + Stmt::Expr(ast::StmtExpr { value, range: _ }) => { + matches!( + value.as_ref(), + Expr::StringLiteral(_) | Expr::EllipsisLiteral(_) + ) + } _ => false, }) } diff --git a/crates/ruff_linter/src/rules/flake8_bugbear/rules/duplicate_value.rs b/crates/ruff_linter/src/rules/flake8_bugbear/rules/duplicate_value.rs index 8dbd3d5efb900..a6db76603afba 100644 --- a/crates/ruff_linter/src/rules/flake8_bugbear/rules/duplicate_value.rs +++ b/crates/ruff_linter/src/rules/flake8_bugbear/rules/duplicate_value.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Expr}; +use ruff_python_ast::Expr; use rustc_hash::FxHashSet; use ruff_diagnostics::{Diagnostic, Violation}; @@ -42,13 +42,13 @@ impl Violation for DuplicateValue { 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 { + if elt.is_literal_expr() { let comparable_value: ComparableExpr = elt.into(); if !seen_values.insert(comparable_value) { checker.diagnostics.push(Diagnostic::new( DuplicateValue { - value: checker.generator().constant(value), + value: checker.generator().expr(elt), }, elt.range(), )); diff --git a/crates/ruff_linter/src/rules/flake8_bugbear/rules/getattr_with_constant.rs b/crates/ruff_linter/src/rules/flake8_bugbear/rules/getattr_with_constant.rs index b9b2624950123..4c6133d779733 100644 --- a/crates/ruff_linter/src/rules/flake8_bugbear/rules/getattr_with_constant.rs +++ b/crates/ruff_linter/src/rules/flake8_bugbear/rules/getattr_with_constant.rs @@ -1,7 +1,7 @@ use crate::fix::edits::pad; use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_python_stdlib::identifiers::{is_identifier, is_mangled_private}; use ruff_text_size::Ranged; @@ -66,11 +66,7 @@ pub(crate) fn getattr_with_constant( if obj.is_starred_expr() { return; } - let Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - }) = arg - else { + let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = arg else { return; }; if !is_identifier(value) { diff --git a/crates/ruff_linter/src/rules/flake8_bugbear/rules/raise_literal.rs b/crates/ruff_linter/src/rules/flake8_bugbear/rules/raise_literal.rs index 65534e540e593..3efc6d8c7d847 100644 --- a/crates/ruff_linter/src/rules/flake8_bugbear/rules/raise_literal.rs +++ b/crates/ruff_linter/src/rules/flake8_bugbear/rules/raise_literal.rs @@ -38,7 +38,7 @@ impl Violation for RaiseLiteral { /// B016 pub(crate) fn raise_literal(checker: &mut Checker, expr: &Expr) { - if expr.is_constant_expr() { + if expr.is_literal_expr() { checker .diagnostics .push(Diagnostic::new(RaiseLiteral, expr.range())); diff --git a/crates/ruff_linter/src/rules/flake8_bugbear/rules/setattr_with_constant.rs b/crates/ruff_linter/src/rules/flake8_bugbear/rules/setattr_with_constant.rs index 290f3ebc87197..92599a5807eba 100644 --- a/crates/ruff_linter/src/rules/flake8_bugbear/rules/setattr_with_constant.rs +++ b/crates/ruff_linter/src/rules/flake8_bugbear/rules/setattr_with_constant.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Expr, ExprContext, Identifier, Stmt}; +use ruff_python_ast::{self as ast, Expr, ExprContext, Identifier, Stmt}; use ruff_text_size::{Ranged, TextRange}; use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; @@ -80,11 +80,7 @@ pub(crate) fn setattr_with_constant( if obj.is_starred_expr() { return; } - let Expr::Constant(ast::ExprConstant { - value: Constant::Str(name), - .. - }) = name - else { + let Expr::StringLiteral(ast::ExprStringLiteral { value: name, .. }) = name else { return; }; if !is_identifier(name) { diff --git a/crates/ruff_linter/src/rules/flake8_bugbear/rules/strip_with_multi_characters.rs b/crates/ruff_linter/src/rules/flake8_bugbear/rules/strip_with_multi_characters.rs index 3fd3dacdaab9b..804ce3b6e03ef 100644 --- a/crates/ruff_linter/src/rules/flake8_bugbear/rules/strip_with_multi_characters.rs +++ b/crates/ruff_linter/src/rules/flake8_bugbear/rules/strip_with_multi_characters.rs @@ -1,5 +1,5 @@ use itertools::Itertools; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -68,11 +68,7 @@ pub(crate) fn strip_with_multi_characters( return; } - let [Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), - .. - })] = args - else { + let [Expr::StringLiteral(ast::ExprStringLiteral { value, .. })] = args else { return; }; diff --git a/crates/ruff_linter/src/rules/flake8_bugbear/rules/unreliable_callable_check.rs b/crates/ruff_linter/src/rules/flake8_bugbear/rules/unreliable_callable_check.rs index 400f5d31c1396..a66671048a41d 100644 --- a/crates/ruff_linter/src/rules/flake8_bugbear/rules/unreliable_callable_check.rs +++ b/crates/ruff_linter/src/rules/flake8_bugbear/rules/unreliable_callable_check.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -67,11 +67,7 @@ pub(crate) fn unreliable_callable_check( let [obj, attr, ..] = args else { return; }; - let Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - }) = attr - else { + let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = attr else { return; }; if value != "__call__" { diff --git a/crates/ruff_linter/src/rules/flake8_bugbear/rules/useless_expression.rs b/crates/ruff_linter/src/rules/flake8_bugbear/rules/useless_expression.rs index 57521418eae84..65da45af782c9 100644 --- a/crates/ruff_linter/src/rules/flake8_bugbear/rules/useless_expression.rs +++ b/crates/ruff_linter/src/rules/flake8_bugbear/rules/useless_expression.rs @@ -1,7 +1,7 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::contains_effect; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::Expr; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -54,11 +54,7 @@ pub(crate) fn useless_expression(checker: &mut Checker, value: &Expr) { // Ignore strings, to avoid false positives with docstrings. if matches!( value, - Expr::FString(_) - | Expr::Constant(ast::ExprConstant { - value: Constant::Str(..) | Constant::Ellipsis, - .. - }) + Expr::FString(_) | Expr::StringLiteral(_) | Expr::EllipsisLiteral(_) ) { return; } diff --git a/crates/ruff_linter/src/rules/flake8_comprehensions/rules/unnecessary_subscript_reversal.rs b/crates/ruff_linter/src/rules/flake8_comprehensions/rules/unnecessary_subscript_reversal.rs index 4caa72892eceb..baabf909b0ae8 100644 --- a/crates/ruff_linter/src/rules/flake8_comprehensions/rules/unnecessary_subscript_reversal.rs +++ b/crates/ruff_linter/src/rules/flake8_comprehensions/rules/unnecessary_subscript_reversal.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr, UnaryOp}; +use ruff_python_ast::{self as ast, Expr, UnaryOp}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -79,8 +79,8 @@ pub(crate) fn unnecessary_subscript_reversal(checker: &mut Checker, call: &ast:: else { return; }; - let Expr::Constant(ast::ExprConstant { - value: Constant::Int(val), + let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(val), .. }) = operand.as_ref() else { diff --git a/crates/ruff_linter/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs b/crates/ruff_linter/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs index f758fb0042c61..6efde68d0d2cc 100644 --- a/crates/ruff_linter/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs +++ b/crates/ruff_linter/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -75,10 +75,8 @@ pub(crate) fn call_datetime_strptime_without_zone(checker: &mut Checker, call: & } // Does the `strptime` call contain a format string with a timezone specifier? - if let Some(Expr::Constant(ast::ExprConstant { - value: Constant::Str(format), - range: _, - })) = call.arguments.args.get(1).as_ref() + if let Some(Expr::StringLiteral(ast::ExprStringLiteral { value: format, .. })) = + call.arguments.args.get(1).as_ref() { if format.contains("%z") { return; diff --git a/crates/ruff_linter/src/rules/flake8_django/rules/all_with_model_form.rs b/crates/ruff_linter/src/rules/flake8_django/rules/all_with_model_form.rs index 50a7f98c55a44..8e97c68c2ca0f 100644 --- a/crates/ruff_linter/src/rules/flake8_django/rules/all_with_model_form.rs +++ b/crates/ruff_linter/src/rules/flake8_django/rules/all_with_model_form.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Arguments, Constant, Expr, Stmt}; +use ruff_python_ast::{self as ast, Arguments, Expr, Stmt}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -80,16 +80,13 @@ pub(crate) fn all_with_model_form( if id != "fields" { continue; } - let Expr::Constant(ast::ExprConstant { value, .. }) = value.as_ref() else { - continue; - }; - match value { - Constant::Str(ast::StringConstant { value, .. }) => { + match value.as_ref() { + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => { if value == "__all__" { return Some(Diagnostic::new(DjangoAllWithModelForm, element.range())); } } - Constant::Bytes(ast::BytesConstant { value, .. }) => { + Expr::BytesLiteral(ast::ExprBytesLiteral { value, .. }) => { if value == "__all__".as_bytes() { return Some(Diagnostic::new(DjangoAllWithModelForm, element.range())); } diff --git a/crates/ruff_linter/src/rules/flake8_errmsg/rules/string_in_exception.rs b/crates/ruff_linter/src/rules/flake8_errmsg/rules/string_in_exception.rs index 06543424f46e8..caec91dd7ab98 100644 --- a/crates/ruff_linter/src/rules/flake8_errmsg/rules/string_in_exception.rs +++ b/crates/ruff_linter/src/rules/flake8_errmsg/rules/string_in_exception.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Arguments, Constant, Expr, ExprContext, Stmt}; +use ruff_python_ast::{self as ast, Arguments, Expr, ExprContext, Stmt}; use ruff_text_size::{Ranged, TextRange}; use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; @@ -182,10 +182,7 @@ pub(crate) fn string_in_exception(checker: &mut Checker, stmt: &Stmt, exc: &Expr if let Some(first) = args.first() { match first { // Check for string literals. - Expr::Constant(ast::ExprConstant { - value: Constant::Str(string), - .. - }) => { + Expr::StringLiteral(ast::ExprStringLiteral { value: string, .. }) => { if checker.enabled(Rule::RawStringInException) { if string.len() >= checker.settings.flake8_errmsg.max_string_length { let mut diagnostic = @@ -232,7 +229,7 @@ pub(crate) fn string_in_exception(checker: &mut Checker, stmt: &Stmt, exc: &Expr if let Expr::Attribute(ast::ExprAttribute { value, attr, .. }) = func.as_ref() { - if attr == "format" && value.is_constant_expr() { + if attr == "format" && value.is_literal_expr() { let mut diagnostic = Diagnostic::new(DotFormatInException, first.range()); if let Some(indentation) = diff --git a/crates/ruff_linter/src/rules/flake8_gettext/rules/printf_in_gettext_func_call.rs b/crates/ruff_linter/src/rules/flake8_gettext/rules/printf_in_gettext_func_call.rs index 865ad9a4261f0..334aef836bee7 100644 --- a/crates/ruff_linter/src/rules/flake8_gettext/rules/printf_in_gettext_func_call.rs +++ b/crates/ruff_linter/src/rules/flake8_gettext/rules/printf_in_gettext_func_call.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Expr, Operator}; +use ruff_python_ast::{self as ast, Expr, Operator}; use crate::checkers::ast::Checker; use ruff_diagnostics::{Diagnostic, Violation}; @@ -58,11 +58,7 @@ pub(crate) fn printf_in_gettext_func_call(checker: &mut Checker, args: &[Expr]) .. }) = &first { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(_), - .. - }) = left.as_ref() - { + if left.is_string_literal_expr() { checker .diagnostics .push(Diagnostic::new(PrintfInGetTextFuncCall {}, first.range())); diff --git a/crates/ruff_linter/src/rules/flake8_implicit_str_concat/rules/explicit.rs b/crates/ruff_linter/src/rules/flake8_implicit_str_concat/rules/explicit.rs index 6934e720ac697..2853e02c1a46e 100644 --- a/crates/ruff_linter/src/rules/flake8_implicit_str_concat/rules/explicit.rs +++ b/crates/ruff_linter/src/rules/flake8_implicit_str_concat/rules/explicit.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Expr, Operator}; +use ruff_python_ast::{self as ast, Expr, Operator}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -51,18 +51,10 @@ pub(crate) fn explicit(expr: &Expr, locator: &Locator) -> Option { if matches!(op, Operator::Add) { if matches!( left.as_ref(), - Expr::FString(_) - | Expr::Constant(ast::ExprConstant { - value: Constant::Str(..) | Constant::Bytes(..), - .. - }) + Expr::FString(_) | Expr::StringLiteral(_) | Expr::BytesLiteral(_) ) && matches!( right.as_ref(), - Expr::FString(_) - | Expr::Constant(ast::ExprConstant { - value: Constant::Str(..) | Constant::Bytes(..), - .. - }) + Expr::FString(_) | Expr::StringLiteral(_) | Expr::BytesLiteral(_) ) && locator.contains_line_break(*range) { return Some(Diagnostic::new(ExplicitStringConcatenation, expr.range())); diff --git a/crates/ruff_linter/src/rules/flake8_logging_format/rules/logging_call.rs b/crates/ruff_linter/src/rules/flake8_logging_format/rules/logging_call.rs index 2074f5cc8588b..4b214fffec95f 100644 --- a/crates/ruff_linter/src/rules/flake8_logging_format/rules/logging_call.rs +++ b/crates/ruff_linter/src/rules/flake8_logging_format/rules/logging_call.rs @@ -1,5 +1,5 @@ use ruff_diagnostics::{Diagnostic, Edit, Fix}; -use ruff_python_ast::{self as ast, Arguments, Constant, Expr, Keyword, Operator}; +use ruff_python_ast::{self as ast, Arguments, Expr, Keyword, Operator}; use ruff_python_semantic::analyze::logging; use ruff_python_stdlib::logging::LoggingLevel; use ruff_text_size::Ranged; @@ -74,7 +74,7 @@ fn check_msg(checker: &mut Checker, msg: &Expr) { Expr::Call(ast::ExprCall { func, .. }) => { if checker.enabled(Rule::LoggingStringFormat) { if let Expr::Attribute(ast::ExprAttribute { value, attr, .. }) = func.as_ref() { - if attr == "format" && value.is_constant_expr() { + if attr == "format" && value.is_literal_expr() { checker .diagnostics .push(Diagnostic::new(LoggingStringFormat, msg.range())); @@ -92,11 +92,7 @@ fn check_log_record_attr_clash(checker: &mut Checker, extra: &Keyword) { Expr::Dict(ast::ExprDict { keys, .. }) => { for key in keys { if let Some(key) = &key { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(attr), - .. - }) = key - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value: attr, .. }) = key { if is_reserved_attr(attr) { checker.diagnostics.push(Diagnostic::new( LoggingExtraAttrClash(attr.to_string()), diff --git a/crates/ruff_linter/src/rules/flake8_pie/rules/unnecessary_dict_kwargs.rs b/crates/ruff_linter/src/rules/flake8_pie/rules/unnecessary_dict_kwargs.rs index b28000c41b0c9..8a518c88906f4 100644 --- a/crates/ruff_linter/src/rules/flake8_pie/rules/unnecessary_dict_kwargs.rs +++ b/crates/ruff_linter/src/rules/flake8_pie/rules/unnecessary_dict_kwargs.rs @@ -1,6 +1,6 @@ use itertools::Itertools; use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; -use ruff_python_ast::{self as ast, Constant, Expr, Keyword}; +use ruff_python_ast::{self as ast, Expr, Keyword}; use ruff_macros::{derive_message_formats, violation}; use ruff_text_size::Ranged; @@ -96,7 +96,7 @@ pub(crate) fn unnecessary_dict_kwargs(checker: &mut Checker, expr: &Expr, kwargs .iter() .zip(values.iter()) .map(|(kwarg, value)| { - format!("{}={}", kwarg.value, checker.locator().slice(value.range())) + format!("{}={}", kwarg, checker.locator().slice(value.range())) }) .join(", "), kw.range(), @@ -108,12 +108,8 @@ pub(crate) fn unnecessary_dict_kwargs(checker: &mut Checker, expr: &Expr, kwargs } /// Return `Some` if a key is a valid keyword argument name, or `None` otherwise. -fn as_kwarg(key: &Expr) -> Option<&ast::StringConstant> { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), - .. - }) = key - { +fn as_kwarg(key: &Expr) -> Option<&str> { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = key { if is_identifier(value) { return Some(value); } diff --git a/crates/ruff_linter/src/rules/flake8_pie/rules/unnecessary_range_start.rs b/crates/ruff_linter/src/rules/flake8_pie/rules/unnecessary_range_start.rs index 1bc2bd1cf7923..2ddcb313c9a69 100644 --- a/crates/ruff_linter/src/rules/flake8_pie/rules/unnecessary_range_start.rs +++ b/crates/ruff_linter/src/rules/flake8_pie/rules/unnecessary_range_start.rs @@ -1,7 +1,7 @@ use ruff_diagnostics::Diagnostic; use ruff_diagnostics::{AlwaysFixableViolation, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -65,8 +65,8 @@ pub(crate) fn unnecessary_range_start(checker: &mut Checker, call: &ast::ExprCal }; // Verify that the `start` argument is the literal `0`. - let Expr::Constant(ast::ExprConstant { - value: Constant::Int(value), + let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(value), .. }) = start else { diff --git a/crates/ruff_linter/src/rules/flake8_pyi/rules/docstring_in_stubs.rs b/crates/ruff_linter/src/rules/flake8_pyi/rules/docstring_in_stubs.rs index 38d06d0335c48..65c092a3f5471 100644 --- a/crates/ruff_linter/src/rules/flake8_pyi/rules/docstring_in_stubs.rs +++ b/crates/ruff_linter/src/rules/flake8_pyi/rules/docstring_in_stubs.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::Expr; +use ruff_python_ast::ExprStringLiteral; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -36,8 +36,8 @@ impl Violation for DocstringInStub { } /// PYI021 -pub(crate) fn docstring_in_stubs(checker: &mut Checker, docstring: Option<&Expr>) { - if let Some(docstr) = &docstring { +pub(crate) fn docstring_in_stubs(checker: &mut Checker, docstring: Option<&ExprStringLiteral>) { + if let Some(docstr) = docstring { checker .diagnostics .push(Diagnostic::new(DocstringInStub, docstr.range())); diff --git a/crates/ruff_linter/src/rules/flake8_pyi/rules/ellipsis_in_non_empty_class_body.rs b/crates/ruff_linter/src/rules/flake8_pyi/rules/ellipsis_in_non_empty_class_body.rs index 6afb063a4ab4d..4ad5b51f7a916 100644 --- a/crates/ruff_linter/src/rules/flake8_pyi/rules/ellipsis_in_non_empty_class_body.rs +++ b/crates/ruff_linter/src/rules/flake8_pyi/rules/ellipsis_in_non_empty_class_body.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{Constant, Expr, ExprConstant, Stmt, StmtExpr}; +use ruff_python_ast::{Stmt, StmtExpr}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -54,13 +54,7 @@ pub(crate) fn ellipsis_in_non_empty_class_body(checker: &mut Checker, body: &[St continue; }; - if matches!( - value.as_ref(), - Expr::Constant(ExprConstant { - value: Constant::Ellipsis, - .. - }) - ) { + if value.is_ellipsis_literal_expr() { let mut diagnostic = Diagnostic::new(EllipsisInNonEmptyClassBody, stmt.range()); let edit = fix::edits::delete_stmt(stmt, Some(stmt), checker.locator(), checker.indexer()); diff --git a/crates/ruff_linter/src/rules/flake8_pyi/rules/non_empty_stub_body.rs b/crates/ruff_linter/src/rules/flake8_pyi/rules/non_empty_stub_body.rs index 55827e066515d..2eae1f7b75d23 100644 --- a/crates/ruff_linter/src/rules/flake8_pyi/rules/non_empty_stub_body.rs +++ b/crates/ruff_linter/src/rules/flake8_pyi/rules/non_empty_stub_body.rs @@ -1,7 +1,7 @@ use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::is_docstring_stmt; -use ruff_python_ast::{self as ast, Expr, Stmt}; +use ruff_python_ast::{self as ast, Stmt}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -60,10 +60,8 @@ pub(crate) fn non_empty_stub_body(checker: &mut Checker, body: &[Stmt]) { // Ignore `...` (the desired case). if let Stmt::Expr(ast::StmtExpr { value, range: _ }) = stmt { - if let Expr::Constant(ast::ExprConstant { value, .. }) = value.as_ref() { - if value.is_ellipsis() { - return; - } + if value.is_ellipsis_literal_expr() { + return; } } diff --git a/crates/ruff_linter/src/rules/flake8_pyi/rules/redundant_literal_union.rs b/crates/ruff_linter/src/rules/flake8_pyi/rules/redundant_literal_union.rs index dcd080c66a5e6..6523cae84a18e 100644 --- a/crates/ruff_linter/src/rules/flake8_pyi/rules/redundant_literal_union.rs +++ b/crates/ruff_linter/src/rules/flake8_pyi/rules/redundant_literal_union.rs @@ -1,7 +1,6 @@ use rustc_hash::FxHashSet; use std::fmt; -use ast::Constant; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::{self as ast, Expr}; @@ -147,14 +146,15 @@ fn match_builtin_type(expr: &Expr, semantic: &SemanticModel) -> Option /// Return the [`ExprType`] of an [`Expr]` if it is a constant (e.g., an `int`, like `1`, or a /// `bool`, like `True`). fn match_constant_type(expr: &Expr) -> Option { - let constant = expr.as_constant_expr()?; - let result = match constant.value { - Constant::Bool(_) => ExprType::Bool, - Constant::Str(_) => ExprType::Str, - Constant::Bytes(_) => ExprType::Bytes, - Constant::Int(_) => ExprType::Int, - Constant::Float(_) => ExprType::Float, - Constant::Complex { .. } => ExprType::Complex, + let result = match expr { + Expr::BooleanLiteral(_) => ExprType::Bool, + Expr::StringLiteral(_) => ExprType::Str, + Expr::BytesLiteral(_) => ExprType::Bytes, + Expr::NumberLiteral(ast::ExprNumberLiteral { value, .. }) => match value { + ast::Number::Int(_) => ExprType::Int, + ast::Number::Float(_) => ExprType::Float, + ast::Number::Complex { .. } => ExprType::Complex, + }, _ => return None, }; Some(result) diff --git a/crates/ruff_linter/src/rules/flake8_pyi/rules/simple_defaults.rs b/crates/ruff_linter/src/rules/flake8_pyi/rules/simple_defaults.rs index dd93d496138c4..cd78602a7e717 100644 --- a/crates/ruff_linter/src/rules/flake8_pyi/rules/simple_defaults.rs +++ b/crates/ruff_linter/src/rules/flake8_pyi/rules/simple_defaults.rs @@ -2,8 +2,7 @@ use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix, Violation} use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::call_path::CallPath; use ruff_python_ast::{ - self as ast, Arguments, Constant, Expr, Operator, ParameterWithDefault, Parameters, Stmt, - UnaryOp, + self as ast, Arguments, Expr, Operator, ParameterWithDefault, Parameters, Stmt, UnaryOp, }; use ruff_python_semantic::{ScopeKind, SemanticModel}; use ruff_source_file::Locator; @@ -282,7 +281,12 @@ fn is_valid_default_value_with_annotation( semantic: &SemanticModel, ) -> bool { match default { - Expr::Constant(_) => { + Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) => { return true; } Expr::List(ast::ExprList { elts, .. }) @@ -314,10 +318,7 @@ fn is_valid_default_value_with_annotation( }) => { match operand.as_ref() { // Ex) `-1`, `-3.14`, `2j` - Expr::Constant(ast::ExprConstant { - value: Constant::Int(..) | Constant::Float(..) | Constant::Complex { .. }, - .. - }) => return true, + Expr::NumberLiteral(_) => return true, // Ex) `-math.inf`, `-math.pi`, etc. Expr::Attribute(_) => { if semantic @@ -338,14 +339,14 @@ fn is_valid_default_value_with_annotation( range: _, }) => { // Ex) `1 + 2j`, `1 - 2j`, `-1 - 2j`, `-1 + 2j` - if let Expr::Constant(ast::ExprConstant { - value: Constant::Complex { .. }, + if let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Complex { .. }, .. }) = right.as_ref() { // Ex) `1 + 2j`, `1 - 2j` - if let Expr::Constant(ast::ExprConstant { - value: Constant::Int(..) | Constant::Float(..), + if let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(..) | ast::Number::Float(..), .. }) = left.as_ref() { @@ -357,8 +358,8 @@ fn is_valid_default_value_with_annotation( }) = left.as_ref() { // Ex) `-1 + 2j`, `-1 - 2j` - if let Expr::Constant(ast::ExprConstant { - value: Constant::Int(..) | Constant::Float(..), + if let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(..) | ast::Number::Float(..), .. }) = operand.as_ref() { @@ -393,13 +394,7 @@ fn is_valid_pep_604_union(annotation: &Expr) -> bool { right, range: _, }) => is_valid_pep_604_union_member(left) && is_valid_pep_604_union_member(right), - Expr::Name(_) - | Expr::Subscript(_) - | Expr::Attribute(_) - | Expr::Constant(ast::ExprConstant { - value: Constant::None, - .. - }) => true, + Expr::Name(_) | Expr::Subscript(_) | Expr::Attribute(_) | Expr::NoneLiteral(_) => true, _ => false, } } @@ -427,10 +422,8 @@ fn is_valid_default_value_without_annotation(default: &Expr) -> bool { | Expr::Name(_) | Expr::Attribute(_) | Expr::Subscript(_) - | Expr::Constant(ast::ExprConstant { - value: Constant::Ellipsis | Constant::None, - .. - }) + | Expr::EllipsisLiteral(_) + | Expr::NoneLiteral(_) ) || is_valid_pep_604_union(default) } @@ -499,14 +492,8 @@ fn is_enum(arguments: Option<&Arguments>, semantic: &SemanticModel) -> bool { /// valid type alias. In particular, this function checks for uses of `typing.Any`, `None`, /// parameterized generics, and PEP 604-style unions. fn is_annotatable_type_alias(value: &Expr, semantic: &SemanticModel) -> bool { - matches!( - value, - Expr::Subscript(_) - | Expr::Constant(ast::ExprConstant { - value: Constant::None, - .. - }), - ) || is_valid_pep_604_union(value) + matches!(value, Expr::Subscript(_) | Expr::NoneLiteral(_)) + || is_valid_pep_604_union(value) || semantic.match_typing_expr(value, "Any") } diff --git a/crates/ruff_linter/src/rules/flake8_pyi/rules/string_or_bytes_too_long.rs b/crates/ruff_linter/src/rules/flake8_pyi/rules/string_or_bytes_too_long.rs index 2ad818501c3a4..d8fa801c942f9 100644 --- a/crates/ruff_linter/src/rules/flake8_pyi/rules/string_or_bytes_too_long.rs +++ b/crates/ruff_linter/src/rules/flake8_pyi/rules/string_or_bytes_too_long.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; @@ -51,14 +51,8 @@ pub(crate) fn string_or_bytes_too_long(checker: &mut Checker, expr: &Expr) { } let length = match expr { - Expr::Constant(ast::ExprConstant { - value: Constant::Str(s), - .. - }) => s.chars().count(), - Expr::Constant(ast::ExprConstant { - value: Constant::Bytes(bytes), - .. - }) => bytes.len(), + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => value.chars().count(), + Expr::BytesLiteral(ast::ExprBytesLiteral { value, .. }) => value.len(), _ => return, }; if length <= 50 { diff --git a/crates/ruff_linter/src/rules/flake8_pyi/rules/unrecognized_platform.rs b/crates/ruff_linter/src/rules/flake8_pyi/rules/unrecognized_platform.rs index 5793c24ae498b..dc84fdffa10f8 100644 --- a/crates/ruff_linter/src/rules/flake8_pyi/rules/unrecognized_platform.rs +++ b/crates/ruff_linter/src/rules/flake8_pyi/rules/unrecognized_platform.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, CmpOp, Constant, Expr}; +use ruff_python_ast::{self as ast, CmpOp, Expr}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -123,11 +123,7 @@ pub(crate) fn unrecognized_platform(checker: &mut Checker, test: &Expr) { return; } - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - }) = right - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = right { // Other values are possible but we don't need them right now. // This protects against typos. if checker.enabled(Rule::UnrecognizedPlatformName) { diff --git a/crates/ruff_linter/src/rules/flake8_pyi/rules/unrecognized_version_info.rs b/crates/ruff_linter/src/rules/flake8_pyi/rules/unrecognized_version_info.rs index 3d9a743f84510..223575db971ae 100644 --- a/crates/ruff_linter/src/rules/flake8_pyi/rules/unrecognized_version_info.rs +++ b/crates/ruff_linter/src/rules/flake8_pyi/rules/unrecognized_version_info.rs @@ -1,7 +1,7 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::map_subscript; -use ruff_python_ast::{self as ast, CmpOp, Constant, Expr, Int}; +use ruff_python_ast::{self as ast, CmpOp, Expr, Int}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -241,8 +241,8 @@ impl ExpectedComparator { step: None, .. }) => { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Int(upper), + if let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(upper), .. }) = upper.as_ref() { @@ -254,8 +254,8 @@ impl ExpectedComparator { } } } - Expr::Constant(ast::ExprConstant { - value: Constant::Int(Int::ZERO), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(Int::ZERO), .. }) => { return Some(ExpectedComparator::MajorDigit); @@ -271,8 +271,8 @@ impl ExpectedComparator { fn is_int_constant(expr: &Expr) -> bool { matches!( expr, - Expr::Constant(ast::ExprConstant { - value: ast::Constant::Int(_), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(_), .. }) ) diff --git a/crates/ruff_linter/src/rules/flake8_pytest_style/rules/helpers.rs b/crates/ruff_linter/src/rules/flake8_pytest_style/rules/helpers.rs index 43c066ff65e00..e618fa3b5f018 100644 --- a/crates/ruff_linter/src/rules/flake8_pytest_style/rules/helpers.rs +++ b/crates/ruff_linter/src/rules/flake8_pytest_style/rules/helpers.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Decorator, Expr, Keyword}; +use ruff_python_ast::{self as ast, Decorator, Expr, Keyword}; use ruff_python_ast::call_path::collect_call_path; use ruff_python_ast::helpers::map_callable; @@ -44,11 +44,7 @@ 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(ast::StringConstant { value, .. }), - .. - }) = &keyword.value - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = &keyword.value { value == literal } else { false @@ -57,11 +53,8 @@ pub(super) fn keyword_is_literal(keyword: &Keyword, literal: &str) -> bool { pub(super) fn is_empty_or_null_string(expr: &Expr) -> bool { match expr { - Expr::Constant(ast::ExprConstant { - value: Constant::Str(string), - .. - }) => string.is_empty(), - Expr::Constant(constant) if constant.value.is_none() => true, + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => value.is_empty(), + Expr::NoneLiteral(_) => true, Expr::FString(ast::ExprFString { values, .. }) => { values.iter().all(is_empty_or_null_string) } diff --git a/crates/ruff_linter/src/rules/flake8_pytest_style/rules/parametrize.rs b/crates/ruff_linter/src/rules/flake8_pytest_style/rules/parametrize.rs index 4ab938ffef5cc..cd943e243458e 100644 --- a/crates/ruff_linter/src/rules/flake8_pytest_style/rules/parametrize.rs +++ b/crates/ruff_linter/src/rules/flake8_pytest_style/rules/parametrize.rs @@ -7,7 +7,7 @@ use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::comparable::ComparableExpr; use ruff_python_ast::parenthesize::parenthesized_range; use ruff_python_ast::AstNode; -use ruff_python_ast::{self as ast, Arguments, Constant, Decorator, Expr, ExprContext}; +use ruff_python_ast::{self as ast, Arguments, Decorator, Expr, ExprContext}; use ruff_python_codegen::Generator; use ruff_python_trivia::CommentRanges; use ruff_python_trivia::{SimpleTokenKind, SimpleTokenizer}; @@ -248,37 +248,22 @@ impl Violation for PytestDuplicateParametrizeTestCases { } fn elts_to_csv(elts: &[Expr], generator: Generator) -> Option { - let all_literals = elts.iter().all(|expr| { - matches!( - expr, - Expr::Constant(ast::ExprConstant { - value: Constant::Str(_), - .. - }) - ) - }); - - if !all_literals { + if !elts.iter().all(Expr::is_string_literal_expr) { return None; } - let node = Expr::Constant(ast::ExprConstant { - 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()); + let node = Expr::StringLiteral(ast::ExprStringLiteral { + value: elts.iter().fold(String::new(), |mut acc, elt| { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = elt { + if !acc.is_empty() { + acc.push(','); } - acc - }) - .into(), + acc.push_str(value.as_str()); + } + acc + }), + unicode: false, + implicit_concatenated: false, range: TextRange::default(), }); Some(generator.expr(&node)) @@ -317,10 +302,7 @@ fn check_names(checker: &mut Checker, decorator: &Decorator, expr: &Expr) { let names_type = checker.settings.flake8_pytest_style.parametrize_names_type; match expr { - Expr::Constant(ast::ExprConstant { - value: Constant::Str(string), - .. - }) => { + Expr::StringLiteral(ast::ExprStringLiteral { value: string, .. }) => { let names = split_names(string); if names.len() > 1 { match names_type { @@ -342,8 +324,10 @@ fn check_names(checker: &mut Checker, decorator: &Decorator, expr: &Expr) { elts: names .iter() .map(|name| { - Expr::Constant(ast::ExprConstant { - value: (*name).to_string().into(), + Expr::StringLiteral(ast::ExprStringLiteral { + value: (*name).to_string(), + unicode: false, + implicit_concatenated: false, range: TextRange::default(), }) }) @@ -375,8 +359,10 @@ fn check_names(checker: &mut Checker, decorator: &Decorator, expr: &Expr) { elts: names .iter() .map(|name| { - Expr::Constant(ast::ExprConstant { - value: (*name).to_string().into(), + Expr::StringLiteral(ast::ExprStringLiteral { + value: (*name).to_string(), + unicode: false, + implicit_concatenated: false, range: TextRange::default(), }) }) @@ -495,15 +481,12 @@ fn check_values(checker: &mut Checker, names: &Expr, values: &Expr) { .flake8_pytest_style .parametrize_values_row_type; - let is_multi_named = if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(string), - .. - }) = &names - { - split_names(string).len() > 1 - } else { - true - }; + let is_multi_named = + if let Expr::StringLiteral(ast::ExprStringLiteral { value: string, .. }) = &names { + split_names(string).len() > 1 + } else { + true + }; match values { Expr::List(ast::ExprList { elts, .. }) => { diff --git a/crates/ruff_linter/src/rules/flake8_pytest_style/rules/unittest_assert.rs b/crates/ruff_linter/src/rules/flake8_pytest_style/rules/unittest_assert.rs index 5dcbf58f2e0dc..92ac5389b5671 100644 --- a/crates/ruff_linter/src/rules/flake8_pytest_style/rules/unittest_assert.rs +++ b/crates/ruff_linter/src/rules/flake8_pytest_style/rules/unittest_assert.rs @@ -2,7 +2,7 @@ use std::hash::BuildHasherDefault; use anyhow::{anyhow, bail, Result}; use ruff_python_ast::{ - self as ast, Arguments, CmpOp, Constant, Expr, ExprContext, Identifier, Keyword, Stmt, UnaryOp, + self as ast, Arguments, CmpOp, Expr, ExprContext, Identifier, Keyword, Stmt, UnaryOp, }; use ruff_text_size::TextRange; use rustc_hash::FxHashMap; @@ -368,8 +368,7 @@ impl UnittestAssert { } else { CmpOp::IsNot }; - let node = Expr::Constant(ast::ExprConstant { - value: Constant::None, + let node = Expr::NoneLiteral(ast::ExprNoneLiteral { range: TextRange::default(), }); let expr = compare(expr, cmp_op, &node); diff --git a/crates/ruff_linter/src/rules/flake8_return/helpers.rs b/crates/ruff_linter/src/rules/flake8_return/helpers.rs index 6b7f185b7d283..4b99eae88d0b0 100644 --- a/crates/ruff_linter/src/rules/flake8_return/helpers.rs +++ b/crates/ruff_linter/src/rules/flake8_return/helpers.rs @@ -1,5 +1,5 @@ use ruff_python_ast as ast; -use ruff_python_ast::{Expr, Stmt}; +use ruff_python_ast::Stmt; use ruff_text_size::{Ranged, TextSize}; use ruff_source_file::{Locator, UniversalNewlines}; @@ -8,12 +8,9 @@ use ruff_source_file::{Locator, UniversalNewlines}; /// non-`None` value. pub(super) fn result_exists(returns: &[&ast::StmtReturn]) -> bool { returns.iter().any(|stmt| { - stmt.value.as_deref().is_some_and(|value| { - !matches!( - value, - Expr::Constant(constant) if constant.value.is_none() - ) - }) + stmt.value + .as_deref() + .is_some_and(|value| !value.is_none_literal_expr()) }) } diff --git a/crates/ruff_linter/src/rules/flake8_simplify/rules/ast_expr.rs b/crates/ruff_linter/src/rules/flake8_simplify/rules/ast_expr.rs index 511a0e373b9a3..0a4cdb82c8862 100644 --- a/crates/ruff_linter/src/rules/flake8_simplify/rules/ast_expr.rs +++ b/crates/ruff_linter/src/rules/flake8_simplify/rules/ast_expr.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Arguments, Constant, Expr}; +use ruff_python_ast::{self as ast, Arguments, Expr}; use ruff_text_size::{Ranged, TextRange}; use crate::fix::snippet::SourceCodeSnippet; @@ -139,11 +139,7 @@ pub(crate) fn use_capital_environment_variables(checker: &mut Checker, expr: &Ex let Some(arg) = args.get(0) else { return; }; - let Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value: env_var, .. }), - .. - }) = arg - else { + let Expr::StringLiteral(ast::ExprStringLiteral { value: env_var, .. }) = arg else { return; }; if !checker @@ -195,14 +191,10 @@ fn check_os_environ_subscript(checker: &mut Checker, expr: &Expr) { if id != "os" || attr != "environ" { return; } - let Expr::Constant(ast::ExprConstant { - value: - Constant::Str(ast::StringConstant { - value: env_var, - unicode, - .. - }), - range: _, + let Expr::StringLiteral(ast::ExprStringLiteral { + value: env_var, + unicode, + .. }) = slice.as_ref() else { return; @@ -224,12 +216,10 @@ fn check_os_environ_subscript(checker: &mut Checker, expr: &Expr) { }, slice.range(), ); - let node = ast::ExprConstant { - value: ast::Constant::Str(ast::StringConstant { - value: capital_env_var, - unicode: *unicode, - implicit_concatenated: false, - }), + let node = ast::ExprStringLiteral { + value: capital_env_var, + unicode: *unicode, + implicit_concatenated: false, range: TextRange::default(), }; let new_env_var = node.into(); @@ -265,7 +255,7 @@ pub(crate) fn dict_get_with_none_default(checker: &mut Checker, expr: &Expr) { let Some(key) = args.get(0) else { return; }; - if !matches!(key, Expr::Constant(_) | Expr::Name(_)) { + if !(key.is_literal_expr() || key.is_name_expr()) { return; } let Some(default) = args.get(1) else { diff --git a/crates/ruff_linter/src/rules/flake8_simplify/rules/collapsible_if.rs b/crates/ruff_linter/src/rules/flake8_simplify/rules/collapsible_if.rs index 584c8c4182a2c..f382996cbe2b8 100644 --- a/crates/ruff_linter/src/rules/flake8_simplify/rules/collapsible_if.rs +++ b/crates/ruff_linter/src/rules/flake8_simplify/rules/collapsible_if.rs @@ -7,7 +7,7 @@ use log::error; use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::AnyNodeRef; -use ruff_python_ast::{self as ast, whitespace, Constant, ElifElseClause, Expr, Stmt}; +use ruff_python_ast::{self as ast, whitespace, ElifElseClause, Expr, Stmt}; use ruff_python_codegen::Stylist; use ruff_python_semantic::analyze::typing::{is_sys_version_block, is_type_checking_block}; use ruff_python_trivia::{SimpleTokenKind, SimpleTokenizer}; @@ -212,13 +212,7 @@ fn nested_if_body(stmt_if: &ast::StmtIf) -> Option { } // Allow `if True:` and `if False:` statements. - if matches!( - test, - Expr::Constant(ast::ExprConstant { - value: Constant::Bool(..), - .. - }) - ) { + if test.is_boolean_literal_expr() { return None; } @@ -259,10 +253,8 @@ fn is_main_check(expr: &Expr) -> bool { { if let Expr::Name(ast::ExprName { id, .. }) = left.as_ref() { if id == "__name__" { - if let [Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - })] = comparators.as_slice() + if let [Expr::StringLiteral(ast::ExprStringLiteral { value, .. })] = + comparators.as_slice() { if value == "__main__" { return true; diff --git a/crates/ruff_linter/src/rules/flake8_simplify/rules/if_else_block_instead_of_dict_lookup.rs b/crates/ruff_linter/src/rules/flake8_simplify/rules/if_else_block_instead_of_dict_lookup.rs index f5fc09c2c0d66..a3e70c0ca6007 100644 --- a/crates/ruff_linter/src/rules/flake8_simplify/rules/if_else_block_instead_of_dict_lookup.rs +++ b/crates/ruff_linter/src/rules/flake8_simplify/rules/if_else_block_instead_of_dict_lookup.rs @@ -2,7 +2,7 @@ use rustc_hash::FxHashSet; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::comparable::ComparableConstant; +use ruff_python_ast::comparable::ComparableExpr; use ruff_python_ast::helpers::contains_effect; use ruff_python_ast::{self as ast, CmpOp, ElifElseClause, Expr, Stmt}; use ruff_python_semantic::analyze::typing::{is_sys_version_block, is_type_checking_block}; @@ -67,12 +67,12 @@ pub(crate) fn if_else_block_instead_of_dict_lookup(checker: &mut Checker, stmt_i if ops != &[CmpOp::Eq] { return; } - let [Expr::Constant(ast::ExprConstant { - value: constant, .. - })] = comparators.as_slice() - else { + let [expr] = comparators.as_slice() else { return; }; + if !expr.is_literal_expr() { + return; + } let [Stmt::Return(ast::StmtReturn { value, range: _ })] = body.as_slice() else { return; }; @@ -94,8 +94,9 @@ pub(crate) fn if_else_block_instead_of_dict_lookup(checker: &mut Checker, stmt_i return; } - let mut constants: FxHashSet = FxHashSet::default(); - constants.insert(constant.into()); + // The `expr` was checked to be a literal above, so this is safe. + let mut literals: FxHashSet = FxHashSet::default(); + literals.insert(expr.into()); for clause in elif_else_clauses { let ElifElseClause { test, body, .. } = clause; @@ -129,12 +130,12 @@ pub(crate) fn if_else_block_instead_of_dict_lookup(checker: &mut Checker, stmt_i if id != target || ops != &[CmpOp::Eq] { return; } - let [Expr::Constant(ast::ExprConstant { - value: constant, .. - })] = comparators.as_slice() - else { + let [expr] = comparators.as_slice() else { return; }; + if !expr.is_literal_expr() { + return; + } if value.as_ref().is_some_and(|value| { contains_effect(value, |id| checker.semantic().is_builtin(id)) @@ -142,7 +143,8 @@ pub(crate) fn if_else_block_instead_of_dict_lookup(checker: &mut Checker, stmt_i return; }; - constants.insert(constant.into()); + // The `expr` was checked to be a literal above, so this is safe. + literals.insert(expr.into()); } // Different `elif` _ => { @@ -151,7 +153,7 @@ pub(crate) fn if_else_block_instead_of_dict_lookup(checker: &mut Checker, stmt_i } } - if constants.len() < 3 { + if literals.len() < 3 { return; } diff --git a/crates/ruff_linter/src/rules/flake8_simplify/rules/needless_bool.rs b/crates/ruff_linter/src/rules/flake8_simplify/rules/needless_bool.rs index 783dfe4fb55aa..4a7d6bedc6f23 100644 --- a/crates/ruff_linter/src/rules/flake8_simplify/rules/needless_bool.rs +++ b/crates/ruff_linter/src/rules/flake8_simplify/rules/needless_bool.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Arguments, Constant, ElifElseClause, Expr, ExprContext, Stmt}; +use ruff_python_ast::{self as ast, Arguments, ElifElseClause, Expr, ExprContext, Stmt}; use ruff_python_semantic::analyze::typing::{is_sys_version_block, is_type_checking_block}; use ruff_text_size::{Ranged, TextRange}; @@ -176,10 +176,7 @@ fn is_one_line_return_bool(stmts: &[Stmt]) -> Option { let Stmt::Return(ast::StmtReturn { value, range: _ }) = stmt else { return None; }; - let Some(Expr::Constant(ast::ExprConstant { value, .. })) = value.as_deref() else { - return None; - }; - let Constant::Bool(value) = value else { + let Some(Expr::BooleanLiteral(ast::ExprBooleanLiteral { value, .. })) = value.as_deref() else { return None; }; Some((*value).into()) diff --git a/crates/ruff_linter/src/rules/flake8_simplify/rules/reimplemented_builtin.rs b/crates/ruff_linter/src/rules/flake8_simplify/rules/reimplemented_builtin.rs index 53e911e297779..4362112ccfb71 100644 --- a/crates/ruff_linter/src/rules/flake8_simplify/rules/reimplemented_builtin.rs +++ b/crates/ruff_linter/src/rules/flake8_simplify/rules/reimplemented_builtin.rs @@ -3,7 +3,7 @@ use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::any_over_expr; use ruff_python_ast::traversal; use ruff_python_ast::{ - self as ast, Arguments, CmpOp, Comprehension, Constant, Expr, ExprContext, Stmt, UnaryOp, + self as ast, Arguments, CmpOp, Comprehension, Expr, ExprContext, Stmt, UnaryOp, }; use ruff_python_codegen::Generator; use ruff_text_size::{Ranged, TextRange}; @@ -280,11 +280,7 @@ fn match_loop(stmt: &Stmt) -> Option { let Some(value) = value else { return None; }; - let Expr::Constant(ast::ExprConstant { - value: Constant::Bool(value), - .. - }) = value.as_ref() - else { + let Expr::BooleanLiteral(ast::ExprBooleanLiteral { value, .. }) = value.as_ref() else { return None; }; @@ -319,9 +315,8 @@ fn match_else_return(stmt: &Stmt) -> Option { else { return None; }; - let Expr::Constant(ast::ExprConstant { - value: Constant::Bool(next_value), - .. + let Expr::BooleanLiteral(ast::ExprBooleanLiteral { + value: next_value, .. }) = next_value.as_ref() else { return None; @@ -362,9 +357,8 @@ fn match_sibling_return<'a>(stmt: &'a Stmt, sibling: &'a Stmt) -> Option bool { match body { [Stmt::Pass(_)] => true, - [Stmt::Expr(ast::StmtExpr { value, range: _ })] => matches!( - value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Ellipsis, - .. - }) - ), + [Stmt::Expr(ast::StmtExpr { value, range: _ })] => value.is_ellipsis_literal_expr(), _ => false, } } diff --git a/crates/ruff_linter/src/rules/flake8_simplify/rules/yoda_conditions.rs b/crates/ruff_linter/src/rules/flake8_simplify/rules/yoda_conditions.rs index f58c2f165255b..c196823de7378 100644 --- a/crates/ruff_linter/src/rules/flake8_simplify/rules/yoda_conditions.rs +++ b/crates/ruff_linter/src/rules/flake8_simplify/rules/yoda_conditions.rs @@ -82,15 +82,14 @@ impl Violation for YodaConditions { fn is_constant_like(expr: &Expr) -> bool { match expr { Expr::Attribute(ast::ExprAttribute { attr, .. }) => str::is_cased_uppercase(attr), - Expr::Constant(_) => true, Expr::Tuple(ast::ExprTuple { elts, .. }) => elts.iter().all(is_constant_like), Expr::Name(ast::ExprName { id, .. }) => str::is_cased_uppercase(id), Expr::UnaryOp(ast::ExprUnaryOp { op: UnaryOp::UAdd | UnaryOp::USub | UnaryOp::Invert, operand, range: _, - }) => operand.is_constant_expr(), - _ => false, + }) => operand.is_literal_expr(), + _ => expr.is_literal_expr(), } } diff --git a/crates/ruff_linter/src/rules/flake8_unused_arguments/helpers.rs b/crates/ruff_linter/src/rules/flake8_unused_arguments/helpers.rs index 5b90db881d8e6..4a1b6a3a8f75d 100644 --- a/crates/ruff_linter/src/rules/flake8_unused_arguments/helpers.rs +++ b/crates/ruff_linter/src/rules/flake8_unused_arguments/helpers.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Expr, Stmt}; +use ruff_python_ast::{self as ast, Expr, Stmt}; use ruff_python_ast::helpers::is_docstring_stmt; @@ -7,15 +7,7 @@ use ruff_python_ast::helpers::is_docstring_stmt; fn is_empty_stmt(stmt: &Stmt) -> bool { match stmt { Stmt::Pass(_) => return true, - Stmt::Expr(ast::StmtExpr { value, range: _ }) => { - return matches!( - value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Ellipsis, - .. - }) - ) - } + Stmt::Expr(ast::StmtExpr { value, range: _ }) => return value.is_ellipsis_literal_expr(), Stmt::Raise(ast::StmtRaise { exc, cause, .. }) => { if cause.is_none() { if let Some(exc) = exc { diff --git a/crates/ruff_linter/src/rules/flake8_use_pathlib/rules/path_constructor_current_directory.rs b/crates/ruff_linter/src/rules/flake8_use_pathlib/rules/path_constructor_current_directory.rs index b85bba684e10c..0fc1cbee681de 100644 --- a/crates/ruff_linter/src/rules/flake8_use_pathlib/rules/path_constructor_current_directory.rs +++ b/crates/ruff_linter/src/rules/flake8_use_pathlib/rules/path_constructor_current_directory.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Arguments, Constant, Expr, ExprCall, ExprConstant}; +use ruff_python_ast::{self as ast, Arguments, Expr, ExprCall}; use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; @@ -65,11 +65,7 @@ pub(crate) fn path_constructor_current_directory(checker: &mut Checker, expr: &E return; } - let [Expr::Constant(ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - range, - })] = args.as_slice() - else { + let [Expr::StringLiteral(ast::ExprStringLiteral { value, range, .. })] = args.as_slice() else { return; }; diff --git a/crates/ruff_linter/src/rules/flake8_use_pathlib/rules/replaceable_by_pathlib.rs b/crates/ruff_linter/src/rules/flake8_use_pathlib/rules/replaceable_by_pathlib.rs index 18d14b091f90c..175a8e6292007 100644 --- a/crates/ruff_linter/src/rules/flake8_use_pathlib/rules/replaceable_by_pathlib.rs +++ b/crates/ruff_linter/src/rules/flake8_use_pathlib/rules/replaceable_by_pathlib.rs @@ -1,5 +1,5 @@ use ruff_diagnostics::{Diagnostic, DiagnosticKind}; -use ruff_python_ast::{Constant, Expr, ExprCall, ExprConstant}; +use ruff_python_ast::{Expr, ExprBooleanLiteral, ExprCall}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -118,24 +118,13 @@ pub(crate) fn replaceable_by_pathlib(checker: &mut Checker, call: &ExprCall) { .is_some_and(|expr| { !matches!( expr, - Expr::Constant(ExprConstant { - value: Constant::Bool(true), - .. - }) + Expr::BooleanLiteral(ExprBooleanLiteral { value: true, .. }) ) }) || call .arguments .find_argument("opener", 7) - .is_some_and(|expr| { - !matches!( - expr, - Expr::Constant(ExprConstant { - value: Constant::None, - .. - }) - ) - }) + .is_some_and(|expr| !expr.is_none_literal_expr()) { return None; } diff --git a/crates/ruff_linter/src/rules/flynt/helpers.rs b/crates/ruff_linter/src/rules/flynt/helpers.rs index bc2e18197a0a2..685d90388b037 100644 --- a/crates/ruff_linter/src/rules/flynt/helpers.rs +++ b/crates/ruff_linter/src/rules/flynt/helpers.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Arguments, Constant, ConversionFlag, Expr}; +use ruff_python_ast::{self as ast, Arguments, ConversionFlag, Expr}; use ruff_text_size::TextRange; /// Wrap an expression in a `FormattedValue` with no special formatting. @@ -15,8 +15,10 @@ 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: s.to_owned().into(), + let node = ast::ExprStringLiteral { + value: s.to_owned(), + unicode: false, + implicit_concatenated: false, range: TextRange::default(), }; node.into() @@ -54,20 +56,11 @@ fn is_simple_callee(func: &Expr) -> bool { pub(super) fn to_f_string_element(expr: &Expr) -> Option { match expr { // These are directly handled by `unparse_f_string_element`: - Expr::Constant(ast::ExprConstant { - value: Constant::Str(_), - .. - }) - | Expr::FString(_) - | Expr::FormattedValue(_) => Some(expr.clone()), + Expr::StringLiteral(_) | Expr::FString(_) | Expr::FormattedValue(_) => Some(expr.clone()), // These should be pretty safe to wrap in a formatted value. - Expr::Constant(ast::ExprConstant { - value: - Constant::Int(_) | Constant::Float(_) | Constant::Bool(_) | Constant::Complex { .. }, - .. - }) - | Expr::Name(_) - | Expr::Attribute(_) => Some(to_formatted_value_expr(expr)), + Expr::NumberLiteral(_) | Expr::BooleanLiteral(_) | Expr::Name(_) | Expr::Attribute(_) => { + Some(to_formatted_value_expr(expr)) + } Expr::Call(_) if is_simple_call(expr) => Some(to_formatted_value_expr(expr)), _ => None, } diff --git a/crates/ruff_linter/src/rules/flynt/rules/static_join_to_fstring.rs b/crates/ruff_linter/src/rules/flynt/rules/static_join_to_fstring.rs index 4f4c68c5e7975..8da7a91eb2c49 100644 --- a/crates/ruff_linter/src/rules/flynt/rules/static_join_to_fstring.rs +++ b/crates/ruff_linter/src/rules/flynt/rules/static_join_to_fstring.rs @@ -3,7 +3,7 @@ use itertools::Itertools; use crate::fix::edits::pad; use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Arguments, Constant, Expr}; +use ruff_python_ast::{self as ast, Arguments, Expr}; use ruff_text_size::{Ranged, TextRange}; use crate::checkers::ast::Checker; @@ -61,31 +61,20 @@ fn is_static_length(elts: &[Expr]) -> bool { fn build_fstring(joiner: &str, joinees: &[Expr]) -> Option { // If all elements are string constants, join them into a single string. - if joinees.iter().all(|expr| { - matches!( - expr, - Expr::Constant(ast::ExprConstant { - value: Constant::Str(_), - .. - }) - ) - }) { - let node = ast::ExprConstant { + if joinees.iter().all(Expr::is_string_literal_expr) { + let node = ast::ExprStringLiteral { value: joinees .iter() .filter_map(|expr| { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - }) = expr - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = expr { Some(value.as_str()) } else { None } }) - .join(joiner) - .into(), + .join(joiner), + unicode: false, + implicit_concatenated: false, range: TextRange::default(), }; return Some(node.into()); diff --git a/crates/ruff_linter/src/rules/pandas_vet/helpers.rs b/crates/ruff_linter/src/rules/pandas_vet/helpers.rs index c0952f61afcdb..4dc880e039b38 100644 --- a/crates/ruff_linter/src/rules/pandas_vet/helpers.rs +++ b/crates/ruff_linter/src/rules/pandas_vet/helpers.rs @@ -16,7 +16,12 @@ pub(super) enum Resolution { /// Test an [`Expr`] for relevance to Pandas-related operations. pub(super) fn test_expression(expr: &Expr, semantic: &SemanticModel) -> Resolution { match expr { - Expr::Constant(_) + Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) | Expr::Tuple(_) | Expr::List(_) | Expr::Set(_) diff --git a/crates/ruff_linter/src/rules/pandas_vet/rules/nunique_constant_series_check.rs b/crates/ruff_linter/src/rules/pandas_vet/rules/nunique_constant_series_check.rs index 6be1585fd0bfb..1c8f310442291 100644 --- a/crates/ruff_linter/src/rules/pandas_vet/rules/nunique_constant_series_check.rs +++ b/crates/ruff_linter/src/rules/pandas_vet/rules/nunique_constant_series_check.rs @@ -1,7 +1,7 @@ use ruff_diagnostics::Diagnostic; use ruff_diagnostics::Violation; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, CmpOp, Constant, Expr, Int}; +use ruff_python_ast::{self as ast, CmpOp, Expr, Int}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -80,8 +80,8 @@ pub(crate) fn nunique_constant_series_check( // Right should be the integer 1. if !matches!( right, - Expr::Constant(ast::ExprConstant { - value: Constant::Int(Int::ONE), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(Int::ONE), range: _, }) ) { diff --git a/crates/ruff_linter/src/rules/pandas_vet/rules/read_table.rs b/crates/ruff_linter/src/rules/pandas_vet/rules/read_table.rs index 4d4aafb9ee275..f7b5fa9300e6b 100644 --- a/crates/ruff_linter/src/rules/pandas_vet/rules/read_table.rs +++ b/crates/ruff_linter/src/rules/pandas_vet/rules/read_table.rs @@ -1,7 +1,7 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast as ast; -use ruff_python_ast::{Constant, Expr}; +use ruff_python_ast::Expr; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -51,10 +51,7 @@ pub(crate) fn use_of_read_table(checker: &mut Checker, call: &ast::ExprCall) { .resolve_call_path(&call.func) .is_some_and(|call_path| matches!(call_path.as_slice(), ["pandas", "read_table"])) { - if let Some(Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - })) = call + if let Some(Expr::StringLiteral(ast::ExprStringLiteral { value, .. })) = call .arguments .find_keyword("sep") .map(|keyword| &keyword.value) diff --git a/crates/ruff_linter/src/rules/pycodestyle/rules/lambda_assignment.rs b/crates/ruff_linter/src/rules/pycodestyle/rules/lambda_assignment.rs index 03f8ea988f240..39f0f5b5ca735 100644 --- a/crates/ruff_linter/src/rules/pycodestyle/rules/lambda_assignment.rs +++ b/crates/ruff_linter/src/rules/pycodestyle/rules/lambda_assignment.rs @@ -1,5 +1,5 @@ use ruff_python_ast::{ - self as ast, Constant, Expr, Identifier, Parameter, ParameterWithDefault, Parameters, Stmt, + self as ast, Expr, Identifier, Parameter, ParameterWithDefault, Parameters, Stmt, }; use ruff_text_size::{Ranged, TextRange}; @@ -164,10 +164,7 @@ fn extract_types(annotation: &Expr, semantic: &SemanticModel) -> Option<(Vec elts.clone(), - Expr::Constant(ast::ExprConstant { - value: Constant::Ellipsis, - .. - }) => vec![], + Expr::EllipsisLiteral(_) => vec![], _ => return None, }; diff --git a/crates/ruff_linter/src/rules/pycodestyle/rules/literal_comparisons.rs b/crates/ruff_linter/src/rules/pycodestyle/rules/literal_comparisons.rs index cb8806d91961c..3af9eb4e1acba 100644 --- a/crates/ruff_linter/src/rules/pycodestyle/rules/literal_comparisons.rs +++ b/crates/ruff_linter/src/rules/pycodestyle/rules/literal_comparisons.rs @@ -4,7 +4,7 @@ use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers; use ruff_python_ast::helpers::{generate_comparison, is_const_none}; -use ruff_python_ast::{self as ast, CmpOp, Constant, Expr}; +use ruff_python_ast::{self as ast, CmpOp, Expr}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -164,11 +164,7 @@ pub(crate) fn literal_comparisons(checker: &mut Checker, compare: &ast::ExprComp } if checker.enabled(Rule::TrueFalseComparison) { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Bool(value), - range: _, - }) = comparator - { + if let Expr::BooleanLiteral(ast::ExprBooleanLiteral { value, .. }) = comparator { match op { EqCmpOp::Eq => { let diagnostic = Diagnostic::new( @@ -224,11 +220,7 @@ pub(crate) fn literal_comparisons(checker: &mut Checker, compare: &ast::ExprComp } if checker.enabled(Rule::TrueFalseComparison) { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Bool(value), - range: _, - }) = next - { + if let Expr::BooleanLiteral(ast::ExprBooleanLiteral { value, .. }) = next { match op { EqCmpOp::Eq => { let diagnostic = diff --git a/crates/ruff_linter/src/rules/pydocstyle/helpers.rs b/crates/ruff_linter/src/rules/pydocstyle/helpers.rs index c582bb1742778..355ff6ea16a8b 100644 --- a/crates/ruff_linter/src/rules/pydocstyle/helpers.rs +++ b/crates/ruff_linter/src/rules/pydocstyle/helpers.rs @@ -2,7 +2,6 @@ use std::collections::BTreeSet; use ruff_python_ast::call_path::from_qualified_name; use ruff_python_ast::helpers::map_callable; -use ruff_python_ast::Expr; use ruff_python_semantic::{Definition, SemanticModel}; use ruff_source_file::UniversalNewlines; @@ -61,13 +60,3 @@ pub(crate) fn should_ignore_definition( }) }) } - -/// Check if a docstring should be ignored. -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. - docstring - .as_constant_expr() - .is_some_and(|constant| constant.value.is_implicit_concatenated()) -} diff --git a/crates/ruff_linter/src/rules/pydocstyle/rules/capitalized.rs b/crates/ruff_linter/src/rules/pydocstyle/rules/capitalized.rs index e8de2983abcc8..7988490f6c18f 100644 --- a/crates/ruff_linter/src/rules/pydocstyle/rules/capitalized.rs +++ b/crates/ruff_linter/src/rules/pydocstyle/rules/capitalized.rs @@ -86,7 +86,7 @@ pub(crate) fn capitalized(checker: &mut Checker, docstring: &Docstring) { first_word: first_word.to_string(), capitalized_word: capitalized_word.to_string(), }, - docstring.expr.range(), + docstring.range(), ); diagnostic.set_fix(Fix::safe_edit(Edit::range_replacement( diff --git a/crates/ruff_linter/src/rules/pydocstyle/rules/newline_after_last_paragraph.rs b/crates/ruff_linter/src/rules/pydocstyle/rules/newline_after_last_paragraph.rs index b318127db94ac..12b37da83bc8f 100644 --- a/crates/ruff_linter/src/rules/pydocstyle/rules/newline_after_last_paragraph.rs +++ b/crates/ruff_linter/src/rules/pydocstyle/rules/newline_after_last_paragraph.rs @@ -96,8 +96,8 @@ pub(crate) fn newline_after_last_paragraph(checker: &mut Checker, docstring: &Do ); diagnostic.set_fix(Fix::safe_edit(Edit::replacement( content, - docstring.expr.end() - num_trailing_quotes - num_trailing_spaces, - docstring.expr.end() - num_trailing_quotes, + docstring.end() - num_trailing_quotes - num_trailing_spaces, + docstring.end() - num_trailing_quotes, ))); checker.diagnostics.push(diagnostic); } diff --git a/crates/ruff_linter/src/rules/pyflakes/rules/repeated_keys.rs b/crates/ruff_linter/src/rules/pyflakes/rules/repeated_keys.rs index 1d8fa4daadbaa..963ddd73925a9 100644 --- a/crates/ruff_linter/src/rules/pyflakes/rules/repeated_keys.rs +++ b/crates/ruff_linter/src/rules/pyflakes/rules/repeated_keys.rs @@ -149,7 +149,14 @@ pub(crate) fn repeated_keys(checker: &mut Checker, dict: &ast::ExprDict) { }; match key { - Expr::Constant(_) | Expr::Tuple(_) | Expr::FString(_) => { + Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) + | Expr::Tuple(_) + | Expr::FString(_) => { if checker.enabled(Rule::MultiValueRepeatedKeyLiteral) { let mut diagnostic = Diagnostic::new( MultiValueRepeatedKeyLiteral { diff --git a/crates/ruff_linter/src/rules/pyflakes/rules/strings.rs b/crates/ruff_linter/src/rules/pyflakes/rules/strings.rs index 317c5692ea289..8821f576ffbd0 100644 --- a/crates/ruff_linter/src/rules/pyflakes/rules/strings.rs +++ b/crates/ruff_linter/src/rules/pyflakes/rules/strings.rs @@ -4,7 +4,7 @@ use rustc_hash::FxHashSet; use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr, Identifier, Keyword}; +use ruff_python_ast::{self as ast, Expr, Identifier, Keyword}; use ruff_text_size::{Ranged, TextRange}; use crate::checkers::ast::Checker; @@ -582,10 +582,7 @@ pub(crate) fn percent_format_extra_named_arguments( .iter() .enumerate() .filter_map(|(index, key)| match key { - Some(Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - })) => { + Some(Expr::StringLiteral(ast::ExprStringLiteral { value, .. })) => { if summary.keywords.contains(value.as_str()) { None } else { @@ -643,10 +640,7 @@ pub(crate) fn percent_format_missing_arguments( let mut keywords = FxHashSet::default(); for key in keys.iter().flatten() { match key { - Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - }) => { + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => { keywords.insert(value); } _ => { diff --git a/crates/ruff_linter/src/rules/pylint/helpers.rs b/crates/ruff_linter/src/rules/pylint/helpers.rs index 7d99ea90422da..aadd753b00f01 100644 --- a/crates/ruff_linter/src/rules/pylint/helpers.rs +++ b/crates/ruff_linter/src/rules/pylint/helpers.rs @@ -1,7 +1,7 @@ use std::fmt; use ruff_python_ast as ast; -use ruff_python_ast::{Arguments, CmpOp, Constant, Expr}; +use ruff_python_ast::{Arguments, CmpOp, Expr}; use ruff_python_semantic::analyze::function_type; use ruff_python_semantic::{ScopeKind, SemanticModel}; @@ -11,11 +11,7 @@ use crate::settings::LinterSettings; pub(super) fn type_param_name(arguments: &Arguments) -> Option<&str> { // Handle both `TypeVar("T")` and `TypeVar(name="T")`. let name_param = arguments.find_argument("name", 0)?; - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(name), - .. - }) = &name_param - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value: name, .. }) = &name_param { Some(name) } else { None diff --git a/crates/ruff_linter/src/rules/pylint/rules/assert_on_string_literal.rs b/crates/ruff_linter/src/rules/pylint/rules/assert_on_string_literal.rs index 50589bc6ec95e..d1ebda0237c79 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/assert_on_string_literal.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/assert_on_string_literal.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -45,51 +45,48 @@ impl Violation for AssertOnStringLiteral { /// PLW0129 pub(crate) fn assert_on_string_literal(checker: &mut Checker, test: &Expr) { match test { - Expr::Constant(ast::ExprConstant { value, .. }) => match value { - Constant::Str(value, ..) => { - checker.diagnostics.push(Diagnostic::new( - AssertOnStringLiteral { - kind: if value.is_empty() { - Kind::Empty - } else { - Kind::NonEmpty - }, + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => { + checker.diagnostics.push(Diagnostic::new( + AssertOnStringLiteral { + kind: if value.is_empty() { + Kind::Empty + } else { + Kind::NonEmpty }, - test.range(), - )); - } - Constant::Bytes(value) => { - checker.diagnostics.push(Diagnostic::new( - AssertOnStringLiteral { - kind: if value.is_empty() { - Kind::Empty - } else { - Kind::NonEmpty - }, + }, + test.range(), + )); + } + Expr::BytesLiteral(ast::ExprBytesLiteral { value, .. }) => { + checker.diagnostics.push(Diagnostic::new( + AssertOnStringLiteral { + kind: if value.is_empty() { + Kind::Empty + } else { + Kind::NonEmpty }, - test.range(), - )); - } - _ => {} - }, + }, + test.range(), + )); + } Expr::FString(ast::ExprFString { values, .. }) => { checker.diagnostics.push(Diagnostic::new( AssertOnStringLiteral { kind: if values.iter().all(|value| match value { - Expr::Constant(ast::ExprConstant { value, .. }) => match value { - Constant::Str(value) => value.is_empty(), - Constant::Bytes(value) => value.is_empty(), - _ => false, - }, + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => { + value.is_empty() + } + Expr::BytesLiteral(ast::ExprBytesLiteral { value, .. }) => value.is_empty(), _ => false, }) { Kind::Empty } else if values.iter().any(|value| match value { - Expr::Constant(ast::ExprConstant { value, .. }) => match value { - Constant::Str(value) => !value.is_empty(), - Constant::Bytes(value) => !value.is_empty(), - _ => false, - }, + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => { + !value.is_empty() + } + Expr::BytesLiteral(ast::ExprBytesLiteral { value, .. }) => { + !value.is_empty() + } _ => false, }) { Kind::NonEmpty diff --git a/crates/ruff_linter/src/rules/pylint/rules/bad_open_mode.rs b/crates/ruff_linter/src/rules/pylint/rules/bad_open_mode.rs index 2d98d00cc5026..0750af43b59a0 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/bad_open_mode.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/bad_open_mode.rs @@ -2,7 +2,7 @@ use bitflags::bitflags; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_python_semantic::SemanticModel; use ruff_text_size::Ranged; @@ -59,11 +59,7 @@ pub(crate) fn bad_open_mode(checker: &mut Checker, call: &ast::ExprCall) { return; }; - let Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - }) = mode - else { + let Some(ast::ExprStringLiteral { value, .. }) = mode.as_string_literal_expr() else { return; }; diff --git a/crates/ruff_linter/src/rules/pylint/rules/bad_str_strip_call.rs b/crates/ruff_linter/src/rules/pylint/rules/bad_str_strip_call.rs index 0d3381a30db53..36fc831d59c8b 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/bad_str_strip_call.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/bad_str_strip_call.rs @@ -1,6 +1,6 @@ use std::fmt; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use rustc_hash::FxHashSet; use ruff_diagnostics::{Diagnostic, Violation}; @@ -146,18 +146,11 @@ pub(crate) fn bad_str_strip_call(checker: &mut Checker, func: &Expr, args: &[Exp if let Expr::Attribute(ast::ExprAttribute { value, attr, .. }) = func { if matches!( value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Str(_) | Constant::Bytes(_), - .. - }) + Expr::StringLiteral(_) | Expr::BytesLiteral(_) ) { if let Some(strip) = StripKind::from_str(attr.as_str()) { if let Some(arg) = args.get(0) { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), - .. - }) = &arg - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = &arg { if has_duplicates(value) { let removal = if checker.settings.target_version >= PythonVersion::Py39 { diff --git a/crates/ruff_linter/src/rules/pylint/rules/bad_string_format_type.rs b/crates/ruff_linter/src/rules/pylint/rules/bad_string_format_type.rs index 94172eebdff73..0ea6884da096a 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/bad_string_format_type.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/bad_string_format_type.rs @@ -1,6 +1,6 @@ use std::str::FromStr; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_python_literal::cformat::{CFormatPart, CFormatSpec, CFormatStrOrBytes, CFormatString}; use ruff_python_parser::{lexer, AsMode}; use ruff_text_size::{Ranged, TextRange}; @@ -186,12 +186,8 @@ fn is_valid_dict( let Some(key) = key else { return true; }; - if let Expr::Constant(ast::ExprConstant { - value: - Constant::Str(ast::StringConstant { - value: mapping_key, .. - }), - .. + if let Expr::StringLiteral(ast::ExprStringLiteral { + value: mapping_key, .. }) = key { let Some(format) = formats_hash.get(mapping_key.as_str()) else { diff --git a/crates/ruff_linter/src/rules/pylint/rules/compare_to_empty_string.rs b/crates/ruff_linter/src/rules/pylint/rules/compare_to_empty_string.rs index 98d2f0a426d88..cdb703e4b97d9 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/compare_to_empty_string.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/compare_to_empty_string.rs @@ -1,6 +1,6 @@ use anyhow::bail; use itertools::Itertools; -use ruff_python_ast::{self as ast, CmpOp, Constant, Expr}; +use ruff_python_ast::{self as ast, CmpOp, Expr}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -83,43 +83,39 @@ pub(crate) fn compare_to_empty_string( if let Ok(op) = EmptyStringCmpOp::try_from(op) { if std::mem::take(&mut first) { // Check the left-most expression. - if let Expr::Constant(ast::ExprConstant { value, .. }) = &lhs { - if let Constant::Str(s) = value { - if s.is_empty() { - let constant = checker.generator().constant(value); - let expr = checker.generator().expr(rhs); - let existing = format!("{constant} {op} {expr}"); - let replacement = format!("{}{expr}", op.into_unary()); - checker.diagnostics.push(Diagnostic::new( - CompareToEmptyString { - existing, - replacement, - }, - lhs.range(), - )); - } - } - } - } - - // Check all right-hand expressions. - if let Expr::Constant(ast::ExprConstant { value, .. }) = &rhs { - if let Constant::Str(s) = value { - if s.is_empty() { - let expr = checker.generator().expr(lhs); - let constant = checker.generator().constant(value); - let existing = format!("{expr} {op} {constant}"); + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = &lhs { + if value.is_empty() { + let literal = checker.generator().expr(lhs); + let expr = checker.generator().expr(rhs); + let existing = format!("{literal} {op} {expr}"); let replacement = format!("{}{expr}", op.into_unary()); checker.diagnostics.push(Diagnostic::new( CompareToEmptyString { existing, replacement, }, - rhs.range(), + lhs.range(), )); } } } + + // Check all right-hand expressions. + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = &rhs { + if value.is_empty() { + let expr = checker.generator().expr(lhs); + let literal = checker.generator().expr(rhs); + let existing = format!("{expr} {op} {literal}"); + let replacement = format!("{}{expr}", op.into_unary()); + checker.diagnostics.push(Diagnostic::new( + CompareToEmptyString { + existing, + replacement, + }, + rhs.range(), + )); + } + } } } } diff --git a/crates/ruff_linter/src/rules/pylint/rules/comparison_of_constant.rs b/crates/ruff_linter/src/rules/pylint/rules/comparison_of_constant.rs index 1544a526f003d..aaebf29fcedde 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/comparison_of_constant.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/comparison_of_constant.rs @@ -1,5 +1,5 @@ use itertools::Itertools; -use ruff_python_ast::{self as ast, CmpOp, Expr}; +use ruff_python_ast::{CmpOp, Expr}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -63,22 +63,12 @@ pub(crate) fn comparison_of_constant( .tuple_windows() .zip(ops) { - if let ( - Expr::Constant(ast::ExprConstant { - value: left_constant, - .. - }), - Expr::Constant(ast::ExprConstant { - value: right_constant, - .. - }), - ) = (&left, &right) - { + if left.is_literal_expr() && right.is_literal_expr() { let diagnostic = Diagnostic::new( ComparisonOfConstant { - left_constant: checker.generator().constant(left_constant), + left_constant: checker.generator().expr(left), op: *op, - right_constant: checker.generator().constant(right_constant), + right_constant: checker.generator().expr(right), }, left.range(), ); diff --git a/crates/ruff_linter/src/rules/pylint/rules/invalid_envvar_default.rs b/crates/ruff_linter/src/rules/pylint/rules/invalid_envvar_default.rs index b5a22c153cb5c..4c3b083bfc640 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/invalid_envvar_default.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/invalid_envvar_default.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr, Operator}; +use ruff_python_ast::{self as ast, Expr, Operator}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -73,10 +73,7 @@ fn is_valid_default(expr: &Expr) -> bool { // Otherwise, the default must be a string or `None`. matches!( expr, - Expr::Constant(ast::ExprConstant { - value: Constant::Str { .. } | Constant::None { .. }, - .. - }) | Expr::FString(_) + Expr::StringLiteral(_) | Expr::NoneLiteral(_) | Expr::FString(_) ) } diff --git a/crates/ruff_linter/src/rules/pylint/rules/invalid_envvar_value.rs b/crates/ruff_linter/src/rules/pylint/rules/invalid_envvar_value.rs index 1aa03fff485a8..8a77a6f9d12b0 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/invalid_envvar_value.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/invalid_envvar_value.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast}; +use ruff_python_ast as ast; use ruff_python_semantic::analyze::type_inference::{PythonType, ResolvedPythonType}; use ruff_text_size::Ranged; diff --git a/crates/ruff_linter/src/rules/pylint/rules/logging.rs b/crates/ruff_linter/src/rules/pylint/rules/logging.rs index e101a5e235fc6..0765b5a4c7337 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/logging.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/logging.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_python_semantic::analyze::logging; use ruff_python_stdlib::logging::LoggingLevel; use ruff_text_size::Ranged; @@ -128,10 +128,8 @@ pub(crate) fn logging_call(checker: &mut Checker, call: &ast::ExprCall) { _ => return, }; - let Some(Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - })) = call.arguments.find_positional(0) + let Some(Expr::StringLiteral(ast::ExprStringLiteral { value, .. })) = + call.arguments.find_positional(0) else { return; }; diff --git a/crates/ruff_linter/src/rules/pylint/rules/magic_value_comparison.rs b/crates/ruff_linter/src/rules/pylint/rules/magic_value_comparison.rs index 2bc7999066cbf..7a536759967c5 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/magic_value_comparison.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/magic_value_comparison.rs @@ -1,5 +1,5 @@ use itertools::Itertools; -use ruff_python_ast::{self as ast, Constant, Expr, Int, UnaryOp}; +use ruff_python_ast::{self as ast, Expr, Int, UnaryOp}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -57,42 +57,39 @@ impl Violation for MagicValueComparison { } } -/// If an [`Expr`] is a constant (or unary operation on a constant), return the [`Constant`]. -fn as_constant(expr: &Expr) -> Option<&Constant> { +/// If an [`Expr`] is a literal (or unary operation on a literal), return the literal [`Expr`]. +fn as_literal(expr: &Expr) -> Option<&Expr> { match expr { - Expr::Constant(ast::ExprConstant { value, .. }) => Some(value), Expr::UnaryOp(ast::ExprUnaryOp { op: UnaryOp::UAdd | UnaryOp::USub | UnaryOp::Invert, operand, - range: _, - }) => match operand.as_ref() { - Expr::Constant(ast::ExprConstant { value, .. }) => Some(value), - _ => None, - }, + .. + }) if operand.is_literal_expr() => Some(operand.as_ref()), + expr if expr.is_literal_expr() => Some(expr), _ => None, } } -/// Return `true` if a [`Constant`] is a magic value. -fn is_magic_value(constant: &Constant, allowed_types: &[ConstantType]) -> bool { - if let Ok(constant_type) = ConstantType::try_from(constant) { +fn is_magic_value(expr: &Expr, allowed_types: &[ConstantType]) -> bool { + if let Some(constant_type) = ConstantType::try_from_expr(expr) { if allowed_types.contains(&constant_type) { return false; } } - match constant { + + match expr { // Ignore `None`, `Bool`, and `Ellipsis` constants. - Constant::None => false, - Constant::Bool(_) => false, - Constant::Ellipsis => false, - // Otherwise, special-case some common string and integer types. - Constant::Str(ast::StringConstant { value, .. }) => { + Expr::NoneLiteral(_) | Expr::BooleanLiteral(_) | Expr::EllipsisLiteral(_) => false, + // Special-case some common string and integer types. + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => { !matches!(value.as_str(), "" | "__main__") } - Constant::Int(value) => !matches!(*value, Int::ZERO | Int::ONE), - Constant::Bytes(_) => true, - Constant::Float(_) => true, - Constant::Complex { .. } => true, + Expr::NumberLiteral(ast::ExprNumberLiteral { value, .. }) => match value { + ast::Number::Int(value) => !matches!(*value, Int::ZERO | Int::ONE), + _ => true, + }, + Expr::BytesLiteral(_) => true, + _ => false, } } @@ -102,15 +99,15 @@ pub(crate) fn magic_value_comparison(checker: &mut Checker, left: &Expr, compara .chain(comparators.iter()) .tuple_windows() { - // If both of the comparators are constant, skip rule for the whole expression. + // If both of the comparators are literals, skip rule for the whole expression. // R0133: comparison-of-constants - if as_constant(left).is_some() && as_constant(right).is_some() { + if as_literal(left).is_some() && as_literal(right).is_some() { return; } } for comparison_expr in std::iter::once(left).chain(comparators.iter()) { - if let Some(value) = as_constant(comparison_expr) { + if let Some(value) = as_literal(comparison_expr) { if is_magic_value(value, &checker.settings.pylint.allow_magic_value_types) { checker.diagnostics.push(Diagnostic::new( MagicValueComparison { diff --git a/crates/ruff_linter/src/rules/pylint/rules/single_string_slots.rs b/crates/ruff_linter/src/rules/pylint/rules/single_string_slots.rs index 82ba8bbbc9afb..fac31d5a66658 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/single_string_slots.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/single_string_slots.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Expr, Stmt, StmtClassDef}; +use ruff_python_ast::{self as ast, Expr, Stmt, StmtClassDef}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -65,13 +65,7 @@ pub(crate) fn single_string_slots(checker: &mut Checker, class: &StmtClassDef) { for target in targets { if let Expr::Name(ast::ExprName { id, .. }) = target { if id.as_str() == "__slots__" { - if matches!( - value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Str(_), - .. - }) | Expr::FString(_) - ) { + if matches!(value.as_ref(), Expr::StringLiteral(_) | Expr::FString(_)) { checker .diagnostics .push(Diagnostic::new(SingleStringSlots, stmt.identifier())); @@ -87,13 +81,7 @@ pub(crate) fn single_string_slots(checker: &mut Checker, class: &StmtClassDef) { }) => { if let Expr::Name(ast::ExprName { id, .. }) = target.as_ref() { if id.as_str() == "__slots__" { - if matches!( - value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Str(_), - .. - }) | Expr::FString(_) - ) { + if matches!(value.as_ref(), Expr::StringLiteral(_) | Expr::FString(_)) { checker .diagnostics .push(Diagnostic::new(SingleStringSlots, stmt.identifier())); diff --git a/crates/ruff_linter/src/rules/pylint/rules/unspecified_encoding.rs b/crates/ruff_linter/src/rules/pylint/rules/unspecified_encoding.rs index 8d2b83dddec9d..49c5575199cf9 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/unspecified_encoding.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/unspecified_encoding.rs @@ -81,7 +81,7 @@ pub(crate) fn unspecified_encoding(checker: &mut Checker, call: &ast::ExprCall) /// Returns `true` if the given expression is a string literal containing a `b` character. fn is_binary_mode(expr: &ast::Expr) -> Option { - Some(expr.as_constant_expr()?.value.as_str()?.value.contains('b')) + Some(expr.as_string_literal_expr()?.value.contains('b')) } /// Returns `true` if the given call lacks an explicit `encoding`. diff --git a/crates/ruff_linter/src/rules/pylint/rules/useless_return.rs b/crates/ruff_linter/src/rules/pylint/rules/useless_return.rs index 1221cf7eaaee5..581b2036f57e0 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/useless_return.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/useless_return.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Constant, Expr, Stmt}; +use ruff_python_ast::{self as ast, Expr, Stmt}; use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Fix}; use ruff_macros::{derive_message_formats, violation}; @@ -72,13 +72,7 @@ pub(crate) fn useless_return( // Skip functions that consist of a docstring and a return statement. if body.len() == 2 { if let Stmt::Expr(ast::StmtExpr { value, range: _ }) = &body[0] { - if matches!( - value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Str(_), - .. - }) - ) { + if value.is_string_literal_expr() { return; } } diff --git a/crates/ruff_linter/src/rules/pylint/settings.rs b/crates/ruff_linter/src/rules/pylint/settings.rs index 93e28b2679521..10187e39e878b 100644 --- a/crates/ruff_linter/src/rules/pylint/settings.rs +++ b/crates/ruff_linter/src/rules/pylint/settings.rs @@ -1,10 +1,9 @@ //! Settings for the `pylint` plugin. -use anyhow::anyhow; use serde::{Deserialize, Serialize}; use ruff_macros::CacheKey; -use ruff_python_ast::Constant; +use ruff_python_ast::{Expr, ExprNumberLiteral, Number}; #[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, CacheKey)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] @@ -17,19 +16,17 @@ pub enum ConstantType { Str, } -impl TryFrom<&Constant> for ConstantType { - type Error = anyhow::Error; - - fn try_from(value: &Constant) -> Result { - match value { - Constant::Bytes(..) => Ok(Self::Bytes), - Constant::Complex { .. } => Ok(Self::Complex), - Constant::Float(..) => Ok(Self::Float), - Constant::Int(..) => Ok(Self::Int), - Constant::Str(..) => Ok(Self::Str), - Constant::Bool(..) | Constant::Ellipsis | Constant::None => { - Err(anyhow!("Singleton constants are unsupported")) - } +impl ConstantType { + pub fn try_from_expr(expr: &Expr) -> Option { + match expr { + Expr::StringLiteral(_) => Some(Self::Str), + Expr::BytesLiteral(_) => Some(Self::Bytes), + Expr::NumberLiteral(ExprNumberLiteral { value, .. }) => match value { + Number::Int(_) => Some(Self::Int), + Number::Float(_) => Some(Self::Float), + Number::Complex { .. } => Some(Self::Complex), + }, + _ => None, } } } diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/convert_named_tuple_functional_to_class.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/convert_named_tuple_functional_to_class.rs index 27e1ef79c0089..3a8135f93c4bd 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/convert_named_tuple_functional_to_class.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/convert_named_tuple_functional_to_class.rs @@ -3,9 +3,7 @@ use log::debug; use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::is_dunder; -use ruff_python_ast::{ - self as ast, Arguments, Constant, Expr, ExprContext, Identifier, Keyword, Stmt, -}; +use ruff_python_ast::{self as ast, Arguments, Expr, ExprContext, Identifier, Keyword, Stmt}; use ruff_python_codegen::Generator; use ruff_python_semantic::SemanticModel; use ruff_python_stdlib::identifiers::is_identifier; @@ -183,10 +181,7 @@ fn create_fields_from_fields_arg(fields: &Expr) -> Option> { let [field, annotation] = elts.as_slice() else { return None; }; - let field = field.as_constant_expr()?; - let Constant::Str(ast::StringConstant { value: field, .. }) = &field.value else { - return None; - }; + let ast::ExprStringLiteral { value: field, .. } = field.as_string_literal_expr()?; if !is_identifier(field) { return None; } diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/convert_typed_dict_functional_to_class.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/convert_typed_dict_functional_to_class.rs index 462ea9ceab71a..dd5503ce22631 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/convert_typed_dict_functional_to_class.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/convert_typed_dict_functional_to_class.rs @@ -1,9 +1,7 @@ use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::is_dunder; -use ruff_python_ast::{ - self as ast, Arguments, Constant, Expr, ExprContext, Identifier, Keyword, Stmt, -}; +use ruff_python_ast::{self as ast, Arguments, Expr, ExprContext, Identifier, Keyword, Stmt}; use ruff_python_codegen::Generator; use ruff_python_semantic::SemanticModel; use ruff_python_stdlib::identifiers::is_identifier; @@ -175,10 +173,7 @@ fn fields_from_dict_literal(keys: &[Option], values: &[Expr]) -> Option { + Some(Expr::StringLiteral(ast::ExprStringLiteral { value: field, .. })) => { if !is_identifier(field) { return None; } diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/f_strings.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/f_strings.rs index 5fc0ba15a6e8c..bd040aa0ecaa7 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/f_strings.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/f_strings.rs @@ -6,7 +6,7 @@ use rustc_hash::FxHashMap; use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::str::{leading_quote, trailing_quote}; -use ruff_python_ast::{self as ast, Constant, Expr, Keyword}; +use ruff_python_ast::{self as ast, Expr, Keyword}; use ruff_python_literal::format::{ FieldName, FieldNamePart, FieldType, FormatPart, FormatString, FromTemplate, }; @@ -159,8 +159,8 @@ fn formatted_expr<'a>(expr: &Expr, context: FormatContext, locator: &Locator<'a> // E.g., `12` should be parenthesized in `f"{(12).real}"`. ( FormatContext::Accessed, - Expr::Constant(ast::ExprConstant { - value: Constant::Int(..), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(..), .. }), ) => text.chars().all(|c| c.is_ascii_digit()), @@ -314,13 +314,7 @@ pub(crate) fn f_strings( return; }; - if !matches!( - value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Str(..), - .. - }), - ) { + if !value.is_string_literal_expr() { return; }; diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/native_literals.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/native_literals.rs index 7f672851442aa..c5d96934d7075 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/native_literals.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/native_literals.rs @@ -3,8 +3,8 @@ use std::str::FromStr; use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr}; -use ruff_text_size::Ranged; +use ruff_python_ast::{self as ast, Expr}; +use ruff_text_size::{Ranged, TextRange}; use crate::checkers::ast::Checker; @@ -32,35 +32,54 @@ impl FromStr for LiteralType { } } -impl From for Constant { - fn from(value: LiteralType) -> Self { - match value { - LiteralType::Str => Constant::Str(ast::StringConstant { +impl LiteralType { + fn as_zero_value_expr(self) -> Expr { + match self { + LiteralType::Str => ast::ExprStringLiteral { value: String::new(), unicode: false, implicit_concatenated: false, - }), - LiteralType::Bytes => Constant::Bytes(ast::BytesConstant { + range: TextRange::default(), + } + .into(), + LiteralType::Bytes => ast::ExprBytesLiteral { value: Vec::new(), implicit_concatenated: false, - }), - LiteralType::Int => Constant::Int(0.into()), - LiteralType::Float => Constant::Float(0.0), - LiteralType::Bool => Constant::Bool(false), + range: TextRange::default(), + } + .into(), + LiteralType::Int => ast::ExprNumberLiteral { + value: ast::Number::Int(0.into()), + range: TextRange::default(), + } + .into(), + LiteralType::Float => ast::ExprNumberLiteral { + value: ast::Number::Float(0.0), + range: TextRange::default(), + } + .into(), + LiteralType::Bool => ast::ExprBooleanLiteral { + value: false, + range: TextRange::default(), + } + .into(), } } } -impl TryFrom<&Constant> for LiteralType { +impl TryFrom<&Expr> for LiteralType { type Error = (); - fn try_from(value: &Constant) -> Result { - match value { - Constant::Str(_) => Ok(LiteralType::Str), - Constant::Bytes(_) => Ok(LiteralType::Bytes), - Constant::Int(_) => Ok(LiteralType::Int), - Constant::Float(_) => Ok(LiteralType::Float), - Constant::Bool(_) => Ok(LiteralType::Bool), + fn try_from(expr: &Expr) -> Result { + match expr { + Expr::StringLiteral(_) => Ok(LiteralType::Str), + Expr::BytesLiteral(_) => Ok(LiteralType::Bytes), + Expr::NumberLiteral(ast::ExprNumberLiteral { value, .. }) => match value { + ast::Number::Int(_) => Ok(LiteralType::Int), + ast::Number::Float(_) => Ok(LiteralType::Float), + ast::Number::Complex { .. } => Err(()), + }, + Expr::BooleanLiteral(_) => Ok(LiteralType::Bool), _ => Err(()), } } @@ -181,8 +200,8 @@ pub(crate) fn native_literals( return; } - let constant = Constant::from(literal_type); - let content = checker.generator().constant(&constant); + let expr = literal_type.as_zero_value_expr(); + let content = checker.generator().expr(&expr); diagnostic.set_fix(Fix::safe_edit(Edit::range_replacement( content, call.range(), @@ -190,16 +209,12 @@ pub(crate) fn native_literals( checker.diagnostics.push(diagnostic); } Some(arg) => { - let Expr::Constant(ast::ExprConstant { value, .. }) = arg else { - return; - }; - // Skip implicit string concatenations. - if value.is_implicit_concatenated() { + if arg.is_implicit_concatenated_string() { return; } - let Ok(arg_literal_type) = LiteralType::try_from(value) else { + let Ok(arg_literal_type) = LiteralType::try_from(arg) else { return; }; @@ -213,8 +228,14 @@ pub(crate) fn native_literals( // Ex) `(7).denominator` is valid but `7.denominator` is not // Note that floats do not have this problem // Ex) `(1.0).real` is valid and `1.0.real` is too - let content = match (parent_expr, value) { - (Some(Expr::Attribute(_)), Constant::Int(_)) => format!("({arg_code})"), + let content = match (parent_expr, arg) { + ( + Some(Expr::Attribute(_)), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(_), + .. + }), + ) => format!("({arg_code})"), _ => arg_code.to_string(), }; diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/outdated_version_block.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/outdated_version_block.rs index 1b4b02177bddc..7afce0acc774e 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/outdated_version_block.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/outdated_version_block.rs @@ -6,7 +6,7 @@ use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::map_subscript; use ruff_python_ast::stmt_if::{if_elif_branches, BranchKind, IfElifBranch}; use ruff_python_ast::whitespace::indentation; -use ruff_python_ast::{self as ast, CmpOp, Constant, ElifElseClause, Expr, Int, StmtIf}; +use ruff_python_ast::{self as ast, CmpOp, ElifElseClause, Expr, Int, StmtIf}; use ruff_text_size::{Ranged, TextLen, TextRange}; use crate::checkers::ast::Checker; @@ -147,8 +147,8 @@ pub(crate) fn outdated_version_block(checker: &mut Checker, stmt_if: &StmtIf) { } _ => {} }, - Expr::Constant(ast::ExprConstant { - value: Constant::Int(int), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(int), .. }) => { if op == &CmpOp::Eq { @@ -409,8 +409,8 @@ fn fix_always_true_branch( fn extract_version(elts: &[Expr]) -> Option> { let mut version: Vec = vec![]; for elt in elts { - let Expr::Constant(ast::ExprConstant { - value: Constant::Int(int), + let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(int), .. }) = &elt else { diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/printf_string_formatting.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/printf_string_formatting.rs index 6f46f1fb9d917..3c757820d9078 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/printf_string_formatting.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/printf_string_formatting.rs @@ -5,7 +5,7 @@ use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::str::{leading_quote, trailing_quote}; use ruff_python_ast::whitespace::indentation; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_python_codegen::Stylist; use ruff_python_literal::cformat::{ CConversionFlags, CFormatPart, CFormatPrecision, CFormatQuantity, CFormatString, @@ -223,12 +223,8 @@ fn clean_params_dictionary(right: &Expr, locator: &Locator, stylist: &Stylist) - for (key, value) in keys.iter().zip(values.iter()) { match key { Some(key) => { - if let Expr::Constant(ast::ExprConstant { - value: - Constant::Str(ast::StringConstant { - value: key_string, .. - }), - .. + if let Expr::StringLiteral(ast::ExprStringLiteral { + value: key_string, .. }) = key { // If the dictionary key is not a valid variable name, abort. @@ -420,9 +416,13 @@ pub(crate) fn printf_string_formatting(checker: &mut Checker, expr: &Expr, right // Parse the parameters. let params_string = match right { - Expr::Constant(_) | Expr::FString(_) => { - Cow::Owned(format!("({})", checker.locator().slice(right))) - } + Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) + | Expr::FString(_) => Cow::Owned(format!("({})", checker.locator().slice(right))), Expr::Name(_) | Expr::Attribute(_) | Expr::Subscript(_) | Expr::Call(_) => { if num_keyword_arguments > 0 { // If we have _any_ named fields, assume the right-hand side is a mapping. diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/redundant_open_modes.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/redundant_open_modes.rs index 52356297c7caf..549b340a76127 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/redundant_open_modes.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/redundant_open_modes.rs @@ -4,7 +4,7 @@ use anyhow::{anyhow, Result}; use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr, PySourceType}; +use ruff_python_ast::{self as ast, Expr, PySourceType}; use ruff_python_parser::{lexer, AsMode}; use ruff_python_semantic::SemanticModel; use ruff_source_file::Locator; @@ -71,12 +71,8 @@ pub(crate) fn redundant_open_modes(checker: &mut Checker, call: &ast::ExprCall) None => { 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(ast::StringConstant { - value: mode_param_value, - .. - }), + if let Expr::StringLiteral(ast::ExprStringLiteral { + value: mode_param_value, .. }) = &keyword.value { @@ -94,11 +90,7 @@ pub(crate) fn redundant_open_modes(checker: &mut Checker, call: &ast::ExprCall) } } Some(mode_param) => { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), - .. - }) = &mode_param - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = &mode_param { if let Ok(mode) = OpenMode::from_str(value) { checker.diagnostics.push(create_check( call, diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/type_of_primitive.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/type_of_primitive.rs index f65ce23ff29d8..1486b6a28bb5d 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/type_of_primitive.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/type_of_primitive.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{self as ast, Expr}; +use ruff_python_ast::Expr; use crate::fix::edits::pad; use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; @@ -65,10 +65,7 @@ pub(crate) fn type_of_primitive(checker: &mut Checker, expr: &Expr, func: &Expr, { return; } - let Expr::Constant(ast::ExprConstant { value, .. }) = &arg else { - return; - }; - let Some(primitive) = Primitive::from_constant(value) else { + let Some(primitive) = Primitive::from_expr(arg) else { return; }; let mut diagnostic = Diagnostic::new(TypeOfPrimitive { primitive }, expr.range()); diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/unicode_kind_prefix.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/unicode_kind_prefix.rs index 20fcbf08a5913..13ecab830421d 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/unicode_kind_prefix.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/unicode_kind_prefix.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::Expr; +use ruff_python_ast::ExprStringLiteral; use ruff_text_size::{Ranged, TextRange, TextSize}; use crate::checkers::ast::Checker; @@ -39,11 +39,11 @@ impl AlwaysFixableViolation for UnicodeKindPrefix { } /// UP025 -pub(crate) fn unicode_kind_prefix(checker: &mut Checker, expr: &Expr, is_unicode: bool) { - if is_unicode { - let mut diagnostic = Diagnostic::new(UnicodeKindPrefix, expr.range()); +pub(crate) fn unicode_kind_prefix(checker: &mut Checker, string: &ExprStringLiteral) { + if string.unicode { + let mut diagnostic = Diagnostic::new(UnicodeKindPrefix, string.range); diagnostic.set_fix(Fix::safe_edit(Edit::range_deletion(TextRange::at( - expr.start(), + string.start(), TextSize::from(1), )))); checker.diagnostics.push(diagnostic); diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/unnecessary_encode_utf8.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/unnecessary_encode_utf8.rs index 9cc79ce4dab73..5966624d9e661 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/unnecessary_encode_utf8.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/unnecessary_encode_utf8.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Arguments, Constant, Expr, Keyword, PySourceType}; +use ruff_python_ast::{self as ast, Arguments, Expr, Keyword, PySourceType}; use ruff_python_parser::{lexer, AsMode, Tok}; use ruff_source_file::Locator; use ruff_text_size::{Ranged, TextRange}; @@ -73,11 +73,7 @@ fn match_encoded_variable(func: &Expr) -> Option<&Expr> { } fn is_utf8_encoding_arg(arg: &Expr) -> bool { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), - .. - }) = &arg - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = &arg { UTF8_LITERALS.contains(&value.to_lowercase().as_str()) } else { false @@ -162,10 +158,7 @@ pub(crate) fn unnecessary_encode_utf8(checker: &mut Checker, call: &ast::ExprCal return; }; match variable { - Expr::Constant(ast::ExprConstant { - value: Constant::Str(literal), - .. - }) => { + Expr::StringLiteral(ast::ExprStringLiteral { value: literal, .. }) => { // Ex) `"str".encode()`, `"str".encode("utf-8")` if let Some(encoding_arg) = match_encoding_arg(&call.arguments) { if literal.is_ascii() { diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/use_pep604_annotation.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/use_pep604_annotation.rs index 3e3666d39a27f..d3d0866c39da8 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/use_pep604_annotation.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/use_pep604_annotation.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr, ExprContext, Operator}; +use ruff_python_ast::{self as ast, Expr, ExprContext, Operator}; use ruff_python_semantic::analyze::typing::Pep604Operator; use ruff_text_size::{Ranged, TextRange}; @@ -131,8 +131,7 @@ fn optional(expr: &Expr) -> Expr { ast::ExprBinOp { left: Box::new(expr.clone()), op: Operator::BitOr, - right: Box::new(Expr::Constant(ast::ExprConstant { - value: Constant::None, + right: Box::new(Expr::NoneLiteral(ast::ExprNoneLiteral { range: TextRange::default(), })), range: TextRange::default(), @@ -189,7 +188,12 @@ fn is_allowed_value(expr: &Expr) -> bool { | Expr::Call(_) | Expr::FormattedValue(_) | Expr::FString(_) - | Expr::Constant(_) + | Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) | Expr::Attribute(_) | Expr::Subscript(_) | Expr::Name(_) diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/use_pep695_type_alias.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/use_pep695_type_alias.rs index 4e81b2e961deb..5ad2cb9b1c4bd 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/use_pep695_type_alias.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/use_pep695_type_alias.rs @@ -1,11 +1,10 @@ -use ast::{Constant, ExprCall, ExprConstant}; use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::{ self as ast, visitor::{self, Visitor}, - Expr, ExprName, ExprSubscript, Identifier, Stmt, StmtAnnAssign, StmtAssign, StmtTypeAlias, - TypeParam, TypeParamTypeVar, + Expr, ExprCall, ExprName, ExprSubscript, Identifier, Stmt, StmtAnnAssign, StmtAssign, + StmtTypeAlias, TypeParam, TypeParamTypeVar, }; use ruff_python_semantic::SemanticModel; use ruff_text_size::{Ranged, TextRange}; @@ -204,15 +203,10 @@ impl<'a> Visitor<'a> for TypeVarReferenceVisitor<'a> { func, arguments, .. }) => { if self.semantic.match_typing_expr(func, "TypeVar") - && arguments.args.first().is_some_and(|arg| { - matches!( - arg, - Expr::Constant(ExprConstant { - value: Constant::Str(_), - .. - }) - ) - }) + && arguments + .args + .first() + .is_some_and(Expr::is_string_literal_expr) { let restriction = if let Some(bound) = arguments.find_keyword("bound") { Some(TypeVarRestriction::Bound(&bound.value)) diff --git a/crates/ruff_linter/src/rules/pyupgrade/types.rs b/crates/ruff_linter/src/rules/pyupgrade/types.rs index 81c0cfe214c81..5dfc4c2d11c2b 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/types.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/types.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::Constant; +use ruff_python_ast::{Expr, ExprNumberLiteral, Number}; use serde::{Deserialize, Serialize}; #[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] @@ -12,14 +12,16 @@ pub(crate) enum Primitive { } impl Primitive { - pub(crate) const fn from_constant(constant: &Constant) -> Option { - match constant { - Constant::Bool(_) => Some(Self::Bool), - Constant::Str(_) => Some(Self::Str), - Constant::Bytes(_) => Some(Self::Bytes), - Constant::Int(_) => Some(Self::Int), - Constant::Float(_) => Some(Self::Float), - Constant::Complex { .. } => Some(Self::Complex), + pub(crate) const fn from_expr(expr: &Expr) -> Option { + match expr { + Expr::BooleanLiteral(_) => Some(Self::Bool), + Expr::StringLiteral(_) => Some(Self::Str), + Expr::BytesLiteral(_) => Some(Self::Bytes), + Expr::NumberLiteral(ExprNumberLiteral { value, .. }) => match value { + Number::Int(_) => Some(Self::Int), + Number::Float(_) => Some(Self::Float), + Number::Complex { .. } => Some(Self::Complex), + }, _ => None, } } diff --git a/crates/ruff_linter/src/rules/refurb/rules/implicit_cwd.rs b/crates/ruff_linter/src/rules/refurb/rules/implicit_cwd.rs index a4cf83d55783f..3b14b62b78009 100644 --- a/crates/ruff_linter/src/rules/refurb/rules/implicit_cwd.rs +++ b/crates/ruff_linter/src/rules/refurb/rules/implicit_cwd.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr, ExprAttribute, ExprCall}; +use ruff_python_ast::{self as ast, Expr, ExprAttribute, ExprCall}; use ruff_text_size::Ranged; use crate::{checkers::ast::Checker, importer::ImportRequest}; @@ -63,14 +63,10 @@ pub(crate) fn no_implicit_cwd(checker: &mut Checker, call: &ExprCall) { [] => {} // Ex) `Path(".").resolve()` [arg] => { - let Expr::Constant(ast::ExprConstant { - value: Constant::Str(str), - .. - }) = arg - else { + let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = arg else { return; }; - if !matches!(str.value.as_str(), "" | ".") { + if !matches!(value.as_str(), "" | ".") { return; } } diff --git a/crates/ruff_linter/src/rules/refurb/rules/isinstance_type_none.rs b/crates/ruff_linter/src/rules/refurb/rules/isinstance_type_none.rs index 8d40c3ea08a35..31822e17e8187 100644 --- a/crates/ruff_linter/src/rules/refurb/rules/isinstance_type_none.rs +++ b/crates/ruff_linter/src/rules/refurb/rules/isinstance_type_none.rs @@ -86,7 +86,7 @@ fn is_none(expr: &Expr) -> bool { // Ex) `None` // Note: `isinstance` only accepts `None` as a type when used with // the union operator, so we need to check if we're in a union. - Expr::Constant(ast::ExprConstant { value, .. }) if in_union_context => value.is_none(), + Expr::NoneLiteral(_) if in_union_context => true, // Ex) `type(None)` Expr::Call(ast::ExprCall { @@ -94,11 +94,7 @@ fn is_none(expr: &Expr) -> bool { }) if arguments.len() == 1 => { if let Expr::Name(ast::ExprName { id, .. }) = func.as_ref() { if id.as_str() == "type" { - if let Some(Expr::Constant(ast::ExprConstant { value, .. })) = - arguments.args.get(0) - { - return value.is_none(); - } + return matches!(arguments.args.get(0), Some(Expr::NoneLiteral(_))); } } false @@ -134,8 +130,7 @@ fn generate_replacement(name: &str, generator: Generator) -> String { let compare = ast::ExprCompare { left: Box::new(var.into()), ops: vec![ast::CmpOp::Is], - comparators: vec![ast::Expr::Constant(ast::ExprConstant { - value: ast::Constant::None, + comparators: vec![ast::Expr::NoneLiteral(ast::ExprNoneLiteral { range: TextRange::default(), })], range: TextRange::default(), diff --git a/crates/ruff_linter/src/rules/refurb/rules/print_empty_string.rs b/crates/ruff_linter/src/rules/refurb/rules/print_empty_string.rs index 42bc08d5f225a..ee6da013b5048 100644 --- a/crates/ruff_linter/src/rules/refurb/rules/print_empty_string.rs +++ b/crates/ruff_linter/src/rules/refurb/rules/print_empty_string.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr}; +use ruff_python_ast::{self as ast, Expr}; use ruff_python_codegen::Generator; use ruff_text_size::Ranged; @@ -192,8 +192,8 @@ pub(crate) fn print_empty_string(checker: &mut Checker, call: &ast::ExprCall) { fn is_empty_string(expr: &Expr) -> bool { matches!( expr, - Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), + Expr::StringLiteral(ast::ExprStringLiteral { + value, .. }) if value.is_empty() ) diff --git a/crates/ruff_linter/src/rules/refurb/rules/read_whole_file.rs b/crates/ruff_linter/src/rules/refurb/rules/read_whole_file.rs index 49a6bce3f3246..b71306c3444ae 100644 --- a/crates/ruff_linter/src/rules/refurb/rules/read_whole_file.rs +++ b/crates/ruff_linter/src/rules/refurb/rules/read_whole_file.rs @@ -244,11 +244,11 @@ fn match_open_keywords( /// Match open mode to see if it is supported. fn match_open_mode(mode: &Expr) -> Option { - let ast::StringConstant { + let ast::ExprStringLiteral { value, implicit_concatenated: false, .. - } = mode.as_constant_expr()?.value.as_str()? + } = mode.as_string_literal_expr()? else { return None; }; diff --git a/crates/ruff_linter/src/rules/refurb/rules/single_item_membership_test.rs b/crates/ruff_linter/src/rules/refurb/rules/single_item_membership_test.rs index 8e828942bf3aa..6622d2a8f0af0 100644 --- a/crates/ruff_linter/src/rules/refurb/rules/single_item_membership_test.rs +++ b/crates/ruff_linter/src/rules/refurb/rules/single_item_membership_test.rs @@ -1,8 +1,8 @@ use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::generate_comparison; -use ruff_python_ast::ExprConstant; -use ruff_python_ast::{CmpOp, Constant, Expr}; +use ruff_python_ast::ExprStringLiteral; +use ruff_python_ast::{CmpOp, Expr}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -102,10 +102,11 @@ fn single_item(expr: &Expr) -> Option<&Expr> { Expr::List(list) if list.elts.len() == 1 => Some(&list.elts[0]), Expr::Tuple(tuple) if tuple.elts.len() == 1 => Some(&tuple.elts[0]), Expr::Set(set) if set.elts.len() == 1 => Some(&set.elts[0]), - string_expr @ Expr::Constant(ExprConstant { - value: Constant::Str(string), - .. - }) if string.chars().count() == 1 => Some(string_expr), + string_expr @ Expr::StringLiteral(ExprStringLiteral { value: string, .. }) + if string.chars().count() == 1 => + { + Some(string_expr) + } _ => None, } } diff --git a/crates/ruff_linter/src/rules/refurb/rules/unnecessary_enumerate.rs b/crates/ruff_linter/src/rules/refurb/rules/unnecessary_enumerate.rs index b5652ec02b0be..b737d131c81c8 100644 --- a/crates/ruff_linter/src/rules/refurb/rules/unnecessary_enumerate.rs +++ b/crates/ruff_linter/src/rules/refurb/rules/unnecessary_enumerate.rs @@ -3,7 +3,7 @@ use std::fmt; use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast as ast; -use ruff_python_ast::{Arguments, Constant, Expr, Int}; +use ruff_python_ast::{Arguments, Expr, Int}; use ruff_python_codegen::Generator; use ruff_python_semantic::analyze::typing::{is_dict, is_list, is_set, is_tuple}; use ruff_python_semantic::Binding; @@ -186,8 +186,8 @@ pub(crate) fn unnecessary_enumerate(checker: &mut Checker, stmt_for: &ast::StmtF if start.map_or(true, |start| { matches!( start, - Expr::Constant(ast::ExprConstant { - value: Constant::Int(Int::ZERO), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(Int::ZERO), .. }) ) diff --git a/crates/ruff_linter/src/rules/ruff/rules/implicit_optional.rs b/crates/ruff_linter/src/rules/ruff/rules/implicit_optional.rs index 287ee0fbc1052..2a0634f819bc9 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/implicit_optional.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/implicit_optional.rs @@ -5,7 +5,7 @@ use anyhow::Result; use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; use ruff_python_ast::helpers::is_const_none; -use ruff_python_ast::{self as ast, Constant, Expr, Operator, ParameterWithDefault, Parameters}; +use ruff_python_ast::{self as ast, Expr, Operator, ParameterWithDefault, Parameters}; use ruff_python_parser::typing::parse_type_annotation; use ruff_text_size::{Ranged, TextRange}; @@ -127,8 +127,7 @@ fn generate_fix(checker: &Checker, conversion_type: ConversionType, expr: &Expr) let new_expr = Expr::BinOp(ast::ExprBinOp { left: Box::new(expr.clone()), op: Operator::BitOr, - right: Box::new(Expr::Constant(ast::ExprConstant { - value: Constant::None, + right: Box::new(Expr::NoneLiteral(ast::ExprNoneLiteral { range: TextRange::default(), })), range: TextRange::default(), @@ -184,9 +183,10 @@ pub(crate) fn implicit_optional(checker: &mut Checker, parameters: &Parameters) continue; }; - if let Expr::Constant(ast::ExprConstant { + if let Expr::StringLiteral(ast::ExprStringLiteral { range, - value: Constant::Str(string), + value: string, + .. }) = annotation.as_ref() { // Quoted annotation. diff --git a/crates/ruff_linter/src/rules/ruff/rules/invalid_index_type.rs b/crates/ruff_linter/src/rules/ruff/rules/invalid_index_type.rs index 3db7162124c05..f67a52b7a45cd 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/invalid_index_type.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/invalid_index_type.rs @@ -1,4 +1,4 @@ -use ruff_python_ast::{Constant, Expr, ExprConstant, ExprSlice, ExprSubscript}; +use ruff_python_ast::{Expr, ExprNumberLiteral, ExprSlice, ExprSubscript, Number}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; @@ -65,10 +65,8 @@ pub(crate) fn invalid_index_type(checker: &mut Checker, expr: &ExprSubscript) { | Expr::ListComp(_) | Expr::Tuple(_) | Expr::FString(_) - | Expr::Constant(ExprConstant { - value: Constant::Str(_) | Constant::Bytes(_), - .. - }) + | Expr::StringLiteral(_) + | Expr::BytesLiteral(_) ) { return; } @@ -87,43 +85,32 @@ pub(crate) fn invalid_index_type(checker: &mut Checker, expr: &ExprSubscript) { return; }; - // Then check the contents of the index - match index.as_ref() { - Expr::Constant(ExprConstant { - value: index_value, .. - }) => { - // If the index is a constant, require an integer - if !index_value.is_int() { - checker.diagnostics.push(Diagnostic::new( - InvalidIndexType { - value_type: value_type.to_string(), - index_type: constant_type_name(index_value).to_string(), - is_slice: false, - }, - index.range(), - )); - } + if index_type.is_literal() { + // If the index is a literal, require an integer + if index_type != CheckableExprType::IntLiteral { + checker.diagnostics.push(Diagnostic::new( + InvalidIndexType { + value_type: value_type.to_string(), + index_type: index_type.to_string(), + is_slice: false, + }, + index.range(), + )); } - Expr::Slice(ExprSlice { - lower, upper, step, .. - }) => { - // If the index is a slice, require integer or null bounds - for is_slice in [lower, upper, step].into_iter().flatten() { - if let Expr::Constant(ExprConstant { - value: index_value, .. - }) = is_slice.as_ref() - { - if !(index_value.is_int() || index_value.is_none()) { - checker.diagnostics.push(Diagnostic::new( - InvalidIndexType { - value_type: value_type.to_string(), - index_type: constant_type_name(index_value).to_string(), - is_slice: true, - }, - is_slice.range(), - )); - } - } else if let Some(is_slice_type) = CheckableExprType::try_from(is_slice.as_ref()) { + } else if let Expr::Slice(ExprSlice { + lower, upper, step, .. + }) = index.as_ref() + { + for is_slice in [lower, upper, step].into_iter().flatten() { + let Some(is_slice_type) = CheckableExprType::try_from(is_slice) else { + return; + }; + if is_slice_type.is_literal() { + // If the index is a slice, require integer or null bounds + if !matches!( + is_slice_type, + CheckableExprType::IntLiteral | CheckableExprType::NoneLiteral + ) { checker.diagnostics.push(Diagnostic::new( InvalidIndexType { value_type: value_type.to_string(), @@ -133,19 +120,27 @@ pub(crate) fn invalid_index_type(checker: &mut Checker, expr: &ExprSubscript) { is_slice.range(), )); } + } else if let Some(is_slice_type) = CheckableExprType::try_from(is_slice.as_ref()) { + checker.diagnostics.push(Diagnostic::new( + InvalidIndexType { + value_type: value_type.to_string(), + index_type: is_slice_type.to_string(), + is_slice: true, + }, + is_slice.range(), + )); } } - _ => { - // If it's some other checkable data type, it's a violation - checker.diagnostics.push(Diagnostic::new( - InvalidIndexType { - value_type: value_type.to_string(), - index_type: index_type.to_string(), - is_slice: false, - }, - index.range(), - )); - } + } else { + // If it's some other checkable data type, it's a violation + checker.diagnostics.push(Diagnostic::new( + InvalidIndexType { + value_type: value_type.to_string(), + index_type: index_type.to_string(), + is_slice: false, + }, + index.range(), + )); } } @@ -154,10 +149,17 @@ pub(crate) fn invalid_index_type(checker: &mut Checker, expr: &ExprSubscript) { /// These are generally "literal" type expressions in that we know their concrete type /// without additional analysis; opposed to expressions like a function call where we /// cannot determine what type it may return. -#[derive(Debug)] -enum CheckableExprType<'a> { - Constant(&'a Constant), +#[derive(Debug, Copy, Clone, PartialEq, Eq)] +enum CheckableExprType { FString, + StringLiteral, + BytesLiteral, + IntLiteral, + FloatLiteral, + ComplexLiteral, + BooleanLiteral, + NoneLiteral, + EllipsisLiteral, List, ListComp, SetComp, @@ -168,11 +170,18 @@ enum CheckableExprType<'a> { Slice, } -impl fmt::Display for CheckableExprType<'_> { +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::FString => f.write_str("str"), + Self::StringLiteral => f.write_str("str"), + Self::BytesLiteral => f.write_str("bytes"), + Self::IntLiteral => f.write_str("int"), + Self::FloatLiteral => f.write_str("float"), + Self::ComplexLiteral => f.write_str("complex"), + Self::BooleanLiteral => f.write_str("bool"), + Self::NoneLiteral => f.write_str("None"), + Self::EllipsisLiteral => f.write_str("ellipsis"), Self::List => f.write_str("list"), Self::SetComp => f.write_str("set comprehension"), Self::ListComp => f.write_str("list comprehension"), @@ -185,10 +194,19 @@ impl fmt::Display for CheckableExprType<'_> { } } -impl<'a> CheckableExprType<'a> { - fn try_from(expr: &'a Expr) -> Option { +impl CheckableExprType { + fn try_from(expr: &Expr) -> Option { match expr { - Expr::Constant(ExprConstant { value, .. }) => Some(Self::Constant(value)), + Expr::StringLiteral(_) => Some(Self::StringLiteral), + Expr::BytesLiteral(_) => Some(Self::BytesLiteral), + Expr::NumberLiteral(ExprNumberLiteral { value, .. }) => match value { + Number::Int(_) => Some(Self::IntLiteral), + Number::Float(_) => Some(Self::FloatLiteral), + Number::Complex { .. } => Some(Self::ComplexLiteral), + }, + Expr::BooleanLiteral(_) => Some(Self::BooleanLiteral), + Expr::NoneLiteral(_) => Some(Self::NoneLiteral), + Expr::EllipsisLiteral(_) => Some(Self::EllipsisLiteral), Expr::FString(_) => Some(Self::FString), Expr::List(_) => Some(Self::List), Expr::ListComp(_) => Some(Self::ListComp), @@ -201,17 +219,18 @@ impl<'a> CheckableExprType<'a> { _ => None, } } -} -fn constant_type_name(constant: &Constant) -> &'static str { - match constant { - Constant::None => "None", - Constant::Bool(_) => "bool", - Constant::Str(_) => "str", - Constant::Bytes(_) => "bytes", - Constant::Int(_) => "int", - Constant::Float(_) => "float", - Constant::Complex { .. } => "complex", - Constant::Ellipsis => "ellipsis", + fn is_literal(self) -> bool { + matches!( + self, + Self::StringLiteral + | Self::BytesLiteral + | Self::IntLiteral + | Self::FloatLiteral + | Self::ComplexLiteral + | Self::BooleanLiteral + | Self::NoneLiteral + | Self::EllipsisLiteral + ) } } diff --git a/crates/ruff_linter/src/rules/ruff/rules/pairwise_over_zipped.rs b/crates/ruff_linter/src/rules/ruff/rules/pairwise_over_zipped.rs index c6f1de26f1f83..9f4bed6e4df66 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/pairwise_over_zipped.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/pairwise_over_zipped.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Constant, Expr, Int}; +use ruff_python_ast::{self as ast, Expr, Int}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -65,8 +65,8 @@ fn match_slice_info(expr: &Expr) -> Option { if let Some(step) = step { if !matches!( step.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Int(Int::ONE), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(Int::ONE), .. }) ) { @@ -76,8 +76,8 @@ fn match_slice_info(expr: &Expr) -> Option { // If the slice start is a non-constant, we can't be sure that it's successive. let slice_start = if let Some(lower) = lower.as_ref() { - let Expr::Constant(ast::ExprConstant { - value: Constant::Int(int), + let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(int), range: _, }) = lower.as_ref() else { diff --git a/crates/ruff_linter/src/rules/ruff/rules/unnecessary_iterable_allocation_for_first_element.rs b/crates/ruff_linter/src/rules/ruff/rules/unnecessary_iterable_allocation_for_first_element.rs index fc5b0a88b2ee5..4f57393bc1b8a 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/unnecessary_iterable_allocation_for_first_element.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/unnecessary_iterable_allocation_for_first_element.rs @@ -2,7 +2,7 @@ use std::borrow::Cow; use ruff_diagnostics::{AlwaysFixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Arguments, Comprehension, Constant, Expr, Int}; +use ruff_python_ast::{self as ast, Arguments, Comprehension, Expr, Int}; use ruff_python_semantic::SemanticModel; use ruff_python_stdlib::builtins::is_iterator; use ruff_text_size::{Ranged, TextRange, TextSize}; @@ -108,8 +108,8 @@ pub(crate) fn unnecessary_iterable_allocation_for_first_element( fn is_head_slice(expr: &Expr) -> bool { matches!( expr, - Expr::Constant(ast::ExprConstant { - value: Constant::Int(Int::ZERO), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(Int::ZERO), .. }) ) diff --git a/crates/ruff_linter/src/rules/ruff/rules/unreachable.rs b/crates/ruff_linter/src/rules/ruff/rules/unreachable.rs index e52fe4889bf27..100ca9ddd4953 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/unreachable.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/unreachable.rs @@ -2,8 +2,8 @@ use std::{fmt, iter, usize}; use log::error; use ruff_python_ast::{ - Expr, Identifier, MatchCase, Pattern, PatternMatchAs, Stmt, StmtFor, StmtMatch, StmtReturn, - StmtTry, StmtWhile, StmtWith, + Expr, ExprBooleanLiteral, Identifier, MatchCase, Pattern, PatternMatchAs, Stmt, StmtFor, + StmtMatch, StmtReturn, StmtTry, StmtWhile, StmtWith, }; use ruff_text_size::{Ranged, TextRange, TextSize}; @@ -189,7 +189,7 @@ fn taken(condition: &Condition) -> Option { // statically. For now we only consider constant booleans. match condition { Condition::Test(expr) => match expr { - Expr::Constant(constant) => constant.value.as_bool().copied(), + Expr::BooleanLiteral(ExprBooleanLiteral { value, .. }) => Some(*value), _ => None, }, Condition::Iterator(_) => None, @@ -627,7 +627,12 @@ impl<'stmt> BasicBlocksBuilder<'stmt> { | Expr::Call(_) | Expr::FormattedValue(_) | Expr::FString(_) - | Expr::Constant(_) + | Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) | Expr::Attribute(_) | Expr::Subscript(_) | Expr::Starred(_) diff --git a/crates/ruff_linter/src/rules/ruff/typing.rs b/crates/ruff_linter/src/rules/ruff/typing.rs index 6f8d40f053992..730e93357ef94 100644 --- a/crates/ruff_linter/src/rules/ruff/typing.rs +++ b/crates/ruff_linter/src/rules/ruff/typing.rs @@ -1,5 +1,5 @@ use itertools::Either::{Left, Right}; -use ruff_python_ast::{self as ast, Constant, Expr, Operator}; +use ruff_python_ast::{self as ast, Expr, Operator}; use ruff_python_ast::call_path::CallPath; use ruff_python_parser::typing::parse_type_annotation; @@ -107,13 +107,11 @@ impl<'a> TypingTarget<'a> { right, .. }) => Some(TypingTarget::PEP604Union(left, right)), - Expr::Constant(ast::ExprConstant { - value: Constant::None, - .. - }) => Some(TypingTarget::None), - Expr::Constant(ast::ExprConstant { - value: Constant::Str(string), + Expr::NoneLiteral(_) => Some(TypingTarget::None), + Expr::StringLiteral(ast::ExprStringLiteral { + value: string, range, + .. }) => parse_type_annotation(string, *range, locator.contents()) .map_or(None, |(expr, _)| Some(TypingTarget::ForwardReference(expr))), _ => semantic.resolve_call_path(expr).map_or( diff --git a/crates/ruff_linter/src/rules/tryceratops/rules/raise_vanilla_args.rs b/crates/ruff_linter/src/rules/tryceratops/rules/raise_vanilla_args.rs index bb07a670b1b02..58f94a56e7bf3 100644 --- a/crates/ruff_linter/src/rules/tryceratops/rules/raise_vanilla_args.rs +++ b/crates/ruff_linter/src/rules/tryceratops/rules/raise_vanilla_args.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::{self as ast, Arguments, Constant, Expr}; +use ruff_python_ast::{self as ast, Arguments, Expr}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -96,10 +96,7 @@ fn contains_message(expr: &Expr) -> bool { } } } - Expr::Constant(ast::ExprConstant { - value: Constant::Str(value), - .. - }) => { + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => { if value.chars().any(char::is_whitespace) { return true; } diff --git a/crates/ruff_python_ast/src/all.rs b/crates/ruff_python_ast/src/all.rs index bd0bd66d04a7f..23472dafb61f9 100644 --- a/crates/ruff_python_ast/src/all.rs +++ b/crates/ruff_python_ast/src/all.rs @@ -1,5 +1,5 @@ use crate::helpers::map_subscript; -use crate::{self as ast, Constant, Expr, Stmt}; +use crate::{self as ast, Expr, Stmt}; use bitflags::bitflags; bitflags! { @@ -23,11 +23,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(ast::StringConstant { value, .. }), - .. - }) = elt - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = elt { names.push(value); } else { *flags |= DunderAllFlags::INVALID_OBJECT; diff --git a/crates/ruff_python_ast/src/comparable.rs b/crates/ruff_python_ast/src/comparable.rs index 295ab5b576d93..d0a219a3367cf 100644 --- a/crates/ruff_python_ast/src/comparable.rs +++ b/crates/ruff_python_ast/src/comparable.rs @@ -344,45 +344,21 @@ impl From<&ast::Singleton> for ComparableSingleton { } #[derive(Debug, PartialEq, Eq, Hash)] -pub enum ComparableConstant<'a> { - None, - Bool(&'a bool), - Str { value: &'a str, unicode: bool }, - Bytes(&'a [u8]), +pub enum ComparableNumber<'a> { Int(&'a ast::Int), Float(u64), Complex { real: u64, imag: u64 }, - Ellipsis, } -impl<'a> From<&'a ast::Constant> for ComparableConstant<'a> { - fn from(constant: &'a ast::Constant) -> Self { - match constant { - ast::Constant::None => Self::None, - ast::Constant::Bool(value) => Self::Bool(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: _, - unicode, - }) => Self::Str { - value, - unicode: *unicode, - }, - 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 { +impl<'a> From<&'a ast::Number> for ComparableNumber<'a> { + fn from(number: &'a ast::Number) -> Self { + match number { + ast::Number::Int(value) => Self::Int(value), + ast::Number::Float(value) => Self::Float(value.to_bits()), + ast::Number::Complex { real, imag } => Self::Complex { real: real.to_bits(), imag: imag.to_bits(), }, - ast::Constant::Ellipsis => Self::Ellipsis, } } } @@ -669,8 +645,24 @@ pub struct ExprFString<'a> { } #[derive(Debug, PartialEq, Eq, Hash)] -pub struct ExprConstant<'a> { - value: ComparableConstant<'a>, +pub struct ExprStringLiteral<'a> { + value: &'a str, + unicode: &'a bool, +} + +#[derive(Debug, PartialEq, Eq, Hash)] +pub struct ExprBytesLiteral<'a> { + value: &'a [u8], +} + +#[derive(Debug, PartialEq, Eq, Hash)] +pub struct ExprNumberLiteral<'a> { + value: ComparableNumber<'a>, +} + +#[derive(Debug, PartialEq, Eq, Hash)] +pub struct ExprBoolLiteral<'a> { + value: &'a bool, } #[derive(Debug, PartialEq, Eq, Hash)] @@ -739,7 +731,12 @@ pub enum ComparableExpr<'a> { Call(ExprCall<'a>), FormattedValue(ExprFormattedValue<'a>), FString(ExprFString<'a>), - Constant(ExprConstant<'a>), + StringLiteral(ExprStringLiteral<'a>), + BytesLiteral(ExprBytesLiteral<'a>), + NumberLiteral(ExprNumberLiteral<'a>), + BoolLiteral(ExprBoolLiteral<'a>), + NoneLiteral, + EllispsisLiteral, Attribute(ExprAttribute<'a>), Subscript(ExprSubscript<'a>), Starred(ExprStarred<'a>), @@ -913,11 +910,31 @@ impl<'a> From<&'a ast::Expr> for ComparableExpr<'a> { }) => Self::FString(ExprFString { values: values.iter().map(Into::into).collect(), }), - ast::Expr::Constant(ast::ExprConstant { value, range: _ }) => { - Self::Constant(ExprConstant { + ast::Expr::StringLiteral(ast::ExprStringLiteral { + value, + // Compare strings based on resolved value, not representation (i.e., ignore whether + // the string was implicitly concatenated). + implicit_concatenated: _, + unicode, + range: _, + }) => Self::StringLiteral(ExprStringLiteral { value, unicode }), + ast::Expr::BytesLiteral(ast::ExprBytesLiteral { + value, + // Compare bytes based on resolved value, not representation (i.e., ignore whether + // the bytes was implicitly concatenated). + implicit_concatenated: _, + range: _, + }) => Self::BytesLiteral(ExprBytesLiteral { value }), + ast::Expr::NumberLiteral(ast::ExprNumberLiteral { value, range: _ }) => { + Self::NumberLiteral(ExprNumberLiteral { value: value.into(), }) } + ast::Expr::BooleanLiteral(ast::ExprBooleanLiteral { value, range: _ }) => { + Self::BoolLiteral(ExprBoolLiteral { value }) + } + ast::Expr::NoneLiteral(_) => Self::NoneLiteral, + ast::Expr::EllipsisLiteral(_) => Self::EllispsisLiteral, ast::Expr::Attribute(ast::ExprAttribute { value, attr, diff --git a/crates/ruff_python_ast/src/expression.rs b/crates/ruff_python_ast/src/expression.rs index 041c0a0e4ea05..c1412b978b168 100644 --- a/crates/ruff_python_ast/src/expression.rs +++ b/crates/ruff_python_ast/src/expression.rs @@ -25,7 +25,12 @@ pub enum ExpressionRef<'a> { Call(&'a ast::ExprCall), FormattedValue(&'a ast::ExprFormattedValue), FString(&'a ast::ExprFString), - Constant(&'a ast::ExprConstant), + StringLiteral(&'a ast::ExprStringLiteral), + BytesLiteral(&'a ast::ExprBytesLiteral), + NumberLiteral(&'a ast::ExprNumberLiteral), + BooleanLiteral(&'a ast::ExprBooleanLiteral), + NoneLiteral(&'a ast::ExprNoneLiteral), + EllipsisLiteral(&'a ast::ExprEllipsisLiteral), Attribute(&'a ast::ExprAttribute), Subscript(&'a ast::ExprSubscript), Starred(&'a ast::ExprStarred), @@ -64,7 +69,12 @@ impl<'a> From<&'a Expr> for ExpressionRef<'a> { Expr::Call(value) => ExpressionRef::Call(value), Expr::FormattedValue(value) => ExpressionRef::FormattedValue(value), Expr::FString(value) => ExpressionRef::FString(value), - Expr::Constant(value) => ExpressionRef::Constant(value), + Expr::StringLiteral(value) => ExpressionRef::StringLiteral(value), + Expr::BytesLiteral(value) => ExpressionRef::BytesLiteral(value), + Expr::NumberLiteral(value) => ExpressionRef::NumberLiteral(value), + Expr::BooleanLiteral(value) => ExpressionRef::BooleanLiteral(value), + Expr::NoneLiteral(value) => ExpressionRef::NoneLiteral(value), + Expr::EllipsisLiteral(value) => ExpressionRef::EllipsisLiteral(value), Expr::Attribute(value) => ExpressionRef::Attribute(value), Expr::Subscript(value) => ExpressionRef::Subscript(value), Expr::Starred(value) => ExpressionRef::Starred(value), @@ -172,9 +182,34 @@ impl<'a> From<&'a ast::ExprFString> for ExpressionRef<'a> { Self::FString(value) } } -impl<'a> From<&'a ast::ExprConstant> for ExpressionRef<'a> { - fn from(value: &'a ast::ExprConstant) -> Self { - Self::Constant(value) +impl<'a> From<&'a ast::ExprStringLiteral> for ExpressionRef<'a> { + fn from(value: &'a ast::ExprStringLiteral) -> Self { + Self::StringLiteral(value) + } +} +impl<'a> From<&'a ast::ExprBytesLiteral> for ExpressionRef<'a> { + fn from(value: &'a ast::ExprBytesLiteral) -> Self { + Self::BytesLiteral(value) + } +} +impl<'a> From<&'a ast::ExprNumberLiteral> for ExpressionRef<'a> { + fn from(value: &'a ast::ExprNumberLiteral) -> Self { + Self::NumberLiteral(value) + } +} +impl<'a> From<&'a ast::ExprBooleanLiteral> for ExpressionRef<'a> { + fn from(value: &'a ast::ExprBooleanLiteral) -> Self { + Self::BooleanLiteral(value) + } +} +impl<'a> From<&'a ast::ExprNoneLiteral> for ExpressionRef<'a> { + fn from(value: &'a ast::ExprNoneLiteral) -> Self { + Self::NoneLiteral(value) + } +} +impl<'a> From<&'a ast::ExprEllipsisLiteral> for ExpressionRef<'a> { + fn from(value: &'a ast::ExprEllipsisLiteral) -> Self { + Self::EllipsisLiteral(value) } } impl<'a> From<&'a ast::ExprAttribute> for ExpressionRef<'a> { @@ -240,7 +275,14 @@ impl<'a> From> for AnyNodeRef<'a> { ExpressionRef::Call(expression) => AnyNodeRef::ExprCall(expression), ExpressionRef::FormattedValue(expression) => AnyNodeRef::ExprFormattedValue(expression), ExpressionRef::FString(expression) => AnyNodeRef::ExprFString(expression), - ExpressionRef::Constant(expression) => AnyNodeRef::ExprConstant(expression), + ExpressionRef::StringLiteral(expression) => AnyNodeRef::ExprStringLiteral(expression), + ExpressionRef::BytesLiteral(expression) => AnyNodeRef::ExprBytesLiteral(expression), + ExpressionRef::NumberLiteral(expression) => AnyNodeRef::ExprNumberLiteral(expression), + ExpressionRef::BooleanLiteral(expression) => AnyNodeRef::ExprBooleanLiteral(expression), + ExpressionRef::NoneLiteral(expression) => AnyNodeRef::ExprNoneLiteral(expression), + ExpressionRef::EllipsisLiteral(expression) => { + AnyNodeRef::ExprEllipsisLiteral(expression) + } ExpressionRef::Attribute(expression) => AnyNodeRef::ExprAttribute(expression), ExpressionRef::Subscript(expression) => AnyNodeRef::ExprSubscript(expression), ExpressionRef::Starred(expression) => AnyNodeRef::ExprStarred(expression), @@ -277,7 +319,12 @@ impl Ranged for ExpressionRef<'_> { ExpressionRef::Call(expression) => expression.range(), ExpressionRef::FormattedValue(expression) => expression.range(), ExpressionRef::FString(expression) => expression.range(), - ExpressionRef::Constant(expression) => expression.range(), + ExpressionRef::StringLiteral(expression) => expression.range(), + ExpressionRef::BytesLiteral(expression) => expression.range(), + ExpressionRef::NumberLiteral(expression) => expression.range(), + ExpressionRef::BooleanLiteral(expression) => expression.range(), + ExpressionRef::NoneLiteral(expression) => expression.range(), + ExpressionRef::EllipsisLiteral(expression) => expression.range(), ExpressionRef::Attribute(expression) => expression.range(), ExpressionRef::Subscript(expression) => expression.range(), ExpressionRef::Starred(expression) => expression.range(), diff --git a/crates/ruff_python_ast/src/helpers.rs b/crates/ruff_python_ast/src/helpers.rs index 4bd66427f8311..49b3c24b787c0 100644 --- a/crates/ruff_python_ast/src/helpers.rs +++ b/crates/ruff_python_ast/src/helpers.rs @@ -12,8 +12,7 @@ use crate::parenthesize::parenthesized_range; use crate::statement_visitor::{walk_body, walk_stmt, StatementVisitor}; use crate::AnyNodeRef; use crate::{ - self as ast, Arguments, CmpOp, Constant, ExceptHandler, Expr, MatchCase, Pattern, Stmt, - TypeParam, + self as ast, Arguments, CmpOp, ExceptHandler, Expr, MatchCase, Pattern, Stmt, TypeParam, }; /// Return `true` if the `Stmt` is a compound statement (as opposed to a simple statement). @@ -69,7 +68,12 @@ where if let Expr::BinOp(ast::ExprBinOp { left, right, .. }) = expr { if !matches!( left.as_ref(), - Expr::Constant(_) + Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) | Expr::FString(_) | Expr::List(_) | Expr::Tuple(_) @@ -83,7 +87,12 @@ where } if !matches!( right.as_ref(), - Expr::Constant(_) + Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) | Expr::FString(_) | Expr::List(_) | Expr::Tuple(_) @@ -245,8 +254,14 @@ pub fn any_over_expr(expr: &Expr, func: &dyn Fn(&Expr) -> bool) -> bool { .as_ref() .is_some_and(|value| any_over_expr(value, func)) } - Expr::Name(_) | Expr::Constant(_) => false, - Expr::IpyEscapeCommand(_) => false, + Expr::Name(_) + | Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) + | Expr::IpyEscapeCommand(_) => false, } } @@ -557,17 +572,19 @@ pub fn is_assignment_to_a_dunder(stmt: &Stmt) -> bool { pub const fn is_singleton(expr: &Expr) -> bool { matches!( expr, - Expr::Constant(ast::ExprConstant { - value: Constant::None | Constant::Bool(_) | Constant::Ellipsis, - .. - }) + Expr::NoneLiteral(_) | Expr::BooleanLiteral(_) | Expr::EllipsisLiteral(_) ) } /// Return `true` if the [`Expr`] is a constant or tuple of constants. pub fn is_constant(expr: &Expr) -> bool { match expr { - Expr::Constant(_) => true, + Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) => true, Expr::Tuple(ast::ExprTuple { elts, .. }) => elts.iter().all(is_constant), _ => false, } @@ -580,23 +597,14 @@ pub fn is_constant_non_singleton(expr: &Expr) -> bool { /// Return `true` if an [`Expr`] is `None`. pub const fn is_const_none(expr: &Expr) -> bool { - matches!( - expr, - Expr::Constant(ast::ExprConstant { - value: Constant::None, - .. - }), - ) + expr.is_none_literal_expr() } /// Return `true` if an [`Expr`] is `True`. pub const fn is_const_true(expr: &Expr) -> bool { matches!( expr, - Expr::Constant(ast::ExprConstant { - value: Constant::Bool(true), - .. - }), + Expr::BooleanLiteral(ast::ExprBooleanLiteral { value: true, .. }), ) } @@ -604,10 +612,7 @@ pub const fn is_const_true(expr: &Expr) -> bool { pub const fn is_const_false(expr: &Expr) -> bool { matches!( expr, - Expr::Constant(ast::ExprConstant { - value: Constant::Bool(false), - .. - }), + Expr::BooleanLiteral(ast::ExprBooleanLiteral { value: false, .. }), ) } @@ -939,13 +944,7 @@ where /// Return `true` if a `Stmt` is a docstring. pub fn is_docstring_stmt(stmt: &Stmt) -> bool { if let Stmt::Expr(ast::StmtExpr { value, range: _ }) = stmt { - matches!( - value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Str { .. }, - .. - }) - ) + value.is_string_literal_expr() } else { false } @@ -1072,25 +1071,21 @@ impl Truthiness { F: Fn(&str) -> bool, { match expr { - Expr::Constant(ast::ExprConstant { value, .. }) => match value { - Constant::Bool(value) => Some(*value), - Constant::None => Some(false), - Constant::Str(ast::StringConstant { value, .. }) => Some(!value.is_empty()), - Constant::Bytes(bytes) => Some(!bytes.is_empty()), - Constant::Int(int) => Some(*int != 0), - Constant::Float(float) => Some(*float != 0.0), - Constant::Complex { real, imag } => Some(*real != 0.0 || *imag != 0.0), - Constant::Ellipsis => Some(true), + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => Some(!value.is_empty()), + Expr::BytesLiteral(ast::ExprBytesLiteral { value, .. }) => Some(!value.is_empty()), + Expr::NumberLiteral(ast::ExprNumberLiteral { value, .. }) => match value { + ast::Number::Int(int) => Some(*int != 0), + ast::Number::Float(float) => Some(*float != 0.0), + ast::Number::Complex { real, imag, .. } => Some(*real != 0.0 || *imag != 0.0), }, + Expr::BooleanLiteral(ast::ExprBooleanLiteral { value, .. }) => Some(*value), + Expr::NoneLiteral(_) => Some(false), + Expr::EllipsisLiteral(_) => Some(true), Expr::FString(ast::ExprFString { values, .. }) => { if values.is_empty() { Some(false) } else if values.iter().any(|value| { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Str(ast::StringConstant { value, .. }), - .. - }) = &value - { + if let Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) = &value { !value.is_empty() } else { false @@ -1196,8 +1191,9 @@ mod tests { use crate::helpers::{any_over_stmt, any_over_type_param, resolve_imported_module_path}; use crate::{ - Constant, Expr, ExprConstant, ExprContext, ExprName, Identifier, Int, Stmt, StmtTypeAlias, - TypeParam, TypeParamParamSpec, TypeParamTypeVar, TypeParamTypeVarTuple, TypeParams, + Expr, ExprContext, ExprName, ExprNumberLiteral, Identifier, Int, Number, Stmt, + StmtTypeAlias, TypeParam, TypeParamParamSpec, TypeParamTypeVar, TypeParamTypeVarTuple, + TypeParams, }; #[test] @@ -1245,16 +1241,16 @@ mod tests { range: TextRange::default(), ctx: ExprContext::Load, }); - let constant_one = Expr::Constant(ExprConstant { - value: Constant::Int(1.into()), + let constant_one = Expr::NumberLiteral(ExprNumberLiteral { + value: Number::Int(1.into()), range: TextRange::default(), }); - let constant_two = Expr::Constant(ExprConstant { - value: Constant::Int(2.into()), + let constant_two = Expr::NumberLiteral(ExprNumberLiteral { + value: Number::Int(2.into()), range: TextRange::default(), }); - let constant_three = Expr::Constant(ExprConstant { - value: Constant::Int(3.into()), + let constant_three = Expr::NumberLiteral(ExprNumberLiteral { + value: Number::Int(3.into()), range: TextRange::default(), }); let type_var_one = TypeParam::TypeVar(TypeParamTypeVar { @@ -1295,8 +1291,8 @@ mod tests { }); assert!(!any_over_type_param(&type_var_no_bound, &|_expr| true)); - let bound = Expr::Constant(ExprConstant { - value: Constant::Int(Int::ONE), + let bound = Expr::NumberLiteral(ExprNumberLiteral { + value: Number::Int(Int::ONE), range: TextRange::default(), }); diff --git a/crates/ruff_python_ast/src/node.rs b/crates/ruff_python_ast/src/node.rs index 4a13ea63d63e5..e1a3b5ebf6486 100644 --- a/crates/ruff_python_ast/src/node.rs +++ b/crates/ruff_python_ast/src/node.rs @@ -73,7 +73,12 @@ pub enum AnyNode { ExprCall(ast::ExprCall), ExprFormattedValue(ast::ExprFormattedValue), ExprFString(ast::ExprFString), - ExprConstant(ast::ExprConstant), + ExprStringLiteral(ast::ExprStringLiteral), + ExprBytesLiteral(ast::ExprBytesLiteral), + ExprNumberLiteral(ast::ExprNumberLiteral), + ExprBooleanLiteral(ast::ExprBooleanLiteral), + ExprNoneLiteral(ast::ExprNoneLiteral), + ExprEllipsisLiteral(ast::ExprEllipsisLiteral), ExprAttribute(ast::ExprAttribute), ExprSubscript(ast::ExprSubscript), ExprStarred(ast::ExprStarred), @@ -160,7 +165,12 @@ impl AnyNode { | AnyNode::ExprCall(_) | AnyNode::ExprFormattedValue(_) | AnyNode::ExprFString(_) - | AnyNode::ExprConstant(_) + | AnyNode::ExprStringLiteral(_) + | AnyNode::ExprBytesLiteral(_) + | AnyNode::ExprNumberLiteral(_) + | AnyNode::ExprBooleanLiteral(_) + | AnyNode::ExprNoneLiteral(_) + | AnyNode::ExprEllipsisLiteral(_) | AnyNode::ExprAttribute(_) | AnyNode::ExprSubscript(_) | AnyNode::ExprStarred(_) @@ -219,7 +229,12 @@ impl AnyNode { AnyNode::ExprCall(node) => Some(Expr::Call(node)), AnyNode::ExprFormattedValue(node) => Some(Expr::FormattedValue(node)), AnyNode::ExprFString(node) => Some(Expr::FString(node)), - AnyNode::ExprConstant(node) => Some(Expr::Constant(node)), + AnyNode::ExprStringLiteral(node) => Some(Expr::StringLiteral(node)), + AnyNode::ExprBytesLiteral(node) => Some(Expr::BytesLiteral(node)), + AnyNode::ExprNumberLiteral(node) => Some(Expr::NumberLiteral(node)), + AnyNode::ExprBooleanLiteral(node) => Some(Expr::BooleanLiteral(node)), + AnyNode::ExprNoneLiteral(node) => Some(Expr::NoneLiteral(node)), + AnyNode::ExprEllipsisLiteral(node) => Some(Expr::EllipsisLiteral(node)), AnyNode::ExprAttribute(node) => Some(Expr::Attribute(node)), AnyNode::ExprSubscript(node) => Some(Expr::Subscript(node)), AnyNode::ExprStarred(node) => Some(Expr::Starred(node)), @@ -334,7 +349,12 @@ impl AnyNode { | AnyNode::ExprCall(_) | AnyNode::ExprFormattedValue(_) | AnyNode::ExprFString(_) - | AnyNode::ExprConstant(_) + | AnyNode::ExprStringLiteral(_) + | AnyNode::ExprBytesLiteral(_) + | AnyNode::ExprNumberLiteral(_) + | AnyNode::ExprBooleanLiteral(_) + | AnyNode::ExprNoneLiteral(_) + | AnyNode::ExprEllipsisLiteral(_) | AnyNode::ExprAttribute(_) | AnyNode::ExprSubscript(_) | AnyNode::ExprStarred(_) @@ -429,7 +449,12 @@ impl AnyNode { | AnyNode::ExprCall(_) | AnyNode::ExprFormattedValue(_) | AnyNode::ExprFString(_) - | AnyNode::ExprConstant(_) + | AnyNode::ExprStringLiteral(_) + | AnyNode::ExprBytesLiteral(_) + | AnyNode::ExprNumberLiteral(_) + | AnyNode::ExprBooleanLiteral(_) + | AnyNode::ExprNoneLiteral(_) + | AnyNode::ExprEllipsisLiteral(_) | AnyNode::ExprAttribute(_) | AnyNode::ExprSubscript(_) | AnyNode::ExprStarred(_) @@ -509,7 +534,12 @@ impl AnyNode { | AnyNode::ExprCall(_) | AnyNode::ExprFormattedValue(_) | AnyNode::ExprFString(_) - | AnyNode::ExprConstant(_) + | AnyNode::ExprStringLiteral(_) + | AnyNode::ExprBytesLiteral(_) + | AnyNode::ExprNumberLiteral(_) + | AnyNode::ExprBooleanLiteral(_) + | AnyNode::ExprNoneLiteral(_) + | AnyNode::ExprEllipsisLiteral(_) | AnyNode::ExprAttribute(_) | AnyNode::ExprSubscript(_) | AnyNode::ExprStarred(_) @@ -614,7 +644,12 @@ impl AnyNode { Self::ExprCall(node) => AnyNodeRef::ExprCall(node), Self::ExprFormattedValue(node) => AnyNodeRef::ExprFormattedValue(node), Self::ExprFString(node) => AnyNodeRef::ExprFString(node), - Self::ExprConstant(node) => AnyNodeRef::ExprConstant(node), + Self::ExprStringLiteral(node) => AnyNodeRef::ExprStringLiteral(node), + Self::ExprBytesLiteral(node) => AnyNodeRef::ExprBytesLiteral(node), + Self::ExprNumberLiteral(node) => AnyNodeRef::ExprNumberLiteral(node), + Self::ExprBooleanLiteral(node) => AnyNodeRef::ExprBooleanLiteral(node), + Self::ExprNoneLiteral(node) => AnyNodeRef::ExprNoneLiteral(node), + Self::ExprEllipsisLiteral(node) => AnyNodeRef::ExprEllipsisLiteral(node), Self::ExprAttribute(node) => AnyNodeRef::ExprAttribute(node), Self::ExprSubscript(node) => AnyNodeRef::ExprSubscript(node), Self::ExprStarred(node) => AnyNodeRef::ExprStarred(node), @@ -2650,12 +2685,12 @@ impl AstNode for ast::ExprFString { } } } -impl AstNode for ast::ExprConstant { +impl AstNode for ast::ExprStringLiteral { fn cast(kind: AnyNode) -> Option where Self: Sized, { - if let AnyNode::ExprConstant(node) = kind { + if let AnyNode::ExprStringLiteral(node) = kind { Some(node) } else { None @@ -2663,7 +2698,7 @@ impl AstNode for ast::ExprConstant { } fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { - if let AnyNodeRef::ExprConstant(node) = kind { + if let AnyNodeRef::ExprStringLiteral(node) = kind { Some(node) } else { None @@ -2678,12 +2713,180 @@ impl AstNode for ast::ExprConstant { AnyNode::from(self) } - fn visit_preorder<'a, V>(&'a self, visitor: &mut V) + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + } +} +impl AstNode for ast::ExprBytesLiteral { + fn cast(kind: AnyNode) -> Option + where + Self: Sized, + { + if let AnyNode::ExprBytesLiteral(node) = kind { + Some(node) + } else { + None + } + } + + fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { + if let AnyNodeRef::ExprBytesLiteral(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) + } + + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + } +} +impl AstNode for ast::ExprNumberLiteral { + fn cast(kind: AnyNode) -> Option + where + Self: Sized, + { + if let AnyNode::ExprNumberLiteral(node) = kind { + Some(node) + } else { + None + } + } + + fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { + if let AnyNodeRef::ExprNumberLiteral(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) + } + + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + } +} +impl AstNode for ast::ExprBooleanLiteral { + fn cast(kind: AnyNode) -> Option + where + Self: Sized, + { + if let AnyNode::ExprBooleanLiteral(node) = kind { + Some(node) + } else { + None + } + } + + fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { + if let AnyNodeRef::ExprBooleanLiteral(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) + } + + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + } +} +impl AstNode for ast::ExprNoneLiteral { + fn cast(kind: AnyNode) -> Option + where + Self: Sized, + { + if let AnyNode::ExprNoneLiteral(node) = kind { + Some(node) + } else { + None + } + } + + fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { + if let AnyNodeRef::ExprNoneLiteral(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) + } + + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) + where + V: PreorderVisitor<'a> + ?Sized, + { + } +} +impl AstNode for ast::ExprEllipsisLiteral { + fn cast(kind: AnyNode) -> Option + where + Self: Sized, + { + if let AnyNode::ExprEllipsisLiteral(node) = kind { + Some(node) + } else { + None + } + } + + fn cast_ref(kind: AnyNodeRef) -> Option<&Self> { + if let AnyNodeRef::ExprEllipsisLiteral(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) + } + + fn visit_preorder<'a, V>(&'a self, _visitor: &mut V) where V: PreorderVisitor<'a> + ?Sized, { - let ast::ExprConstant { value, range: _ } = self; - visitor.visit_constant(value); } } impl AstNode for ast::ExprAttribute { @@ -4124,7 +4327,12 @@ impl From for AnyNode { Expr::Call(node) => AnyNode::ExprCall(node), Expr::FormattedValue(node) => AnyNode::ExprFormattedValue(node), Expr::FString(node) => AnyNode::ExprFString(node), - Expr::Constant(node) => AnyNode::ExprConstant(node), + Expr::StringLiteral(node) => AnyNode::ExprStringLiteral(node), + Expr::BytesLiteral(node) => AnyNode::ExprBytesLiteral(node), + Expr::NumberLiteral(node) => AnyNode::ExprNumberLiteral(node), + Expr::BooleanLiteral(node) => AnyNode::ExprBooleanLiteral(node), + Expr::NoneLiteral(node) => AnyNode::ExprNoneLiteral(node), + Expr::EllipsisLiteral(node) => AnyNode::ExprEllipsisLiteral(node), Expr::Attribute(node) => AnyNode::ExprAttribute(node), Expr::Subscript(node) => AnyNode::ExprSubscript(node), Expr::Starred(node) => AnyNode::ExprStarred(node), @@ -4451,9 +4659,39 @@ impl From for AnyNode { } } -impl From for AnyNode { - fn from(node: ast::ExprConstant) -> Self { - AnyNode::ExprConstant(node) +impl From for AnyNode { + fn from(node: ast::ExprStringLiteral) -> Self { + AnyNode::ExprStringLiteral(node) + } +} + +impl From for AnyNode { + fn from(node: ast::ExprBytesLiteral) -> Self { + AnyNode::ExprBytesLiteral(node) + } +} + +impl From for AnyNode { + fn from(node: ast::ExprNumberLiteral) -> Self { + AnyNode::ExprNumberLiteral(node) + } +} + +impl From for AnyNode { + fn from(node: ast::ExprBooleanLiteral) -> Self { + AnyNode::ExprBooleanLiteral(node) + } +} + +impl From for AnyNode { + fn from(node: ast::ExprNoneLiteral) -> Self { + AnyNode::ExprNoneLiteral(node) + } +} + +impl From for AnyNode { + fn from(node: ast::ExprEllipsisLiteral) -> Self { + AnyNode::ExprEllipsisLiteral(node) } } @@ -4693,7 +4931,12 @@ impl Ranged for AnyNode { AnyNode::ExprCall(node) => node.range(), AnyNode::ExprFormattedValue(node) => node.range(), AnyNode::ExprFString(node) => node.range(), - AnyNode::ExprConstant(node) => node.range(), + AnyNode::ExprStringLiteral(node) => node.range(), + AnyNode::ExprBytesLiteral(node) => node.range(), + AnyNode::ExprNumberLiteral(node) => node.range(), + AnyNode::ExprBooleanLiteral(node) => node.range(), + AnyNode::ExprNoneLiteral(node) => node.range(), + AnyNode::ExprEllipsisLiteral(node) => node.range(), AnyNode::ExprAttribute(node) => node.range(), AnyNode::ExprSubscript(node) => node.range(), AnyNode::ExprStarred(node) => node.range(), @@ -4780,7 +5023,12 @@ pub enum AnyNodeRef<'a> { ExprCall(&'a ast::ExprCall), ExprFormattedValue(&'a ast::ExprFormattedValue), ExprFString(&'a ast::ExprFString), - ExprConstant(&'a ast::ExprConstant), + ExprStringLiteral(&'a ast::ExprStringLiteral), + ExprBytesLiteral(&'a ast::ExprBytesLiteral), + ExprNumberLiteral(&'a ast::ExprNumberLiteral), + ExprBooleanLiteral(&'a ast::ExprBooleanLiteral), + ExprNoneLiteral(&'a ast::ExprNoneLiteral), + ExprEllipsisLiteral(&'a ast::ExprEllipsisLiteral), ExprAttribute(&'a ast::ExprAttribute), ExprSubscript(&'a ast::ExprSubscript), ExprStarred(&'a ast::ExprStarred), @@ -4866,7 +5114,12 @@ impl<'a> AnyNodeRef<'a> { AnyNodeRef::ExprCall(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprFormattedValue(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprFString(node) => NonNull::from(*node).cast(), - AnyNodeRef::ExprConstant(node) => NonNull::from(*node).cast(), + AnyNodeRef::ExprStringLiteral(node) => NonNull::from(*node).cast(), + AnyNodeRef::ExprBytesLiteral(node) => NonNull::from(*node).cast(), + AnyNodeRef::ExprNumberLiteral(node) => NonNull::from(*node).cast(), + AnyNodeRef::ExprBooleanLiteral(node) => NonNull::from(*node).cast(), + AnyNodeRef::ExprNoneLiteral(node) => NonNull::from(*node).cast(), + AnyNodeRef::ExprEllipsisLiteral(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprAttribute(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprSubscript(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprStarred(node) => NonNull::from(*node).cast(), @@ -4958,7 +5211,12 @@ impl<'a> AnyNodeRef<'a> { AnyNodeRef::ExprCall(_) => NodeKind::ExprCall, AnyNodeRef::ExprFormattedValue(_) => NodeKind::ExprFormattedValue, AnyNodeRef::ExprFString(_) => NodeKind::ExprFString, - AnyNodeRef::ExprConstant(_) => NodeKind::ExprConstant, + AnyNodeRef::ExprStringLiteral(_) => NodeKind::ExprStringLiteral, + AnyNodeRef::ExprBytesLiteral(_) => NodeKind::ExprBytesLiteral, + AnyNodeRef::ExprNumberLiteral(_) => NodeKind::ExprNumberLiteral, + AnyNodeRef::ExprBooleanLiteral(_) => NodeKind::ExprBooleanLiteral, + AnyNodeRef::ExprNoneLiteral(_) => NodeKind::ExprNoneLiteral, + AnyNodeRef::ExprEllipsisLiteral(_) => NodeKind::ExprEllipsisLiteral, AnyNodeRef::ExprAttribute(_) => NodeKind::ExprAttribute, AnyNodeRef::ExprSubscript(_) => NodeKind::ExprSubscript, AnyNodeRef::ExprStarred(_) => NodeKind::ExprStarred, @@ -5045,7 +5303,12 @@ impl<'a> AnyNodeRef<'a> { | AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprFormattedValue(_) | AnyNodeRef::ExprFString(_) - | AnyNodeRef::ExprConstant(_) + | AnyNodeRef::ExprStringLiteral(_) + | AnyNodeRef::ExprBytesLiteral(_) + | AnyNodeRef::ExprNumberLiteral(_) + | AnyNodeRef::ExprBooleanLiteral(_) + | AnyNodeRef::ExprNoneLiteral(_) + | AnyNodeRef::ExprEllipsisLiteral(_) | AnyNodeRef::ExprAttribute(_) | AnyNodeRef::ExprSubscript(_) | AnyNodeRef::ExprStarred(_) @@ -5104,7 +5367,12 @@ impl<'a> AnyNodeRef<'a> { | AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprFormattedValue(_) | AnyNodeRef::ExprFString(_) - | AnyNodeRef::ExprConstant(_) + | AnyNodeRef::ExprStringLiteral(_) + | AnyNodeRef::ExprBytesLiteral(_) + | AnyNodeRef::ExprNumberLiteral(_) + | AnyNodeRef::ExprBooleanLiteral(_) + | AnyNodeRef::ExprNoneLiteral(_) + | AnyNodeRef::ExprEllipsisLiteral(_) | AnyNodeRef::ExprAttribute(_) | AnyNodeRef::ExprSubscript(_) | AnyNodeRef::ExprStarred(_) @@ -5218,7 +5486,12 @@ impl<'a> AnyNodeRef<'a> { | AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprFormattedValue(_) | AnyNodeRef::ExprFString(_) - | AnyNodeRef::ExprConstant(_) + | AnyNodeRef::ExprStringLiteral(_) + | AnyNodeRef::ExprBytesLiteral(_) + | AnyNodeRef::ExprNumberLiteral(_) + | AnyNodeRef::ExprBooleanLiteral(_) + | AnyNodeRef::ExprNoneLiteral(_) + | AnyNodeRef::ExprEllipsisLiteral(_) | AnyNodeRef::ExprAttribute(_) | AnyNodeRef::ExprSubscript(_) | AnyNodeRef::ExprStarred(_) @@ -5313,7 +5586,12 @@ impl<'a> AnyNodeRef<'a> { | AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprFormattedValue(_) | AnyNodeRef::ExprFString(_) - | AnyNodeRef::ExprConstant(_) + | AnyNodeRef::ExprStringLiteral(_) + | AnyNodeRef::ExprBytesLiteral(_) + | AnyNodeRef::ExprNumberLiteral(_) + | AnyNodeRef::ExprBooleanLiteral(_) + | AnyNodeRef::ExprNoneLiteral(_) + | AnyNodeRef::ExprEllipsisLiteral(_) | AnyNodeRef::ExprAttribute(_) | AnyNodeRef::ExprSubscript(_) | AnyNodeRef::ExprStarred(_) @@ -5393,7 +5671,12 @@ impl<'a> AnyNodeRef<'a> { | AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprFormattedValue(_) | AnyNodeRef::ExprFString(_) - | AnyNodeRef::ExprConstant(_) + | AnyNodeRef::ExprStringLiteral(_) + | AnyNodeRef::ExprBytesLiteral(_) + | AnyNodeRef::ExprNumberLiteral(_) + | AnyNodeRef::ExprBooleanLiteral(_) + | AnyNodeRef::ExprNoneLiteral(_) + | AnyNodeRef::ExprEllipsisLiteral(_) | AnyNodeRef::ExprAttribute(_) | AnyNodeRef::ExprSubscript(_) | AnyNodeRef::ExprStarred(_) @@ -5507,7 +5790,12 @@ impl<'a> AnyNodeRef<'a> { 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::ExprStringLiteral(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprBytesLiteral(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprNumberLiteral(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprBooleanLiteral(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprNoneLiteral(node) => node.visit_preorder(visitor), + AnyNodeRef::ExprEllipsisLiteral(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), @@ -5888,9 +6176,39 @@ impl<'a> From<&'a ast::ExprFString> for AnyNodeRef<'a> { } } -impl<'a> From<&'a ast::ExprConstant> for AnyNodeRef<'a> { - fn from(node: &'a ast::ExprConstant) -> Self { - AnyNodeRef::ExprConstant(node) +impl<'a> From<&'a ast::ExprStringLiteral> for AnyNodeRef<'a> { + fn from(node: &'a ast::ExprStringLiteral) -> Self { + AnyNodeRef::ExprStringLiteral(node) + } +} + +impl<'a> From<&'a ast::ExprBytesLiteral> for AnyNodeRef<'a> { + fn from(node: &'a ast::ExprBytesLiteral) -> Self { + AnyNodeRef::ExprBytesLiteral(node) + } +} + +impl<'a> From<&'a ast::ExprNumberLiteral> for AnyNodeRef<'a> { + fn from(node: &'a ast::ExprNumberLiteral) -> Self { + AnyNodeRef::ExprNumberLiteral(node) + } +} + +impl<'a> From<&'a ast::ExprBooleanLiteral> for AnyNodeRef<'a> { + fn from(node: &'a ast::ExprBooleanLiteral) -> Self { + AnyNodeRef::ExprBooleanLiteral(node) + } +} + +impl<'a> From<&'a ast::ExprNoneLiteral> for AnyNodeRef<'a> { + fn from(node: &'a ast::ExprNoneLiteral) -> Self { + AnyNodeRef::ExprNoneLiteral(node) + } +} + +impl<'a> From<&'a ast::ExprEllipsisLiteral> for AnyNodeRef<'a> { + fn from(node: &'a ast::ExprEllipsisLiteral) -> Self { + AnyNodeRef::ExprEllipsisLiteral(node) } } @@ -6091,7 +6409,12 @@ impl<'a> From<&'a Expr> for AnyNodeRef<'a> { Expr::Call(node) => AnyNodeRef::ExprCall(node), Expr::FormattedValue(node) => AnyNodeRef::ExprFormattedValue(node), Expr::FString(node) => AnyNodeRef::ExprFString(node), - Expr::Constant(node) => AnyNodeRef::ExprConstant(node), + Expr::StringLiteral(node) => AnyNodeRef::ExprStringLiteral(node), + Expr::BytesLiteral(node) => AnyNodeRef::ExprBytesLiteral(node), + Expr::NumberLiteral(node) => AnyNodeRef::ExprNumberLiteral(node), + Expr::BooleanLiteral(node) => AnyNodeRef::ExprBooleanLiteral(node), + Expr::NoneLiteral(node) => AnyNodeRef::ExprNoneLiteral(node), + Expr::EllipsisLiteral(node) => AnyNodeRef::ExprEllipsisLiteral(node), Expr::Attribute(node) => AnyNodeRef::ExprAttribute(node), Expr::Subscript(node) => AnyNodeRef::ExprSubscript(node), Expr::Starred(node) => AnyNodeRef::ExprStarred(node), @@ -6243,7 +6566,12 @@ impl Ranged for AnyNodeRef<'_> { AnyNodeRef::ExprCall(node) => node.range(), AnyNodeRef::ExprFormattedValue(node) => node.range(), AnyNodeRef::ExprFString(node) => node.range(), - AnyNodeRef::ExprConstant(node) => node.range(), + AnyNodeRef::ExprStringLiteral(node) => node.range(), + AnyNodeRef::ExprBytesLiteral(node) => node.range(), + AnyNodeRef::ExprNumberLiteral(node) => node.range(), + AnyNodeRef::ExprBooleanLiteral(node) => node.range(), + AnyNodeRef::ExprNoneLiteral(node) => node.range(), + AnyNodeRef::ExprEllipsisLiteral(node) => node.range(), AnyNodeRef::ExprAttribute(node) => node.range(), AnyNodeRef::ExprSubscript(node) => node.range(), AnyNodeRef::ExprStarred(node) => node.range(), @@ -6332,7 +6660,12 @@ pub enum NodeKind { ExprCall, ExprFormattedValue, ExprFString, - ExprConstant, + ExprStringLiteral, + ExprBytesLiteral, + ExprNumberLiteral, + ExprBooleanLiteral, + ExprNoneLiteral, + ExprEllipsisLiteral, ExprAttribute, ExprSubscript, ExprStarred, diff --git a/crates/ruff_python_ast/src/nodes.rs b/crates/ruff_python_ast/src/nodes.rs index bb7d9dcd7c667..f583f2e3e908e 100644 --- a/crates/ruff_python_ast/src/nodes.rs +++ b/crates/ruff_python_ast/src/nodes.rs @@ -591,8 +591,18 @@ pub enum Expr { FormattedValue(ExprFormattedValue), #[is(name = "f_string_expr")] FString(ExprFString), - #[is(name = "constant_expr")] - Constant(ExprConstant), + #[is(name = "string_literal_expr")] + StringLiteral(ExprStringLiteral), + #[is(name = "bytes_literal_expr")] + BytesLiteral(ExprBytesLiteral), + #[is(name = "number_literal_expr")] + NumberLiteral(ExprNumberLiteral), + #[is(name = "boolean_literal_expr")] + BooleanLiteral(ExprBooleanLiteral), + #[is(name = "none_literal_expr")] + NoneLiteral(ExprNoneLiteral), + #[is(name = "ellipsis_literal_expr")] + EllipsisLiteral(ExprEllipsisLiteral), #[is(name = "attribute_expr")] Attribute(ExprAttribute), #[is(name = "subscript_expr")] @@ -613,6 +623,42 @@ pub enum Expr { IpyEscapeCommand(ExprIpyEscapeCommand), } +impl Expr { + /// Returns `true` if the expression is a literal expression. + /// + /// A literal expression is either a string literal, bytes literal, + /// integer, float, complex number, boolean, `None`, or ellipsis (`...`). + pub fn is_literal_expr(&self) -> bool { + matches!( + self, + Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) + ) + } + + pub fn is_implicit_concatenated_string(&self) -> bool { + match self { + Expr::StringLiteral(ExprStringLiteral { + implicit_concatenated, + .. + }) + | Expr::BytesLiteral(ExprBytesLiteral { + implicit_concatenated, + .. + }) + | Expr::FString(ExprFString { + implicit_concatenated, + .. + }) => *implicit_concatenated, + _ => false, + } + } +} + /// An AST node used to represent a IPython escape command at the expression level. /// /// For example, @@ -941,16 +987,127 @@ impl From for Expr { } } -/// See also [Constant](https://docs.python.org/3/library/ast.html#ast.Constant) #[derive(Clone, Debug, PartialEq)] -pub struct ExprConstant { +pub struct ExprStringLiteral { + pub range: TextRange, + pub value: String, + pub unicode: bool, + pub implicit_concatenated: bool, +} + +impl From for Expr { + fn from(payload: ExprStringLiteral) -> Self { + Expr::StringLiteral(payload) + } +} + +impl Ranged for ExprStringLiteral { + fn range(&self) -> TextRange { + self.range + } +} + +impl Deref for ExprStringLiteral { + type Target = str; + + fn deref(&self) -> &Self::Target { + self.value.as_str() + } +} + +#[derive(Clone, Debug, PartialEq)] +pub struct ExprBytesLiteral { + pub range: TextRange, + pub value: Vec, + pub implicit_concatenated: bool, +} + +impl From for Expr { + fn from(payload: ExprBytesLiteral) -> Self { + Expr::BytesLiteral(payload) + } +} + +impl Ranged for ExprBytesLiteral { + fn range(&self) -> TextRange { + self.range + } +} + +#[derive(Clone, Debug, PartialEq)] +pub struct ExprNumberLiteral { + pub range: TextRange, + pub value: Number, +} + +impl From for Expr { + fn from(payload: ExprNumberLiteral) -> Self { + Expr::NumberLiteral(payload) + } +} + +impl Ranged for ExprNumberLiteral { + fn range(&self) -> TextRange { + self.range + } +} + +#[derive(Clone, Debug, PartialEq, is_macro::Is)] +pub enum Number { + Int(int::Int), + Float(f64), + Complex { real: f64, imag: f64 }, +} + +#[derive(Clone, Debug, PartialEq)] +pub struct ExprBooleanLiteral { + pub range: TextRange, + pub value: bool, +} + +impl From for Expr { + fn from(payload: ExprBooleanLiteral) -> Self { + Expr::BooleanLiteral(payload) + } +} + +impl Ranged for ExprBooleanLiteral { + fn range(&self) -> TextRange { + self.range + } +} + +#[derive(Clone, Debug, PartialEq)] +pub struct ExprNoneLiteral { + pub range: TextRange, +} + +impl From for Expr { + fn from(payload: ExprNoneLiteral) -> Self { + Expr::NoneLiteral(payload) + } +} + +impl Ranged for ExprNoneLiteral { + fn range(&self) -> TextRange { + self.range + } +} + +#[derive(Clone, Debug, PartialEq)] +pub struct ExprEllipsisLiteral { pub range: TextRange, - pub value: Constant, } -impl From for Expr { - fn from(payload: ExprConstant) -> Self { - Expr::Constant(payload) +impl From for Expr { + fn from(payload: ExprEllipsisLiteral) -> Self { + Expr::EllipsisLiteral(payload) + } +} + +impl Ranged for ExprEllipsisLiteral { + fn range(&self) -> TextRange { + self.range } } @@ -2595,142 +2752,6 @@ impl From for Singleton { } } -#[derive(Clone, Debug, PartialEq, is_macro::Is)] -pub enum Constant { - None, - Bool(bool), - Str(StringConstant), - Bytes(BytesConstant), - Int(int::Int), - Float(f64), - Complex { real: f64, imag: f64 }, - Ellipsis, -} - -impl Constant { - /// 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::Str(value) => value.implicit_concatenated, - Constant::Bytes(value) => value.implicit_concatenated, - _ => false, - } - } - - /// Returns `true` if the constant is a string constant that is a unicode string (i.e., `u"..."`). - pub fn is_unicode_string(&self) -> bool { - match self { - Constant::Str(value) => value.unicode, - _ => false, - } - } -} - -#[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 is a Unicode string (i.e., `u"..."`). - pub unicode: bool, - /// 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() - } -} - -impl From for StringConstant { - fn from(value: String) -> StringConstant { - Self { - value, - unicode: false, - implicit_concatenated: false, - } - } -} - -#[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 BytesConstant { - fn from(value: Vec) -> BytesConstant { - Self { - value, - implicit_concatenated: false, - } - } -} - -impl From> for Constant { - 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, - unicode: false, - implicit_concatenated: false, - }) - } -} -impl From for Constant { - fn from(value: bool) -> Constant { - Self::Bool(value) - } -} - -#[cfg(feature = "rustpython-literal")] -impl std::fmt::Display for Constant { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Constant::None => f.pad("None"), - Constant::Bool(b) => f.pad(if *b { "True" } else { "False" }), - Constant::Str(s) => rustpython_literal::escape::UnicodeEscape::new_repr(s.as_str()) - .str_repr() - .write(f), - Constant::Bytes(b) => { - let escape = rustpython_literal::escape::AsciiEscape::new_repr(b); - let repr = escape.bytes_repr().to_string().unwrap(); - f.pad(&repr) - } - Constant::Int(i) => std::fmt::Display::fmt(&i, f), - Constant::Float(fp) => f.pad(&rustpython_literal::float::to_string(*fp)), - Constant::Complex { real, imag } => { - if *real == 0.0 { - write!(f, "{imag}j") - } else { - write!(f, "({real}{imag:+}j)") - } - } - Constant::Ellipsis => f.pad("..."), - } - } -} - impl Ranged for crate::nodes::ModModule { fn range(&self) -> TextRange { self.range @@ -3007,11 +3028,6 @@ impl Ranged for crate::nodes::ExprFString { self.range } } -impl Ranged for crate::nodes::ExprConstant { - fn range(&self) -> TextRange { - self.range - } -} impl Ranged for crate::nodes::ExprAttribute { fn range(&self) -> TextRange { self.range @@ -3074,7 +3090,12 @@ impl Ranged for crate::Expr { Self::Call(node) => node.range(), Self::FormattedValue(node) => node.range(), Self::FString(node) => node.range(), - Self::Constant(node) => node.range(), + Expr::StringLiteral(node) => node.range(), + Expr::BytesLiteral(node) => node.range(), + Expr::NumberLiteral(node) => node.range(), + Expr::BooleanLiteral(node) => node.range(), + Expr::NoneLiteral(node) => node.range(), + Expr::EllipsisLiteral(node) => node.range(), Self::Attribute(node) => node.range(), Self::Subscript(node) => node.range(), Self::Starred(node) => node.range(), @@ -3375,9 +3396,34 @@ impl From for ParenthesizedExpr { Expr::FString(payload).into() } } -impl From for ParenthesizedExpr { - fn from(payload: ExprConstant) -> Self { - Expr::Constant(payload).into() +impl From for ParenthesizedExpr { + fn from(payload: ExprStringLiteral) -> Self { + Expr::StringLiteral(payload).into() + } +} +impl From for ParenthesizedExpr { + fn from(payload: ExprBytesLiteral) -> Self { + Expr::BytesLiteral(payload).into() + } +} +impl From for ParenthesizedExpr { + fn from(payload: ExprNumberLiteral) -> Self { + Expr::NumberLiteral(payload).into() + } +} +impl From for ParenthesizedExpr { + fn from(payload: ExprBooleanLiteral) -> Self { + Expr::BooleanLiteral(payload).into() + } +} +impl From for ParenthesizedExpr { + fn from(payload: ExprNoneLiteral) -> Self { + Expr::NoneLiteral(payload).into() + } +} +impl From for ParenthesizedExpr { + fn from(payload: ExprEllipsisLiteral) -> Self { + Expr::EllipsisLiteral(payload).into() } } impl From for ParenthesizedExpr { @@ -3428,7 +3474,6 @@ mod size_assertions { assert_eq_size!(StmtClassDef, [u8; 104]); assert_eq_size!(StmtTry, [u8; 112]); assert_eq_size!(Expr, [u8; 80]); - 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 122cdbc259ba0..badef9f9f63ae 100644 --- a/crates/ruff_python_ast/src/relocate.rs +++ b/crates/ruff_python_ast/src/relocate.rs @@ -146,7 +146,22 @@ pub fn relocate_expr(expr: &mut Expr, location: TextRange) { relocate_expr(expr, location); } } - Expr::Constant(nodes::ExprConstant { range, .. }) => { + Expr::StringLiteral(nodes::ExprStringLiteral { range, .. }) => { + *range = location; + } + Expr::BytesLiteral(nodes::ExprBytesLiteral { range, .. }) => { + *range = location; + } + Expr::NumberLiteral(nodes::ExprNumberLiteral { range, .. }) => { + *range = location; + } + Expr::BooleanLiteral(nodes::ExprBooleanLiteral { range, .. }) => { + *range = location; + } + Expr::NoneLiteral(nodes::ExprNoneLiteral { range }) => { + *range = location; + } + Expr::EllipsisLiteral(nodes::ExprEllipsisLiteral { range }) => { *range = location; } Expr::Attribute(nodes::ExprAttribute { value, range, .. }) => { diff --git a/crates/ruff_python_ast/src/visitor.rs b/crates/ruff_python_ast/src/visitor.rs index d0b62fa7af9eb..8084f030c8f55 100644 --- a/crates/ruff_python_ast/src/visitor.rs +++ b/crates/ruff_python_ast/src/visitor.rs @@ -477,7 +477,12 @@ pub fn walk_expr<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, expr: &'a Expr) { visitor.visit_expr(expr); } } - Expr::Constant(_) => {} + Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) => {} Expr::Attribute(ast::ExprAttribute { value, ctx, .. }) => { visitor.visit_expr(value); visitor.visit_expr_context(ctx); diff --git a/crates/ruff_python_ast/src/visitor/preorder.rs b/crates/ruff_python_ast/src/visitor/preorder.rs index 94d957c61736e..8de18d1413ff6 100644 --- a/crates/ruff_python_ast/src/visitor/preorder.rs +++ b/crates/ruff_python_ast/src/visitor/preorder.rs @@ -1,8 +1,7 @@ use crate::{ - Alias, Arguments, BoolOp, CmpOp, Comprehension, Constant, Decorator, ElifElseClause, - ExceptHandler, Expr, Keyword, MatchCase, Mod, Operator, Parameter, ParameterWithDefault, - Parameters, Pattern, PatternArguments, PatternKeyword, Singleton, Stmt, TypeParam, TypeParams, - UnaryOp, WithItem, + Alias, Arguments, BoolOp, CmpOp, Comprehension, Decorator, ElifElseClause, ExceptHandler, Expr, + Keyword, MatchCase, Mod, Operator, Parameter, ParameterWithDefault, Parameters, Pattern, + PatternArguments, PatternKeyword, Singleton, Stmt, TypeParam, TypeParams, UnaryOp, WithItem, }; use crate::{AnyNodeRef, AstNode}; @@ -41,9 +40,6 @@ pub trait PreorderVisitor<'a> { walk_decorator(self, decorator); } - #[inline] - fn visit_constant(&mut self, _constant: &'a Constant) {} - #[inline] fn visit_singleton(&mut self, _singleton: &'a Singleton) {} @@ -280,7 +276,12 @@ where 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::StringLiteral(expr) => expr.visit_preorder(visitor), + Expr::BytesLiteral(expr) => expr.visit_preorder(visitor), + Expr::NumberLiteral(expr) => expr.visit_preorder(visitor), + Expr::BooleanLiteral(expr) => expr.visit_preorder(visitor), + Expr::NoneLiteral(expr) => expr.visit_preorder(visitor), + Expr::EllipsisLiteral(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), diff --git a/crates/ruff_python_ast/tests/preorder.rs b/crates/ruff_python_ast/tests/preorder.rs index 9017b01682193..02f1c3bea332b 100644 --- a/crates/ruff_python_ast/tests/preorder.rs +++ b/crates/ruff_python_ast/tests/preorder.rs @@ -9,8 +9,8 @@ use ruff_python_ast::visitor::preorder::{ }; use ruff_python_ast::AnyNodeRef; use ruff_python_ast::{ - Alias, BoolOp, CmpOp, Comprehension, Constant, ExceptHandler, Expr, Keyword, MatchCase, Mod, - Operator, Parameter, Parameters, Pattern, Singleton, Stmt, TypeParam, UnaryOp, WithItem, + Alias, BoolOp, CmpOp, Comprehension, ExceptHandler, Expr, Keyword, MatchCase, Mod, Operator, + Parameter, Parameters, Pattern, Singleton, Stmt, TypeParam, UnaryOp, WithItem, }; use ruff_python_parser::lexer::lex; use ruff_python_parser::{parse_tokens, Mode}; @@ -193,10 +193,6 @@ impl PreorderVisitor<'_> for RecordVisitor { self.exit_node(); } - fn visit_constant(&mut self, constant: &Constant) { - self.emit(&constant); - } - fn visit_singleton(&mut self, singleton: &Singleton) { self.emit(&singleton); } diff --git a/crates/ruff_python_ast/tests/snapshots/preorder__class_type_parameters.snap b/crates/ruff_python_ast/tests/snapshots/preorder__class_type_parameters.snap index e532ffd8b87cc..bf2a7eccb5fe4 100644 --- a/crates/ruff_python_ast/tests/snapshots/preorder__class_type_parameters.snap +++ b/crates/ruff_python_ast/tests/snapshots/preorder__class_type_parameters.snap @@ -10,6 +10,5 @@ expression: trace - TypeParamTypeVarTuple - TypeParamParamSpec - StmtExpr - - ExprConstant - - Ellipsis + - ExprEllipsisLiteral diff --git a/crates/ruff_python_ast/tests/snapshots/preorder__compare.snap b/crates/ruff_python_ast/tests/snapshots/preorder__compare.snap index 42d8bb281d604..848886f767652 100644 --- a/crates/ruff_python_ast/tests/snapshots/preorder__compare.snap +++ b/crates/ruff_python_ast/tests/snapshots/preorder__compare.snap @@ -5,11 +5,9 @@ expression: trace - ModModule - StmtExpr - ExprCompare - - ExprConstant - - Int(4) + - ExprNumberLiteral - Lt - ExprName - Lt - - ExprConstant - - Int(5) + - ExprNumberLiteral diff --git a/crates/ruff_python_ast/tests/snapshots/preorder__dict_comprehension.snap b/crates/ruff_python_ast/tests/snapshots/preorder__dict_comprehension.snap index 54f133dc32810..d1479d6fed158 100644 --- a/crates/ruff_python_ast/tests/snapshots/preorder__dict_comprehension.snap +++ b/crates/ruff_python_ast/tests/snapshots/preorder__dict_comprehension.snap @@ -9,8 +9,7 @@ expression: trace - ExprBinOp - ExprName - Pow - - ExprConstant - - Int(2) + - ExprNumberLiteral - Comprehension - ExprName - ExprName diff --git a/crates/ruff_python_ast/tests/snapshots/preorder__function_arguments.snap b/crates/ruff_python_ast/tests/snapshots/preorder__function_arguments.snap index 68d8454d1d815..5ecec46ee04f9 100644 --- a/crates/ruff_python_ast/tests/snapshots/preorder__function_arguments.snap +++ b/crates/ruff_python_ast/tests/snapshots/preorder__function_arguments.snap @@ -9,15 +9,12 @@ expression: trace - Parameter - Parameter - Parameter - - ExprConstant - - Int(20) + - ExprNumberLiteral - Parameter - Parameter - - ExprConstant - - Int(5) + - ExprNumberLiteral - Parameter - - ExprConstant - - Int(20) + - ExprNumberLiteral - Parameter - StmtPass diff --git a/crates/ruff_python_ast/tests/snapshots/preorder__function_positional_only_with_default.snap b/crates/ruff_python_ast/tests/snapshots/preorder__function_positional_only_with_default.snap index 2c9ace59af277..fdc755b1f0270 100644 --- a/crates/ruff_python_ast/tests/snapshots/preorder__function_positional_only_with_default.snap +++ b/crates/ruff_python_ast/tests/snapshots/preorder__function_positional_only_with_default.snap @@ -7,11 +7,9 @@ expression: trace - Parameters - Parameter - Parameter - - ExprConstant - - Int(34) + - ExprNumberLiteral - Parameter - - ExprConstant - - Int(20) + - ExprNumberLiteral - Parameter - StmtPass diff --git a/crates/ruff_python_ast/tests/snapshots/preorder__function_type_parameters.snap b/crates/ruff_python_ast/tests/snapshots/preorder__function_type_parameters.snap index c221faf0490dc..47aa1ecf6a7f5 100644 --- a/crates/ruff_python_ast/tests/snapshots/preorder__function_type_parameters.snap +++ b/crates/ruff_python_ast/tests/snapshots/preorder__function_type_parameters.snap @@ -11,6 +11,5 @@ expression: trace - TypeParamParamSpec - Parameters - StmtExpr - - ExprConstant - - Ellipsis + - ExprEllipsisLiteral diff --git a/crates/ruff_python_ast/tests/snapshots/preorder__match_class_pattern.snap b/crates/ruff_python_ast/tests/snapshots/preorder__match_class_pattern.snap index f1d75a5155d1a..da4fe2cd9750c 100644 --- a/crates/ruff_python_ast/tests/snapshots/preorder__match_class_pattern.snap +++ b/crates/ruff_python_ast/tests/snapshots/preorder__match_class_pattern.snap @@ -9,27 +9,20 @@ expression: trace - PatternMatchClass - ExprName - PatternMatchValue - - ExprConstant - - Int(0) + - ExprNumberLiteral - PatternMatchValue - - ExprConstant - - Int(0) + - ExprNumberLiteral - StmtExpr - - ExprConstant - - Ellipsis + - ExprEllipsisLiteral - MatchCase - PatternMatchClass - ExprName - PatternMatchValue - - ExprConstant - - Int(0) + - ExprNumberLiteral - PatternMatchValue - - ExprConstant - - Int(0) + - ExprNumberLiteral - PatternMatchValue - - ExprConstant - - Int(0) + - ExprNumberLiteral - StmtExpr - - ExprConstant - - Ellipsis + - ExprEllipsisLiteral diff --git a/crates/ruff_python_ast/tests/snapshots/visitor__class_type_parameters.snap b/crates/ruff_python_ast/tests/snapshots/visitor__class_type_parameters.snap index 19975fd797c25..5ca38f249ffbd 100644 --- a/crates/ruff_python_ast/tests/snapshots/visitor__class_type_parameters.snap +++ b/crates/ruff_python_ast/tests/snapshots/visitor__class_type_parameters.snap @@ -9,5 +9,5 @@ expression: trace - TypeParamTypeVarTuple - TypeParamParamSpec - StmtExpr - - ExprConstant + - ExprEllipsisLiteral diff --git a/crates/ruff_python_ast/tests/snapshots/visitor__compare.snap b/crates/ruff_python_ast/tests/snapshots/visitor__compare.snap index 299623e3491fd..6a5f99eb4d8e4 100644 --- a/crates/ruff_python_ast/tests/snapshots/visitor__compare.snap +++ b/crates/ruff_python_ast/tests/snapshots/visitor__compare.snap @@ -4,9 +4,9 @@ expression: trace --- - StmtExpr - ExprCompare - - ExprConstant + - ExprNumberLiteral - Lt - Lt - ExprName - - ExprConstant + - ExprNumberLiteral diff --git a/crates/ruff_python_ast/tests/snapshots/visitor__dict_comprehension.snap b/crates/ruff_python_ast/tests/snapshots/visitor__dict_comprehension.snap index 64623b98863b2..138cb45b385ba 100644 --- a/crates/ruff_python_ast/tests/snapshots/visitor__dict_comprehension.snap +++ b/crates/ruff_python_ast/tests/snapshots/visitor__dict_comprehension.snap @@ -11,5 +11,5 @@ expression: trace - ExprBinOp - ExprName - Pow - - ExprConstant + - ExprNumberLiteral diff --git a/crates/ruff_python_ast/tests/snapshots/visitor__function_arguments.snap b/crates/ruff_python_ast/tests/snapshots/visitor__function_arguments.snap index aaab46e7dada4..fa6ebc6ee4ee3 100644 --- a/crates/ruff_python_ast/tests/snapshots/visitor__function_arguments.snap +++ b/crates/ruff_python_ast/tests/snapshots/visitor__function_arguments.snap @@ -4,9 +4,9 @@ expression: trace --- - StmtFunctionDef - Parameters - - ExprConstant - - ExprConstant - - ExprConstant + - ExprNumberLiteral + - ExprNumberLiteral + - ExprNumberLiteral - Parameter - Parameter - Parameter diff --git a/crates/ruff_python_ast/tests/snapshots/visitor__function_positional_only_with_default.snap b/crates/ruff_python_ast/tests/snapshots/visitor__function_positional_only_with_default.snap index a53646e2076f6..a92798a086572 100644 --- a/crates/ruff_python_ast/tests/snapshots/visitor__function_positional_only_with_default.snap +++ b/crates/ruff_python_ast/tests/snapshots/visitor__function_positional_only_with_default.snap @@ -4,8 +4,8 @@ expression: trace --- - StmtFunctionDef - Parameters - - ExprConstant - - ExprConstant + - ExprNumberLiteral + - ExprNumberLiteral - Parameter - Parameter - Parameter diff --git a/crates/ruff_python_ast/tests/snapshots/visitor__function_type_parameters.snap b/crates/ruff_python_ast/tests/snapshots/visitor__function_type_parameters.snap index b0bbf8f550735..60a1abe6be50c 100644 --- a/crates/ruff_python_ast/tests/snapshots/visitor__function_type_parameters.snap +++ b/crates/ruff_python_ast/tests/snapshots/visitor__function_type_parameters.snap @@ -10,5 +10,5 @@ expression: trace - TypeParamParamSpec - Parameters - StmtExpr - - ExprConstant + - ExprEllipsisLiteral diff --git a/crates/ruff_python_ast/tests/snapshots/visitor__match_class_pattern.snap b/crates/ruff_python_ast/tests/snapshots/visitor__match_class_pattern.snap index 73e5ea145319a..0c3513b0a648c 100644 --- a/crates/ruff_python_ast/tests/snapshots/visitor__match_class_pattern.snap +++ b/crates/ruff_python_ast/tests/snapshots/visitor__match_class_pattern.snap @@ -8,20 +8,20 @@ expression: trace - PatternMatchClass - ExprName - PatternMatchValue - - ExprConstant + - ExprNumberLiteral - PatternMatchValue - - ExprConstant + - ExprNumberLiteral - StmtExpr - - ExprConstant + - ExprEllipsisLiteral - MatchCase - PatternMatchClass - ExprName - PatternMatchValue - - ExprConstant + - ExprNumberLiteral - PatternMatchValue - - ExprConstant + - ExprNumberLiteral - PatternMatchValue - - ExprConstant + - ExprNumberLiteral - StmtExpr - - ExprConstant + - ExprEllipsisLiteral diff --git a/crates/ruff_python_codegen/src/generator.rs b/crates/ruff_python_codegen/src/generator.rs index 29db51c5d7688..fc57856633c18 100644 --- a/crates/ruff_python_codegen/src/generator.rs +++ b/crates/ruff_python_codegen/src/generator.rs @@ -3,10 +3,10 @@ use std::ops::Deref; use ruff_python_ast::{ - self as ast, Alias, ArgOrKeyword, BoolOp, CmpOp, Comprehension, Constant, ConversionFlag, - DebugText, ExceptHandler, Expr, Identifier, MatchCase, Operator, Parameter, Parameters, - Pattern, Singleton, Stmt, Suite, TypeParam, TypeParamParamSpec, TypeParamTypeVar, - TypeParamTypeVarTuple, WithItem, + self as ast, Alias, ArgOrKeyword, BoolOp, CmpOp, Comprehension, ConversionFlag, DebugText, + ExceptHandler, Expr, Identifier, MatchCase, Operator, Parameter, Parameters, Pattern, + Singleton, Stmt, Suite, TypeParam, TypeParamParamSpec, TypeParamTypeVar, TypeParamTypeVarTuple, + WithItem, }; use ruff_python_ast::{ParameterWithDefault, TypeParams}; use ruff_python_literal::escape::{AsciiEscape, Escape, UnicodeEscape}; @@ -115,12 +115,6 @@ impl<'a> Generator<'a> { self.generate() } - /// Generate source code from a [`Constant`]. - pub fn constant(mut self, constant: &Constant) -> String { - self.unparse_constant(constant); - self.generate() - } - fn newline(&mut self) { if !self.initial { self.num_newlines = std::cmp::max(self.num_newlines, 1); @@ -1090,12 +1084,56 @@ impl<'a> Generator<'a> { Expr::FString(ast::ExprFString { values, .. }) => { self.unparse_f_string(values, false); } - Expr::Constant(ast::ExprConstant { value, range: _ }) => { - self.unparse_constant(value); + Expr::StringLiteral(ast::ExprStringLiteral { value, unicode, .. }) => { + if *unicode { + self.p("u"); + } + self.p_str_repr(value); + } + Expr::BytesLiteral(ast::ExprBytesLiteral { value, .. }) => { + self.p_bytes_repr(value); + } + Expr::NumberLiteral(ast::ExprNumberLiteral { value, .. }) => { + static INF_STR: &str = "1e309"; + assert_eq!(f64::MAX_10_EXP, 308); + + match value { + ast::Number::Int(i) => { + self.p(&format!("{i}")); + } + ast::Number::Float(fp) => { + if fp.is_infinite() { + self.p(INF_STR); + } else { + self.p(&ruff_python_literal::float::to_string(*fp)); + } + } + ast::Number::Complex { real, imag } => { + let value = if *real == 0.0 { + format!("{imag}j") + } else { + format!("({real}{imag:+}j)") + }; + if real.is_infinite() || imag.is_infinite() { + self.p(&value.replace("inf", INF_STR)); + } else { + self.p(&value); + } + } + } + } + Expr::BooleanLiteral(ast::ExprBooleanLiteral { value, .. }) => { + self.p(if *value { "True" } else { "False" }); + } + Expr::NoneLiteral(_) => { + self.p("None"); + } + Expr::EllipsisLiteral(_) => { + self.p("..."); } Expr::Attribute(ast::ExprAttribute { value, attr, .. }) => { - if let Expr::Constant(ast::ExprConstant { - value: Constant::Int(_), + if let Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(_), .. }) = value.as_ref() { @@ -1174,45 +1212,6 @@ impl<'a> Generator<'a> { } } - pub(crate) fn unparse_constant(&mut self, constant: &Constant) { - assert_eq!(f64::MAX_10_EXP, 308); - let inf_str = "1e309"; - match constant { - Constant::Bytes(b) => { - self.p_bytes_repr(b); - } - Constant::Str(ast::StringConstant { value, unicode, .. }) => { - if *unicode { - self.p("u"); - } - self.p_str_repr(value); - } - Constant::None => self.p("None"), - Constant::Bool(b) => self.p(if *b { "True" } else { "False" }), - Constant::Int(i) => self.p(&format!("{i}")), - Constant::Float(fp) => { - if fp.is_infinite() { - self.p(inf_str); - } else { - self.p(&ruff_python_literal::float::to_string(*fp)); - } - } - Constant::Complex { real, imag } => { - let value = if *real == 0.0 { - format!("{imag}j") - } else { - format!("({real}{imag:+}j)") - }; - if real.is_infinite() || imag.is_infinite() { - self.p(&value.replace("inf", inf_str)); - } else { - self.p(&value); - } - } - Constant::Ellipsis => self.p("..."), - } - } - fn unparse_parameters(&mut self, parameters: &Parameters) { let mut first = true; for (i, parameter_with_default) in parameters @@ -1325,12 +1324,8 @@ impl<'a> Generator<'a> { fn unparse_f_string_elem(&mut self, expr: &Expr, is_spec: bool) { match expr { - Expr::Constant(ast::ExprConstant { value, .. }) => { - if let Constant::Str(ast::StringConstant { value, .. }) = value { - self.unparse_f_string_literal(value); - } else { - unreachable!() - } + Expr::StringLiteral(ast::ExprStringLiteral { value, .. }) => { + self.unparse_f_string_literal(value); } Expr::FString(ast::ExprFString { values, .. }) => { self.unparse_f_string(values, is_spec); diff --git a/crates/ruff_python_formatter/src/comments/placement.rs b/crates/ruff_python_formatter/src/comments/placement.rs index acb8b9db00bb2..3b6bde34f666c 100644 --- a/crates/ruff_python_formatter/src/comments/placement.rs +++ b/crates/ruff_python_formatter/src/comments/placement.rs @@ -281,7 +281,7 @@ fn handle_enclosed_comment<'a>( AnyNodeRef::StmtImportFrom(import_from) => handle_import_from_comment(comment, import_from), AnyNodeRef::StmtWith(with_) => handle_with_comment(comment, with_), AnyNodeRef::ExprCall(_) => handle_call_comment(comment), - AnyNodeRef::ExprConstant(_) => { + AnyNodeRef::ExprStringLiteral(_) => { if let Some(AnyNodeRef::ExprFString(fstring)) = comment.enclosing_parent() { CommentPlacement::dangling(fstring, comment) } else { diff --git a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__binary_expression_left_operand_comment.snap b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__binary_expression_left_operand_comment.snap index 9fc7302a81fa3..9be65b1a41b2a 100644 --- a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__binary_expression_left_operand_comment.snap +++ b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__binary_expression_left_operand_comment.snap @@ -4,7 +4,7 @@ expression: comments.debug(test_case.source_code) --- { Node { - kind: ExprConstant, + kind: ExprNumberLiteral, range: 11..12, source: `5`, }: { @@ -19,7 +19,7 @@ expression: comments.debug(test_case.source_code) ], }, Node { - kind: ExprConstant, + kind: ExprNumberLiteral, range: 79..80, source: `3`, }: { diff --git a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__binary_expression_left_operand_trailing_end_of_line_comment.snap b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__binary_expression_left_operand_trailing_end_of_line_comment.snap index f553e8b817c4a..e1f0f769fd3ad 100644 --- a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__binary_expression_left_operand_trailing_end_of_line_comment.snap +++ b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__binary_expression_left_operand_trailing_end_of_line_comment.snap @@ -4,7 +4,7 @@ expression: comments.debug(test_case.source_code) --- { Node { - kind: ExprConstant, + kind: ExprNumberLiteral, range: 11..12, source: `5`, }: { @@ -34,7 +34,7 @@ expression: comments.debug(test_case.source_code) "trailing": [], }, Node { - kind: ExprConstant, + kind: ExprNumberLiteral, range: 103..104, source: `3`, }: { diff --git a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__nested_binary_expression.snap b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__nested_binary_expression.snap index 8a70941d7aeea..7309048231e32 100644 --- a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__nested_binary_expression.snap +++ b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__nested_binary_expression.snap @@ -19,7 +19,7 @@ expression: comments.debug(test_case.source_code) "trailing": [], }, Node { - kind: ExprConstant, + kind: ExprNumberLiteral, range: 12..13, source: `5`, }: { @@ -34,7 +34,7 @@ expression: comments.debug(test_case.source_code) ], }, Node { - kind: ExprConstant, + kind: ExprNumberLiteral, range: 125..126, source: `3`, }: { 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 0c49034c20c21..6fc27f35a3a6b 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 @@ -19,7 +19,7 @@ expression: comments.debug(test_case.source_code) "trailing": [], }, Node { - kind: ExprConstant, + kind: ExprNumberLiteral, range: 30..32, source: `10`, }: { diff --git a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__trailing_most_outer_nested.snap b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__trailing_most_outer_nested.snap index 278320eb58151..37e4a4cc52b17 100644 --- a/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__trailing_most_outer_nested.snap +++ b/crates/ruff_python_formatter/src/comments/snapshots/ruff_python_formatter__comments__tests__trailing_most_outer_nested.snap @@ -19,7 +19,7 @@ expression: comments.debug(test_case.source_code) ], }, Node { - kind: ExprConstant, + kind: ExprNumberLiteral, range: 11..12, source: `3`, }: { diff --git a/crates/ruff_python_formatter/src/expression/binary_like.rs b/crates/ruff_python_formatter/src/expression/binary_like.rs index cc72f346d0805..f77851e395cb5 100644 --- a/crates/ruff_python_formatter/src/expression/binary_like.rs +++ b/crates/ruff_python_formatter/src/expression/binary_like.rs @@ -5,8 +5,7 @@ use smallvec::SmallVec; use ruff_formatter::write; use ruff_python_ast::{ - Constant, Expr, ExprAttribute, ExprBinOp, ExprBoolOp, ExprCompare, ExprConstant, ExprUnaryOp, - UnaryOp, + Expr, ExprAttribute, ExprBinOp, ExprBoolOp, ExprCompare, ExprUnaryOp, UnaryOp, }; use ruff_python_trivia::CommentRanges; use ruff_python_trivia::{SimpleToken, SimpleTokenKind, SimpleTokenizer}; @@ -505,15 +504,7 @@ const fn is_simple_power_operand(expr: &Expr) -> bool { Expr::UnaryOp(ExprUnaryOp { op: UnaryOp::Not, .. }) => false, - Expr::Constant(ExprConstant { - value: - Constant::Complex { .. } - | Constant::Float(_) - | Constant::Int(_) - | Constant::None - | Constant::Bool(_), - .. - }) => true, + Expr::NumberLiteral(_) | Expr::NoneLiteral(_) | Expr::BooleanLiteral(_) => true, Expr::Name(_) => true, Expr::UnaryOp(ExprUnaryOp { operand, .. }) => is_simple_power_operand(operand), Expr::Attribute(ExprAttribute { value, .. }) => is_simple_power_operand(value), diff --git a/crates/ruff_python_formatter/src/expression/expr_attribute.rs b/crates/ruff_python_formatter/src/expression/expr_attribute.rs index 5535cebe88878..8bf5878ff4f28 100644 --- a/crates/ruff_python_formatter/src/expression/expr_attribute.rs +++ b/crates/ruff_python_formatter/src/expression/expr_attribute.rs @@ -1,6 +1,6 @@ use ruff_formatter::{write, FormatRuleWithOptions}; use ruff_python_ast::AnyNodeRef; -use ruff_python_ast::{Constant, Expr, ExprAttribute, ExprConstant}; +use ruff_python_ast::{Expr, ExprAttribute, ExprNumberLiteral, Number}; use ruff_python_trivia::{find_only_token_in_range, SimpleTokenKind}; use ruff_text_size::{Ranged, TextRange}; @@ -167,17 +167,17 @@ impl NeedsParentheses for ExprAttribute { // Non Hex, octal or binary number literals need parentheses to disambiguate the attribute `.` from // a decimal point. Floating point numbers don't strictly need parentheses but it reads better (rather than 0.0.test()). fn is_base_ten_number_literal(expr: &Expr, source: &str) -> bool { - if let Some(ExprConstant { value, range }) = expr.as_constant_expr() { + if let Some(ExprNumberLiteral { value, range }) = expr.as_number_literal_expr() { match value { - Constant::Float(_) => true, - Constant::Int(_) => { + Number::Float(_) => true, + Number::Int(_) => { let text = &source[*range]; !matches!( text.as_bytes().get(0..2), Some([b'0', b'x' | b'X' | b'o' | b'O' | b'b' | b'B']) ) } - _ => false, + Number::Complex { .. } => false, } } else { false 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 4d5ea27354ae5..4a9361881d7e5 100644 --- a/crates/ruff_python_formatter/src/expression/expr_bin_op.rs +++ b/crates/ruff_python_formatter/src/expression/expr_bin_op.rs @@ -1,9 +1,9 @@ use ruff_python_ast::AnyNodeRef; -use ruff_python_ast::{Expr, ExprBinOp}; +use ruff_python_ast::ExprBinOp; use crate::comments::SourceComment; use crate::expression::binary_like::BinaryLike; -use crate::expression::expr_constant::is_multiline_string; +use crate::expression::expr_string_literal::is_multiline_string; use crate::expression::has_parentheses; use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; use crate::prelude::*; @@ -35,10 +35,10 @@ impl NeedsParentheses for ExprBinOp { ) -> OptionalParentheses { if parent.is_expr_await() { OptionalParentheses::Always - } else if let Expr::Constant(constant) = self.left.as_ref() { + } else if self.left.is_literal_expr() { // Multiline strings are guaranteed to never fit, avoid adding unnecessary parentheses - if !constant.value.is_implicit_concatenated() - && is_multiline_string(constant, context.source()) + if !self.left.is_implicit_concatenated_string() + && is_multiline_string(self.left.as_ref().into(), context.source()) && has_parentheses(&self.right, context).is_some() && !context.comments().has_dangling(self) && !context.comments().has(self.left.as_ref()) diff --git a/crates/ruff_python_formatter/src/expression/expr_boolean_literal.rs b/crates/ruff_python_formatter/src/expression/expr_boolean_literal.rs new file mode 100644 index 0000000000000..756df8dfd4ca7 --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_boolean_literal.rs @@ -0,0 +1,28 @@ +use ruff_python_ast::AnyNodeRef; +use ruff_python_ast::ExprBooleanLiteral; + +use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; +use crate::prelude::*; + +#[derive(Default)] +pub struct FormatExprBooleanLiteral; + +impl FormatNodeRule for FormatExprBooleanLiteral { + fn fmt_fields(&self, item: &ExprBooleanLiteral, f: &mut PyFormatter) -> FormatResult<()> { + if item.value { + token("True").fmt(f) + } else { + token("False").fmt(f) + } + } +} + +impl NeedsParentheses for ExprBooleanLiteral { + fn needs_parentheses( + &self, + _parent: AnyNodeRef, + _context: &PyFormatContext, + ) -> OptionalParentheses { + OptionalParentheses::BestFit + } +} diff --git a/crates/ruff_python_formatter/src/expression/expr_bytes_literal.rs b/crates/ruff_python_formatter/src/expression/expr_bytes_literal.rs new file mode 100644 index 0000000000000..968487a07cb4a --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_bytes_literal.rs @@ -0,0 +1,42 @@ +use ruff_python_ast::AnyNodeRef; +use ruff_python_ast::ExprBytesLiteral; + +use crate::comments::SourceComment; +use crate::expression::expr_string_literal::is_multiline_string; +use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; +use crate::expression::string::{AnyString, FormatString}; +use crate::prelude::*; + +#[derive(Default)] +pub struct FormatExprBytesLiteral; + +impl FormatNodeRule for FormatExprBytesLiteral { + fn fmt_fields(&self, item: &ExprBytesLiteral, f: &mut PyFormatter) -> FormatResult<()> { + FormatString::new(&AnyString::Bytes(item)).fmt(f) + } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + // Handled as part of `fmt_fields` + Ok(()) + } +} + +impl NeedsParentheses for ExprBytesLiteral { + fn needs_parentheses( + &self, + _parent: AnyNodeRef, + context: &PyFormatContext, + ) -> OptionalParentheses { + if self.implicit_concatenated { + OptionalParentheses::Multiline + } else if is_multiline_string(self.into(), context.source()) { + OptionalParentheses::Never + } else { + OptionalParentheses::BestFit + } + } +} diff --git a/crates/ruff_python_formatter/src/expression/expr_compare.rs b/crates/ruff_python_formatter/src/expression/expr_compare.rs index e4f638831cc3e..f48bd66eccd9c 100644 --- a/crates/ruff_python_formatter/src/expression/expr_compare.rs +++ b/crates/ruff_python_formatter/src/expression/expr_compare.rs @@ -1,10 +1,10 @@ use ruff_formatter::{FormatOwnedWithRule, FormatRefWithRule}; use ruff_python_ast::AnyNodeRef; -use ruff_python_ast::{CmpOp, Expr, ExprCompare}; +use ruff_python_ast::{CmpOp, ExprCompare}; use crate::comments::SourceComment; use crate::expression::binary_like::BinaryLike; -use crate::expression::expr_constant::is_multiline_string; +use crate::expression::expr_string_literal::is_multiline_string; use crate::expression::has_parentheses; use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; use crate::prelude::*; @@ -37,10 +37,10 @@ impl NeedsParentheses for ExprCompare { ) -> OptionalParentheses { if parent.is_expr_await() { OptionalParentheses::Always - } else if let Expr::Constant(constant) = self.left.as_ref() { + } else if self.left.is_literal_expr() { // Multiline strings are guaranteed to never fit, avoid adding unnecessary parentheses - if !constant.value.is_implicit_concatenated() - && is_multiline_string(constant, context.source()) + if !self.left.is_implicit_concatenated_string() + && is_multiline_string(self.left.as_ref().into(), context.source()) && !context.comments().has(self.left.as_ref()) && self.comparators.first().is_some_and(|right| { has_parentheses(right, context).is_some() && !context.comments().has(right) diff --git a/crates/ruff_python_formatter/src/expression/expr_constant.rs b/crates/ruff_python_formatter/src/expression/expr_constant.rs deleted file mode 100644 index f9dda6c555f62..0000000000000 --- a/crates/ruff_python_formatter/src/expression/expr_constant.rs +++ /dev/null @@ -1,99 +0,0 @@ -use ruff_formatter::FormatRuleWithOptions; -use ruff_python_ast::AnyNodeRef; -use ruff_python_ast::{Constant, ExprConstant}; -use ruff_text_size::{Ranged, TextLen, TextRange}; - -use crate::comments::SourceComment; -use crate::expression::number::{FormatComplex, FormatFloat, FormatInt}; -use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; -use crate::expression::string::{ - AnyString, FormatString, StringLayout, StringPrefix, StringQuotes, -}; -use crate::prelude::*; - -#[derive(Default)] -pub struct FormatExprConstant { - layout: ExprConstantLayout, -} - -#[derive(Copy, Clone, Debug, Default)] -pub enum ExprConstantLayout { - #[default] - Default, - - String(StringLayout), -} - -impl FormatRuleWithOptions> for FormatExprConstant { - type Options = ExprConstantLayout; - - fn with_options(mut self, options: Self::Options) -> Self { - self.layout = options; - self - } -} - -impl FormatNodeRule for FormatExprConstant { - fn fmt_fields(&self, item: &ExprConstant, f: &mut PyFormatter) -> FormatResult<()> { - let ExprConstant { range: _, value } = item; - - match value { - Constant::Ellipsis => token("...").fmt(f), - Constant::None => token("None").fmt(f), - Constant::Bool(value) => match value { - true => token("True").fmt(f), - false => token("False").fmt(f), - }, - Constant::Int(_) => FormatInt::new(item).fmt(f), - Constant::Float(_) => FormatFloat::new(item).fmt(f), - Constant::Complex { .. } => FormatComplex::new(item).fmt(f), - Constant::Str(_) | Constant::Bytes(_) => { - let string_layout = match self.layout { - ExprConstantLayout::Default => StringLayout::Default, - ExprConstantLayout::String(layout) => layout, - }; - FormatString::new(&AnyString::Constant(item)) - .with_layout(string_layout) - .fmt(f) - } - } - } - - fn fmt_dangling_comments( - &self, - _dangling_comments: &[SourceComment], - _f: &mut PyFormatter, - ) -> FormatResult<()> { - Ok(()) - } -} - -impl NeedsParentheses for ExprConstant { - fn needs_parentheses( - &self, - _parent: AnyNodeRef, - context: &PyFormatContext, - ) -> OptionalParentheses { - if self.value.is_implicit_concatenated() { - OptionalParentheses::Multiline - } else if is_multiline_string(self, context.source()) { - OptionalParentheses::Never - } else { - OptionalParentheses::BestFit - } - } -} - -pub(super) fn is_multiline_string(constant: &ExprConstant, source: &str) -> bool { - if constant.value.is_str() || constant.value.is_bytes() { - let contents = &source[constant.range()]; - let prefix = StringPrefix::parse(contents); - let quotes = - StringQuotes::parse(&contents[TextRange::new(prefix.text_len(), contents.text_len())]); - - quotes.is_some_and(StringQuotes::is_triple) - && memchr::memchr2(b'\n', b'\r', contents.as_bytes()).is_some() - } else { - false - } -} diff --git a/crates/ruff_python_formatter/src/expression/expr_ellipsis_literal.rs b/crates/ruff_python_formatter/src/expression/expr_ellipsis_literal.rs new file mode 100644 index 0000000000000..2eb26787c6f73 --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_ellipsis_literal.rs @@ -0,0 +1,24 @@ +use ruff_python_ast::AnyNodeRef; +use ruff_python_ast::ExprEllipsisLiteral; + +use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; +use crate::prelude::*; + +#[derive(Default)] +pub struct FormatExprEllipsisLiteral; + +impl FormatNodeRule for FormatExprEllipsisLiteral { + fn fmt_fields(&self, _item: &ExprEllipsisLiteral, f: &mut PyFormatter) -> FormatResult<()> { + token("...").fmt(f) + } +} + +impl NeedsParentheses for ExprEllipsisLiteral { + fn needs_parentheses( + &self, + _parent: AnyNodeRef, + _context: &PyFormatContext, + ) -> OptionalParentheses { + OptionalParentheses::BestFit + } +} diff --git a/crates/ruff_python_formatter/src/expression/expr_none_literal.rs b/crates/ruff_python_formatter/src/expression/expr_none_literal.rs new file mode 100644 index 0000000000000..db08cb3f32dca --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_none_literal.rs @@ -0,0 +1,24 @@ +use ruff_python_ast::AnyNodeRef; +use ruff_python_ast::ExprNoneLiteral; + +use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; +use crate::prelude::*; + +#[derive(Default)] +pub struct FormatExprNoneLiteral; + +impl FormatNodeRule for FormatExprNoneLiteral { + fn fmt_fields(&self, _item: &ExprNoneLiteral, f: &mut PyFormatter) -> FormatResult<()> { + token("None").fmt(f) + } +} + +impl NeedsParentheses for ExprNoneLiteral { + fn needs_parentheses( + &self, + _parent: AnyNodeRef, + _context: &PyFormatContext, + ) -> OptionalParentheses { + OptionalParentheses::BestFit + } +} diff --git a/crates/ruff_python_formatter/src/expression/expr_number_literal.rs b/crates/ruff_python_formatter/src/expression/expr_number_literal.rs new file mode 100644 index 0000000000000..4559336392bb0 --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_number_literal.rs @@ -0,0 +1,29 @@ +use ruff_python_ast::AnyNodeRef; +use ruff_python_ast::{ExprNumberLiteral, Number}; + +use crate::expression::number::{FormatComplex, FormatFloat, FormatInt}; +use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; +use crate::prelude::*; + +#[derive(Default)] +pub struct FormatExprNumberLiteral; + +impl FormatNodeRule for FormatExprNumberLiteral { + fn fmt_fields(&self, item: &ExprNumberLiteral, f: &mut PyFormatter) -> FormatResult<()> { + match item.value { + Number::Int(_) => FormatInt::new(item).fmt(f), + Number::Float(_) => FormatFloat::new(item).fmt(f), + Number::Complex { .. } => FormatComplex::new(item).fmt(f), + } + } +} + +impl NeedsParentheses for ExprNumberLiteral { + fn needs_parentheses( + &self, + _parent: AnyNodeRef, + _context: &PyFormatContext, + ) -> OptionalParentheses { + OptionalParentheses::BestFit + } +} diff --git a/crates/ruff_python_formatter/src/expression/expr_slice.rs b/crates/ruff_python_formatter/src/expression/expr_slice.rs index 5837a22605aeb..b371e57468b0b 100644 --- a/crates/ruff_python_formatter/src/expression/expr_slice.rs +++ b/crates/ruff_python_formatter/src/expression/expr_slice.rs @@ -209,7 +209,7 @@ fn is_simple_expr(expr: &Expr) -> bool { { is_simple_expr(operand) } else { - matches!(expr, Expr::Constant(_) | Expr::Name(_)) + expr.is_literal_expr() || expr.is_name_expr() } } diff --git a/crates/ruff_python_formatter/src/expression/expr_string_literal.rs b/crates/ruff_python_formatter/src/expression/expr_string_literal.rs new file mode 100644 index 0000000000000..e6ce374c292fb --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_string_literal.rs @@ -0,0 +1,71 @@ +use ruff_formatter::FormatRuleWithOptions; +use ruff_python_ast::AnyNodeRef; +use ruff_python_ast::ExprStringLiteral; +use ruff_text_size::{Ranged, TextLen, TextRange}; + +use crate::comments::SourceComment; +use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; +use crate::expression::string::{ + AnyString, FormatString, StringLayout, StringPrefix, StringQuotes, +}; +use crate::prelude::*; + +#[derive(Default)] +pub struct FormatExprStringLiteral { + layout: StringLayout, +} + +impl FormatRuleWithOptions> for FormatExprStringLiteral { + type Options = StringLayout; + + fn with_options(mut self, options: Self::Options) -> Self { + self.layout = options; + self + } +} + +impl FormatNodeRule for FormatExprStringLiteral { + fn fmt_fields(&self, item: &ExprStringLiteral, f: &mut PyFormatter) -> FormatResult<()> { + FormatString::new(&AnyString::String(item)) + .with_layout(self.layout) + .fmt(f) + } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + Ok(()) + } +} + +impl NeedsParentheses for ExprStringLiteral { + fn needs_parentheses( + &self, + _parent: AnyNodeRef, + context: &PyFormatContext, + ) -> OptionalParentheses { + if self.implicit_concatenated { + OptionalParentheses::Multiline + } else if is_multiline_string(self.into(), context.source()) { + OptionalParentheses::Never + } else { + OptionalParentheses::BestFit + } + } +} + +pub(super) fn is_multiline_string(expr: AnyNodeRef, source: &str) -> bool { + if expr.is_expr_string_literal() || expr.is_expr_bytes_literal() { + let contents = &source[expr.range()]; + let prefix = StringPrefix::parse(contents); + let quotes = + StringQuotes::parse(&contents[TextRange::new(prefix.text_len(), contents.text_len())]); + + quotes.is_some_and(StringQuotes::is_triple) + && memchr::memchr2(b'\n', b'\r', contents.as_bytes()).is_some() + } else { + false + } +} diff --git a/crates/ruff_python_formatter/src/expression/mod.rs b/crates/ruff_python_formatter/src/expression/mod.rs index c7dae45612333..2d12ca590ced3 100644 --- a/crates/ruff_python_formatter/src/expression/mod.rs +++ b/crates/ruff_python_formatter/src/expression/mod.rs @@ -7,7 +7,7 @@ use ruff_formatter::{ use ruff_python_ast as ast; use ruff_python_ast::parenthesize::parentheses_iterator; use ruff_python_ast::visitor::preorder::{walk_expr, PreorderVisitor}; -use ruff_python_ast::{AnyNodeRef, Constant, Expr, ExpressionRef, Operator}; +use ruff_python_ast::{AnyNodeRef, Expr, ExpressionRef, Operator}; use ruff_python_trivia::CommentRanges; use ruff_text_size::Ranged; @@ -27,11 +27,13 @@ pub(crate) mod expr_attribute; pub(crate) mod expr_await; pub(crate) mod expr_bin_op; pub(crate) mod expr_bool_op; +pub(crate) mod expr_boolean_literal; +pub(crate) mod expr_bytes_literal; pub(crate) mod expr_call; 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_ellipsis_literal; pub(crate) mod expr_f_string; pub(crate) mod expr_formatted_value; pub(crate) mod expr_generator_exp; @@ -42,10 +44,13 @@ pub(crate) mod expr_list; pub(crate) mod expr_list_comp; pub(crate) mod expr_name; pub(crate) mod expr_named_expr; +pub(crate) mod expr_none_literal; +pub(crate) mod expr_number_literal; pub(crate) mod expr_set; pub(crate) mod expr_set_comp; pub(crate) mod expr_slice; pub(crate) mod expr_starred; +pub(crate) mod expr_string_literal; pub(crate) mod expr_subscript; pub(crate) mod expr_tuple; pub(crate) mod expr_unary_op; @@ -94,7 +99,12 @@ impl FormatRule> for FormatExpr { Expr::Call(expr) => expr.format().fmt(f), Expr::FormattedValue(expr) => expr.format().fmt(f), Expr::FString(expr) => expr.format().fmt(f), - Expr::Constant(expr) => expr.format().fmt(f), + Expr::StringLiteral(expr) => expr.format().fmt(f), + Expr::BytesLiteral(expr) => expr.format().fmt(f), + Expr::NumberLiteral(expr) => expr.format().fmt(f), + Expr::BooleanLiteral(expr) => expr.format().fmt(f), + Expr::NoneLiteral(expr) => expr.format().fmt(f), + Expr::EllipsisLiteral(expr) => expr.format().fmt(f), Expr::Attribute(expr) => expr.format().fmt(f), Expr::Subscript(expr) => expr.format().fmt(f), Expr::Starred(expr) => expr.format().fmt(f), @@ -274,7 +284,12 @@ fn format_with_parentheses_comments( Expr::Call(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), Expr::FormattedValue(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), Expr::FString(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), - Expr::Constant(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), + Expr::StringLiteral(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), + Expr::BytesLiteral(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), + Expr::NumberLiteral(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), + Expr::BooleanLiteral(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), + Expr::NoneLiteral(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), + Expr::EllipsisLiteral(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), Expr::Attribute(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), Expr::Subscript(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), Expr::Starred(expr) => FormatNodeRule::fmt_fields(expr.format().rule(), expr, f), @@ -468,7 +483,12 @@ impl NeedsParentheses for Expr { Expr::Call(expr) => expr.needs_parentheses(parent, context), Expr::FormattedValue(expr) => expr.needs_parentheses(parent, context), Expr::FString(expr) => expr.needs_parentheses(parent, context), - Expr::Constant(expr) => expr.needs_parentheses(parent, context), + Expr::StringLiteral(expr) => expr.needs_parentheses(parent, context), + Expr::BytesLiteral(expr) => expr.needs_parentheses(parent, context), + Expr::NumberLiteral(expr) => expr.needs_parentheses(parent, context), + Expr::BooleanLiteral(expr) => expr.needs_parentheses(parent, context), + Expr::NoneLiteral(expr) => expr.needs_parentheses(parent, context), + Expr::EllipsisLiteral(expr) => expr.needs_parentheses(parent, context), Expr::Attribute(expr) => expr.needs_parentheses(parent, context), Expr::Subscript(expr) => expr.needs_parentheses(parent, context), Expr::Starred(expr) => expr.needs_parentheses(parent, context), @@ -692,16 +712,12 @@ impl<'input> CanOmitOptionalParenthesesVisitor<'input> { return; } - Expr::Constant(ast::ExprConstant { - value: - Constant::Str(ast::StringConstant { - implicit_concatenated: true, - .. - }) - | Constant::Bytes(ast::BytesConstant { - implicit_concatenated: true, - .. - }), + Expr::StringLiteral(ast::ExprStringLiteral { + implicit_concatenated: true, + .. + }) + | Expr::BytesLiteral(ast::ExprBytesLiteral { + implicit_concatenated: true, .. }) | Expr::FString(ast::ExprFString { @@ -726,7 +742,12 @@ impl<'input> CanOmitOptionalParenthesesVisitor<'input> { | Expr::GeneratorExp(_) | Expr::FormattedValue(_) | Expr::FString(_) - | Expr::Constant(_) + | Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) | Expr::Name(_) | Expr::Slice(_) | Expr::IpyEscapeCommand(_) => {} diff --git a/crates/ruff_python_formatter/src/expression/number.rs b/crates/ruff_python_formatter/src/expression/number.rs index 7583bfd5cf0a2..ac97e58538ad2 100644 --- a/crates/ruff_python_formatter/src/expression/number.rs +++ b/crates/ruff_python_formatter/src/expression/number.rs @@ -1,24 +1,24 @@ use std::borrow::Cow; -use ruff_python_ast::ExprConstant; +use ruff_python_ast::ExprNumberLiteral; use ruff_text_size::{Ranged, TextSize}; use crate::prelude::*; pub(super) struct FormatInt<'a> { - constant: &'a ExprConstant, + number: &'a ExprNumberLiteral, } impl<'a> FormatInt<'a> { - pub(super) fn new(constant: &'a ExprConstant) -> Self { - debug_assert!(constant.value.is_int()); - Self { constant } + pub(super) fn new(number: &'a ExprNumberLiteral) -> Self { + debug_assert!(number.value.is_int()); + Self { number } } } impl Format> for FormatInt<'_> { fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { - let range = self.constant.range(); + let range = self.number.range(); let content = f.context().locator().slice(range); let normalized = normalize_integer(content); @@ -31,19 +31,19 @@ impl Format> for FormatInt<'_> { } pub(super) struct FormatFloat<'a> { - constant: &'a ExprConstant, + number: &'a ExprNumberLiteral, } impl<'a> FormatFloat<'a> { - pub(super) fn new(constant: &'a ExprConstant) -> Self { - debug_assert!(constant.value.is_float()); - Self { constant } + pub(super) fn new(number: &'a ExprNumberLiteral) -> Self { + debug_assert!(number.value.is_float()); + Self { number } } } impl Format> for FormatFloat<'_> { fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { - let range = self.constant.range(); + let range = self.number.range(); let content = f.context().locator().slice(range); let normalized = normalize_floating_number(content); @@ -56,19 +56,19 @@ impl Format> for FormatFloat<'_> { } pub(super) struct FormatComplex<'a> { - constant: &'a ExprConstant, + number: &'a ExprNumberLiteral, } impl<'a> FormatComplex<'a> { - pub(super) fn new(constant: &'a ExprConstant) -> Self { - debug_assert!(constant.value.is_complex()); - Self { constant } + pub(super) fn new(number: &'a ExprNumberLiteral) -> Self { + debug_assert!(number.value.is_complex()); + Self { number } } } impl Format> for FormatComplex<'_> { fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { - let range = self.constant.range(); + let range = self.number.range(); let content = f.context().locator().slice(range); let normalized = normalize_floating_number(content.trim_end_matches(['j', 'J'])); diff --git a/crates/ruff_python_formatter/src/expression/string.rs b/crates/ruff_python_formatter/src/expression/string.rs index b6f7da74554bb..279b7dfb38f6f 100644 --- a/crates/ruff_python_formatter/src/expression/string.rs +++ b/crates/ruff_python_formatter/src/expression/string.rs @@ -4,7 +4,9 @@ use bitflags::bitflags; use ruff_formatter::{format_args, write, FormatError}; use ruff_python_ast::AnyNodeRef; -use ruff_python_ast::{self as ast, Constant, ExprConstant, ExprFString, ExpressionRef}; +use ruff_python_ast::{ + self as ast, ExprBytesLiteral, ExprFString, ExprStringLiteral, ExpressionRef, +}; use ruff_python_parser::lexer::{lex_starts_at, LexicalError, LexicalErrorType}; use ruff_python_parser::{Mode, Tok}; use ruff_source_file::Locator; @@ -26,19 +28,16 @@ enum Quoting { #[derive(Clone, Debug)] pub(super) enum AnyString<'a> { - Constant(&'a ExprConstant), + String(&'a ExprStringLiteral), + Bytes(&'a ExprBytesLiteral), FString(&'a ExprFString), } impl<'a> AnyString<'a> { pub(crate) fn from_expression(expression: &'a Expr) -> Option> { match expression { - Expr::Constant( - constant @ ExprConstant { - value: Constant::Str(_) | Constant::Bytes(_), - .. - }, - ) => Some(AnyString::Constant(constant)), + Expr::StringLiteral(string) => Some(AnyString::String(string)), + Expr::BytesLiteral(bytes) => Some(AnyString::Bytes(bytes)), Expr::FString(fstring) => Some(AnyString::FString(fstring)), _ => None, } @@ -46,7 +45,7 @@ impl<'a> AnyString<'a> { fn quoting(&self, locator: &Locator) -> Quoting { match self { - Self::Constant(_) => Quoting::CanChange, + Self::String(_) | Self::Bytes(_) => Quoting::CanChange, Self::FString(f_string) => { let unprefixed = locator .slice(f_string.range) @@ -75,7 +74,14 @@ impl<'a> AnyString<'a> { /// Returns `true` if the string is implicitly concatenated. pub(super) fn is_implicit_concatenated(&self) -> bool { match self { - Self::Constant(ExprConstant { value, .. }) => value.is_implicit_concatenated(), + Self::String(ExprStringLiteral { + implicit_concatenated, + .. + }) => *implicit_concatenated, + Self::Bytes(ExprBytesLiteral { + implicit_concatenated, + .. + }) => *implicit_concatenated, Self::FString(ExprFString { implicit_concatenated, .. @@ -87,7 +93,8 @@ impl<'a> AnyString<'a> { impl Ranged for AnyString<'_> { fn range(&self) -> TextRange { match self { - Self::Constant(expr) => expr.range(), + Self::String(expr) => expr.range(), + Self::Bytes(expr) => expr.range(), Self::FString(expr) => expr.range(), } } @@ -96,7 +103,8 @@ impl Ranged for AnyString<'_> { impl<'a> From<&AnyString<'a>> for AnyNodeRef<'a> { fn from(value: &AnyString<'a>) -> Self { match value { - AnyString::Constant(expr) => AnyNodeRef::ExprConstant(expr), + AnyString::String(expr) => AnyNodeRef::ExprStringLiteral(expr), + AnyString::Bytes(expr) => AnyNodeRef::ExprBytesLiteral(expr), AnyString::FString(expr) => AnyNodeRef::ExprFString(expr), } } @@ -105,7 +113,8 @@ impl<'a> From<&AnyString<'a>> for AnyNodeRef<'a> { impl<'a> From<&AnyString<'a>> for ExpressionRef<'a> { fn from(value: &AnyString<'a>) -> Self { match value { - AnyString::Constant(expr) => ExpressionRef::Constant(expr), + AnyString::String(expr) => ExpressionRef::StringLiteral(expr), + AnyString::Bytes(expr) => ExpressionRef::BytesLiteral(expr), AnyString::FString(expr) => ExpressionRef::FString(expr), } } @@ -130,9 +139,6 @@ pub enum StringLayout { impl<'a> FormatString<'a> { pub(super) fn new(string: &'a AnyString<'a>) -> Self { - if let AnyString::Constant(constant) = string { - debug_assert!(constant.value.is_str() || constant.value.is_bytes()); - } Self { string, layout: StringLayout::Default, @@ -247,9 +253,6 @@ struct FormatStringContinuation<'a> { impl<'a> FormatStringContinuation<'a> { fn new(string: &'a AnyString<'a>) -> Self { - if let AnyString::Constant(constant) = string { - debug_assert!(constant.value.is_str() || constant.value.is_bytes()); - } Self { string } } } diff --git a/crates/ruff_python_formatter/src/generated.rs b/crates/ruff_python_formatter/src/generated.rs index 08c248e221e5c..dfa93b8961ac3 100644 --- a/crates/ruff_python_formatter/src/generated.rs +++ b/crates/ruff_python_formatter/src/generated.rs @@ -1606,38 +1606,218 @@ impl<'ast> IntoFormat> for ast::ExprFString { } } -impl FormatRule> - for crate::expression::expr_constant::FormatExprConstant +impl FormatRule> + for crate::expression::expr_string_literal::FormatExprStringLiteral { #[inline] - fn fmt(&self, node: &ast::ExprConstant, f: &mut PyFormatter) -> FormatResult<()> { - FormatNodeRule::::fmt(self, node, f) + fn fmt(&self, node: &ast::ExprStringLiteral, f: &mut PyFormatter) -> FormatResult<()> { + FormatNodeRule::::fmt(self, node, f) } } -impl<'ast> AsFormat> for ast::ExprConstant { +impl<'ast> AsFormat> for ast::ExprStringLiteral { type Format<'a> = FormatRefWithRule< 'a, - ast::ExprConstant, - crate::expression::expr_constant::FormatExprConstant, + ast::ExprStringLiteral, + crate::expression::expr_string_literal::FormatExprStringLiteral, PyFormatContext<'ast>, >; fn format(&self) -> Self::Format<'_> { FormatRefWithRule::new( self, - crate::expression::expr_constant::FormatExprConstant::default(), + crate::expression::expr_string_literal::FormatExprStringLiteral::default(), ) } } -impl<'ast> IntoFormat> for ast::ExprConstant { +impl<'ast> IntoFormat> for ast::ExprStringLiteral { type Format = FormatOwnedWithRule< - ast::ExprConstant, - crate::expression::expr_constant::FormatExprConstant, + ast::ExprStringLiteral, + crate::expression::expr_string_literal::FormatExprStringLiteral, PyFormatContext<'ast>, >; fn into_format(self) -> Self::Format { FormatOwnedWithRule::new( self, - crate::expression::expr_constant::FormatExprConstant::default(), + crate::expression::expr_string_literal::FormatExprStringLiteral::default(), + ) + } +} + +impl FormatRule> + for crate::expression::expr_bytes_literal::FormatExprBytesLiteral +{ + #[inline] + fn fmt(&self, node: &ast::ExprBytesLiteral, f: &mut PyFormatter) -> FormatResult<()> { + FormatNodeRule::::fmt(self, node, f) + } +} +impl<'ast> AsFormat> for ast::ExprBytesLiteral { + type Format<'a> = FormatRefWithRule< + 'a, + ast::ExprBytesLiteral, + crate::expression::expr_bytes_literal::FormatExprBytesLiteral, + PyFormatContext<'ast>, + >; + fn format(&self) -> Self::Format<'_> { + FormatRefWithRule::new( + self, + crate::expression::expr_bytes_literal::FormatExprBytesLiteral::default(), + ) + } +} +impl<'ast> IntoFormat> for ast::ExprBytesLiteral { + type Format = FormatOwnedWithRule< + ast::ExprBytesLiteral, + crate::expression::expr_bytes_literal::FormatExprBytesLiteral, + PyFormatContext<'ast>, + >; + fn into_format(self) -> Self::Format { + FormatOwnedWithRule::new( + self, + crate::expression::expr_bytes_literal::FormatExprBytesLiteral::default(), + ) + } +} + +impl FormatRule> + for crate::expression::expr_number_literal::FormatExprNumberLiteral +{ + #[inline] + fn fmt(&self, node: &ast::ExprNumberLiteral, f: &mut PyFormatter) -> FormatResult<()> { + FormatNodeRule::::fmt(self, node, f) + } +} +impl<'ast> AsFormat> for ast::ExprNumberLiteral { + type Format<'a> = FormatRefWithRule< + 'a, + ast::ExprNumberLiteral, + crate::expression::expr_number_literal::FormatExprNumberLiteral, + PyFormatContext<'ast>, + >; + fn format(&self) -> Self::Format<'_> { + FormatRefWithRule::new( + self, + crate::expression::expr_number_literal::FormatExprNumberLiteral::default(), + ) + } +} +impl<'ast> IntoFormat> for ast::ExprNumberLiteral { + type Format = FormatOwnedWithRule< + ast::ExprNumberLiteral, + crate::expression::expr_number_literal::FormatExprNumberLiteral, + PyFormatContext<'ast>, + >; + fn into_format(self) -> Self::Format { + FormatOwnedWithRule::new( + self, + crate::expression::expr_number_literal::FormatExprNumberLiteral::default(), + ) + } +} + +impl FormatRule> + for crate::expression::expr_boolean_literal::FormatExprBooleanLiteral +{ + #[inline] + fn fmt(&self, node: &ast::ExprBooleanLiteral, f: &mut PyFormatter) -> FormatResult<()> { + FormatNodeRule::::fmt(self, node, f) + } +} +impl<'ast> AsFormat> for ast::ExprBooleanLiteral { + type Format<'a> = FormatRefWithRule< + 'a, + ast::ExprBooleanLiteral, + crate::expression::expr_boolean_literal::FormatExprBooleanLiteral, + PyFormatContext<'ast>, + >; + fn format(&self) -> Self::Format<'_> { + FormatRefWithRule::new( + self, + crate::expression::expr_boolean_literal::FormatExprBooleanLiteral::default(), + ) + } +} +impl<'ast> IntoFormat> for ast::ExprBooleanLiteral { + type Format = FormatOwnedWithRule< + ast::ExprBooleanLiteral, + crate::expression::expr_boolean_literal::FormatExprBooleanLiteral, + PyFormatContext<'ast>, + >; + fn into_format(self) -> Self::Format { + FormatOwnedWithRule::new( + self, + crate::expression::expr_boolean_literal::FormatExprBooleanLiteral::default(), + ) + } +} + +impl FormatRule> + for crate::expression::expr_none_literal::FormatExprNoneLiteral +{ + #[inline] + fn fmt(&self, node: &ast::ExprNoneLiteral, f: &mut PyFormatter) -> FormatResult<()> { + FormatNodeRule::::fmt(self, node, f) + } +} +impl<'ast> AsFormat> for ast::ExprNoneLiteral { + type Format<'a> = FormatRefWithRule< + 'a, + ast::ExprNoneLiteral, + crate::expression::expr_none_literal::FormatExprNoneLiteral, + PyFormatContext<'ast>, + >; + fn format(&self) -> Self::Format<'_> { + FormatRefWithRule::new( + self, + crate::expression::expr_none_literal::FormatExprNoneLiteral::default(), + ) + } +} +impl<'ast> IntoFormat> for ast::ExprNoneLiteral { + type Format = FormatOwnedWithRule< + ast::ExprNoneLiteral, + crate::expression::expr_none_literal::FormatExprNoneLiteral, + PyFormatContext<'ast>, + >; + fn into_format(self) -> Self::Format { + FormatOwnedWithRule::new( + self, + crate::expression::expr_none_literal::FormatExprNoneLiteral::default(), + ) + } +} + +impl FormatRule> + for crate::expression::expr_ellipsis_literal::FormatExprEllipsisLiteral +{ + #[inline] + fn fmt(&self, node: &ast::ExprEllipsisLiteral, f: &mut PyFormatter) -> FormatResult<()> { + FormatNodeRule::::fmt(self, node, f) + } +} +impl<'ast> AsFormat> for ast::ExprEllipsisLiteral { + type Format<'a> = FormatRefWithRule< + 'a, + ast::ExprEllipsisLiteral, + crate::expression::expr_ellipsis_literal::FormatExprEllipsisLiteral, + PyFormatContext<'ast>, + >; + fn format(&self) -> Self::Format<'_> { + FormatRefWithRule::new( + self, + crate::expression::expr_ellipsis_literal::FormatExprEllipsisLiteral::default(), + ) + } +} +impl<'ast> IntoFormat> for ast::ExprEllipsisLiteral { + type Format = FormatOwnedWithRule< + ast::ExprEllipsisLiteral, + crate::expression::expr_ellipsis_literal::FormatExprEllipsisLiteral, + PyFormatContext<'ast>, + >; + fn into_format(self) -> Self::Format { + FormatOwnedWithRule::new( + self, + crate::expression::expr_ellipsis_literal::FormatExprEllipsisLiteral::default(), ) } } diff --git a/crates/ruff_python_formatter/src/statement/suite.rs b/crates/ruff_python_formatter/src/statement/suite.rs index be22098eee650..fa50c8ba42df9 100644 --- a/crates/ruff_python_formatter/src/statement/suite.rs +++ b/crates/ruff_python_formatter/src/statement/suite.rs @@ -1,7 +1,7 @@ use ruff_formatter::{write, FormatOwnedWithRule, FormatRefWithRule, FormatRuleWithOptions}; use ruff_python_ast::helpers::is_compound_statement; use ruff_python_ast::AnyNodeRef; -use ruff_python_ast::{self as ast, Constant, Expr, ExprConstant, PySourceType, Stmt, Suite}; +use ruff_python_ast::{self as ast, Expr, PySourceType, Stmt, Suite}; use ruff_python_trivia::{lines_after, lines_after_ignoring_end_of_line_trivia, lines_before}; use ruff_text_size::{Ranged, TextRange}; @@ -9,7 +9,6 @@ use crate::comments::{ leading_comments, trailing_comments, Comments, LeadingDanglingTrailingComments, }; use crate::context::{NodeLevel, WithNodeLevel}; -use crate::expression::expr_constant::ExprConstantLayout; use crate::expression::string::StringLayout; use crate::prelude::*; use crate::statement::stmt_expr::FormatStmtExpr; @@ -501,13 +500,7 @@ pub(crate) fn contains_only_an_ellipsis(body: &[Stmt], comments: &Comments) -> b let [node] = body else { return false; }; - matches!( - value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Ellipsis, - .. - }) - ) && !comments.has_leading(node) + value.is_ellipsis_literal_expr() && !comments.has_leading(node) } _ => false, } @@ -559,15 +552,11 @@ impl<'a> DocstringStmt<'a> { return None; }; - if let Expr::Constant(ExprConstant { value, .. }) = value.as_ref() { - return match value { - Constant::Str(value) if !value.implicit_concatenated => Some(DocstringStmt(stmt)), - Constant::Bytes(value) if !value.implicit_concatenated => Some(DocstringStmt(stmt)), - _ => None, - }; + match value.as_ref() { + Expr::StringLiteral(value) if !value.implicit_concatenated => Some(DocstringStmt(stmt)), + Expr::BytesLiteral(value) if !value.implicit_concatenated => Some(DocstringStmt(stmt)), + _ => None, } - - None } } @@ -579,13 +568,13 @@ impl Format> for DocstringStmt<'_> { if FormatStmtExpr.is_suppressed(node_comments.trailing, f.context()) { suppressed_node(self.0).fmt(f) } else { - // SAFETY: Safe because `DocStringStmt` guarantees that it only ever wraps a `ExprStmt` containing a `ConstantExpr`. - let constant = self + // SAFETY: Safe because `DocStringStmt` guarantees that it only ever wraps a `ExprStmt` containing a `ExprStringLiteral`. + let string_literal = self .0 .as_expr_stmt() .unwrap() .value - .as_constant_expr() + .as_string_literal_expr() .unwrap(); // We format the expression, but the statement carries the comments @@ -593,9 +582,9 @@ impl Format> for DocstringStmt<'_> { f, [ leading_comments(node_comments.leading), - constant + string_literal .format() - .with_options(ExprConstantLayout::String(StringLayout::DocString)), + .with_options(StringLayout::DocString), trailing_comments(node_comments.trailing), ] ) diff --git a/crates/ruff_python_parser/src/python.lalrpop b/crates/ruff_python_parser/src/python.lalrpop index 672844d4513eb..dfd28bad4a42b 100644 --- a/crates/ruff_python_parser/src/python.lalrpop +++ b/crates/ruff_python_parser/src/python.lalrpop @@ -377,9 +377,9 @@ IpyHelpEndEscapeCommandStatement: ast::Stmt = { 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 { + let ast::Expr::NumberLiteral(ast::ExprNumberLiteral { value: ast::Number::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()), + error: LexicalErrorType::OtherError("only integer literals are allowed in Subscript expressions in help end escape command".to_string()), location: range.start(), }); }; @@ -627,15 +627,15 @@ StarPattern: ast::Pattern = { }.into(), } -ConstantAtom: ast::ParenthesizedExpr = { - => ast::Expr::Constant( - ast::ExprConstant { value, range: (location..end_location).into() } +NumberAtom: ast::ParenthesizedExpr = { + => ast::Expr::NumberLiteral( + ast::ExprNumberLiteral { value, range: (location..end_location).into() } ).into(), } -ConstantExpr: ast::ParenthesizedExpr = { - ConstantAtom, - "-" => ast::Expr::UnaryOp( +NumberExpr: ast::ParenthesizedExpr = { + NumberAtom, + "-" => ast::Expr::UnaryOp( ast::ExprUnaryOp { op: ast::UnaryOp::USub, operand: Box::new(operand.into()), @@ -645,7 +645,7 @@ ConstantExpr: ast::ParenthesizedExpr = { } AddOpExpr: ast::ParenthesizedExpr = { - => ast::ExprBinOp { + => ast::ExprBinOp { left: Box::new(left.into()), op, right: Box::new(right.into()), @@ -666,7 +666,7 @@ LiteralPattern: ast::Pattern = { value: false.into(), range: (location..end_location).into() }.into(), - => ast::PatternMatchValue { + => ast::PatternMatchValue { value: Box::new(value.into()), range: (location..end_location).into() }.into(), @@ -718,18 +718,17 @@ ValuePattern: ast::Pattern = { MappingKey: ast::Expr = { MatchNameOrAttr, - => e.into(), + => e.into(), => e.into(), - "None" => ast::ExprConstant { - value: ast::Constant::None, + "None" => ast::ExprNoneLiteral { range: (location..end_location).into() }.into(), - "True" => ast::ExprConstant { - value: true.into(), + "True" => ast::ExprBooleanLiteral { + value: true, range: (location..end_location).into() }.into(), - "False" => ast::ExprConstant { - value: false.into(), + "False" => ast::ExprBooleanLiteral { + value: false, range: (location..end_location).into() }.into(), =>? Ok(concatenate_strings(strings, (location..end_location).into())?), @@ -1684,7 +1683,7 @@ FStringConversion: (TextSize, ast::ConversionFlag) = { Atom: ast::ParenthesizedExpr = { =>? Ok(concatenate_strings(strings, (location..end_location).into())?.into()), - => ast::ExprConstant { + => ast::ExprNumberLiteral { value, range: (location..end_location).into(), }.into(), @@ -1776,10 +1775,10 @@ Atom: ast::ParenthesizedExpr = { generators, range: (location..end_location).into(), }.into(), - "True" => ast::ExprConstant { value: true.into(), range: (location..end_location).into() }.into(), - "False" => ast::ExprConstant { value: false.into(), range: (location..end_location).into() }.into(), - "None" => ast::ExprConstant { value: ast::Constant::None, range: (location..end_location).into() }.into(), - "..." => ast::ExprConstant { value: ast::Constant::Ellipsis, range: (location..end_location).into() }.into(), + "True" => ast::ExprBooleanLiteral { value: true, range: (location..end_location).into() }.into(), + "False" => ast::ExprBooleanLiteral { value: false, range: (location..end_location).into() }.into(), + "None" => ast::ExprNoneLiteral { range: (location..end_location).into() }.into(), + "..." => ast::ExprEllipsisLiteral { range: (location..end_location).into() }.into(), }; ListLiteralValues: Vec = { @@ -1932,10 +1931,10 @@ TwoOrMore: Vec = { } }; -Constant: ast::Constant = { - => ast::Constant::Int(value), - => ast::Constant::Float(value), - => ast::Constant::Complex { real: s.0, imag: s.1 }, +Number: ast::Number = { + => ast::Number::Int(value), + => ast::Number::Float(value), + => ast::Number::Complex { real: s.0, imag: s.1 }, }; Identifier: ast::Identifier = { diff --git a/crates/ruff_python_parser/src/python.rs b/crates/ruff_python_parser/src/python.rs index 8838a99f5b058..c109aa4b137a7 100644 --- a/crates/ruff_python_parser/src/python.rs +++ b/crates/ruff_python_parser/src/python.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.20.0" -// sha3: 5c061590e81d6c0a6b543c9e8d8d30e7d7a44ed6b20f2ac72ca61a0e33d0e647 +// sha3: c798bc6e7bd9950e88dd5d950470865a75b5ff0352f4fc7fb51f13147de6ba6c use ruff_text_size::{Ranged, TextLen, TextRange, TextSize}; use ruff_python_ast::{self as ast, Int, IpyEscapeKind}; use crate::{ @@ -102,31 +102,31 @@ mod __parse__Top { Variant54(Vec), Variant55(core::option::Option>), Variant56(ast::CmpOp), - Variant57(ast::Constant), - Variant58(ast::Decorator), - Variant59(alloc::vec::Vec), - Variant60((Option>, ast::ParenthesizedExpr)), - Variant61((ast::ParenthesizedExpr, ast::ParenthesizedExpr)), - Variant62(Vec<(Option>, ast::ParenthesizedExpr)>), - Variant63(core::option::Option>, ast::ParenthesizedExpr)>>), - Variant64(ast::Parameter), - Variant65(core::option::Option), - Variant66(ast::ExceptHandler), - Variant67(alloc::vec::Vec), - Variant68((TextSize, ast::ConversionFlag)), - Variant69(core::option::Option<(TextSize, ast::ConversionFlag)>), - Variant70(StringType), - Variant71(alloc::vec::Vec), - Variant72(core::option::Option<(Option<(TextSize, TextSize, Option)>, ast::Expr)>), - Variant73(ast::Alias), - Variant74(Vec), - Variant75(u32), - Variant76(alloc::vec::Vec), - Variant77((Option, Option)), - Variant78(ast::MatchCase), - Variant79(alloc::vec::Vec), - Variant80(ast::PatternKeyword), - Variant81((ast::Expr, ast::Pattern)), + Variant57(ast::Decorator), + Variant58(alloc::vec::Vec), + Variant59((Option>, ast::ParenthesizedExpr)), + Variant60((ast::ParenthesizedExpr, ast::ParenthesizedExpr)), + Variant61(Vec<(Option>, ast::ParenthesizedExpr)>), + Variant62(core::option::Option>, ast::ParenthesizedExpr)>>), + Variant63(ast::Parameter), + Variant64(core::option::Option), + Variant65(ast::ExceptHandler), + Variant66(alloc::vec::Vec), + Variant67((TextSize, ast::ConversionFlag)), + Variant68(core::option::Option<(TextSize, ast::ConversionFlag)>), + Variant69(StringType), + Variant70(alloc::vec::Vec), + Variant71(core::option::Option<(Option<(TextSize, TextSize, Option)>, ast::Expr)>), + Variant72(ast::Alias), + Variant73(Vec), + Variant74(u32), + Variant75(alloc::vec::Vec), + Variant76((Option, Option)), + Variant77(ast::MatchCase), + Variant78(alloc::vec::Vec), + Variant79(ast::PatternKeyword), + Variant80((ast::Expr, ast::Pattern)), + Variant81(ast::Number), Variant82(Vec), Variant83(Vec), Variant84(Vec<(ast::Expr, ast::Pattern)>), @@ -212,7 +212,7 @@ mod __parse__Top { // State 30 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 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, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 31 - -432, -432, 0, 0, -432, 0, -432, 14, -432, 15, 0, -432, -432, 425, -432, 0, 426, -432, 0, 0, 427, 0, 0, -432, -432, -432, 0, -432, 0, 0, -432, 0, -432, 0, 0, 0, 0, -432, 0, 0, -432, 428, 429, 430, 16, 0, 0, -432, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, -432, -432, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, + -426, -426, 0, 0, -426, 0, -426, 14, -426, 15, 0, -426, -426, 425, -426, 0, 426, -426, 0, 0, 427, 0, 0, -426, -426, -426, 0, -426, 0, 0, -426, 0, -426, 0, 0, 0, 0, -426, 0, 0, -426, 428, 429, 430, 16, 0, 0, -426, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, -426, -426, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 32 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 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, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 33 @@ -236,11 +236,11 @@ mod __parse__Top { // State 42 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 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, 0, 0, 0, 435, 0, // State 43 - 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, -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, 435, 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 44 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 93, 434, 0, 435, 436, // State 45 - 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, 554, 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, -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, -326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 83, 0, 0, 0, 0, 0, 0, 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, // State 46 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, 554, 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, -880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 @@ -256,7 +256,7 @@ mod __parse__Top { // State 52 -304, 0, 443, 0, -304, 0, -304, 0, 0, 0, 0, -304, -304, 0, -304, -304, 0, -304, 0, 0, 0, 0, 0, -304, -304, -304, 0, -304, 444, 0, -304, 445, -304, 446, 447, 448, 0, -304, 581, 0, -304, 0, 0, 0, 0, 0, 0, -304, -304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -304, 0, 449, 450, 0, 0, 0, 451, -304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, -304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 53 - -364, 0, 0, 0, 583, 0, 584, 0, 0, 0, 0, 585, 586, 0, 587, 0, 0, 588, 0, 0, 0, 0, 0, 589, 590, 0, 0, -364, 0, 0, 591, 0, 102, 0, 0, 0, 0, 592, 0, 0, 593, 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, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -358, 0, 0, 0, 583, 0, 584, 0, 0, 0, 0, 585, 586, 0, 587, 0, 0, 588, 0, 0, 0, 0, 0, 589, 590, 0, 0, -358, 0, 0, 591, 0, 102, 0, 0, 0, 0, 592, 0, 0, 593, 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, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 54 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 55 @@ -284,7 +284,7 @@ mod __parse__Top { // State 66 -775, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, -775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 67 - -400, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, -400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, + -394, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, -394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, // State 69 @@ -298,7 +298,7 @@ mod __parse__Top { // State 73 0, 0, 0, 0, 0, 0, 0, 14, 657, 76, 77, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 74 - 0, 0, 0, 0, 0, 0, 0, 0, -424, 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, 554, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -418, 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, 554, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 75 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 76 @@ -322,7 +322,7 @@ mod __parse__Top { // State 85 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 86 - 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, -471, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, + 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, -465, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 87 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 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, 0, 0, 0, 0, 435, 0, // State 88 @@ -336,7 +336,7 @@ mod __parse__Top { // State 92 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 93 - 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 48, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, -335, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, + 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 48, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, -329, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 94 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, -787, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 95 @@ -348,7 +348,7 @@ mod __parse__Top { // State 98 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 99 - -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, -365, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -359, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 100 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 40, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 101 @@ -366,9 +366,9 @@ mod __parse__Top { // State 107 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 108 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 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, -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, 110, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 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, -451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, // State 109 - -339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -339, 0, 0, 0, 161, 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, -339, 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, + -333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -333, 0, 0, 0, 161, 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, -333, 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, // State 110 717, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 56, 0, 17, 526, 0, 0, 527, 0, 59, 0, 0, 0, 0, 0, 61, 62, 0, 64, 0, 0, 18, 0, 66, 19, 0, 528, 67, 68, 0, 69, 0, 0, 40, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 530, 435, 436, // State 111 @@ -436,7 +436,7 @@ mod __parse__Top { // State 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, 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, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 143 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -374, 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, 50, 0, 0, -368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, // State 144 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, 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, 762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 145 @@ -446,7 +446,7 @@ mod __parse__Top { // State 147 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 148 - -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, -368, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -362, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 149 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 150 @@ -462,11 +462,11 @@ mod __parse__Top { // State 155 0, 0, 0, 0, 0, 0, 0, 0, 781, 217, 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, 0, 0, 0, 0, 0, 0, 435, 0, // State 156 - -359, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, -359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 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, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, + -353, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, -353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 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, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 157 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 158 - 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 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, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, + 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 430, 16, 0, 0, 0, 0, 0, 0, 0, 17, 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, 20, 0, 0, 0, 431, 0, 0, 21, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 159 0, 0, 0, 0, 0, 0, 0, 219, 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, 435, 0, // State 160 @@ -534,7 +534,7 @@ mod __parse__Top { // State 191 0, 0, -247, -247, 0, -247, 0, 25, 0, -247, -247, 0, 0, -247, 0, -247, -247, 0, 0, 26, 0, -247, -247, 0, 0, -249, 0, 0, -247, -247, 0, -247, 0, -247, -247, -247, -247, 0, 0, -247, 0, 0, 0, 0, 27, 0, -247, 0, -247, -247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -247, 0, -247, -247, 0, 0, 0, -247, -247, 0, 0, 0, 0, 0, 0, 0, 0, 0, -247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 192 - 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, 554, 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, -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, -326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 83, 0, 0, 0, 0, 0, 0, 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, // State 193 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, 554, 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, -880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 194 @@ -552,7 +552,7 @@ mod __parse__Top { // State 200 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 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, 0, 435, 0, // State 201 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -375, 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, 50, 0, 0, -369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, // State 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, 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, 843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 203 @@ -584,13 +584,13 @@ mod __parse__Top { // State 216 0, 0, 0, 0, 0, 0, 0, 0, -645, 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, 0, 435, 0, // State 217 - 0, 0, 0, 0, 0, 0, 0, 0, -464, 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, 0, 0, 0, 0, 0, 0, 435, 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, 0, 435, 0, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 220 - -438, 0, 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, 261, 868, 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, -438, 0, 0, 0, -438, -438, 0, -438, -438, -438, -438, + -432, 0, 0, 0, 0, 0, 0, -432, 0, -432, 0, 0, 0, -432, 0, 0, -432, 0, 0, 0, -432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -432, 0, -432, -432, -432, -432, 0, 0, 0, 0, 0, -432, -432, -432, -432, 0, -432, -432, -432, -432, 261, 868, 0, 0, -432, -432, -432, -432, -432, 0, 0, -432, -432, -432, -432, 0, -432, -432, -432, -432, -432, -432, -432, -432, -432, 0, 0, 0, -432, -432, 0, -432, 0, 0, 0, -432, -432, 0, -432, -432, -432, -432, // State 221 -888, 0, 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, 0, -888, 0, -888, -888, -888, -888, 0, 0, 0, 0, 0, -888, -888, -888, -888, 0, -888, -888, -888, -888, 0, 875, 265, 876, -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, -888, 0, 0, 0, -888, -888, 0, -888, -888, -888, -888, // State 222 @@ -816,15 +816,15 @@ mod __parse__Top { // State 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, 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, 1048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 333 - 0, 0, 0, 0, 0, 0, 0, 0, -478, 0, 0, 0, 0, 440, 0, -478, 441, 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, -478, 0, 0, 0, -478, 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, -478, 0, -478, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 334 - 0, 0, 0, 0, 0, 0, 0, 363, 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, 362, -919, 0, 0, 0, 0, 0, 0, -919, 0, 0, 0, 364, 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, -919, 0, 0, 0, -919, 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, -919, 0, -919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 335 - 0, 0, 0, 0, 0, 0, 0, 363, -919, 0, 0, 0, 0, 0, 0, -919, 0, 0, 0, 365, 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, -919, 0, 0, 0, -919, 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, -919, 0, -919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -472, 0, 0, 0, 0, 440, 0, -472, 441, 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, 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, // State 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, 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, 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, // State 337 - 0, 0, 0, 0, 0, 0, 0, 0, -480, 0, 0, 0, 0, 0, 0, -480, 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, -480, 0, 0, 0, -480, 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, -480, 0, -480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, + 0, 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, 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, 436, // State 338 0, 0, 0, 0, 0, 0, 0, 339, 1054, 340, 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, 1006, 1007, 1008, 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, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 339 @@ -872,13 +872,13 @@ mod __parse__Top { // State 360 0, 0, 0, 0, 0, 0, 0, 339, 0, 340, 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, 1006, 1007, 1008, 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, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 361 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 433, 0, 434, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 339, 1105, 340, 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, 1006, 1007, 1008, 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, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 362 - 0, 0, 0, 0, 0, 0, 0, 339, 1106, 340, 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, 1006, 1007, 1008, 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, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 433, 0, 434, 0, 435, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 433, 0, 434, 0, 0, 0, // State 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, 0, 0, 0, 0, 435, 0, // State 366 @@ -896,9 +896,9 @@ mod __parse__Top { // State 372 0, 0, 0, 0, 0, 0, 0, 339, 0, 340, 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, 1006, 1007, 1008, 342, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 433, 0, 434, 0, 435, 436, // State 373 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 441, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 441, 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, // State 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, -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, 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, 436, // State 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, 0, 0, 0, 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, // State 376 @@ -966,25 +966,25 @@ mod __parse__Top { // State 407 -765, -765, -765, -765, -765, -765, -765, 0, -765, -765, 28, -765, -765, -765, -765, -765, -765, -765, 0, 0, 0, -765, -765, -765, -765, -765, 0, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -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, 0, 0, 0, // State 408 - -521, -521, 0, 0, -521, 0, -521, 0, -521, 0, 0, -521, -521, 0, -521, -521, 0, -521, 0, 0, 0, 0, 0, -521, -521, -521, 0, -521, 0, 0, -521, 0, -521, 0, 0, 0, 0, -521, 0, 0, -521, 0, 0, 0, 0, -521, 0, -521, -521, -521, 0, -521, 0, 0, 0, 0, 0, 0, 0, 0, -521, 0, 0, -521, -521, 0, -521, 0, 0, 0, 0, 0, 0, 0, -521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -521, -521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -515, -515, 0, 0, -515, 0, -515, 0, -515, 0, 0, -515, -515, 0, -515, -515, 0, -515, 0, 0, 0, 0, 0, -515, -515, -515, 0, -515, 0, 0, -515, 0, -515, 0, 0, 0, 0, -515, 0, 0, -515, 0, 0, 0, 0, -515, 0, -515, -515, -515, 0, -515, 0, 0, 0, 0, 0, 0, 0, 0, -515, 0, 0, -515, -515, 0, -515, 0, 0, 0, 0, 0, 0, 0, -515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -515, -515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 409 - -184, -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, -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, 0, 0, 0, - // State 410 -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, 0, -839, 0, -839, -839, -839, -839, -839, 0, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, 0, 0, 0, -839, -839, -839, -839, -839, -839, 0, -839, 0, 0, 0, 0, 0, 0, 0, 0, -839, 0, 0, -839, -839, 0, -839, 0, -839, -839, 0, 0, 0, -839, -839, 0, 0, 0, 0, 0, 0, 0, 0, 0, -839, -839, -839, 0, 0, 0, -839, 0, 0, 0, 0, 0, 0, 0, 0, 0, -839, - // State 411 + // State 410 -861, -861, -861, -861, -861, -861, -861, 0, -861, -861, 0, -861, -861, -861, -861, -861, -861, -861, 0, 0, 0, -861, -861, -861, -861, -861, 0, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, 0, 0, 0, 0, -861, -861, -861, -861, -861, 0, -861, 0, 0, 0, 0, 0, 0, 0, 0, -861, 0, 0, -861, -861, 0, -861, 0, -861, -861, 0, 0, 0, -861, -861, 0, 0, 0, 0, 0, 0, 0, 0, 0, -861, -861, -861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // State 412 + // State 411 -185, -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, -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, - // State 413 + // State 412 -866, -866, 0, 0, -866, 0, -866, 0, -866, 0, 0, -866, -866, 0, -866, -866, 0, -866, 0, 0, 0, 0, 0, -866, -866, -866, 0, -866, 0, 0, -866, 0, -866, 0, 0, 0, 0, -866, 0, 0, -866, 0, 0, 0, 0, -866, 0, -866, 0, -866, 0, -866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -866, -866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -866, -866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // State 414 + // State 413 -159, -159, 0, 0, -159, 0, -159, 0, -159, 0, 0, -159, -159, 0, -159, -159, 0, -159, 0, 0, 0, 0, 0, -159, -159, -159, 0, -159, 0, 0, -159, 0, -159, 0, 0, 0, 0, -159, 0, 0, -159, 0, 0, 0, 0, -159, 0, -159, 454, -159, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, -159, -159, 0, -159, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -159, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 414 + -184, -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, -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, 0, 0, 0, // State 415 - -433, -433, 0, 0, -433, 0, -433, 0, -433, 0, 0, -433, -433, 0, -433, 32, 0, -433, 0, 0, 0, 0, 0, -433, -433, -433, 0, -433, 0, 0, -433, 0, -433, 0, 0, 0, 0, -433, 0, 0, -433, 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, -433, -433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -427, -427, 0, 0, -427, 0, -427, 0, -427, 0, 0, -427, -427, 0, -427, 32, 0, -427, 0, 0, 0, 0, 0, -427, -427, -427, 0, -427, 0, 0, -427, 0, -427, 0, 0, 0, 0, -427, 0, 0, -427, 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, -427, -427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 416 -865, -865, 0, 0, -865, 0, -865, 0, -865, 0, 0, -865, -865, 0, -865, -865, 0, -865, 0, 0, 0, 0, 0, -865, -865, -865, 0, -865, 0, 0, -865, 0, -865, 0, 0, 0, 0, -865, 0, 0, -865, 0, 0, 0, 0, -865, 0, -865, 0, -865, 0, -865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -865, -865, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -865, -865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 417 - -394, -394, -394, -394, -394, -394, -394, 0, -394, -394, 0, -394, -394, -394, -394, -394, -394, -394, 0, 0, 0, -394, -394, -394, -394, -394, 0, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, 0, 0, 0, 0, -394, -394, -394, -394, -394, 0, -394, 0, 0, 0, 0, 0, 0, 0, 0, -394, 0, 0, -394, -394, 0, -394, 0, -394, -394, 0, 0, 0, -394, -394, 0, 0, 0, 0, 0, 0, 0, 0, 0, -394, -394, -394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -388, -388, -388, -388, -388, -388, -388, 0, -388, -388, 0, -388, -388, -388, -388, -388, -388, -388, 0, 0, 0, -388, -388, -388, -388, -388, 0, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, 0, 0, 0, 0, -388, -388, -388, -388, -388, 0, -388, 0, 0, 0, 0, 0, 0, 0, 0, -388, 0, 0, -388, -388, 0, -388, 0, -388, -388, 0, 0, 0, -388, -388, 0, 0, 0, 0, 0, 0, 0, 0, 0, -388, -388, -388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 418 -878, -878, 0, 0, -878, 0, -878, 0, -878, 0, 0, -878, -878, 0, -878, -878, 0, -878, 0, 0, 0, 0, 0, -878, -878, -878, 0, -878, 0, 0, -878, 0, -878, 0, 0, 0, 0, -878, 0, 0, -878, 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, -878, -878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 419 @@ -996,7 +996,7 @@ mod __parse__Top { // State 422 -550, -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, 0, 0, -550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -550, -550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 423 - -355, -355, -355, 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, -355, 0, -355, -355, -355, -355, -355, -355, 0, -355, -355, 0, -355, 0, 0, 0, 0, -355, 36, -355, -355, -355, 0, -355, 0, 0, 0, 0, 0, 0, 0, 0, -355, 0, 0, -355, -355, 0, -355, 0, -355, -355, 0, 0, 0, -355, -355, 0, 0, 0, 0, 0, 0, 0, 0, 0, -355, -355, -355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -349, -349, -349, 0, -349, 0, -349, 0, -349, 0, 0, -349, -349, 0, -349, -349, 0, -349, 0, 0, 0, 0, 0, -349, -349, -349, 0, -349, -349, 0, -349, -349, -349, -349, -349, -349, 0, -349, -349, 0, -349, 0, 0, 0, 0, -349, 36, -349, -349, -349, 0, -349, 0, 0, 0, 0, 0, 0, 0, 0, -349, 0, 0, -349, -349, 0, -349, 0, -349, -349, 0, 0, 0, -349, -349, 0, 0, 0, 0, 0, 0, 0, 0, 0, -349, -349, -349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 424 0, 0, 0, 0, 0, 0, 0, -915, 0, 0, 0, 0, 0, -915, 0, 0, -915, 0, 0, 0, -915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -915, -915, -915, -915, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -915, 0, 0, 0, -915, 0, 0, -915, 0, 0, 0, -915, -915, 0, -915, 0, -915, -915, // State 425 @@ -1012,13 +1012,13 @@ mod __parse__Top { // State 430 0, 0, 0, 0, 0, 0, 0, -917, 0, 0, 0, 0, 0, -917, 0, 0, -917, 0, 0, 0, -917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -917, -917, -917, -917, 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, -917, 0, 0, 0, -917, 0, 0, -917, 0, 0, 0, -917, -917, 0, -917, 0, -917, -917, // State 431 - -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, 0, -322, 0, -322, -322, -322, -322, -322, 0, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, 0, 0, 0, -322, -322, -322, -322, -322, -322, 0, -322, 0, 0, 0, 0, 0, 0, 0, 0, -322, 0, 0, -322, -322, 0, -322, 0, -322, -322, 0, 0, 0, -322, -322, 0, 0, 0, 0, 0, 0, 0, 0, 0, -322, -322, -322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, 0, -520, 0, -520, -520, -520, -520, -520, 0, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, 0, 0, 0, -520, -520, -520, -520, -520, -520, 0, -520, 0, 0, 0, 0, 0, 0, 0, 0, -520, 0, 0, -520, -520, 0, -520, 0, -520, -520, 0, 0, 0, -520, -520, 0, 0, 0, 0, 0, 0, 0, 0, 0, -520, -520, -520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 432 - -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, 0, -321, 0, -321, -321, -321, -321, -321, 0, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, 0, 0, 0, -321, -321, -321, -321, -321, -321, 0, -321, 0, 0, 0, 0, 0, 0, 0, 0, -321, 0, 0, -321, -321, 0, -321, 0, -321, -321, 0, 0, 0, -321, -321, 0, 0, 0, 0, 0, 0, 0, 0, 0, -321, -321, -321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, 0, -519, 0, -519, -519, -519, -519, -519, 0, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, 0, 0, 0, -519, -519, -519, -519, -519, -519, 0, -519, 0, 0, 0, 0, 0, 0, 0, 0, -519, 0, 0, -519, -519, 0, -519, 0, -519, -519, 0, 0, 0, -519, -519, 0, 0, 0, 0, 0, 0, 0, 0, 0, -519, -519, -519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 433 - -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, 0, -320, 0, -320, -320, -320, -320, -320, 0, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, 0, 0, 0, -320, -320, -320, -320, -320, -320, 0, -320, 0, 0, 0, 0, 0, 0, 0, 0, -320, 0, 0, -320, -320, 0, -320, 0, -320, -320, 0, 0, 0, -320, -320, 0, 0, 0, 0, 0, 0, 0, 0, 0, -320, -320, -320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, 0, -518, 0, -518, -518, -518, -518, -518, 0, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, 0, 0, 0, -518, -518, -518, -518, -518, -518, 0, -518, 0, 0, 0, 0, 0, 0, 0, 0, -518, 0, 0, -518, -518, 0, -518, 0, -518, -518, 0, 0, 0, -518, -518, 0, 0, 0, 0, 0, 0, 0, 0, 0, -518, -518, -518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 434 - -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, 0, -436, 0, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, 0, 0, 0, -436, -436, -436, -436, -436, -436, 0, -436, 0, 0, 0, 0, 0, 0, 0, 0, -436, 0, 0, -436, -436, 0, -436, -436, -436, -436, 0, 0, 0, -436, -436, 0, 0, 0, 0, 0, 0, 0, 0, 0, -436, -436, -436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, 0, -430, 0, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, 0, 0, 0, -430, -430, -430, -430, -430, -430, 0, -430, 0, 0, 0, 0, 0, 0, 0, 0, -430, 0, 0, -430, -430, 0, -430, -430, -430, -430, 0, 0, 0, -430, -430, 0, 0, 0, 0, 0, 0, 0, 0, 0, -430, -430, -430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 435 -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, 0, -835, 0, -835, -835, -835, -835, -835, 0, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, 0, 0, 0, -835, -835, -835, -835, -835, -835, 0, -835, 0, 0, 0, 0, 0, 0, 0, 0, -835, 0, 0, -835, -835, 0, -835, 0, -835, -835, 0, 0, 0, -835, -835, 0, 0, 0, 0, 0, 0, 0, 0, 0, -835, -835, -835, 0, 0, 0, -835, 0, 0, 0, 0, 0, 0, 0, 0, 0, -835, // State 436 @@ -1064,29 +1064,29 @@ mod __parse__Top { // State 456 -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, 0, -841, 0, -841, -841, -841, -841, -841, 0, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, 0, 0, 0, -841, -841, -841, -841, -841, -841, 0, -841, 0, 0, 0, 0, 0, 0, 0, 0, -841, 0, 0, -841, -841, 0, -841, 0, -841, -841, 0, 0, 0, -841, -841, 0, 0, 0, 0, 0, 0, 0, 0, 0, -841, -841, -841, 0, 0, 0, -841, 0, 0, 0, 0, 0, 0, 0, 0, 0, -841, // State 457 - 0, 0, 0, 0, 0, 0, 0, -511, 0, 0, 0, 0, 0, -511, 0, 0, -511, 0, 0, 0, -511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -511, -511, -511, -511, 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, -511, 0, 0, 0, -511, 0, 0, -511, 0, 0, 0, -511, -511, 0, -511, 0, -511, -511, + 0, 0, 0, 0, 0, 0, 0, -505, 0, 0, 0, 0, 0, -505, 0, 0, -505, 0, 0, 0, -505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -505, -505, -505, -505, 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, -505, 0, 0, 0, -505, 0, 0, -505, 0, 0, 0, -505, -505, 0, -505, 0, -505, -505, // State 458 - 0, 0, 0, 0, 0, 0, 0, -508, 0, 0, 0, 0, 0, -508, 0, 0, -508, 0, 0, 0, -508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -508, -508, -508, -508, 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, -508, 0, 0, 0, -508, 0, 0, -508, 0, 0, 0, -508, -508, 0, -508, 0, -508, -508, + 0, 0, 0, 0, 0, 0, 0, -502, 0, 0, 0, 0, 0, -502, 0, 0, -502, 0, 0, 0, -502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -502, -502, -502, -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, 0, 0, 0, 0, 0, 0, 0, -502, 0, 0, 0, -502, 0, 0, -502, 0, 0, 0, -502, -502, 0, -502, 0, -502, -502, // State 459 - 0, 0, 0, 0, 0, 0, 0, -509, 0, 0, 0, 0, 0, -509, 0, 0, -509, 0, 0, 0, -509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -509, -509, -509, -509, 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, -509, 0, 0, 0, -509, 0, 0, -509, 0, 0, 0, -509, -509, 0, -509, 0, -509, -509, + 0, 0, 0, 0, 0, 0, 0, -503, 0, 0, 0, 0, 0, -503, 0, 0, -503, 0, 0, 0, -503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -503, -503, -503, -503, 0, 0, 0, 0, 0, 0, 0, -503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -503, 0, 0, 0, -503, 0, 0, -503, 0, 0, 0, -503, -503, 0, -503, 0, -503, -503, // State 460 - 0, 0, 0, 0, 0, 0, 0, -510, 0, 0, 0, 0, 0, -510, 0, 0, -510, 0, 0, 0, -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -510, -510, -510, -510, 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, -510, 0, 0, 0, -510, 0, 0, -510, 0, 0, 0, -510, -510, 0, -510, 0, -510, -510, + 0, 0, 0, 0, 0, 0, 0, -504, 0, 0, 0, 0, 0, -504, 0, 0, -504, 0, 0, 0, -504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504, -504, -504, -504, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504, 0, 0, 0, -504, 0, 0, -504, 0, 0, 0, -504, -504, 0, -504, 0, -504, -504, // State 461 - 0, 0, 0, 0, 0, 0, 0, -512, 0, 0, 0, 0, 0, -512, 0, 0, -512, 0, 0, 0, -512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -512, -512, -512, -512, 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, -512, 0, 0, 0, -512, 0, 0, -512, 0, 0, 0, -512, -512, 0, -512, 0, -512, -512, + 0, 0, 0, 0, 0, 0, 0, -506, 0, 0, 0, 0, 0, -506, 0, 0, -506, 0, 0, 0, -506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -506, -506, -506, -506, 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, -506, 0, 0, 0, -506, 0, 0, -506, 0, 0, 0, -506, -506, 0, -506, 0, -506, -506, // State 462 - -393, -393, -393, -393, -393, -393, -393, 0, -393, -393, 0, -393, -393, -393, -393, -393, -393, -393, 0, 0, 0, -393, -393, -393, -393, -393, 0, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, 0, 0, 0, 0, -393, -393, -393, -393, -393, 0, -393, 0, 0, 0, 0, 0, 0, 0, 0, -393, 0, 0, -393, -393, 0, -393, 0, -393, -393, 0, 0, 0, -393, -393, 0, 0, 0, 0, 0, 0, 0, 0, 0, -393, -393, -393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -387, -387, -387, -387, -387, -387, -387, 0, -387, -387, 0, -387, -387, -387, -387, -387, -387, -387, 0, 0, 0, -387, -387, -387, -387, -387, 0, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, 0, 0, 0, 0, -387, -387, -387, -387, -387, 0, -387, 0, 0, 0, 0, 0, 0, 0, 0, -387, 0, 0, -387, -387, 0, -387, 0, -387, -387, 0, 0, 0, -387, -387, 0, 0, 0, 0, 0, 0, 0, 0, 0, -387, -387, -387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 463 - -185, 0, -185, -185, 0, -185, 0, -185, -185, -185, -185, 0, 0, -185, 0, -185, -185, 0, 0, -185, 0, -185, -185, 0, 0, -185, -514, 0, -185, -185, 0, -185, 0, -185, -185, -185, -185, 0, 0, -185, 0, 0, 0, 0, -185, -185, -185, 0, -185, -185, 0, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 0, 0, -185, 0, -185, -185, 0, 0, 0, -185, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 0, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -185, 0, -185, -185, 0, -185, 0, -185, -185, -185, -185, 0, 0, -185, 0, -185, -185, 0, 0, -185, 0, -185, -185, 0, 0, -185, -508, 0, -185, -185, 0, -185, 0, -185, -185, -185, -185, 0, 0, -185, 0, 0, 0, 0, -185, -185, -185, 0, -185, -185, 0, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 0, 0, -185, 0, -185, -185, 0, 0, 0, -185, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 0, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 464 - 0, 0, 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, 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, -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, -511, 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, -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, // State 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, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 466 0, 0, 0, 0, 0, 0, 0, 0, 557, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 467 - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 468 - 0, 0, 0, 0, 0, 0, 0, 0, -548, 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, -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, -548, 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, -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, // State 469 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 470 @@ -1096,15 +1096,15 @@ mod __parse__Top { // 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, 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, // State 473 - -515, 0, 0, 0, 0, 0, 0, 0, -515, 0, 0, 0, 0, 0, 0, -515, 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, -515, 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, 0, 0, -515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -509, 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, 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, -509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 474 0, 0, 0, 0, 0, 0, 0, 0, -880, 0, 0, 0, 0, 0, 0, -880, 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, -880, 0, 0, 0, 0, 0, -880, 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, -880, 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, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -881, 0, 0, 0, 0, 0, 0, -881, 0, 0, 0, 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, -881, 0, 0, 0, 0, 0, -881, 0, 0, 0, 0, 0, 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, -881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 477 - -516, 0, 0, 0, 0, 0, 0, 0, -516, 0, 0, 0, 0, 0, 0, -516, 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, -516, 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, -516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -510, 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, 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, -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 478 -187, -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, -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, // State 479 @@ -1120,31 +1120,31 @@ mod __parse__Top { // State 484 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -564, 0, 0, 0, 0, 0, 0, 0, 0, 0, -564, 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, // State 485 - -520, -520, 0, 0, -520, 0, -520, 0, -520, 0, 0, -520, -520, 0, -520, -520, 0, -520, 0, 0, 0, 0, 0, -520, -520, -520, 0, -520, 0, 0, -520, 0, -520, 0, 0, 0, 0, -520, 0, 0, -520, 0, 0, 0, 0, -520, 0, -520, -520, -520, 0, -520, 0, 0, 0, 0, 0, 0, 0, 0, -520, 0, 0, -520, -520, 0, -520, 0, 0, 0, 0, 0, 0, 0, -520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -520, -520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -514, -514, 0, 0, -514, 0, -514, 0, -514, 0, 0, -514, -514, 0, -514, -514, 0, -514, 0, 0, 0, 0, 0, -514, -514, -514, 0, -514, 0, 0, -514, 0, -514, 0, 0, 0, 0, -514, 0, 0, -514, 0, 0, 0, 0, -514, 0, -514, -514, -514, 0, -514, 0, 0, 0, 0, 0, 0, 0, 0, -514, 0, 0, -514, -514, 0, -514, 0, 0, 0, 0, 0, 0, 0, -514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -514, -514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 486 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 488 - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 489 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, -788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 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, 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, // State 491 - 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, 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, -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, -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, -510, 0, 0, 0, 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, -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, -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 492 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, -552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 493 -204, -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, -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, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -383, 0, 0, -383, 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, -377, 0, 0, -377, 0, 0, -377, 0, 0, 0, 0, 0, 0, -377, 0, 0, 0, 0, // State 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, 0, -379, 0, 0, -379, 0, 0, -379, 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, -373, 0, 0, -373, 0, 0, -373, 0, 0, 0, 0, 0, 0, -373, 0, 0, 0, 0, // State 496 - -372, -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, -372, 0, 0, 0, 0, 0, 0, 0, 0, 0, -372, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, 0, -366, 0, -366, -366, -366, -366, -366, 0, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, 0, 0, 0, -366, -366, -366, -366, -366, -366, 0, -366, 0, 0, 0, 0, 0, 0, 0, 0, -366, 0, 0, -366, -366, 0, -366, 0, -366, -366, 0, 0, 0, -366, -366, 0, 0, 0, 0, 0, 0, 0, 0, 0, -366, -366, -366, 0, 0, 0, -366, 0, 0, 0, 0, 0, 0, 0, 0, 0, -366, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -380, 0, 0, -380, 0, 0, -380, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, -374, 0, 0, -374, 0, 0, -374, 0, 0, 0, 0, 0, 0, -374, 0, 0, 0, 0, // State 498 -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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 499 @@ -1152,7 +1152,7 @@ mod __parse__Top { // State 500 -769, 0, 0, 0, 0, 0, 0, -769, 0, -769, 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, -769, 0, -769, -769, -769, -769, 0, 0, 0, 0, 0, -769, -769, -769, -769, 0, -769, -769, -769, -769, 0, 0, 0, 0, -769, -769, -769, -769, -769, 0, 0, -769, -769, -769, -769, 0, -769, -769, -769, -769, -769, -769, -769, -769, -769, 0, 0, 0, -769, 0, 0, -769, 0, 0, 0, -769, -769, 0, -769, -769, -769, -769, // State 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, -329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -329, 0, 0, 0, -329, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -323, 0, 0, 0, -323, 0, -323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 -807, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 @@ -1180,7 +1180,7 @@ mod __parse__Top { // State 514 -806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 515 - -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, -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, + -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, 0, 0, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 516 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 @@ -1194,21 +1194,21 @@ mod __parse__Top { // State 521 -312, 0, 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, -312, 0, 0, 0, -312, -312, 0, -312, -312, -312, -312, // State 522 - -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, -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, 0, + -395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 -774, 0, 0, 0, 0, 0, 0, -774, 0, -774, 0, 0, 0, -774, 0, 0, -774, 0, 0, 0, -774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -774, 0, -774, -774, -774, -774, 0, 0, 0, 0, 0, -774, -774, -774, -774, 0, -774, -774, -774, -774, 0, 0, 0, 0, -774, -774, -774, -774, -774, 0, 0, -774, -774, -774, -774, 0, -774, -774, -774, -774, -774, -774, -774, -774, -774, 0, 0, 0, -774, 0, 0, -774, 0, 0, 0, -774, -774, 0, -774, -774, -774, -774, // State 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, 104, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 525 - -397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -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, // State 526 - -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, -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, 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, -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, // State 527 -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, -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, 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, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 - -461, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -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, // State 530 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, 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, 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, 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, -114, 0, 0, -114, 0, 0, 0, -114, -114, 0, -114, 0, -114, -114, // State 531 @@ -1216,7 +1216,7 @@ mod __parse__Top { // State 532 0, 0, 0, 0, 0, 0, 0, 0, 658, 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, // State 533 - 0, 0, -185, -185, 0, -185, 0, -185, -185, -185, -185, 0, 0, -185, 0, -185, -185, 0, 0, -185, 0, -185, -185, 0, 0, 0, -514, 0, -185, -185, 0, -185, 128, -185, -185, -185, -185, 0, 0, -185, 0, 0, 0, 0, -185, 0, -185, 0, -185, 0, 0, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 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, 0, 0, 0, + 0, 0, -185, -185, 0, -185, 0, -185, -185, -185, -185, 0, 0, -185, 0, -185, -185, 0, 0, -185, 0, -185, -185, 0, 0, 0, -508, 0, -185, -185, 0, -185, 128, -185, -185, -185, -185, 0, 0, -185, 0, 0, 0, 0, -185, 0, -185, 0, -185, 0, 0, -185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -185, 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, 0, 0, 0, // State 534 -163, -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, -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, 0, 0, 0, // State 535 @@ -1226,7 +1226,7 @@ mod __parse__Top { // State 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, 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, // State 538 - 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, 130, 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, -510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -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, // State 540 @@ -1240,7 +1240,7 @@ mod __parse__Top { // State 544 0, 0, 0, 0, 0, 0, 0, -300, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -300, 0, 0, 0, -300, 0, 0, -300, 0, 0, 0, -300, -300, 0, -300, 0, -300, -300, // State 545 - -354, -354, -354, 0, -354, 0, -354, 0, -354, 0, 0, -354, -354, 0, -354, -354, 0, -354, 0, 0, 0, 0, 0, -354, -354, -354, 0, -354, -354, 0, -354, -354, -354, -354, -354, -354, 0, -354, -354, 0, -354, 0, 0, 0, 0, -354, 36, -354, -354, -354, 0, -354, 0, 0, 0, 0, 0, 0, 0, 0, -354, 0, 0, -354, -354, 0, -354, 0, -354, -354, 0, 0, 0, -354, -354, 0, 0, 0, 0, 0, 0, 0, 0, 0, -354, -354, -354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -348, -348, -348, 0, -348, 0, -348, 0, -348, 0, 0, -348, -348, 0, -348, -348, 0, -348, 0, 0, 0, 0, 0, -348, -348, -348, 0, -348, -348, 0, -348, -348, -348, -348, -348, -348, 0, -348, -348, 0, -348, 0, 0, 0, 0, -348, 36, -348, -348, -348, 0, -348, 0, 0, 0, 0, 0, 0, 0, 0, -348, 0, 0, -348, -348, 0, -348, 0, -348, -348, 0, 0, 0, -348, -348, 0, 0, 0, 0, 0, 0, 0, 0, 0, -348, -348, -348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 546 -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, 0, 0, 0, 0, 0, 0, // State 547 @@ -1280,9 +1280,9 @@ mod __parse__Top { // State 564 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, -465, 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 - -470, -470, 0, 0, -470, 0, -470, 0, -470, 0, 0, -470, -470, 0, -470, -470, 0, -470, 0, 0, 0, 0, 0, -470, -470, -470, 0, -470, 0, 0, -470, 0, -470, 0, 0, 0, 0, -470, 0, 0, -470, 0, 0, 0, 0, -470, 0, -470, 0, -470, 0, -470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -470, -470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -470, -470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -464, -464, 0, 0, -464, 0, -464, 0, -464, 0, 0, -464, -464, 0, -464, -464, 0, -464, 0, 0, 0, 0, 0, -464, -464, -464, 0, -464, 0, 0, -464, 0, -464, 0, 0, 0, 0, -464, 0, 0, -464, 0, 0, 0, 0, -464, 0, -464, 0, -464, 0, -464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -464, -464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -464, -464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 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, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 568 @@ -1292,11 +1292,11 @@ mod __parse__Top { // State 570 -206, -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, -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, // State 571 - 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, 31, 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, -327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 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, 0, -384, 0, 0, -384, 0, 0, -384, 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, -378, 0, 0, -378, 0, 0, -378, 0, 0, 0, 0, 0, 0, -378, 0, 0, 0, 0, // State 573 - -373, -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, -373, 0, 0, 0, 0, 0, 0, 0, 0, 0, -373, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, 0, -367, 0, -367, -367, -367, -367, -367, 0, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, 0, 0, 0, -367, -367, -367, -367, -367, -367, 0, -367, 0, 0, 0, 0, 0, 0, 0, 0, -367, 0, 0, -367, -367, 0, -367, 0, -367, -367, 0, 0, 0, -367, -367, 0, 0, 0, 0, 0, 0, 0, 0, 0, -367, -367, -367, 0, 0, 0, -367, 0, 0, 0, 0, 0, 0, 0, 0, 0, -367, // State 574 -875, -875, 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, -875, 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, 0, -875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 575 @@ -1304,11 +1304,11 @@ mod __parse__Top { // State 576 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, 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, 0, 0, 0, // State 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, 0, 0, 0, 0, -330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -330, 0, 0, 0, -330, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -324, 0, 0, 0, -324, 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, // 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 579 - -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + -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, -456, 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, // State 580 -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, -85, 0, 0, 0, 0, 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, // State 581 @@ -1348,51 +1348,51 @@ mod __parse__Top { // State 598 -174, 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, -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, // State 599 - -362, 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, -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, -362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 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, -356, 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, -356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 600 - -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, -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, 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, -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, // State 601 -526, 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, -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, -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, // State 602 - -360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -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, + -354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 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, 0, 0, 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 - -363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -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, 0, 0, -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, + -357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 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, -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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, -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, 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, -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, // 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 608 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -453, -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, -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, -453, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -447, -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, -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, -447, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 610 - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -444, -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, -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, -444, 0, // State 611 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -449, -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, -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, -449, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -443, -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, 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, 0, 0, 0, -443, 0, // State 612 -528, 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, -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, // State 613 - -434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 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, 0, 0, 0, + -428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 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, 0, // State 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 -531, 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, -531, 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, // State 616 - -458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, // State 617 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 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, 0, 0, 0, // State 618 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 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, 0, 0, 0, // State 619 - -519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 162, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 620 -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, -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, 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, // State 621 - -399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 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, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 623 @@ -1414,25 +1414,25 @@ mod __parse__Top { // State 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, -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, // State 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, -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, 0, 0, 0, 0, 0, 0, + 0, 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, 0, 0, 0, 0, // State 633 - 0, 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, 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, - // State 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // State 635 + // State 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, -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, 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 + // State 635 0, 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, 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, 0, 0, 0, - // State 637 + // State 636 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, -871, 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, - // State 638 + // State 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, -161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 638 + 0, 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, 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, // State 639 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, -865, 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, 0, 0, 0, 0, // State 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, -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, 0, 0, 0, 0, 0, 0, // State 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 643 @@ -1448,9 +1448,9 @@ mod __parse__Top { // State 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, 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, // State 649 - 0, 0, -355, 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, -355, 0, 0, -355, 0, -355, -355, -355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, -355, -355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -355, 0, -355, -355, 0, 0, 0, -355, -355, 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, -349, 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, -349, 0, 0, -349, 0, -349, -349, -349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, -349, -349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -349, 0, -349, -349, 0, 0, 0, -349, -349, 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, // State 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, -357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 651 0, 0, -211, -211, 0, -211, 0, -211, 0, -211, -211, 0, 0, -211, 0, -211, -211, 0, 0, -211, 0, -211, -211, 0, 0, -238, 0, 0, -211, -211, 0, -211, 0, -211, -211, -211, -211, 0, 0, -211, 0, 0, 0, 0, -211, 0, -211, 0, -211, -211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -211, 0, -211, -211, 0, 0, 0, -211, -211, 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, // State 652 @@ -1468,11 +1468,11 @@ mod __parse__Top { // State 658 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, -118, 0, 0, -118, 0, 0, -118, 0, 0, 0, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, -118, -118, -118, 0, 0, 0, 0, 0, 0, 0, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, 0, 0, -118, 0, 0, 0, 0, 0, 0, 0, 0, 0, -118, 0, 0, 0, -118, 0, 0, -118, 0, 0, 0, -118, -118, 0, -118, 0, -118, -118, // State 659 - 0, 0, 0, 0, 0, 0, 0, 0, -423, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -417, 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, 0, 0, 0, // State 660 - 0, 0, 0, 0, 0, 0, 0, 0, -426, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -420, 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, 0, 0, 0, // State 661 - 0, 0, 0, 0, 0, 0, 0, 0, -427, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -421, 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, // State 662 -241, -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, 0, 0, 0, // State 663 @@ -1480,7 +1480,7 @@ mod __parse__Top { // State 664 -142, -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, 31, -142, -142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 665 - -513, 0, 0, 0, 0, 0, 0, 0, -513, 0, 0, 0, 0, 0, 0, -513, 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, -513, 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, 0, 0, -513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -507, 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, 0, 0, -507, 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, -507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 666 -201, -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, -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, 0, 0, 0, // State 667 @@ -1494,7 +1494,7 @@ mod __parse__Top { // State 671 -192, -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, -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, // State 672 - 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -511, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 673 0, 0, 0, 0, 0, 0, 0, 0, -549, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 @@ -1512,7 +1512,7 @@ mod __parse__Top { // State 680 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, -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, // State 681 - -468, -468, 0, 0, -468, 0, -468, 0, -468, 0, 0, -468, -468, 0, -468, -468, 0, -468, 0, 0, 0, 0, 0, -468, -468, -468, 0, -468, 0, 0, -468, 0, -468, 0, 0, 0, 0, -468, 0, 0, -468, 0, 0, 0, 0, -468, 0, -468, 0, -468, 0, -468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -468, -468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -468, -468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -462, -462, 0, 0, -462, 0, -462, 0, -462, 0, 0, -462, -462, 0, -462, -462, 0, -462, 0, 0, 0, 0, 0, -462, -462, -462, 0, -462, 0, 0, -462, 0, -462, 0, 0, 0, 0, -462, 0, 0, -462, 0, 0, 0, 0, -462, 0, -462, 0, -462, 0, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -462, -462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -462, -462, 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, -565, 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, 0, 0, 0, 0, 0, // State 683 @@ -1522,7 +1522,7 @@ mod __parse__Top { // State 685 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, -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, // State 686 - -469, -469, 0, 0, -469, 0, -469, 0, -469, 0, 0, -469, -469, 0, -469, -469, 0, -469, 0, 0, 0, 0, 0, -469, -469, -469, 0, -469, 0, 0, -469, 0, -469, 0, 0, 0, 0, -469, 0, 0, -469, 0, 0, 0, 0, -469, 0, -469, 0, -469, 0, -469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -469, -469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -469, -469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -463, -463, 0, 0, -463, 0, -463, 0, -463, 0, 0, -463, -463, 0, -463, -463, 0, -463, 0, 0, 0, 0, 0, -463, -463, -463, 0, -463, 0, 0, -463, 0, -463, 0, 0, 0, 0, -463, 0, 0, -463, 0, 0, 0, 0, -463, 0, -463, 0, -463, 0, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -463, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -463, -463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 687 -205, -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, -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, 0, 0, 0, // State 688 @@ -1530,17 +1530,17 @@ mod __parse__Top { // State 689 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 690 - 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, -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, -326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 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, 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, // State 692 - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -334, 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, -334, 0, 0, 0, 0, 0, 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, 0, 0, 0, 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, 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, -328, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 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, 0, 0, 0, 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, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -392, 0, 0, -392, 0, 0, -392, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -386, 0, 0, -386, 0, 0, 0, 0, 0, 0, -386, 0, 0, 0, 0, // State 696 -773, 0, 0, 0, 0, 0, 0, -773, 0, -773, 0, 0, 0, -773, 0, 0, -773, 0, 0, 0, -773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -773, 0, -773, -773, -773, -773, 0, 0, 0, 0, 0, -773, -773, -773, -773, 0, -773, -773, -773, -773, 0, 0, 0, 0, -773, -773, -773, -773, -773, 0, 0, -773, -773, -773, -773, 0, -773, -773, -773, -773, -773, -773, -773, -773, -773, 0, 0, 0, -773, 0, 0, -773, 0, 0, 0, -773, -773, 0, -773, -773, -773, -773, // State 697 @@ -1550,17 +1550,17 @@ mod __parse__Top { // State 699 -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, -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, 0, 0, 0, // State 700 - -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, -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, + -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, -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, // State 701 -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, -176, 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, // State 702 -175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -175, 0, 0, 0, 0, -175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 - -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, -460, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 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, 0, 0, 0, 0, -454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 -770, 0, 0, 0, 0, 0, 0, -770, 0, -770, 0, 0, 0, -770, 0, 0, -770, 0, 0, 0, -770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -770, 0, -770, -770, -770, -770, 0, 0, 0, 0, 0, -770, -770, -770, -770, 0, -770, -770, -770, -770, 0, 0, 0, 0, -770, -770, -770, -770, -770, 0, 0, -770, -770, -770, -770, 0, -770, -770, -770, -770, -770, -770, -770, -770, -770, 0, 0, 0, -770, 0, 0, -770, 0, 0, 0, -770, -770, 0, -770, -770, -770, -770, // State 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, -326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -326, 0, 0, 0, -326, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -320, 0, 0, 0, -320, 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, // State 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, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 @@ -1570,11 +1570,11 @@ mod __parse__Top { // State 709 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, -454, -454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -448, -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, -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, -448, 0, // State 712 - -340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -340, 0, 0, 0, 220, 0, 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, -340, 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, 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, -334, 0, 0, 0, 220, 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, -334, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 713 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 714 @@ -1592,13 +1592,13 @@ mod __parse__Top { // State 720 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, -244, 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, 0, 0, 0, // State 721 - 0, 0, -393, -393, 0, -393, 0, 0, 0, -393, 0, 0, 0, -393, 0, -393, -393, 0, 0, 0, 0, -393, -393, 0, 0, -395, 0, 0, -393, -393, 0, -393, 0, -393, -393, -393, -393, 0, 0, -393, 0, 0, 0, 0, 0, 0, -393, 0, -393, -393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -393, 0, -393, -393, 0, 0, 0, -393, -393, 0, 0, 0, 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, -387, -387, 0, -387, 0, 0, 0, -387, 0, 0, 0, -387, 0, -387, -387, 0, 0, 0, 0, -387, -387, 0, 0, -389, 0, 0, -387, -387, 0, -387, 0, -387, -387, -387, -387, 0, 0, -387, 0, 0, 0, 0, 0, 0, -387, 0, -387, -387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -387, 0, -387, -387, 0, 0, 0, -387, -387, 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, // State 722 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 821, 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, // State 724 - 0, 0, 0, 0, 0, 0, 0, 0, -548, 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, 183, 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, -548, 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, 183, 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, // State 725 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 @@ -1608,7 +1608,7 @@ mod __parse__Top { // State 728 0, 0, -187, -187, 0, -187, 0, -187, 0, -187, -187, 0, 0, -187, 0, -187, -187, 0, 0, -187, 0, -187, -187, 0, 0, -216, 0, 0, -187, -187, 0, -187, 0, -187, -187, -187, -187, 0, 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, 0, 0, 0, // State 729 - 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, -522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -520, -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, -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, -514, 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, -514, -514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -514, 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, // State 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, 0, 0, 0, 829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 731 @@ -1620,7 +1620,7 @@ mod __parse__Top { // State 734 0, 0, 0, 0, 0, 0, 0, -119, -119, -119, -119, 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, -119, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, -119, 0, 0, 0, -119, 0, 0, -119, 0, 0, 0, -119, -119, 0, -119, 0, -119, -119, // State 735 - 0, 0, 0, 0, 0, 0, 0, 0, -425, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 736 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, -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, // State 737 @@ -1650,7 +1650,7 @@ mod __parse__Top { // State 749 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 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, 0, 0, 0, 0, // State 750 - -467, -467, 0, 0, -467, 0, -467, 0, -467, 0, 0, -467, -467, 0, -467, -467, 0, -467, 0, 0, 0, 0, 0, -467, -467, -467, 0, -467, 0, 0, -467, 0, -467, 0, 0, 0, 0, -467, 0, 0, -467, 0, 0, 0, 0, -467, 0, -467, 0, -467, 0, -467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -467, -467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -467, -467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -461, -461, 0, 0, -461, 0, -461, 0, -461, 0, 0, -461, -461, 0, -461, -461, 0, -461, 0, 0, 0, 0, 0, -461, -461, -461, 0, -461, 0, 0, -461, 0, -461, 0, 0, 0, 0, -461, 0, 0, -461, 0, 0, 0, 0, -461, 0, -461, 0, -461, 0, -461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -461, -461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -461, -461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 751 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, -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, 0, 0, 0, 0, 0, // State 752 @@ -1662,17 +1662,17 @@ mod __parse__Top { // State 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, 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, // 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, -390, 0, 0, -390, 0, 0, -390, 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, -384, 0, 0, -384, 0, 0, -384, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, // State 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, -391, 0, 0, -391, 0, 0, -391, 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, -385, 0, 0, -385, 0, 0, -385, 0, 0, 0, 0, 0, 0, -385, 0, 0, 0, 0, // State 758 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -363, 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, -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, 0, 0, 0, 0, 0, 0, 0, -370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 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, 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 761 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -388, 0, 0, -388, 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, 0, 0, 0, 0, 0, 0, -382, 0, 0, -382, 0, 0, -382, 0, 0, 0, 0, 0, 0, -382, 0, 0, 0, 0, // State 762 -771, 0, 0, 0, 0, 0, 0, -771, 0, -771, 0, 0, 0, -771, 0, 0, -771, 0, 0, 0, -771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -771, 0, -771, -771, -771, -771, 0, 0, 0, 0, 0, -771, -771, -771, -771, 0, -771, -771, -771, -771, 0, 0, 0, 0, -771, -771, -771, -771, -771, 0, 0, -771, -771, -771, -771, 0, -771, -771, -771, -771, -771, -771, -771, -771, -771, 0, 0, 0, -771, 0, 0, -771, 0, 0, 0, -771, -771, 0, -771, -771, -771, -771, // State 763 @@ -1680,7 +1680,7 @@ mod __parse__Top { // State 764 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 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, 0, 0, 0, 0, // State 765 - -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, -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, + -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 -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, -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, // State 767 @@ -1718,11 +1718,11 @@ mod __parse__Top { // State 783 -535, 0, 0, 0, 0, 0, 0, 0, -535, 0, 0, 0, 0, 0, 0, -535, 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, 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, 0, 0, // State 784 - -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, -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, + -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, -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, // State 785 - -445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 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, 0, 0, 0, 0, + -439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 786 - -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, -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, + -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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 787 -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 788 @@ -1752,9 +1752,9 @@ mod __parse__Top { // State 800 873, 0, 0, 0, 0, 0, 0, -134, 0, -134, 0, 0, 0, -134, 0, 0, -134, 0, 0, 0, -134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -134, -134, -134, -134, 0, 0, 0, 0, 0, -134, 0, -134, -134, 0, 0, -134, 0, -134, 0, 0, 0, 0, 0, -134, -134, 0, -134, 0, 0, -134, 0, -134, -134, 0, -134, -134, -134, 0, -134, 0, 0, -134, -134, 0, 0, 0, -134, 0, 0, -134, 0, 0, 0, -134, -134, 0, -134, -134, -134, -134, // State 801 - -348, 0, 0, 0, 0, 0, 0, -348, 0, -348, 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, -348, 0, -348, -348, -348, -348, 0, 0, 0, 0, 0, -348, -348, -348, -348, 0, -348, -348, -348, -348, 0, -348, -348, -348, -348, -348, -348, -348, -348, 0, 0, -348, -348, -348, -348, 0, -348, -348, -348, -348, -348, -348, -348, -348, -348, 0, 0, 0, -348, -348, 0, -348, 0, 0, 0, -348, -348, 0, -348, -348, -348, -348, + -342, 0, 0, 0, 0, 0, 0, -342, 0, -342, 0, 0, 0, -342, 0, 0, -342, 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -342, 0, -342, -342, -342, -342, 0, 0, 0, 0, 0, -342, -342, -342, -342, 0, -342, -342, -342, -342, 0, -342, -342, -342, -342, -342, -342, -342, -342, 0, 0, -342, -342, -342, -342, 0, -342, -342, -342, -342, -342, -342, -342, -342, -342, 0, 0, 0, -342, -342, 0, -342, 0, 0, 0, -342, -342, 0, -342, -342, -342, -342, // State 802 - -352, 0, 0, 0, 0, 0, 0, -352, 0, -352, 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, -352, 0, -352, -352, -352, -352, 0, 0, 0, 0, 0, -352, -352, -352, -352, 0, -352, -352, -352, -352, 0, -352, -352, -352, -352, -352, -352, -352, -352, 0, 0, -352, -352, -352, -352, 0, -352, -352, -352, -352, -352, -352, -352, -352, -352, 0, 0, 0, -352, -352, 0, -352, 0, 0, 0, -352, -352, 0, -352, -352, -352, -352, + -346, 0, 0, 0, 0, 0, 0, -346, 0, -346, 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, -346, 0, -346, -346, -346, -346, 0, 0, 0, 0, 0, -346, -346, -346, -346, 0, -346, -346, -346, -346, 0, -346, -346, -346, -346, -346, -346, -346, -346, 0, 0, -346, -346, -346, -346, 0, -346, -346, -346, -346, -346, -346, -346, -346, -346, 0, 0, 0, -346, -346, 0, -346, 0, 0, 0, -346, -346, 0, -346, -346, -346, -346, // State 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, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 804 @@ -1768,7 +1768,7 @@ mod __parse__Top { // State 808 0, 0, -764, -764, 0, -764, 0, 0, 0, -764, 0, 0, 0, -764, 0, -764, -764, 0, 0, 0, 0, -764, -764, 0, 0, -766, 0, 0, -764, -764, 0, -764, 0, -764, -764, -764, -764, 0, 0, -764, 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, // State 809 - 0, 0, -354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -354, 0, 0, 0, 0, 0, 0, 0, 0, 0, -356, 0, 0, -354, 0, 0, -354, 0, -354, -354, -354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, -354, -354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -354, 0, -354, -354, 0, 0, 0, -354, -354, 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, -348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -348, 0, 0, 0, 0, 0, 0, 0, 0, 0, -350, 0, 0, -348, 0, 0, -348, 0, -348, -348, -348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, -348, -348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -348, 0, -348, -348, 0, 0, 0, -348, -348, 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, // State 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, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 @@ -1830,13 +1830,13 @@ mod __parse__Top { // 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, 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, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -389, 0, 0, -389, 0, 0, -389, 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, -383, 0, 0, -383, 0, 0, -383, 0, 0, 0, 0, 0, 0, -383, 0, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 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, -386, 0, 0, -386, 0, 0, -386, 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, 0, 0, 0, 0, 0, 0, -380, 0, 0, -380, 0, 0, -380, 0, 0, 0, 0, 0, 0, -380, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -387, 0, 0, -387, 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, -381, 0, 0, -381, 0, 0, -381, 0, 0, 0, 0, 0, 0, -381, 0, 0, 0, 0, // State 844 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 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, // State 845 @@ -1864,7 +1864,7 @@ mod __parse__Top { // State 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, 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, 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 - -420, 0, 0, 0, 0, 0, 0, -420, 0, -420, 0, 0, 0, -420, 0, 0, -420, 0, 0, 0, -420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -420, 0, -420, -420, -420, -420, 0, 0, 0, 0, 0, -420, -420, -420, -420, 0, -420, -420, -420, -420, 0, 0, 0, 0, -420, -420, -420, -420, -420, 0, 0, -420, -420, -420, -420, 0, -420, -420, -420, -420, -420, -420, -420, -420, -420, 0, 0, 0, -420, -420, 0, -420, 0, 0, 0, -420, -420, 0, -420, -420, -420, -420, + -414, 0, 0, 0, 0, 0, 0, -414, 0, -414, 0, 0, 0, -414, 0, 0, -414, 0, 0, 0, -414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -414, 0, -414, -414, -414, -414, 0, 0, 0, 0, 0, -414, -414, -414, -414, 0, -414, -414, -414, -414, 0, 0, 0, 0, -414, -414, -414, -414, -414, 0, 0, -414, -414, -414, -414, 0, -414, -414, -414, -414, -414, -414, -414, -414, -414, 0, 0, 0, -414, -414, 0, -414, 0, 0, 0, -414, -414, 0, -414, -414, -414, -414, // State 858 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 859 @@ -1874,15 +1874,15 @@ mod __parse__Top { // State 861 0, 0, 0, 0, 0, 0, 0, 0, -819, 0, 0, 0, 0, 0, 0, -819, 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, // State 862 - 0, 0, 0, 0, 0, 0, 0, 0, -463, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, // State 863 - 0, 0, 0, 0, 0, 0, 0, 0, -342, 0, 0, 0, 0, 0, 0, -342, 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, -336, 0, 0, 0, 0, 0, 0, -336, 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, // State 864 0, 0, 0, 0, 0, 0, 0, 0, 932, 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, 0, 0, 0, // State 865 -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 - -440, 0, 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, 299, 933, 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, -440, 0, 0, 0, -440, -440, 0, -440, -440, -440, -440, + -434, 0, 0, 0, 0, 0, 0, -434, 0, -434, 0, 0, 0, -434, 0, 0, -434, 0, 0, 0, -434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -434, 0, -434, -434, -434, -434, 0, 0, 0, 0, 0, -434, -434, -434, -434, 0, -434, -434, -434, -434, 299, 933, 0, 0, -434, -434, -434, -434, -434, 0, 0, -434, -434, -434, -434, 0, -434, -434, -434, -434, -434, -434, -434, -434, -434, 0, 0, 0, -434, -434, 0, -434, 0, 0, 0, -434, -434, 0, -434, -434, -434, -434, // State 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 868 @@ -1896,13 +1896,13 @@ mod __parse__Top { // State 872 -855, 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, -855, -855, -855, -855, -855, -855, -855, -855, -855, -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, -855, 0, 0, 0, -855, -855, 0, -855, -855, -855, -855, // State 873 - -349, 0, 0, 0, 0, 0, 0, -349, 0, -349, 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, -349, 0, -349, -349, -349, -349, 0, 0, 0, 0, 0, -349, -349, -349, -349, 0, -349, -349, -349, -349, 0, -349, -349, -349, -349, -349, -349, -349, -349, 0, 0, -349, -349, -349, -349, 0, -349, -349, -349, -349, -349, -349, -349, -349, -349, 0, 0, 0, -349, -349, 0, -349, 0, 0, 0, -349, -349, 0, -349, -349, -349, -349, + -343, 0, 0, 0, 0, 0, 0, -343, 0, -343, 0, 0, 0, -343, 0, 0, -343, 0, 0, 0, -343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -343, 0, -343, -343, -343, -343, 0, 0, 0, 0, 0, -343, -343, -343, -343, 0, -343, -343, -343, -343, 0, -343, -343, -343, -343, -343, -343, -343, -343, 0, 0, -343, -343, -343, -343, 0, -343, -343, -343, -343, -343, -343, -343, -343, -343, 0, 0, 0, -343, -343, 0, -343, 0, 0, 0, -343, -343, 0, -343, -343, -343, -343, // State 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 - -353, 0, 0, 0, 0, 0, 0, -353, 0, -353, 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, -353, 0, -353, -353, -353, -353, 0, 0, 0, 0, 0, -353, -353, -353, -353, 0, -353, -353, -353, -353, 0, -353, -353, -353, -353, -353, -353, -353, -353, 0, 0, -353, -353, -353, -353, 0, -353, -353, -353, -353, -353, -353, -353, -353, -353, 0, 0, 0, -353, -353, 0, -353, 0, 0, 0, -353, -353, 0, -353, -353, -353, -353, + -347, 0, 0, 0, 0, 0, 0, -347, 0, -347, 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, -347, 0, -347, -347, -347, -347, 0, 0, 0, 0, 0, -347, -347, -347, -347, 0, -347, -347, -347, -347, 0, -347, -347, -347, -347, -347, -347, -347, -347, 0, 0, -347, -347, -347, -347, 0, -347, -347, -347, -347, -347, -347, -347, -347, -347, 0, 0, 0, -347, -347, 0, -347, 0, 0, 0, -347, -347, 0, -347, -347, -347, -347, // State 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, 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, 0, 0, 0, // State 878 @@ -1964,7 +1964,7 @@ mod __parse__Top { // State 906 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, // State 907 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -385, 0, 0, -385, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, -379, 0, 0, -379, 0, 0, -379, 0, 0, 0, 0, 0, 0, -379, 0, 0, 0, 0, // State 908 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 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, // State 909 @@ -1974,11 +1974,11 @@ mod __parse__Top { // 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, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 912 - -422, 0, 0, 0, 0, 0, 0, -422, 0, -422, 0, 0, 0, -422, 0, 0, -422, 0, 0, 0, -422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -422, 0, -422, -422, -422, -422, 0, 0, 0, 0, 0, -422, -422, -422, -422, 0, -422, -422, -422, -422, 0, 0, 0, 0, -422, -422, -422, -422, -422, 0, 0, -422, -422, -422, -422, 0, -422, -422, -422, -422, -422, -422, -422, -422, -422, 0, 0, 0, -422, -422, 0, -422, 0, 0, 0, -422, -422, 0, -422, -422, -422, -422, + -416, 0, 0, 0, 0, 0, 0, -416, 0, -416, 0, 0, 0, -416, 0, 0, -416, 0, 0, 0, -416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -416, 0, -416, -416, -416, -416, 0, 0, 0, 0, 0, -416, -416, -416, -416, 0, -416, -416, -416, -416, 0, 0, 0, 0, -416, -416, -416, -416, -416, 0, 0, -416, -416, -416, -416, 0, -416, -416, -416, -416, -416, -416, -416, -416, -416, 0, 0, 0, -416, -416, 0, -416, 0, 0, 0, -416, -416, 0, -416, -416, -416, -416, // State 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, 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, // State 914 - -412, 0, 0, 0, 0, 0, 0, -412, 0, -412, 0, 0, 0, -412, 0, 0, -412, 0, 0, 0, -412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -412, 0, -412, -412, -412, -412, 0, 0, 0, 0, 0, -412, -412, -412, -412, 0, -412, -412, -412, -412, 0, 0, 0, 0, -412, -412, -412, -412, -412, 0, 0, -412, -412, -412, -412, 0, -412, -412, -412, -412, -412, -412, -412, -412, -412, 0, 0, 0, -412, -412, 0, -412, 0, 0, 0, -412, -412, 0, -412, -412, -412, -412, + -406, 0, 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, 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, -406, 0, 0, 0, -406, -406, 0, -406, -406, -406, -406, // State 915 -265, 0, 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, 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, -265, 0, 0, 0, -265, -265, 0, -265, -265, -265, -265, // State 916 @@ -1990,7 +1990,7 @@ mod __parse__Top { // 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 - -419, 0, 0, 0, 0, 0, 0, -419, 0, -419, 0, 0, 0, -419, 0, 0, -419, 0, 0, 0, -419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -419, 0, -419, -419, -419, -419, 0, 0, 0, 0, 0, -419, -419, -419, -419, 0, -419, -419, -419, -419, 0, 0, 0, 0, -419, -419, -419, -419, -419, 0, 0, -419, -419, -419, -419, 0, -419, -419, -419, -419, -419, -419, -419, -419, -419, 0, 0, 0, -419, -419, 0, -419, 0, 0, 0, -419, -419, 0, -419, -419, -419, -419, + -413, 0, 0, 0, 0, 0, 0, -413, 0, -413, 0, 0, 0, -413, 0, 0, -413, 0, 0, 0, -413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -413, 0, -413, -413, -413, -413, 0, 0, 0, 0, 0, -413, -413, -413, -413, 0, -413, -413, -413, -413, 0, 0, 0, 0, -413, -413, -413, -413, -413, 0, 0, -413, -413, -413, -413, 0, -413, -413, -413, -413, -413, -413, -413, -413, -413, 0, 0, 0, -413, -413, 0, -413, 0, 0, 0, -413, -413, 0, -413, -413, -413, -413, // State 921 0, 0, 0, 0, 0, 0, 0, 0, -913, 0, 0, 0, 0, 0, 0, -913, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 922 @@ -2006,13 +2006,13 @@ mod __parse__Top { // State 927 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 928 - -406, 0, 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, 0, -406, 0, -406, -406, -406, -406, 0, 0, 0, 0, 0, -406, -406, -406, -406, 0, -406, -406, -406, -406, 0, 982, 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, -406, 0, 0, 0, -406, -406, 0, -406, -406, -406, -406, + -400, 0, 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, 982, 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, -400, 0, 0, 0, -400, -400, 0, -400, -400, -400, -400, // State 929 -534, 0, 0, 0, 0, 0, 0, 0, -534, 0, 0, 0, 0, 0, 0, -534, 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, 0, 0, 0, 0, // State 930 -537, 0, 0, 0, 0, 0, 0, 0, -537, 0, 0, 0, 0, 0, 0, -537, 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, 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, // State 931 - -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, -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, + -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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 932 0, 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, 0, 0, 0, // State 933 @@ -2020,13 +2020,13 @@ mod __parse__Top { // State 934 -532, 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 936 -856, 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, -856, -856, -856, -856, -856, -856, -856, -856, -856, -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, -856, 0, 0, 0, -856, -856, 0, -856, -856, -856, -856, // State 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, 345, 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, // State 938 - -346, 0, 0, 0, 0, 0, 0, -346, 0, -346, 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, -346, 0, -346, -346, -346, -346, 0, 0, 0, 0, 0, -346, -346, -346, -346, 0, -346, -346, -346, -346, 0, -346, -346, -346, -346, -346, -346, -346, -346, 0, 0, -346, -346, -346, -346, 0, -346, -346, -346, -346, -346, -346, -346, -346, -346, 0, 0, 0, -346, -346, 0, -346, 0, 0, 0, -346, -346, 0, -346, -346, -346, -346, + -340, 0, 0, 0, 0, 0, 0, -340, 0, -340, 0, 0, 0, -340, 0, 0, -340, 0, 0, 0, -340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -340, 0, -340, -340, -340, -340, 0, 0, 0, 0, 0, -340, -340, -340, -340, 0, -340, -340, -340, -340, 0, -340, -340, -340, -340, -340, -340, -340, -340, 0, 0, -340, -340, -340, -340, 0, -340, -340, -340, -340, -340, -340, -340, -340, -340, 0, 0, 0, -340, -340, 0, -340, 0, 0, 0, -340, -340, 0, -340, -340, -340, -340, // State 939 -893, 0, 0, 0, 0, 0, 0, -893, 0, -893, 0, 0, 0, -893, 0, 0, -893, 0, 0, 0, -893, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -893, 0, -893, -893, -893, -893, 0, 0, 0, 0, 0, -893, -893, -893, -893, 0, -893, -893, -893, -893, 0, 0, 0, 0, -893, -893, -893, -893, -893, 0, 0, -893, -893, -893, -893, 0, -893, -893, -893, -893, -893, -893, -893, -893, -893, 0, 0, 0, -893, -893, 0, -893, 0, 0, 0, -893, -893, 0, -893, -893, -893, -893, // State 940 @@ -2060,7 +2060,7 @@ mod __parse__Top { // State 954 0, 0, 0, 0, 0, 0, 0, 0, -315, 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, -315, 0, 0, 0, 0, 0, -315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -315, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 955 - 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, 0, 0, 0, 0, 0, -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, 0, 0, 0, 0, -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 0, 0, -361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -361, 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, -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, -355, 0, 0, 0, 0, 0, -355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -355, 0, 0, -355, 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, // State 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, -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, // State 957 @@ -2078,21 +2078,21 @@ mod __parse__Top { // State 963 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 - -414, 0, 0, 0, 0, 0, 0, -414, 0, -414, 0, 0, 0, -414, 0, 0, -414, 0, 0, 0, -414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -414, 0, -414, -414, -414, -414, 0, 0, 0, 0, 0, -414, -414, -414, -414, 0, -414, -414, -414, -414, 0, 0, 0, 0, -414, -414, -414, -414, -414, 0, 0, -414, -414, -414, -414, 0, -414, -414, -414, -414, -414, -414, -414, -414, -414, 0, 0, 0, -414, -414, 0, -414, 0, 0, 0, -414, -414, 0, -414, -414, -414, -414, + -408, 0, 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, 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, -408, 0, 0, 0, -408, -408, 0, -408, -408, -408, -408, // State 965 -267, 0, 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, 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, -267, 0, 0, 0, -267, -267, 0, -267, -267, -267, -267, // State 966 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 - -421, 0, 0, 0, 0, 0, 0, -421, 0, -421, 0, 0, 0, -421, 0, 0, -421, 0, 0, 0, -421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -421, 0, -421, -421, -421, -421, 0, 0, 0, 0, 0, -421, -421, -421, -421, 0, -421, -421, -421, -421, 0, 0, 0, 0, -421, -421, -421, -421, -421, 0, 0, -421, -421, -421, -421, 0, -421, -421, -421, -421, -421, -421, -421, -421, -421, 0, 0, 0, -421, -421, 0, -421, 0, 0, 0, -421, -421, 0, -421, -421, -421, -421, + -415, 0, 0, 0, 0, 0, 0, -415, 0, -415, 0, 0, 0, -415, 0, 0, -415, 0, 0, 0, -415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -415, 0, -415, -415, -415, -415, 0, 0, 0, 0, 0, -415, -415, -415, -415, 0, -415, -415, -415, -415, 0, 0, 0, 0, -415, -415, -415, -415, -415, 0, 0, -415, -415, -415, -415, 0, -415, -415, -415, -415, -415, -415, -415, -415, -415, 0, 0, 0, -415, -415, 0, -415, 0, 0, 0, -415, -415, 0, -415, -415, -415, -415, // State 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 969 - -411, 0, 0, 0, 0, 0, 0, -411, 0, -411, 0, 0, 0, -411, 0, 0, -411, 0, 0, 0, -411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -411, 0, -411, -411, -411, -411, 0, 0, 0, 0, 0, -411, -411, -411, -411, 0, -411, -411, -411, -411, 0, 0, 0, 0, -411, -411, -411, -411, -411, 0, 0, -411, -411, -411, -411, 0, -411, -411, -411, -411, -411, -411, -411, -411, -411, 0, 0, 0, -411, -411, 0, -411, 0, 0, 0, -411, -411, 0, -411, -411, -411, -411, + -405, 0, 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, 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, -405, 0, 0, 0, -405, -405, 0, -405, -405, -405, -405, // State 970 - -404, 0, 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, 1037, 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, -404, 0, 0, 0, -404, -404, 0, -404, -404, -404, -404, + -398, 0, 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, 1037, 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, -398, 0, 0, 0, -398, -398, 0, -398, -398, -398, -398, // State 971 - -416, 0, 0, 0, 0, 0, 0, -416, 0, -416, 0, 0, 0, -416, 0, 0, -416, 0, 0, 0, -416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -416, 0, -416, -416, -416, -416, 0, 0, 0, 0, 0, -416, -416, -416, -416, 0, -416, -416, -416, -416, 0, 0, 0, 0, -416, -416, -416, -416, -416, 0, 0, -416, -416, -416, -416, 0, -416, -416, -416, -416, -416, -416, -416, -416, -416, 0, 0, 0, -416, -416, 0, -416, 0, 0, 0, -416, -416, 0, -416, -416, -416, -416, + -410, 0, 0, 0, 0, 0, 0, -410, 0, -410, 0, 0, 0, -410, 0, 0, -410, 0, 0, 0, -410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -410, 0, -410, -410, -410, -410, 0, 0, 0, 0, 0, -410, -410, -410, -410, 0, -410, -410, -410, -410, 0, 0, 0, 0, -410, -410, -410, -410, -410, 0, 0, -410, -410, -410, -410, 0, -410, -410, -410, -410, -410, -410, -410, -410, -410, 0, 0, 0, -410, -410, 0, -410, 0, 0, 0, -410, -410, 0, -410, -410, -410, -410, // State 972 0, 0, 0, 0, 0, 0, 0, 0, -626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 973 @@ -2110,21 +2110,21 @@ mod __parse__Top { // State 979 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 980 - 0, 0, 0, 0, 0, 0, 0, 0, -341, 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, -335, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 982 - -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, -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, + -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, -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, // State 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, 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, // State 984 - -437, 0, 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, -437, 0, 0, 0, -437, -437, 0, -437, -437, -437, -437, + -431, 0, 0, 0, 0, 0, 0, -431, 0, -431, 0, 0, 0, -431, 0, 0, -431, 0, 0, 0, -431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -431, 0, -431, -431, -431, -431, 0, 0, 0, 0, 0, -431, -431, -431, -431, 0, -431, -431, -431, -431, 0, 0, 0, 0, -431, -431, -431, -431, -431, 0, 0, -431, -431, -431, -431, 0, -431, -431, -431, -431, -431, -431, -431, -431, -431, 0, 0, 0, -431, -431, 0, -431, 0, 0, 0, -431, -431, 0, -431, -431, -431, -431, // State 985 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, -492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 986 - -504, 0, 0, 0, 0, 0, 0, -504, 0, -504, 0, 0, 0, -504, 0, 0, -504, 0, 0, 0, -504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -504, 0, -504, -504, -504, -504, 0, 0, 0, 0, 0, -504, -504, -504, -504, 0, -504, -504, -504, -504, 0, 0, 0, 0, -504, -504, -504, -504, -504, 0, 0, -504, -504, -504, -504, 0, -504, -504, -504, -504, -504, -504, -504, -504, -504, 0, 0, 0, -504, -504, 0, -504, 0, 0, 0, -504, -504, 0, -504, -504, -504, -504, + -498, 0, 0, 0, 0, 0, 0, -498, 0, -498, 0, 0, 0, -498, 0, 0, -498, 0, 0, 0, -498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -498, 0, -498, -498, -498, -498, 0, 0, 0, 0, 0, -498, -498, -498, -498, 0, -498, -498, -498, -498, 0, 0, 0, 0, -498, -498, -498, -498, -498, 0, 0, -498, -498, -498, -498, 0, -498, -498, -498, -498, -498, -498, -498, -498, -498, 0, 0, 0, -498, -498, 0, -498, 0, 0, 0, -498, -498, 0, -498, -498, -498, -498, // State 987 - 0, 0, 0, 0, 0, 0, 0, 0, -479, 0, 0, 0, 0, 0, 0, -479, 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, -479, 0, 0, 0, -479, 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, -479, 0, -479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 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, // State 988 0, 0, 0, 0, 0, 0, 0, 0, -749, 0, 0, 0, 0, 0, 0, -749, 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, -749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 989 @@ -2134,15 +2134,15 @@ mod __parse__Top { // State 991 0, 0, 0, 0, 0, 0, 0, 0, -556, 0, 0, 0, 0, 0, 0, -556, 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, -556, 0, 0, 0, -556, 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, 361, 0, -556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 992 - 0, 0, 0, 0, 0, 0, 0, 0, -323, 0, 0, 0, 0, -323, 0, -323, -323, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -495, -264, 0, 0, 0, 0, 0, 0, -264, 0, 0, 0, -495, 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, -264, 0, 0, 0, -264, 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, -264, 0, -264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 993 - 0, 0, 0, 0, 0, 0, 0, 0, -324, 0, 0, 0, 0, -324, 0, -324, -324, 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, 0, 0, 0, + 0, 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, 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, // State 994 - 0, 0, 0, 0, 0, 0, 0, -501, -264, 0, 0, 0, 0, 0, 0, -264, 0, 0, 0, -501, 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, -264, 0, 0, 0, -264, 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, -264, 0, -264, 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, -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, 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, 0, 0, 0, // State 995 - 0, 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, 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, -521, 0, 0, 0, 0, -521, 0, -521, -521, 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, 0, 0, 0, // State 996 - 0, 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, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -522, 0, 0, 0, 0, -522, 0, -522, -522, 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, 0, 0, 0, // State 997 0, 0, 0, 0, 0, 0, 0, 0, -750, 0, 0, 0, 0, 0, 0, -750, 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, -750, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 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, -750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 998 @@ -2160,13 +2160,13 @@ mod __parse__Top { // State 1004 0, 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, 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, // State 1005 - 0, 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, 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, -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, 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, // State 1006 - 0, 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, 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, 0, 0, 0, 0, -469, 0, 0, 0, 0, 0, 0, -469, 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, -469, 0, 0, 0, -469, 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, -469, 0, -469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1007 - 0, 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, 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, 0, 0, 0, 0, -470, 0, 0, 0, 0, 0, 0, -470, 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, -470, 0, 0, 0, -470, 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, -470, 0, -470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1008 - -507, 0, 0, 0, 0, 0, 0, -507, 0, -507, 0, 0, 0, -507, 0, 0, -507, 0, 0, 0, -507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -507, 0, -507, -507, -507, -507, 0, 0, 0, 0, 0, -507, -507, -507, -507, 0, -507, -507, -507, -507, 0, 0, 0, 0, -507, -507, -507, -507, -507, 0, 0, -507, -507, -507, -507, 0, -507, -507, -507, -507, -507, -507, -507, -507, -507, 0, 0, 0, -507, -507, 0, -507, 0, 0, 0, -507, -507, 0, -507, -507, -507, -507, + -501, 0, 0, 0, 0, 0, 0, -501, 0, -501, 0, 0, 0, -501, 0, 0, -501, 0, 0, 0, -501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -501, 0, -501, -501, -501, -501, 0, 0, 0, 0, 0, -501, -501, -501, -501, 0, -501, -501, -501, -501, 0, 0, 0, 0, -501, -501, -501, -501, -501, 0, 0, -501, -501, -501, -501, 0, -501, -501, -501, -501, -501, -501, -501, -501, -501, 0, 0, 0, -501, -501, 0, -501, 0, 0, 0, -501, -501, 0, -501, -501, -501, -501, // State 1009 -886, 0, 0, 0, 0, 0, 0, -886, 0, -886, 0, 0, 0, -886, 0, 0, -886, 0, 0, 0, -886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -886, 0, -886, -886, -886, -886, 0, 0, 0, 0, 0, -886, -886, -886, -886, 0, -886, -886, -886, -886, 0, 0, 0, 1071, -886, -886, -886, -886, -886, 0, 0, -886, -886, -886, -886, 0, -886, -886, -886, -886, -886, -886, -886, -886, -886, 0, 0, 0, -886, -886, 0, -886, 0, 0, 0, -886, -886, 0, -886, -886, -886, -886, // State 1010 @@ -2176,7 +2176,7 @@ mod __parse__Top { // State 1012 -891, 0, 0, 0, 0, 0, 0, -891, 0, -891, 0, 0, 0, -891, 0, 0, -891, 0, 0, 0, -891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -891, 0, -891, -891, -891, -891, 0, 0, 0, 0, 0, -891, -891, -891, -891, 0, -891, -891, -891, -891, 0, 0, 0, 0, -891, -891, -891, -891, -891, 0, 0, -891, -891, -891, -891, 0, -891, -891, -891, -891, -891, -891, -891, -891, -891, 0, 0, 0, -891, -891, 0, -891, 0, 0, 0, -891, -891, 0, -891, -891, -891, -891, // State 1013 - -345, 0, 0, 0, 0, 0, 0, -345, 0, -345, 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, -345, 0, -345, -345, -345, -345, 0, 0, 0, 0, 0, -345, -345, -345, -345, 0, -345, -345, -345, -345, 0, -345, -345, -345, -345, -345, -345, -345, -345, 0, 0, -345, -345, -345, -345, 0, -345, -345, -345, -345, -345, -345, -345, -345, -345, 0, 0, 0, -345, -345, 0, -345, 0, 0, 0, -345, -345, 0, -345, -345, -345, -345, + -339, 0, 0, 0, 0, 0, 0, -339, 0, -339, 0, 0, 0, -339, 0, 0, -339, 0, 0, 0, -339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -339, 0, -339, -339, -339, -339, 0, 0, 0, 0, 0, -339, -339, -339, -339, 0, -339, -339, -339, -339, 0, -339, -339, -339, -339, -339, -339, -339, -339, 0, 0, -339, -339, -339, -339, 0, -339, -339, -339, -339, -339, -339, -339, -339, -339, 0, 0, 0, -339, -339, 0, -339, 0, 0, 0, -339, -339, 0, -339, -339, -339, -339, // State 1014 0, 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, // State 1015 @@ -2216,15 +2216,15 @@ mod __parse__Top { // State 1032 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 1033 - -413, 0, 0, 0, 0, 0, 0, -413, 0, -413, 0, 0, 0, -413, 0, 0, -413, 0, 0, 0, -413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -413, 0, -413, -413, -413, -413, 0, 0, 0, 0, 0, -413, -413, -413, -413, 0, -413, -413, -413, -413, 0, 0, 0, 0, -413, -413, -413, -413, -413, 0, 0, -413, -413, -413, -413, 0, -413, -413, -413, -413, -413, -413, -413, -413, -413, 0, 0, 0, -413, -413, 0, -413, 0, 0, 0, -413, -413, 0, -413, -413, -413, -413, + -407, 0, 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, 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, -407, 0, 0, 0, -407, -407, 0, -407, -407, -407, -407, // State 1034 - -418, 0, 0, 0, 0, 0, 0, -418, 0, -418, 0, 0, 0, -418, 0, 0, -418, 0, 0, 0, -418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -418, 0, -418, -418, -418, -418, 0, 0, 0, 0, 0, -418, -418, -418, -418, 0, -418, -418, -418, -418, 0, 0, 0, 0, -418, -418, -418, -418, -418, 0, 0, -418, -418, -418, -418, 0, -418, -418, -418, -418, -418, -418, -418, -418, -418, 0, 0, 0, -418, -418, 0, -418, 0, 0, 0, -418, -418, 0, -418, -418, -418, -418, + -412, 0, 0, 0, 0, 0, 0, -412, 0, -412, 0, 0, 0, -412, 0, 0, -412, 0, 0, 0, -412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -412, 0, -412, -412, -412, -412, 0, 0, 0, 0, 0, -412, -412, -412, -412, 0, -412, -412, -412, -412, 0, 0, 0, 0, -412, -412, -412, -412, -412, 0, 0, -412, -412, -412, -412, 0, -412, -412, -412, -412, -412, -412, -412, -412, -412, 0, 0, 0, -412, -412, 0, -412, 0, 0, 0, -412, -412, 0, -412, -412, -412, -412, // State 1035 - -408, 0, 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, 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, -408, 0, 0, 0, -408, -408, 0, -408, -408, -408, -408, + -402, 0, 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, 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, -402, 0, 0, 0, -402, -402, 0, -402, -402, -402, -402, // State 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, 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, // State 1037 - -415, 0, 0, 0, 0, 0, 0, -415, 0, -415, 0, 0, 0, -415, 0, 0, -415, 0, 0, 0, -415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -415, 0, -415, -415, -415, -415, 0, 0, 0, 0, 0, -415, -415, -415, -415, 0, -415, -415, -415, -415, 0, 0, 0, 0, -415, -415, -415, -415, -415, 0, 0, -415, -415, -415, -415, 0, -415, -415, -415, -415, -415, -415, -415, -415, -415, 0, 0, 0, -415, -415, 0, -415, 0, 0, 0, -415, -415, 0, -415, -415, -415, -415, + -409, 0, 0, 0, 0, 0, 0, -409, 0, -409, 0, 0, 0, -409, 0, 0, -409, 0, 0, 0, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -409, 0, -409, -409, -409, -409, 0, 0, 0, 0, 0, -409, -409, -409, -409, 0, -409, -409, -409, -409, 0, 0, 0, 0, -409, -409, -409, -409, -409, 0, 0, -409, -409, -409, -409, 0, -409, -409, -409, -409, -409, -409, -409, -409, -409, 0, 0, 0, -409, -409, 0, -409, 0, 0, 0, -409, -409, 0, -409, -409, -409, -409, // State 1038 0, 0, 0, 0, 0, 0, 0, 0, -617, 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, // State 1039 @@ -2240,11 +2240,11 @@ mod __parse__Top { // State 1044 -536, 0, 0, 0, 0, 0, 0, 0, -536, 0, 0, 0, 0, 0, 0, -536, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1045 - -439, 0, 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, -439, 0, 0, 0, -439, -439, 0, -439, -439, -439, -439, + -433, 0, 0, 0, 0, 0, 0, -433, 0, -433, 0, 0, 0, -433, 0, 0, -433, 0, 0, 0, -433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -433, 0, -433, -433, -433, -433, 0, 0, 0, 0, 0, -433, -433, -433, -433, 0, -433, -433, -433, -433, 0, 0, 0, 0, -433, -433, -433, -433, -433, 0, 0, -433, -433, -433, -433, 0, -433, -433, -433, -433, -433, -433, -433, -433, -433, 0, 0, 0, -433, -433, 0, -433, 0, 0, 0, -433, -433, 0, -433, -433, -433, -433, // State 1046 -107, 0, 0, 0, 0, 0, 0, -107, 0, -107, 0, 0, 0, -107, 0, 0, -107, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, -107, -107, -107, -107, 0, 0, 0, 0, 0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, -107, 0, 0, -107, -107, -107, -107, -107, 0, 0, -107, -107, -107, -107, 0, -107, -107, -107, -107, -107, -107, -107, -107, -107, 0, 0, 0, -107, -107, 0, -107, 0, 0, 0, -107, -107, 0, -107, -107, -107, -107, // State 1047 - -505, 0, 0, 0, 0, 0, 0, -505, 0, -505, 0, 0, 0, -505, 0, 0, -505, 0, 0, 0, -505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -505, 0, -505, -505, -505, -505, 0, 0, 0, 0, 0, -505, -505, -505, -505, 0, -505, -505, -505, -505, 0, 0, 0, 0, -505, -505, -505, -505, -505, 0, 0, -505, -505, -505, -505, 0, -505, -505, -505, -505, -505, -505, -505, -505, -505, 0, 0, 0, -505, -505, 0, -505, 0, 0, 0, -505, -505, 0, -505, -505, -505, -505, + -499, 0, 0, 0, 0, 0, 0, -499, 0, -499, 0, 0, 0, -499, 0, 0, -499, 0, 0, 0, -499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -499, 0, -499, -499, -499, -499, 0, 0, 0, 0, 0, -499, -499, -499, -499, 0, -499, -499, -499, -499, 0, 0, 0, 0, -499, -499, -499, -499, -499, 0, 0, -499, -499, -499, -499, 0, -499, -499, -499, -499, -499, -499, -499, -499, -499, 0, 0, 0, -499, -499, 0, -499, 0, 0, 0, -499, -499, 0, -499, -499, -499, -499, // State 1048 0, 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, 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, 0, 0, 0, // State 1049 @@ -2260,41 +2260,41 @@ mod __parse__Top { // State 1054 0, 0, 0, 0, 0, 0, 0, 0, -817, 0, 0, 0, 0, 0, 0, -817, 0, 0, 0, 0, 0, 0, 0, 0, 0, -817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -817, 0, 0, 0, -817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -817, 0, -817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1055 - 0, 0, 0, 0, 0, 0, 0, 0, -325, 0, 0, 0, 0, -325, 0, -325, -325, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -523, 0, 0, 0, 0, -523, 0, -523, -523, 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, 0, 0, 0, // State 1056 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, // State 1057 0, 0, 0, 0, 0, 0, 0, 0, -784, 0, 0, 0, 0, 0, 0, -784, 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, -784, 0, 0, 0, -784, 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, -784, 0, -784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1058 - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1059 - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1060 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1061 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1062 - 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, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1063 - 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -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, // State 1064 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, 1122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1065 - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 0, 0, 0, 0, 0, // State 1066 - 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, // State 1067 - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 0, 0, 0, 0, 0, // State 1068 - 0, 0, 0, 0, 0, 0, 0, 0, -488, 0, 0, 0, 0, 0, 0, -488, 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, -488, 0, 0, 0, -488, 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, -488, 0, -488, 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, -482, 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, -482, 0, 0, 0, -482, 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, -482, 0, -482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1069 - -506, 0, 0, 0, 0, 0, 0, -506, 0, -506, 0, 0, 0, -506, 0, 0, -506, 0, 0, 0, -506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -506, 0, -506, -506, -506, -506, 0, 0, 0, 0, 0, -506, -506, -506, -506, 0, -506, -506, -506, -506, 0, 0, 0, 0, -506, -506, -506, -506, -506, 0, 0, -506, -506, -506, -506, 0, -506, -506, -506, -506, -506, -506, -506, -506, -506, 0, 0, 0, -506, -506, 0, -506, 0, 0, 0, -506, -506, 0, -506, -506, -506, -506, + -500, 0, 0, 0, 0, 0, 0, -500, 0, -500, 0, 0, 0, -500, 0, 0, -500, 0, 0, 0, -500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -500, 0, -500, -500, -500, -500, 0, 0, 0, 0, 0, -500, -500, -500, -500, 0, -500, -500, -500, -500, 0, 0, 0, 0, -500, -500, -500, -500, -500, 0, 0, -500, -500, -500, -500, 0, -500, -500, -500, -500, -500, -500, -500, -500, -500, 0, 0, 0, -500, -500, 0, -500, 0, 0, 0, -500, -500, 0, -500, -500, -500, -500, // State 1070 0, 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, // State 1071 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1072 - -350, 0, 0, 0, 0, 0, 0, -350, 0, -350, 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, -350, 0, -350, -350, -350, -350, 0, 0, 0, 0, 0, -350, -350, -350, -350, 0, -350, -350, -350, -350, 0, -350, -350, -350, -350, -350, -350, -350, -350, 0, 0, -350, -350, -350, -350, 0, -350, -350, -350, -350, -350, -350, -350, -350, -350, 0, 0, 0, -350, -350, 0, -350, 0, 0, 0, -350, -350, 0, -350, -350, -350, -350, + -344, 0, 0, 0, 0, 0, 0, -344, 0, -344, 0, 0, 0, -344, 0, 0, -344, 0, 0, 0, -344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -344, 0, -344, -344, -344, -344, 0, 0, 0, 0, 0, -344, -344, -344, -344, 0, -344, -344, -344, -344, 0, -344, -344, -344, -344, -344, -344, -344, -344, 0, 0, -344, -344, -344, -344, 0, -344, -344, -344, -344, -344, -344, -344, -344, -344, 0, 0, 0, -344, -344, 0, -344, 0, 0, 0, -344, -344, 0, -344, -344, -344, -344, // 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, 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, // State 1074 @@ -2322,11 +2322,11 @@ mod __parse__Top { // State 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, -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, 0, 0, 0, 0, 0, 0, // State 1086 - -410, 0, 0, 0, 0, 0, 0, -410, 0, -410, 0, 0, 0, -410, 0, 0, -410, 0, 0, 0, -410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -410, 0, -410, -410, -410, -410, 0, 0, 0, 0, 0, -410, -410, -410, -410, 0, -410, -410, -410, -410, 0, 0, 0, 0, -410, -410, -410, -410, -410, 0, 0, -410, -410, -410, -410, 0, -410, -410, -410, -410, -410, -410, -410, -410, -410, 0, 0, 0, -410, -410, 0, -410, 0, 0, 0, -410, -410, 0, -410, -410, -410, -410, + -404, 0, 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, 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, -404, 0, 0, 0, -404, -404, 0, -404, -404, -404, -404, // State 1087 - -417, 0, 0, 0, 0, 0, 0, -417, 0, -417, 0, 0, 0, -417, 0, 0, -417, 0, 0, 0, -417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -417, 0, -417, -417, -417, -417, 0, 0, 0, 0, 0, -417, -417, -417, -417, 0, -417, -417, -417, -417, 0, 0, 0, 0, -417, -417, -417, -417, -417, 0, 0, -417, -417, -417, -417, 0, -417, -417, -417, -417, -417, -417, -417, -417, -417, 0, 0, 0, -417, -417, 0, -417, 0, 0, 0, -417, -417, 0, -417, -417, -417, -417, + -411, 0, 0, 0, 0, 0, 0, -411, 0, -411, 0, 0, 0, -411, 0, 0, -411, 0, 0, 0, -411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -411, 0, -411, -411, -411, -411, 0, 0, 0, 0, 0, -411, -411, -411, -411, 0, -411, -411, -411, -411, 0, 0, 0, 0, -411, -411, -411, -411, -411, 0, 0, -411, -411, -411, -411, 0, -411, -411, -411, -411, -411, -411, -411, -411, -411, 0, 0, 0, -411, -411, 0, -411, 0, 0, 0, -411, -411, 0, -411, -411, -411, -411, // State 1088 - -407, 0, 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, 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, -407, 0, 0, 0, -407, -407, 0, -407, -407, -407, -407, + -401, 0, 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, 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, -401, 0, 0, 0, -401, -401, 0, -401, -401, -401, -401, // State 1089 0, 0, 0, 0, 0, 0, 0, 0, -608, 0, 0, 0, 0, 0, 0, 1132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 @@ -2342,37 +2342,37 @@ mod __parse__Top { // State 1095 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, // State 1096 - -405, 0, 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, 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, -405, 0, 0, 0, -405, -405, 0, -405, -405, -405, -405, + -399, 0, 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, 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, -399, 0, 0, 0, -399, -399, 0, -399, -399, -399, -399, // State 1097 -108, 0, 0, 0, 0, 0, 0, -108, 0, -108, 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, -108, 0, -108, -108, -108, -108, 0, 0, 0, 0, 0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, -108, 0, 0, -108, -108, -108, -108, -108, 0, 0, -108, -108, -108, -108, 0, -108, -108, -108, -108, -108, -108, -108, -108, -108, 0, 0, 0, -108, -108, 0, -108, 0, 0, 0, -108, -108, 0, -108, -108, -108, -108, // State 1098 0, 0, 0, 0, 0, 0, 0, 0, -894, 0, 0, 0, 0, 0, 0, -894, 0, 0, 0, 0, 0, 0, 0, 0, 0, -894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -894, 0, 0, 0, -894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -894, 0, -894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1099 - 0, 0, 0, 0, 0, 0, 0, 0, -153, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, -153, 0, 0, 0, -153, 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, -153, 0, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -495, -264, 0, 0, 0, 0, 0, 0, -264, 0, 0, 0, -495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 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, -264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1100 - 0, 0, 0, 0, 0, 0, 0, -501, -264, 0, 0, 0, 0, 0, 0, -264, 0, 0, 0, -501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 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, -264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // State 1101 0, 0, 0, 0, 0, 0, 0, 0, -538, 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, - // State 1102 + // State 1101 0, 0, 0, 0, 0, 0, 0, 0, 1139, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // State 1103 + // State 1102 0, 0, 0, 0, 0, 0, 0, 0, 1140, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 + // State 1103 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, 0, 0, 0, - // State 1105 + // State 1104 0, 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, 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, + // State 1105 + 0, 0, 0, 0, 0, 0, 0, -496, -496, 0, 0, 0, 0, 0, 0, -496, 0, 0, 0, -496, 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, -496, 0, 0, 0, -496, 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, 0, 0, 0, 0, 0, 0, -496, 0, -496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1106 - 0, 0, 0, 0, 0, 0, 0, -502, -502, 0, 0, 0, 0, 0, 0, -502, 0, 0, 0, -502, 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, -502, 0, 0, 0, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -502, 0, -502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -497, -497, 0, 0, 0, 0, 0, 0, -497, 0, 0, 0, -497, 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, -497, 0, 0, 0, -497, 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, 0, 0, 0, 0, 0, 0, -497, 0, -497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1107 - 0, 0, 0, 0, 0, 0, 0, -503, -503, 0, 0, 0, 0, 0, 0, -503, 0, 0, 0, -503, 0, 0, 0, 0, 0, -503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -503, 0, 0, 0, -503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -503, 0, -503, 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, -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, -153, 0, 0, 0, -153, 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, -153, 0, -153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1108 0, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, -172, 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, -172, 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, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1109 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, -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, -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, // State 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, 0, 0, 0, 0, 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, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, // State 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 0, 0, 0, 0, 0, // State 1112 0, 0, 0, 0, 0, 0, 0, 0, -895, 0, 0, 0, 0, 0, 0, -895, 0, 0, 0, 0, 0, 0, 0, 0, 0, -895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -895, 0, 0, 0, -895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -895, 0, -895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1113 @@ -2392,11 +2392,11 @@ mod __parse__Top { // State 1120 0, 0, 0, 0, 0, 0, 0, 0, -783, 0, 0, 0, 0, 0, 0, -783, 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, -783, 0, 0, 0, -783, 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, -783, 0, -783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1121 - 0, 0, 0, 0, 0, 0, 0, 0, -490, 0, 0, 0, 0, 0, 0, -490, 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, -490, 0, 0, 0, -490, 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, 0, 0, 0, 0, -490, 0, -490, 0, 0, 0, 0, 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, -484, 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, -484, 0, 0, 0, -484, 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, -484, 0, -484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1122 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1123 - -347, 0, 0, 0, 0, 0, 0, -347, 0, -347, 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, -347, 0, -347, -347, -347, -347, 0, 0, 0, 0, 0, -347, -347, -347, -347, 0, -347, -347, -347, -347, 0, -347, -347, -347, -347, -347, -347, -347, -347, 0, 0, -347, -347, -347, -347, 0, -347, -347, -347, -347, -347, -347, -347, -347, -347, 0, 0, 0, -347, -347, 0, -347, 0, 0, 0, -347, -347, 0, -347, -347, -347, -347, + -341, 0, 0, 0, 0, 0, 0, -341, 0, -341, 0, 0, 0, -341, 0, 0, -341, 0, 0, 0, -341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -341, 0, -341, -341, -341, -341, 0, 0, 0, 0, 0, -341, -341, -341, -341, 0, -341, -341, -341, -341, 0, -341, -341, -341, -341, -341, -341, -341, -341, 0, 0, -341, -341, -341, -341, 0, -341, -341, -341, -341, -341, -341, -341, -341, -341, 0, 0, 0, -341, -341, 0, -341, 0, 0, 0, -341, -341, 0, -341, -341, -341, -341, // State 1124 0, 0, 0, 0, 0, 0, 0, -832, 0, -832, 0, 0, 0, -832, 0, 0, -832, 0, 0, 0, -832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -832, 0, -832, -832, -832, -832, 0, 0, 0, 0, 0, -832, -832, -832, -832, 0, -832, -832, -832, -832, 0, 0, 0, 0, -832, -832, -832, -832, -832, 0, 0, -832, -832, -832, -832, 0, -832, -832, -832, -832, -832, -832, -832, -832, -832, 0, 0, 0, -832, -832, 0, -832, 0, 0, 0, -832, -832, 0, -832, -832, -832, -832, // State 1125 @@ -2408,9 +2408,9 @@ mod __parse__Top { // State 1128 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, // State 1129 - -409, 0, 0, 0, 0, 0, 0, -409, 0, -409, 0, 0, 0, -409, 0, 0, -409, 0, 0, 0, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -409, 0, -409, -409, -409, -409, 0, 0, 0, 0, 0, -409, -409, -409, -409, 0, -409, -409, -409, -409, 0, 0, 0, 0, -409, -409, -409, -409, -409, 0, 0, -409, -409, -409, -409, 0, -409, -409, -409, -409, -409, -409, -409, -409, -409, 0, 0, 0, -409, -409, 0, -409, 0, 0, 0, -409, -409, 0, -409, -409, -409, -409, - // State 1130 -403, 0, 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, 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, -403, 0, 0, 0, -403, -403, 0, -403, -403, -403, -403, + // State 1130 + -397, 0, 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, 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, -397, 0, 0, 0, -397, -397, 0, -397, -397, -397, -397, // State 1131 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1132 @@ -2430,7 +2430,7 @@ mod __parse__Top { // State 1139 0, 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, 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, // State 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, -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, -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, -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, 0, 0, 0, 0, 0, -489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1141 0, 0, 0, 0, 0, 0, 0, 0, -782, 0, 0, 0, 0, 0, 0, -782, 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, -782, 0, 0, 0, -782, 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, -782, 0, -782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1142 @@ -2442,21 +2442,21 @@ mod __parse__Top { // State 1145 0, 0, 0, 0, 0, 0, 0, 0, -785, 0, 0, 0, 0, 0, 0, -785, 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, -785, 0, 0, 0, -785, 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, -785, 0, -785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1146 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 1147 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, 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, // State 1148 - 0, 0, 0, 0, 0, 0, 0, 0, -489, 0, 0, 0, 0, 0, 0, -489, 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, -489, 0, 0, 0, -489, 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, -489, 0, -489, 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, -483, 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, -483, 0, 0, 0, -483, 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, 0, 0, 0, 0, 0, 0, -483, 0, -483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1149 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1150 - 0, 0, 0, 0, 0, 0, 0, 0, -492, 0, 0, 0, 0, 0, 0, -492, 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, -492, 0, 0, 0, -492, 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, -492, 0, -492, 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, -486, 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, -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, // State 1151 -885, 0, 0, 0, 0, 0, 0, -885, 0, -885, 0, 0, 0, -885, 0, 0, -885, 0, 0, 0, -885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -885, 0, -885, -885, -885, -885, 0, 0, 0, 0, 0, -885, -885, -885, -885, 0, -885, -885, -885, -885, 0, 0, 0, 0, -885, -885, -885, -885, -885, 0, 0, -885, -885, -885, -885, 0, -885, -885, -885, -885, -885, -885, -885, -885, -885, 0, 0, 0, -885, -885, 0, -885, 0, 0, 0, -885, -885, 0, -885, -885, -885, -885, // State 1152 -889, 0, 0, 0, 0, 0, 0, -889, 0, -889, 0, 0, 0, -889, 0, 0, -889, 0, 0, 0, -889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -889, 0, -889, -889, -889, -889, 0, 0, 0, 0, 0, -889, -889, -889, -889, 0, -889, -889, -889, -889, 0, 0, 0, 0, -889, -889, -889, -889, -889, 0, 0, -889, -889, -889, -889, 0, -889, -889, -889, -889, -889, -889, -889, -889, -889, 0, 0, 0, -889, -889, 0, -889, 0, 0, 0, -889, -889, 0, -889, -889, -889, -889, // State 1153 - -351, 0, 0, 0, 0, 0, 0, -351, 0, -351, 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, -351, 0, -351, -351, -351, -351, 0, 0, 0, 0, 0, -351, -351, -351, -351, 0, -351, -351, -351, -351, 0, -351, -351, -351, -351, -351, -351, -351, -351, 0, 0, -351, -351, -351, -351, 0, -351, -351, -351, -351, -351, -351, -351, -351, -351, 0, 0, 0, -351, -351, 0, -351, 0, 0, 0, -351, -351, 0, -351, -351, -351, -351, + -345, 0, 0, 0, 0, 0, 0, -345, 0, -345, 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, -345, 0, -345, -345, -345, -345, 0, 0, 0, 0, 0, -345, -345, -345, -345, 0, -345, -345, -345, -345, 0, -345, -345, -345, -345, -345, -345, -345, -345, 0, 0, -345, -345, -345, -345, 0, -345, -345, -345, -345, -345, -345, -345, -345, -345, 0, 0, 0, -345, -345, 0, -345, 0, 0, 0, -345, -345, 0, -345, -345, -345, -345, // State 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, -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, 0, 0, 0, 0, 0, 0, // State 1155 @@ -2472,7 +2472,7 @@ mod __parse__Top { // State 1160 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1161 - 0, 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, -493, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1162 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1163 @@ -2490,7 +2490,7 @@ mod __parse__Top { // State 1169 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1170 - 0, 0, 0, 0, 0, 0, 0, 0, -491, 0, 0, 0, 0, 0, 0, -491, 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, -491, 0, 0, 0, -491, 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, -491, 0, -491, 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, -485, 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, -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, // State 1171 0, 0, 0, 0, 0, 0, 0, 0, -610, 0, 0, 0, 0, 0, 0, 1181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 @@ -2508,7 +2508,7 @@ mod __parse__Top { // State 1178 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 1179 - 0, 0, 0, 0, 0, 0, 0, 0, -494, 0, 0, 0, 0, 0, 0, -494, 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, -494, 0, 0, 0, -494, 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, -494, 0, -494, 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, -488, 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, -488, 0, 0, 0, -488, 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, -488, 0, -488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1180 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 @@ -2520,7 +2520,7 @@ mod __parse__Top { // State 1184 0, 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, 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, 0, 0, 0, // State 1185 - 0, 0, 0, 0, 0, 0, 0, 0, -493, 0, 0, 0, 0, 0, 0, -493, 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, -493, 0, 0, 0, -493, 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, -493, 0, -493, 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, -487, 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, -487, 0, 0, 0, -487, 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, -487, 0, -487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1186 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; @@ -2591,7 +2591,7 @@ mod __parse__Top { // State 30 0, // State 31 - -432, + -426, // State 32 0, // State 33 @@ -2969,7 +2969,7 @@ mod __parse__Top { // State 219 0, // State 220 - -438, + -432, // State 221 -888, // State 222 @@ -3345,25 +3345,25 @@ mod __parse__Top { // State 407 -765, // State 408 - -521, + -515, // State 409 - -184, - // State 410 -839, - // State 411 + // State 410 -861, - // State 412 + // State 411 -185, - // State 413 + // State 412 -866, - // State 414 + // State 413 -159, + // State 414 + -184, // State 415 - -433, + -427, // State 416 -865, // State 417 - -394, + -388, // State 418 -878, // State 419 @@ -3375,7 +3375,7 @@ mod __parse__Top { // State 422 -550, // State 423 - -355, + -349, // State 424 0, // State 425 @@ -3391,13 +3391,13 @@ mod __parse__Top { // State 430 0, // State 431 - -322, + -520, // State 432 - -321, + -519, // State 433 - -320, + -518, // State 434 - -436, + -430, // State 435 -835, // State 436 @@ -3453,7 +3453,7 @@ mod __parse__Top { // State 461 0, // State 462 - -393, + -387, // State 463 0, // State 464 @@ -3499,7 +3499,7 @@ mod __parse__Top { // State 484 0, // State 485 - -520, + -514, // State 486 0, // State 487 @@ -3521,7 +3521,7 @@ mod __parse__Top { // State 495 0, // State 496 - -372, + -366, // State 497 0, // State 498 @@ -3619,7 +3619,7 @@ mod __parse__Top { // State 544 0, // State 545 - -354, + -348, // State 546 -91, // State 547 @@ -3661,7 +3661,7 @@ mod __parse__Top { // State 565 0, // State 566 - -470, + -464, // State 567 0, // State 568 @@ -3675,7 +3675,7 @@ mod __parse__Top { // State 572 0, // State 573 - -373, + -367, // State 574 0, // State 575 @@ -3891,7 +3891,7 @@ mod __parse__Top { // State 680 0, // State 681 - -468, + -462, // State 682 0, // State 683 @@ -3901,7 +3901,7 @@ mod __parse__Top { // State 685 0, // State 686 - -469, + -463, // State 687 -205, // State 688 @@ -4029,7 +4029,7 @@ mod __parse__Top { // State 749 0, // State 750 - -467, + -461, // State 751 0, // State 752 @@ -4131,9 +4131,9 @@ mod __parse__Top { // State 800 0, // State 801 - -348, + -342, // State 802 - -352, + -346, // State 803 0, // State 804 @@ -4243,7 +4243,7 @@ mod __parse__Top { // State 856 0, // State 857 - -420, + -414, // State 858 0, // State 859 @@ -4261,7 +4261,7 @@ mod __parse__Top { // State 865 0, // State 866 - -440, + -434, // State 867 0, // State 868 @@ -4275,13 +4275,13 @@ mod __parse__Top { // State 872 -855, // State 873 - -349, + -343, // State 874 0, // State 875 0, // State 876 - -353, + -347, // State 877 0, // State 878 @@ -4353,11 +4353,11 @@ mod __parse__Top { // State 911 0, // State 912 - -422, + -416, // State 913 0, // State 914 - -412, + -406, // State 915 -265, // State 916 @@ -4369,7 +4369,7 @@ mod __parse__Top { // State 919 0, // State 920 - -419, + -413, // State 921 0, // State 922 @@ -4385,7 +4385,7 @@ mod __parse__Top { // State 927 0, // State 928 - -406, + -400, // State 929 0, // State 930 @@ -4405,7 +4405,7 @@ mod __parse__Top { // State 937 0, // State 938 - -346, + -340, // State 939 -893, // State 940 @@ -4457,21 +4457,21 @@ mod __parse__Top { // State 963 0, // State 964 - -414, + -408, // State 965 -267, // State 966 0, // State 967 - -421, + -415, // State 968 0, // State 969 - -411, + -405, // State 970 - -404, + -398, // State 971 - -416, + -410, // State 972 0, // State 973 @@ -4497,11 +4497,11 @@ mod __parse__Top { // State 983 0, // State 984 - -437, + -431, // State 985 0, // State 986 - -504, + -498, // State 987 0, // State 988 @@ -4545,7 +4545,7 @@ mod __parse__Top { // State 1007 0, // State 1008 - -507, + -501, // State 1009 -886, // State 1010 @@ -4555,7 +4555,7 @@ mod __parse__Top { // State 1012 -891, // State 1013 - -345, + -339, // State 1014 0, // State 1015 @@ -4595,15 +4595,15 @@ mod __parse__Top { // State 1032 0, // State 1033 - -413, + -407, // State 1034 - -418, + -412, // State 1035 - -408, + -402, // State 1036 0, // State 1037 - -415, + -409, // State 1038 0, // State 1039 @@ -4619,11 +4619,11 @@ mod __parse__Top { // State 1044 0, // State 1045 - -439, + -433, // State 1046 -107, // State 1047 - -505, + -499, // State 1048 0, // State 1049 @@ -4667,13 +4667,13 @@ mod __parse__Top { // State 1068 0, // State 1069 - -506, + -500, // State 1070 0, // State 1071 0, // State 1072 - -350, + -344, // State 1073 0, // State 1074 @@ -4701,11 +4701,11 @@ mod __parse__Top { // State 1085 0, // State 1086 - -410, + -404, // State 1087 - -417, + -411, // State 1088 - -407, + -401, // State 1089 0, // State 1090 @@ -4721,7 +4721,7 @@ mod __parse__Top { // State 1095 0, // State 1096 - -405, + -399, // State 1097 -108, // State 1098 @@ -4775,7 +4775,7 @@ mod __parse__Top { // State 1122 0, // State 1123 - -347, + -341, // State 1124 0, // State 1125 @@ -4787,9 +4787,9 @@ mod __parse__Top { // State 1128 0, // State 1129 - -409, - // State 1130 -403, + // State 1130 + -397, // State 1131 0, // State 1132 @@ -4835,7 +4835,7 @@ mod __parse__Top { // State 1152 -889, // State 1153 - -351, + -345, // State 1154 0, // State 1155 @@ -4967,7 +4967,7 @@ mod __parse__Top { }, 78 => match state { 114 => 173, - 333 | 373 => 361, + 335 | 373 => 364, _ => 23, }, 79 => match state { @@ -5064,56 +5064,42 @@ mod __parse__Top { _ => 276, }, 116 => match state { - 70 | 105 => 633, - 302 | 338 | 340..=342 | 360..=362 | 366 | 369..=372 | 385..=386 | 394 | 396 => 992, - _ => 409, - }, - 117 => match state { - 340 => 1055, - 361 => 1099, - _ => 993, - }, - 118 => match state { - 342 | 386 => 373, - _ => 333, - }, - 119 => match state { 51 => 577, _ => 501, }, - 121 => 51, - 122 => 502, - 123 => match state { + 118 => 51, + 119 => 502, + 120 => match state { 93 => 689, _ => 486, }, - 124 => match state { + 121 => match state { 126 => 192, 93 => 690, _ => 45, }, - 125 => match state { + 122 => match state { 126 => 730, _ => 487, }, - 127 => match state { + 124 => match state { 63 => 615, 108 => 710, 164 => 790, _ => 607, }, - 128 => 862, - 130 => match state { + 125 => 862, + 127 => match state { 221 => 873, _ => 801, }, - 131 => 221, - 132 => match state { + 128 => 221, + 129 => match state { 222 => 876, _ => 802, }, - 133 => 222, - 134 => match state { + 130 => 222, + 131 => match state { 21 | 50 | 110 | 152 | 162 | 168 | 171 | 184 | 205 | 209..=211 | 215 | 224 | 241..=242 | 244 | 246..=247 | 251 | 257 | 266..=269 | 283..=284 | 286 | 288..=290 | 299 | 305..=309 | 311..=312 | 321..=324 | 330..=331 | 344 | 351..=353 | 358..=359 | 367 | 376 | 378..=379 | 384 | 387..=389 => 52, 70 | 105 => 116, 14 => 471, @@ -5126,60 +5112,60 @@ mod __parse__Top { 189 => 824, _ => 7, }, - 135 => 634, - 136 => match state { + 132 => 633, + 133 => match state { 82 => 668, 104 => 706, 134 => 742, _ => 604, }, - 137 => 600, - 138 => 954, - 139 => match state { + 134 => 600, + 135 => 954, + 136 => match state { 156 | 158 => 781, _ => 601, }, - 140 => 503, - 141 => match state { + 137 => 503, + 138 => match state { 144 => 202, _ => 142, }, - 143 => 410, - 144 => 759, - 145 => match state { + 140 => 409, + 141 => 759, + 142 => match state { 142 => 755, 144 => 760, 202 => 841, _ => 693, }, - 147 => match state { + 144 => match state { 48 | 201 => 572, _ => 494, }, - 149 => match state { + 146 => match state { 143 => 201, _ => 48, }, - 150 => 495, - 151 => match state { + 147 => 495, + 148 => match state { 12 => 462, 27 => 541, 34 => 549, 120 => 721, 176 => 808, 181 => 811, - _ => 411, + _ => 410, }, - 152 => 635, - 153 => 504, - 154 => 505, - 155 => 506, - 156 => match state { + 149 => 634, + 150 => 504, + 151 => 505, + 152 => 506, + 153 => match state { 73 => 655, _ => 532, }, - 158 => 605, - 159 => match state { + 155 => 605, + 156 => match state { 1 => 8, 39 => 559, 49 | 100..=101 => 574, @@ -5188,9 +5174,9 @@ mod __parse__Top { 208 => 849, _ => 53, }, - 160 => 507, - 161 => 1050, - 162 => match state { + 157 => 507, + 158 => 1050, + 159 => match state { 56 => 106, 57 => 107, 97 => 146, @@ -5204,7 +5190,7 @@ mod __parse__Top { 42..=43 | 137 | 239 | 279 => 564, 61 | 65 => 612, 68 => 622, - 70 | 105 => 636, + 70 | 105 => 635, 153 | 249 => 770, 155 | 253 | 256 | 293 | 295 | 326..=328 | 354..=356 | 380 | 383 | 391..=393 | 398..=401 => 774, 159 | 218 => 783, @@ -5220,34 +5206,34 @@ mod __parse__Top { 258 => 929, 259 | 297 => 930, 261 => 934, - 302 | 338 | 341 | 360 | 366 | 369..=372 | 385 | 394 => 994, + 302 | 338 | 341 | 360 | 366 | 369..=372 | 385 | 394 => 992, 310 => 1014, 329 => 1044, 339 => 1054, 342 | 386 => 1059, 345 => 1073, - 362 | 396 => 1100, + 361 | 396 => 1099, + 362 => 1105, 363 => 1106, - 364 => 1107, 365 => 1108, 375 => 1122, 395 | 402 => 1162, 397 => 1169, - _ => 412, + _ => 411, }, - 163 => 508, - 166 => 784, - 167 => match state { + 160 => 508, + 163 => 784, + 164 => match state { 108 => 711, _ => 608, }, - 169 => 108, - 170 => 609, - 171 => 509, - 172 => 701, - 173 => 510, - 174 => 511, - 175 => match state { + 166 => 108, + 167 => 609, + 168 => 509, + 169 => 701, + 170 => 510, + 171 => 511, + 172 => match state { 253 => 922, 256 => 926, 293 => 975, @@ -5269,7 +5255,7 @@ mod __parse__Top { 401 => 1181, _ => 775, }, - 176 => match state { + 173 => match state { 87 => 679, 91 => 684, 140 => 751, @@ -5291,55 +5277,55 @@ mod __parse__Top { 377 => 1126, _ => 480, }, - 177 => match state { - 70 | 105 => 637, - _ => 413, + 174 => match state { + 70 | 105 => 636, + _ => 412, }, - 178 => match state { + 175 => match state { 123 => 727, _ => 472, }, - 180 => 995, - 181 => 1060, - 182 => 996, - 183 => match state { + 177 => 993, + 178 => 1060, + 179 => 994, + 180 => match state { 262..=263 | 300 | 303 => 935, _ => 985, }, - 184 => match state { + 181 => match state { 263 => 304, 300 => 332, 303 => 343, _ => 301, }, - 185 => match state { + 182 => match state { 395 | 402 => 1163, - _ => 1101, + _ => 1100, }, - 186 => match state { + 183 => match state { 386 => 1147, _ => 1061, }, - 187 => match state { + 184 => match state { 342 | 386 => 1062, - _ => 334, + _ => 333, }, - 188 => match state { + 185 => match state { 342 | 386 => 1063, - _ => 335, + _ => 334, }, - 189 => 512, - 190 => match state { + 186 => 512, + 187 => match state { 119 => 181, _ => 34, }, - 191 => match state { + 188 => match state { 13 | 122 => 464, 84 | 231 => 672, _ => 473, }, - 192 => 465, - 193 => match state { + 189 => 465, + 190 => match state { 13 => 36, 19 => 46, 24 | 73 => 74, @@ -5353,21 +5339,35 @@ mod __parse__Top { 368 => 1111, _ => 474, }, - 194 => match state { + 191 => match state { 84 => 136, 122 => 187, 231 => 272, _ => 37, }, - 195 => 513, - 196 => match state { + 192 => 513, + 193 => match state { 4 => 437, 18 => 485, 113 => 719, 125 => 729, + _ => 413, + }, + 194 => 637, + 195 => match state { + 70 | 105 => 638, + 302 | 338 | 340..=342 | 360..=361 | 364 | 366 | 369..=372 | 385..=386 | 394 | 396 => 995, _ => 414, }, - 197 => 638, + 196 => match state { + 340 => 1055, + 364 => 1107, + _ => 996, + }, + 197 => match state { + 342 | 386 => 373, + _ => 335, + }, 198 => 488, 199 => match state { 58 => 602, @@ -5384,12 +5384,12 @@ mod __parse__Top { }, 203 => match state { 396 => 1165, - _ => 1102, + _ => 1101, }, 204 => 1064, 205 => 776, 206 => 481, - 207 => 1103, + 207 => 1102, 208 => match state { 122 => 723, _ => 466, @@ -5439,7 +5439,7 @@ mod __parse__Top { 226 => match state { 338 => 1052, 341 => 1056, - 362 => 1104, + 361 => 1103, 366 => 1109, 370 => 1113, 371 => 1114, @@ -5450,7 +5450,7 @@ mod __parse__Top { _ => 998, }, 228 => match state { - 335 => 1049, + 334 => 1049, _ => 1048, }, 229 => 336, @@ -5517,7 +5517,7 @@ mod __parse__Top { }, 250 => 269, 251 => match state { - 302 | 338 | 341 | 360 | 362 | 366 | 369..=372 | 385 | 394 | 396 => 1001, + 302 | 338 | 341 | 360..=361 | 366 | 369..=372 | 385 | 394 | 396 => 1001, 337 => 1051, _ => 419, }, @@ -8042,97 +8042,97 @@ mod __parse__Top { } 319 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 3, nonterminal_produced: 116, } } 320 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 116, + states_to_pop: 0, + nonterminal_produced: 117, } } 321 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 116, + nonterminal_produced: 117, } } 322 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 117, + nonterminal_produced: 118, } } 323 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 118, } } 324 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 118, + nonterminal_produced: 119, } } 325 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 119, + states_to_pop: 1, + nonterminal_produced: 120, } } 326 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 2, nonterminal_produced: 120, } } 327 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 120, + states_to_pop: 3, + nonterminal_produced: 121, } } 328 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 121, + states_to_pop: 2, + nonterminal_produced: 122, } } 329 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 121, + states_to_pop: 1, + nonterminal_produced: 122, } } 330 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 122, + states_to_pop: 1, + nonterminal_produced: 123, } } 331 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 123, } } 332 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 123, + states_to_pop: 1, + nonterminal_produced: 124, } } 333 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 2, nonterminal_produced: 124, } } 334 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 3, nonterminal_produced: 125, } } @@ -8156,20 +8156,20 @@ mod __parse__Top { } 338 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 4, nonterminal_produced: 127, } } 339 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 3, nonterminal_produced: 127, } } 340 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 128, + states_to_pop: 6, + nonterminal_produced: 127, } } 341 => { @@ -8180,55 +8180,55 @@ mod __parse__Top { } 342 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 129, + states_to_pop: 2, + nonterminal_produced: 128, } } 343 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 5, nonterminal_produced: 129, } } 344 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 130, + states_to_pop: 7, + nonterminal_produced: 129, } } 345 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 1, nonterminal_produced: 130, } } 346 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, + states_to_pop: 2, nonterminal_produced: 130, } } 347 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 3, nonterminal_produced: 131, } } 348 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 131, } } 349 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, + states_to_pop: 3, nonterminal_produced: 132, } } 350 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, + states_to_pop: 1, nonterminal_produced: 132, } } @@ -8241,37 +8241,37 @@ mod __parse__Top { 352 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 133, + nonterminal_produced: 134, } } 353 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 1, nonterminal_produced: 134, } } 354 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 134, + nonterminal_produced: 135, } } 355 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 135, + states_to_pop: 1, + nonterminal_produced: 136, } } 356 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 135, + nonterminal_produced: 136, } } 357 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 136, + nonterminal_produced: 137, } } 358 => { @@ -8282,103 +8282,103 @@ mod __parse__Top { } 359 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 3, nonterminal_produced: 137, } } 360 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 138, + states_to_pop: 4, + nonterminal_produced: 137, } } 361 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 139, + states_to_pop: 3, + nonterminal_produced: 137, } } 362 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 139, + states_to_pop: 2, + nonterminal_produced: 138, } } 363 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 140, + nonterminal_produced: 139, } } 364 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 140, + states_to_pop: 0, + nonterminal_produced: 139, } } 365 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 2, nonterminal_produced: 140, } } 366 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, + states_to_pop: 3, nonterminal_produced: 140, } } 367 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 140, + states_to_pop: 0, + nonterminal_produced: 141, } } 368 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 141, } } 369 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 142, } } 370 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 142, + states_to_pop: 1, + nonterminal_produced: 143, } } 371 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 0, nonterminal_produced: 143, } } 372 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 143, + states_to_pop: 1, + nonterminal_produced: 144, } } 373 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 144, } } 374 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 144, + states_to_pop: 0, + nonterminal_produced: 145, } } 375 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 145, } } @@ -8390,290 +8390,290 @@ mod __parse__Top { } 377 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 2, nonterminal_produced: 146, } } 378 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 6, nonterminal_produced: 147, } } 379 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 5, nonterminal_produced: 147, } } 380 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 148, + states_to_pop: 5, + nonterminal_produced: 147, } } 381 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 148, + states_to_pop: 4, + nonterminal_produced: 147, } } 382 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 149, + states_to_pop: 5, + nonterminal_produced: 147, } } 383 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 149, + states_to_pop: 4, + nonterminal_produced: 147, } } 384 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 150, + states_to_pop: 4, + nonterminal_produced: 147, } } 385 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 150, + states_to_pop: 3, + nonterminal_produced: 147, } } 386 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 150, + states_to_pop: 2, + nonterminal_produced: 148, } } 387 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 150, + states_to_pop: 1, + nonterminal_produced: 148, } } 388 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 150, + states_to_pop: 2, + nonterminal_produced: 149, } } 389 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 150, + states_to_pop: 1, + nonterminal_produced: 149, } } 390 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, + states_to_pop: 1, nonterminal_produced: 150, } } 391 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 1, nonterminal_produced: 150, } } 392 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 151, + nonterminal_produced: 150, } } 393 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 151, + nonterminal_produced: 150, } } 394 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 152, + states_to_pop: 1, + nonterminal_produced: 150, } } 395 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 152, + nonterminal_produced: 150, } } 396 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 153, + states_to_pop: 10, + nonterminal_produced: 151, } } 397 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 153, + states_to_pop: 7, + nonterminal_produced: 151, } } 398 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 153, + states_to_pop: 9, + nonterminal_produced: 151, } } 399 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 153, + states_to_pop: 6, + nonterminal_produced: 151, } } 400 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 153, + states_to_pop: 9, + nonterminal_produced: 152, } } 401 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 153, + states_to_pop: 8, + nonterminal_produced: 152, } } 402 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 10, - nonterminal_produced: 154, + nonterminal_produced: 152, } } 403 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 154, + states_to_pop: 9, + nonterminal_produced: 152, } } 404 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 154, + states_to_pop: 7, + nonterminal_produced: 152, } } 405 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 6, - nonterminal_produced: 154, + nonterminal_produced: 152, } } 406 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 155, + states_to_pop: 8, + nonterminal_produced: 152, } } 407 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 155, + states_to_pop: 7, + nonterminal_produced: 152, } } 408 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 155, + states_to_pop: 8, + nonterminal_produced: 152, } } 409 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 155, + states_to_pop: 7, + nonterminal_produced: 152, } } 410 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 155, + states_to_pop: 9, + nonterminal_produced: 152, } } 411 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 155, + states_to_pop: 8, + nonterminal_produced: 152, } } 412 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 155, + states_to_pop: 6, + nonterminal_produced: 152, } } 413 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 155, + states_to_pop: 5, + nonterminal_produced: 152, } } 414 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 155, + states_to_pop: 7, + nonterminal_produced: 152, } } 415 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 155, + states_to_pop: 6, + nonterminal_produced: 152, } } 416 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, - nonterminal_produced: 155, + states_to_pop: 2, + nonterminal_produced: 153, } } 417 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 155, + states_to_pop: 1, + nonterminal_produced: 153, } } 418 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 155, + states_to_pop: 3, + nonterminal_produced: 153, } } 419 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 155, + states_to_pop: 2, + nonterminal_produced: 153, } } 420 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 155, + states_to_pop: 2, + nonterminal_produced: 153, } } 421 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 155, + states_to_pop: 1, + nonterminal_produced: 154, } } 422 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 156, + states_to_pop: 0, + nonterminal_produced: 154, } } 423 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 156, + states_to_pop: 2, + nonterminal_produced: 155, } } 424 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 156, + states_to_pop: 1, + nonterminal_produced: 155, } } 425 => { @@ -8684,133 +8684,133 @@ mod __parse__Top { } 426 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 156, } } 427 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 157, } } 428 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 157, + states_to_pop: 2, + nonterminal_produced: 158, } } 429 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 158, + states_to_pop: 1, + nonterminal_produced: 159, } } 430 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 158, + states_to_pop: 7, + nonterminal_produced: 160, } } 431 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 159, + states_to_pop: 4, + nonterminal_produced: 160, } } 432 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 159, + states_to_pop: 8, + nonterminal_produced: 160, } } 433 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 5, nonterminal_produced: 160, } } 434 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 3, nonterminal_produced: 161, } } 435 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 162, + nonterminal_produced: 161, } } 436 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 163, + states_to_pop: 3, + nonterminal_produced: 162, } } 437 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 163, + states_to_pop: 1, + nonterminal_produced: 162, } } 438 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, + states_to_pop: 1, nonterminal_produced: 163, } } 439 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, + states_to_pop: 4, nonterminal_produced: 163, } } 440 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, - nonterminal_produced: 164, + nonterminal_produced: 163, } } 441 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 164, + nonterminal_produced: 163, } } 442 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 165, + states_to_pop: 1, + nonterminal_produced: 164, } } 443 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 165, + nonterminal_produced: 164, } } 444 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 166, + states_to_pop: 0, + nonterminal_produced: 165, } } 445 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 166, + states_to_pop: 1, + nonterminal_produced: 165, } } 446 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 1, nonterminal_produced: 166, } } 447 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 166, } } @@ -8822,31 +8822,31 @@ mod __parse__Top { } 449 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 167, } } 450 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 168, + states_to_pop: 1, + nonterminal_produced: 167, } } 451 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 168, } } 452 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 169, + states_to_pop: 4, + nonterminal_produced: 168, } } 453 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 169, } } @@ -8859,319 +8859,319 @@ mod __parse__Top { 455 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 170, + nonterminal_produced: 171, } } 456 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 170, + states_to_pop: 2, + nonterminal_produced: 172, } } 457 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 171, + states_to_pop: 1, + nonterminal_produced: 172, } } 458 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 171, + states_to_pop: 2, + nonterminal_produced: 173, } } 459 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 172, + nonterminal_produced: 173, } } 460 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 173, + states_to_pop: 5, + nonterminal_produced: 174, } } 461 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 4, nonterminal_produced: 174, } } 462 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 175, + states_to_pop: 4, + nonterminal_produced: 174, } } 463 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 175, + states_to_pop: 3, + nonterminal_produced: 174, } } 464 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 176, + nonterminal_produced: 175, } } 465 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 176, + nonterminal_produced: 175, } } 466 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 177, + states_to_pop: 1, + nonterminal_produced: 176, } } 467 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 177, + states_to_pop: 0, + nonterminal_produced: 176, } } 468 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, + states_to_pop: 1, nonterminal_produced: 177, } } 469 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 1, nonterminal_produced: 177, } } 470 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 178, + states_to_pop: 1, + nonterminal_produced: 177, } } 471 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 178, + nonterminal_produced: 177, } } 472 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 179, + nonterminal_produced: 177, } } 473 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 179, + states_to_pop: 1, + nonterminal_produced: 177, } } 474 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 180, + nonterminal_produced: 178, } } 475 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 180, + nonterminal_produced: 178, } } 476 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 180, + nonterminal_produced: 178, } } 477 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 180, + nonterminal_produced: 178, } } 478 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 180, + nonterminal_produced: 178, } } 479 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 180, + nonterminal_produced: 178, } } 480 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 181, + nonterminal_produced: 178, } } 481 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 181, + states_to_pop: 2, + nonterminal_produced: 179, } } 482 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 181, + states_to_pop: 4, + nonterminal_produced: 179, } } 483 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 181, + states_to_pop: 3, + nonterminal_produced: 179, } } 484 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 181, + states_to_pop: 5, + nonterminal_produced: 179, } } 485 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 181, + states_to_pop: 4, + nonterminal_produced: 179, } } 486 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 181, + states_to_pop: 7, + nonterminal_produced: 179, } } 487 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 182, + states_to_pop: 6, + nonterminal_produced: 179, } } 488 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 182, + states_to_pop: 5, + nonterminal_produced: 180, } } 489 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 182, + states_to_pop: 4, + nonterminal_produced: 180, } } 490 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 182, + states_to_pop: 1, + nonterminal_produced: 181, } } 491 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 182, + states_to_pop: 2, + nonterminal_produced: 181, } } 492 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, + states_to_pop: 3, nonterminal_produced: 182, } } 493 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 182, + states_to_pop: 3, + nonterminal_produced: 183, } } 494 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 183, + states_to_pop: 1, + nonterminal_produced: 184, } } 495 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 183, + states_to_pop: 3, + nonterminal_produced: 185, } } 496 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 184, + states_to_pop: 3, + nonterminal_produced: 185, } } 497 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 184, + states_to_pop: 7, + nonterminal_produced: 186, } } 498 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 185, + states_to_pop: 8, + nonterminal_produced: 186, } } 499 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 8, nonterminal_produced: 186, } } 500 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 187, + states_to_pop: 7, + nonterminal_produced: 186, } } 501 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 188, + states_to_pop: 1, + nonterminal_produced: 187, } } 502 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 188, + states_to_pop: 1, + nonterminal_produced: 187, } } 503 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 189, + states_to_pop: 1, + nonterminal_produced: 187, } } 504 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 189, + states_to_pop: 1, + nonterminal_produced: 187, } } 505 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, - nonterminal_produced: 189, + states_to_pop: 1, + nonterminal_produced: 187, } } 506 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 189, + states_to_pop: 3, + nonterminal_produced: 188, } } 507 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 190, + nonterminal_produced: 189, } } 508 => { @@ -9189,25 +9189,25 @@ mod __parse__Top { 510 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 190, + nonterminal_produced: 191, } } 511 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 190, + nonterminal_produced: 191, } } 512 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 191, + states_to_pop: 2, + nonterminal_produced: 192, } } 513 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 192, + states_to_pop: 2, + nonterminal_produced: 193, } } 514 => { @@ -9218,8 +9218,8 @@ mod __parse__Top { } 515 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 193, + states_to_pop: 2, + nonterminal_produced: 194, } } 516 => { @@ -9231,19 +9231,19 @@ mod __parse__Top { 517 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 194, + nonterminal_produced: 195, } } 518 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 195, } } 519 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 196, + states_to_pop: 1, + nonterminal_produced: 195, } } 520 => { @@ -9254,13 +9254,13 @@ mod __parse__Top { } 521 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 197, } } 522 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 197, } } @@ -11986,7 +11986,7 @@ mod __parse__Top { assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant9(__symbols); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12020,7 +12020,7 @@ mod __parse__Top { let __sym5 = __pop_Variant9(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12052,7 +12052,7 @@ mod __parse__Top { 28 => { // ("," >) = ",", "*", StarTypedParameter => ActionFn(970); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12082,7 +12082,7 @@ mod __parse__Top { // ("," >) = ",", "*", StarTypedParameter, ("," >)+ => ActionFn(972); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant12(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12114,7 +12114,7 @@ mod __parse__Top { assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant9(__symbols); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12148,7 +12148,7 @@ mod __parse__Top { let __sym5 = __pop_Variant9(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12180,7 +12180,7 @@ mod __parse__Top { 36 => { // ("," >)? = ",", "*", StarTypedParameter => ActionFn(994); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12210,7 +12210,7 @@ mod __parse__Top { // ("," >)? = ",", "*", StarTypedParameter, ("," >)+ => ActionFn(996); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant12(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12245,7 +12245,7 @@ mod __parse__Top { assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant9(__symbols); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12279,7 +12279,7 @@ mod __parse__Top { let __sym5 = __pop_Variant9(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12311,7 +12311,7 @@ mod __parse__Top { 45 => { // ("," >) = ",", "*", StarUntypedParameter => ActionFn(1030); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12341,7 +12341,7 @@ mod __parse__Top { // ("," >) = ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1032); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant12(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12373,7 +12373,7 @@ mod __parse__Top { assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant9(__symbols); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12407,7 +12407,7 @@ mod __parse__Top { let __sym5 = __pop_Variant9(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12439,7 +12439,7 @@ mod __parse__Top { 53 => { // ("," >)? = ",", "*", StarUntypedParameter => ActionFn(1054); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -12469,7 +12469,7 @@ mod __parse__Top { // ("," >)? = ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1056); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant12(__symbols); - let __sym2 = __pop_Variant64(__symbols); + let __sym2 = __pop_Variant63(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -13740,7 +13740,18 @@ mod __parse__Top { __reduce361(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 362 => { - __reduce362(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // FStringConversion = "!", name => ActionFn(800); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant6(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = match super::__action800::<>(source_code, mode, __sym0, __sym1) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant67(__nt), __end)); + (2, 138) } 363 => { __reduce363(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13758,18 +13769,7 @@ mod __parse__Top { __reduce367(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 368 => { - // FStringConversion = "!", name => ActionFn(802); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant6(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = match super::__action802::<>(source_code, mode, __sym0, __sym1) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant68(__nt), __end)); - (2, 141) + __reduce368(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 369 => { __reduce369(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13784,7 +13784,16 @@ mod __parse__Top { __reduce372(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 373 => { - __reduce373(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // FStringMiddlePattern = fstring_middle => ActionFn(803); + let __sym0 = __pop_Variant3(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action803::<>(source_code, mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant44(__nt), __end)); + (1, 144) } 374 => { __reduce374(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -13799,38 +13808,11 @@ mod __parse__Top { __reduce377(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 378 => { - __reduce378(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 379 => { - // FStringMiddlePattern = fstring_middle => ActionFn(805); - let __sym0 = __pop_Variant3(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action805::<>(source_code, mode, __sym0) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (1, 147) - } - 380 => { - __reduce380(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 381 => { - __reduce381(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 382 => { - __reduce382(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 383 => { - __reduce383(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 384 => { // FStringReplacementField = "{", TestListOrYieldExpr, "=", FStringConversion, FStringFormatSpecSuffix, "}" => ActionFn(1577); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant44(__symbols); - let __sym3 = __pop_Variant68(__symbols); + let __sym3 = __pop_Variant67(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant15(__symbols); let __sym0 = __pop_Variant0(__symbols); @@ -13841,13 +13823,13 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (6, 150) + (6, 147) } - 385 => { + 379 => { // FStringReplacementField = "{", TestListOrYieldExpr, "=", FStringConversion, "}" => ActionFn(1578); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant68(__symbols); + let __sym3 = __pop_Variant67(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant15(__symbols); let __sym0 = __pop_Variant0(__symbols); @@ -13858,9 +13840,9 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (5, 150) + (5, 147) } - 386 => { + 380 => { // FStringReplacementField = "{", TestListOrYieldExpr, "=", FStringFormatSpecSuffix, "}" => ActionFn(1579); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); @@ -13875,9 +13857,9 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (5, 150) + (5, 147) } - 387 => { + 381 => { // FStringReplacementField = "{", TestListOrYieldExpr, "=", "}" => ActionFn(1580); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); @@ -13891,14 +13873,14 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (4, 150) + (4, 147) } - 388 => { + 382 => { // FStringReplacementField = "{", TestListOrYieldExpr, FStringConversion, FStringFormatSpecSuffix, "}" => ActionFn(1581); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant44(__symbols); - let __sym2 = __pop_Variant68(__symbols); + let __sym2 = __pop_Variant67(__symbols); let __sym1 = __pop_Variant15(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -13908,13 +13890,13 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (5, 150) + (5, 147) } - 389 => { + 383 => { // FStringReplacementField = "{", TestListOrYieldExpr, FStringConversion, "}" => ActionFn(1582); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant68(__symbols); + let __sym2 = __pop_Variant67(__symbols); let __sym1 = __pop_Variant15(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; @@ -13924,9 +13906,9 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (4, 150) + (4, 147) } - 390 => { + 384 => { // FStringReplacementField = "{", TestListOrYieldExpr, FStringFormatSpecSuffix, "}" => ActionFn(1583); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); @@ -13940,9 +13922,9 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (4, 150) + (4, 147) } - 391 => { + 385 => { // FStringReplacementField = "{", TestListOrYieldExpr, "}" => ActionFn(1584); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); @@ -13955,7 +13937,25 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (3, 150) + (3, 147) + } + 386 => { + __reduce386(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 387 => { + __reduce387(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 388 => { + __reduce388(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 389 => { + __reduce389(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 390 => { + __reduce390(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 391 => { + __reduce391(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 392 => { __reduce392(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -14141,74 +14141,56 @@ mod __parse__Top { __reduce452(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 453 => { - __reduce453(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 454 => { - __reduce454(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 455 => { - __reduce455(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 456 => { - __reduce456(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 457 => { - __reduce457(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 458 => { - __reduce458(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) - } - 459 => { - // IpyEscapeCommandExpr = ipy_escape_command => ActionFn(1344); + // IpyEscapeCommandExpr = ipy_escape_command => ActionFn(1342); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = match super::__action1344::<>(source_code, mode, __sym0) { + let __nt = match super::__action1342::<>(source_code, mode, __sym0) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 172) + (1, 169) } - 460 => { - // IpyEscapeCommandStatement = ipy_escape_command => ActionFn(1345); + 454 => { + // IpyEscapeCommandStatement = ipy_escape_command => ActionFn(1343); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = match super::__action1345::<>(source_code, mode, __sym0) { + let __nt = match super::__action1343::<>(source_code, mode, __sym0) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (1, 173) + (1, 170) } - 461 => { - // IpyHelpEndEscapeCommandStatement = Expression<"all">, ("?")+ => ActionFn(1346); + 455 => { + // IpyHelpEndEscapeCommandStatement = Expression<"all">, ("?")+ => ActionFn(1344); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant22(__symbols); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = match super::__action1346::<>(source_code, mode, __sym0, __sym1) { + let __nt = match super::__action1344::<>(source_code, mode, __sym0, __sym1) { Ok(v) => v, Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (2, 174) + (2, 171) } - 462 => { - __reduce462(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + 456 => { + __reduce456(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } - 463 => { - __reduce463(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + 457 => { + __reduce457(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } - 464 => { - __reduce464(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + 458 => { + __reduce458(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } - 465 => { - __reduce465(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + 459 => { + __reduce459(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } - 466 => { + 460 => { // LambdaDef = "lambda", ParameterList, ":", fstring_middle, Test<"all"> => ActionFn(1781); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant15(__symbols); @@ -14223,9 +14205,9 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (5, 177) + (5, 174) } - 467 => { + 461 => { // LambdaDef = "lambda", ParameterList, ":", Test<"all"> => ActionFn(1782); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant15(__symbols); @@ -14239,9 +14221,9 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (4, 177) + (4, 174) } - 468 => { + 462 => { // LambdaDef = "lambda", ":", fstring_middle, Test<"all"> => ActionFn(1783); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant15(__symbols); @@ -14255,9 +14237,9 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (4, 177) + (4, 174) } - 469 => { + 463 => { // LambdaDef = "lambda", ":", Test<"all"> => ActionFn(1784); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant15(__symbols); @@ -14270,7 +14252,25 @@ mod __parse__Top { Err(e) => return Some(Err(e)), }; __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (3, 177) + (3, 174) + } + 464 => { + __reduce464(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 465 => { + __reduce465(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 466 => { + __reduce466(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 467 => { + __reduce467(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 468 => { + __reduce468(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 469 => { + __reduce469(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 470 => { __reduce470(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -14282,7 +14282,16 @@ mod __parse__Top { __reduce472(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 473 => { - __reduce473(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + // LiteralPattern = StringLiteral+ => ActionFn(1351); + let __sym0 = __pop_Variant95(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = match super::__action1351::<>(source_code, mode, __sym0) { + Ok(v) => v, + Err(e) => return Some(Err(e)), + }; + __symbols.push((__start, __Symbol::Variant35(__nt), __end)); + (1, 177) } 474 => { __reduce474(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -14300,19 +14309,19 @@ mod __parse__Top { __reduce478(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 479 => { - // LiteralPattern = StringLiteral+ => ActionFn(1353); + __reduce479(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 480 => { + // MappingKey = StringLiteralOrFString+ => ActionFn(1355); let __sym0 = __pop_Variant95(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = match super::__action1353::<>(source_code, mode, __sym0) { + let __nt = match super::__action1355::<>(source_code, mode, __sym0) { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (1, 180) - } - 480 => { - __reduce480(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + __symbols.push((__start, __Symbol::Variant44(__nt), __end)); + (1, 178) } 481 => { __reduce481(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -14330,16 +14339,7 @@ mod __parse__Top { __reduce485(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 486 => { - // MappingKey = StringLiteralOrFString+ => ActionFn(1357); - let __sym0 = __pop_Variant95(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = match super::__action1357::<>(source_code, mode, __sym0) { - Ok(v) => v, - Err(e) => return Some(Err(e)), - }; - __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (1, 181) + __reduce486(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 487 => { __reduce487(source_code, mode, __lookahead_start, __symbols, core::marker::PhantomData::<()>) @@ -14599,7 +14599,7 @@ mod __parse__Top { let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant9(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -14618,7 +14618,7 @@ mod __parse__Top { let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant9(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -14639,7 +14639,7 @@ mod __parse__Top { let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant9(__symbols); let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -14721,7 +14721,7 @@ mod __parse__Top { let __sym6 = __pop_Variant9(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -14741,7 +14741,7 @@ mod __parse__Top { let __sym8 = __pop_Variant9(__symbols); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant12(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -14763,7 +14763,7 @@ mod __parse__Top { let __sym9 = __pop_Variant9(__symbols); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant12(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -14845,7 +14845,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, "," => ActionFn(1615); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -14862,7 +14862,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, "," => ActionFn(1616); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -14881,7 +14881,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, "," => ActionFn(1617); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -14955,7 +14955,7 @@ mod __parse__Top { assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -14973,7 +14973,7 @@ mod __parse__Top { assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant12(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -14993,7 +14993,7 @@ mod __parse__Top { assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant12(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -15117,7 +15117,7 @@ mod __parse__Top { assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant9(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -15135,7 +15135,7 @@ mod __parse__Top { assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant9(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -15155,7 +15155,7 @@ mod __parse__Top { assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant9(__symbols); let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -15233,7 +15233,7 @@ mod __parse__Top { let __sym6 = __pop_Variant9(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -15252,7 +15252,7 @@ mod __parse__Top { let __sym8 = __pop_Variant9(__symbols); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant12(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -15273,7 +15273,7 @@ mod __parse__Top { let __sym9 = __pop_Variant9(__symbols); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant12(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -15351,7 +15351,7 @@ mod __parse__Top { 610 => { // ParameterList = OneOrMore>, ",", "*", StarTypedParameter => ActionFn(1642); assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -15367,7 +15367,7 @@ mod __parse__Top { 611 => { // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter => ActionFn(1643); assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -15385,7 +15385,7 @@ mod __parse__Top { 612 => { // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter => ActionFn(1644); assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -15455,7 +15455,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "*", StarTypedParameter, ("," >)+ => ActionFn(1648); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -15472,7 +15472,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "/", ",", "*", StarTypedParameter, ("," >)+ => ActionFn(1649); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant12(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -15491,7 +15491,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarTypedParameter, ("," >)+ => ActionFn(1650); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant12(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -15712,7 +15712,7 @@ mod __parse__Top { let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant9(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; @@ -15746,7 +15746,7 @@ mod __parse__Top { let __sym4 = __pop_Variant9(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; @@ -15778,7 +15778,7 @@ mod __parse__Top { // ParameterList = "*", StarTypedParameter, "," => ActionFn(1406); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; @@ -15808,7 +15808,7 @@ mod __parse__Top { assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; @@ -15839,7 +15839,7 @@ mod __parse__Top { assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant9(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; @@ -15871,7 +15871,7 @@ mod __parse__Top { let __sym4 = __pop_Variant9(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; @@ -15901,7 +15901,7 @@ mod __parse__Top { 643 => { // ParameterList = "*", StarTypedParameter => ActionFn(1414); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; @@ -15928,7 +15928,7 @@ mod __parse__Top { // ParameterList = "*", StarTypedParameter, ("," >)+ => ActionFn(1416); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; @@ -15965,7 +15965,7 @@ mod __parse__Top { let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant9(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -15984,7 +15984,7 @@ mod __parse__Top { let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant9(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16005,7 +16005,7 @@ mod __parse__Top { let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant9(__symbols); let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -16087,7 +16087,7 @@ mod __parse__Top { let __sym6 = __pop_Variant9(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -16107,7 +16107,7 @@ mod __parse__Top { let __sym8 = __pop_Variant9(__symbols); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant12(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16129,7 +16129,7 @@ mod __parse__Top { let __sym9 = __pop_Variant9(__symbols); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant12(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -16211,7 +16211,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, "," => ActionFn(1675); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -16228,7 +16228,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, "," => ActionFn(1676); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16247,7 +16247,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, "," => ActionFn(1677); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -16321,7 +16321,7 @@ mod __parse__Top { assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -16339,7 +16339,7 @@ mod __parse__Top { assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant12(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16359,7 +16359,7 @@ mod __parse__Top { assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant12(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -16483,7 +16483,7 @@ mod __parse__Top { assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant9(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -16501,7 +16501,7 @@ mod __parse__Top { assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant9(__symbols); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16521,7 +16521,7 @@ mod __parse__Top { assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant9(__symbols); let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -16599,7 +16599,7 @@ mod __parse__Top { let __sym6 = __pop_Variant9(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -16618,7 +16618,7 @@ mod __parse__Top { let __sym8 = __pop_Variant9(__symbols); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant12(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16639,7 +16639,7 @@ mod __parse__Top { let __sym9 = __pop_Variant9(__symbols); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant12(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -16717,7 +16717,7 @@ mod __parse__Top { 688 => { // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter => ActionFn(1702); assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -16733,7 +16733,7 @@ mod __parse__Top { 689 => { // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter => ActionFn(1703); assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16751,7 +16751,7 @@ mod __parse__Top { 690 => { // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter => ActionFn(1704); assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -16821,7 +16821,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1708); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant64(__symbols); + let __sym3 = __pop_Variant63(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant85(__symbols); @@ -16838,7 +16838,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "/", ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1709); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant12(__symbols); - let __sym5 = __pop_Variant64(__symbols); + let __sym5 = __pop_Variant63(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -16857,7 +16857,7 @@ mod __parse__Top { // ParameterList = OneOrMore>, ",", "/", ("," >)+, ",", "*", StarUntypedParameter, ("," >)+ => ActionFn(1710); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant12(__symbols); - let __sym6 = __pop_Variant64(__symbols); + let __sym6 = __pop_Variant63(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -17078,7 +17078,7 @@ mod __parse__Top { let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant9(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; @@ -17112,7 +17112,7 @@ mod __parse__Top { let __sym4 = __pop_Variant9(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; @@ -17144,7 +17144,7 @@ mod __parse__Top { // ParameterList = "*", StarUntypedParameter, "," => ActionFn(1444); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; @@ -17174,7 +17174,7 @@ mod __parse__Top { assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; @@ -17205,7 +17205,7 @@ mod __parse__Top { assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant9(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; @@ -17237,7 +17237,7 @@ mod __parse__Top { let __sym4 = __pop_Variant9(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; @@ -17267,7 +17267,7 @@ mod __parse__Top { 721 => { // ParameterList = "*", StarUntypedParameter => ActionFn(1452); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; @@ -17294,7 +17294,7 @@ mod __parse__Top { // ParameterList = "*", StarUntypedParameter, ("," >)+ => ActionFn(1454); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; @@ -17336,7 +17336,7 @@ mod __parse__Top { assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant9(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; @@ -17368,7 +17368,7 @@ mod __parse__Top { let __sym4 = __pop_Variant9(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; @@ -17398,7 +17398,7 @@ mod __parse__Top { 733 => { // ParameterListStarArgs = "*", StarTypedParameter => ActionFn(895); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; @@ -17425,7 +17425,7 @@ mod __parse__Top { // ParameterListStarArgs = "*", StarTypedParameter, ("," >)+ => ActionFn(897); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; @@ -17455,7 +17455,7 @@ mod __parse__Top { assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant9(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; @@ -17487,7 +17487,7 @@ mod __parse__Top { let __sym4 = __pop_Variant9(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; @@ -17517,7 +17517,7 @@ mod __parse__Top { 741 => { // ParameterListStarArgs = "*", StarUntypedParameter => ActionFn(1022); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; @@ -17544,7 +17544,7 @@ mod __parse__Top { // ParameterListStarArgs = "*", StarUntypedParameter, ("," >)+ => ActionFn(1024); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant12(__symbols); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; @@ -17868,7 +17868,7 @@ mod __parse__Top { Ok(v) => v, Err(e) => return Some(Err(e)), }; - __symbols.push((__start, __Symbol::Variant70(__nt), __end)); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); (1, 251) } 835 => { @@ -18267,23 +18267,23 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant60< + fn __pop_Variant59< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, (Option>, ast::ParenthesizedExpr), TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant77< + fn __pop_Variant76< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, (Option, Option), TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant77(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant76(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18307,13 +18307,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant68< + fn __pop_Variant67< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, (TextSize, ast::ConversionFlag), TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant68(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant67(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18357,13 +18357,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant81< + fn __pop_Variant80< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, (ast::Expr, ast::Pattern), TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant81(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant80(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18377,13 +18377,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant61< + fn __pop_Variant60< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, (ast::ParenthesizedExpr, ast::ParenthesizedExpr), TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant60(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18447,13 +18447,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant70< + fn __pop_Variant69< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, StringType, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant70(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant69(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18477,13 +18477,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant62< + fn __pop_Variant61< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, Vec<(Option>, ast::ParenthesizedExpr)>, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant61(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18497,13 +18497,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant74< + fn __pop_Variant73< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, Vec, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant74(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant73(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18657,43 +18657,43 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant59< + fn __pop_Variant58< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, alloc::vec::Vec, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant59(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant67< + fn __pop_Variant66< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, alloc::vec::Vec, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant67(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant66(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant71< + fn __pop_Variant70< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, alloc::vec::Vec, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant71(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant70(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant79< + fn __pop_Variant78< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, alloc::vec::Vec, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant79(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant78(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18757,23 +18757,23 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant76< + fn __pop_Variant75< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, alloc::vec::Vec, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant76(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant75(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant73< + fn __pop_Variant72< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, ast::Alias, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant73(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant72(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18808,32 +18808,22 @@ mod __parse__Top { } } fn __pop_Variant57< - >( - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> - ) -> (TextSize, ast::Constant, TextSize) - { - match __symbols.pop() { - Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r), - _ => __symbol_type_mismatch() - } - } - fn __pop_Variant58< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, ast::Decorator, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant58(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant57(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant66< + fn __pop_Variant65< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, ast::ExceptHandler, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant66(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant65(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18857,13 +18847,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant78< + fn __pop_Variant77< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, ast::MatchCase, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant78(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant77(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18877,6 +18867,16 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } + fn __pop_Variant81< + >( + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> + ) -> (TextSize, ast::Number, TextSize) + { + match __symbols.pop() { + Some((__l, __Symbol::Variant81(__v), __r)) => (__l, __v, __r), + _ => __symbol_type_mismatch() + } + } fn __pop_Variant49< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> @@ -18887,13 +18887,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant64< + fn __pop_Variant63< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, ast::Parameter, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant64(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant63(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -18947,13 +18947,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant80< + fn __pop_Variant79< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, ast::PatternKeyword, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant80(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant79(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -19017,13 +19017,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant72< + fn __pop_Variant71< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, core::option::Option<(Option<(TextSize, TextSize, Option)>, ast::Expr)>, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant72(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant71(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -19047,13 +19047,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant69< + fn __pop_Variant68< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, core::option::Option<(TextSize, ast::ConversionFlag)>, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant69(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant68(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -19087,13 +19087,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant63< + fn __pop_Variant62< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, core::option::Option>, ast::ParenthesizedExpr)>>, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant63(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant62(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -19157,13 +19157,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant65< + fn __pop_Variant64< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, core::option::Option, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant65(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant64(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -19247,13 +19247,13 @@ mod __parse__Top { _ => __symbol_type_mismatch() } } - fn __pop_Variant75< + fn __pop_Variant74< >( __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)> ) -> (TextSize, u32, TextSize) { match __symbols.pop() { - Some((__l, __Symbol::Variant75(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant74(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -21429,7 +21429,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // AddOpExpr = ConstantExpr, AddOp, ConstantAtom => ActionFn(1225); + // AddOpExpr = NumberExpr, AddOp, NumberAtom => ActionFn(1225); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant15(__symbols); let __sym1 = __pop_Variant49(__symbols); @@ -21882,8 +21882,8 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"all"> = Constant => ActionFn(1237); - let __sym0 = __pop_Variant57(__symbols); + // Atom<"all"> = Number => ActionFn(1237); + let __sym0 = __pop_Variant81(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action1237::<>(source_code, mode, __sym0); @@ -22080,7 +22080,7 @@ mod __parse__Top { // Atom<"all"> = "{", DictLiteralValues, "}" => ActionFn(1567); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant62(__symbols); + let __sym1 = __pop_Variant61(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; @@ -22120,7 +22120,7 @@ mod __parse__Top { assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant54(__symbols); - let __sym1 = __pop_Variant61(__symbols); + let __sym1 = __pop_Variant60(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; @@ -22246,8 +22246,8 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Atom<"no-withitems"> = Constant => ActionFn(1264); - let __sym0 = __pop_Variant57(__symbols); + // Atom<"no-withitems"> = Number => ActionFn(1264); + let __sym0 = __pop_Variant81(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action1264::<>(source_code, mode, __sym0); @@ -22403,7 +22403,7 @@ mod __parse__Top { // Atom<"no-withitems"> = "{", DictLiteralValues, "}" => ActionFn(1569); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant62(__symbols); + let __sym1 = __pop_Variant61(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; @@ -22443,7 +22443,7 @@ mod __parse__Top { assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant54(__symbols); - let __sym1 = __pop_Variant61(__symbols); + let __sym1 = __pop_Variant60(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; @@ -23086,7 +23086,7 @@ mod __parse__Top { let __sym3 = __pop_Variant98(__symbols); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym6.2; let __nt = super::__action1757::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); @@ -23109,7 +23109,7 @@ mod __parse__Top { let __sym3 = __pop_Variant50(__symbols); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym5.2; let __nt = super::__action1758::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); @@ -23175,7 +23175,7 @@ mod __parse__Top { let __sym3 = __pop_Variant98(__symbols); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym5.2; let __nt = super::__action1761::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); @@ -23197,7 +23197,7 @@ mod __parse__Top { let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym4.2; let __nt = super::__action1762::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4); @@ -24028,122 +24028,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Constant = int => ActionFn(243); - let __sym0 = __pop_Variant4(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action243::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant57(__nt), __end)); - (1, 116) - } - pub(crate) fn __reduce320< - >( - source_code: &str, - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Constant = float => ActionFn(244); - let __sym0 = __pop_Variant2(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action244::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant57(__nt), __end)); - (1, 116) - } - pub(crate) fn __reduce321< - >( - source_code: &str, - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Constant = complex => ActionFn(245); - let __sym0 = __pop_Variant1(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action245::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant57(__nt), __end)); - (1, 116) - } - pub(crate) fn __reduce322< - >( - source_code: &str, - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ConstantAtom = Constant => ActionFn(1301); - let __sym0 = __pop_Variant57(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action1301::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 117) - } - pub(crate) fn __reduce323< - >( - source_code: &str, - 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_Variant15(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action112::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 118) - } - pub(crate) fn __reduce324< - >( - source_code: &str, - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // ConstantExpr = "-", ConstantAtom => ActionFn(1302); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant15(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action1302::<>(source_code, mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (2, 118) - } - pub(crate) fn __reduce325< - >( - source_code: &str, - mode: Mode, - __lookahead_start: Option<&TextSize>, - __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, - _: core::marker::PhantomData<()>, - ) -> (usize, usize) - { - // Decorator = "@", NamedExpressionTest, "\n" => ActionFn(1303); + // Decorator = "@", NamedExpressionTest, "\n" => ActionFn(1301); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant15(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1303::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant58(__nt), __end)); - (3, 119) + let __nt = super::__action1301::<>(source_code, mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant57(__nt), __end)); + (3, 116) } - pub(crate) fn __reduce326< + pub(crate) fn __reduce320< >( source_code: &str, mode: Mode, @@ -24156,10 +24052,10 @@ mod __parse__Top { 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::<>(source_code, mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant59(__nt), __end)); - (0, 120) + __symbols.push((__start, __Symbol::Variant58(__nt), __end)); + (0, 117) } - pub(crate) fn __reduce327< + pub(crate) fn __reduce321< >( source_code: &str, mode: Mode, @@ -24169,14 +24065,14 @@ mod __parse__Top { ) -> (usize, usize) { // Decorator* = Decorator+ => ActionFn(307); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action307::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant59(__nt), __end)); - (1, 120) + __symbols.push((__start, __Symbol::Variant58(__nt), __end)); + (1, 117) } - pub(crate) fn __reduce328< + pub(crate) fn __reduce322< >( source_code: &str, mode: Mode, @@ -24186,14 +24082,14 @@ mod __parse__Top { ) -> (usize, usize) { // Decorator+ = Decorator => ActionFn(435); - let __sym0 = __pop_Variant58(__symbols); + let __sym0 = __pop_Variant57(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action435::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant59(__nt), __end)); - (1, 121) + __symbols.push((__start, __Symbol::Variant58(__nt), __end)); + (1, 118) } - pub(crate) fn __reduce329< + pub(crate) fn __reduce323< >( source_code: &str, mode: Mode, @@ -24204,15 +24100,15 @@ mod __parse__Top { { // Decorator+ = Decorator+, Decorator => ActionFn(436); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant58(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym1 = __pop_Variant57(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action436::<>(source_code, mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant59(__nt), __end)); - (2, 121) + __symbols.push((__start, __Symbol::Variant58(__nt), __end)); + (2, 118) } - pub(crate) fn __reduce330< + pub(crate) fn __reduce324< >( source_code: &str, mode: Mode, @@ -24221,17 +24117,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DelStatement = "del", ExpressionList2 => ActionFn(1304); + // DelStatement = "del", ExpressionList2 => ActionFn(1302); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant33(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1304::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1302::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (2, 122) + (2, 119) } - pub(crate) fn __reduce331< + pub(crate) fn __reduce325< >( source_code: &str, mode: Mode, @@ -24241,14 +24137,14 @@ mod __parse__Top { ) -> (usize, usize) { // DictElement = DictEntry => ActionFn(225); - let __sym0 = __pop_Variant61(__symbols); + let __sym0 = __pop_Variant60(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action225::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant60(__nt), __end)); - (1, 123) + __symbols.push((__start, __Symbol::Variant59(__nt), __end)); + (1, 120) } - pub(crate) fn __reduce332< + pub(crate) fn __reduce326< >( source_code: &str, mode: Mode, @@ -24264,10 +24160,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action226::<>(source_code, mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant60(__nt), __end)); - (2, 123) + __symbols.push((__start, __Symbol::Variant59(__nt), __end)); + (2, 120) } - pub(crate) fn __reduce333< + pub(crate) fn __reduce327< >( source_code: &str, mode: Mode, @@ -24284,10 +24180,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym2.2; let __nt = super::__action224::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant61(__nt), __end)); - (3, 124) + __symbols.push((__start, __Symbol::Variant60(__nt), __end)); + (3, 121) } - pub(crate) fn __reduce334< + pub(crate) fn __reduce328< >( source_code: &str, mode: Mode, @@ -24299,14 +24195,14 @@ mod __parse__Top { // DictLiteralValues = OneOrMore, "," => ActionFn(612); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant62(__symbols); + let __sym0 = __pop_Variant61(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action612::<>(source_code, mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant62(__nt), __end)); - (2, 125) + __symbols.push((__start, __Symbol::Variant61(__nt), __end)); + (2, 122) } - pub(crate) fn __reduce335< + pub(crate) fn __reduce329< >( source_code: &str, mode: Mode, @@ -24316,14 +24212,14 @@ mod __parse__Top { ) -> (usize, usize) { // DictLiteralValues = OneOrMore => ActionFn(613); - let __sym0 = __pop_Variant62(__symbols); + let __sym0 = __pop_Variant61(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action613::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant62(__nt), __end)); - (1, 125) + __symbols.push((__start, __Symbol::Variant61(__nt), __end)); + (1, 122) } - pub(crate) fn __reduce336< + pub(crate) fn __reduce330< >( source_code: &str, mode: Mode, @@ -24333,14 +24229,14 @@ mod __parse__Top { ) -> (usize, usize) { // DictLiteralValues? = DictLiteralValues => ActionFn(564); - let __sym0 = __pop_Variant62(__symbols); + let __sym0 = __pop_Variant61(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action564::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant63(__nt), __end)); - (1, 126) + __symbols.push((__start, __Symbol::Variant62(__nt), __end)); + (1, 123) } - pub(crate) fn __reduce337< + pub(crate) fn __reduce331< >( source_code: &str, mode: Mode, @@ -24353,10 +24249,10 @@ mod __parse__Top { let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); let __nt = super::__action565::<>(source_code, mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant63(__nt), __end)); - (0, 126) + __symbols.push((__start, __Symbol::Variant62(__nt), __end)); + (0, 123) } - pub(crate) fn __reduce338< + pub(crate) fn __reduce332< >( source_code: &str, mode: Mode, @@ -24365,15 +24261,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DottedName = name => ActionFn(1305); + // DottedName = name => ActionFn(1303); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1305::<>(source_code, mode, __sym0); + let __nt = super::__action1303::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 127) + (1, 124) } - pub(crate) fn __reduce339< + pub(crate) fn __reduce333< >( source_code: &str, mode: Mode, @@ -24382,17 +24278,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DottedName = name, ("." Identifier)+ => ActionFn(1306); + // DottedName = name, ("." Identifier)+ => ActionFn(1304); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant21(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1306::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1304::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (2, 127) + (2, 124) } - pub(crate) fn __reduce340< + pub(crate) fn __reduce334< >( source_code: &str, mode: Mode, @@ -24401,18 +24297,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DoubleStarTypedParameter = Identifier, ":", Test<"all"> => ActionFn(1307); + // DoubleStarTypedParameter = Identifier, ":", Test<"all"> => ActionFn(1305); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant15(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant23(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1307::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant64(__nt), __end)); - (3, 128) + let __nt = super::__action1305::<>(source_code, mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant63(__nt), __end)); + (3, 125) } - pub(crate) fn __reduce341< + pub(crate) fn __reduce335< >( source_code: &str, mode: Mode, @@ -24421,15 +24317,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // DoubleStarTypedParameter = Identifier => ActionFn(1308); + // DoubleStarTypedParameter = Identifier => ActionFn(1306); let __sym0 = __pop_Variant23(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1308::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant64(__nt), __end)); - (1, 128) + let __nt = super::__action1306::<>(source_code, mode, __sym0); + __symbols.push((__start, __Symbol::Variant63(__nt), __end)); + (1, 125) } - pub(crate) fn __reduce342< + pub(crate) fn __reduce336< >( source_code: &str, mode: Mode, @@ -24439,14 +24335,14 @@ mod __parse__Top { ) -> (usize, usize) { // DoubleStarTypedParameter? = DoubleStarTypedParameter => ActionFn(498); - let __sym0 = __pop_Variant64(__symbols); + let __sym0 = __pop_Variant63(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action498::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant65(__nt), __end)); - (1, 129) + __symbols.push((__start, __Symbol::Variant64(__nt), __end)); + (1, 126) } - pub(crate) fn __reduce343< + pub(crate) fn __reduce337< >( source_code: &str, mode: Mode, @@ -24459,10 +24355,10 @@ mod __parse__Top { let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); let __nt = super::__action499::<>(source_code, mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant65(__nt), __end)); - (0, 129) + __symbols.push((__start, __Symbol::Variant64(__nt), __end)); + (0, 126) } - pub(crate) fn __reduce344< + pub(crate) fn __reduce338< >( source_code: &str, mode: Mode, @@ -24480,10 +24376,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym3.2; let __nt = super::__action1727::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant66(__nt), __end)); - (4, 130) + __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + (4, 127) } - pub(crate) fn __reduce345< + pub(crate) fn __reduce339< >( source_code: &str, mode: Mode, @@ -24500,10 +24396,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym2.2; let __nt = super::__action1728::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant66(__nt), __end)); - (3, 130) + __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + (3, 127) } - pub(crate) fn __reduce346< + pub(crate) fn __reduce340< >( source_code: &str, mode: Mode, @@ -24523,10 +24419,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym5.2; let __nt = super::__action1203::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant66(__nt), __end)); - (6, 130) + __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + (6, 127) } - pub(crate) fn __reduce347< + pub(crate) fn __reduce341< >( source_code: &str, mode: Mode, @@ -24536,14 +24432,14 @@ mod __parse__Top { ) -> (usize, usize) { // ExceptClause+ = ExceptClause => ActionFn(330); - let __sym0 = __pop_Variant66(__symbols); + let __sym0 = __pop_Variant65(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action330::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant67(__nt), __end)); - (1, 131) + __symbols.push((__start, __Symbol::Variant66(__nt), __end)); + (1, 128) } - pub(crate) fn __reduce348< + pub(crate) fn __reduce342< >( source_code: &str, mode: Mode, @@ -24554,15 +24450,15 @@ mod __parse__Top { { // ExceptClause+ = ExceptClause+, ExceptClause => ActionFn(331); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant66(__symbols); - let __sym0 = __pop_Variant67(__symbols); + let __sym1 = __pop_Variant65(__symbols); + let __sym0 = __pop_Variant66(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action331::<>(source_code, mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant67(__nt), __end)); - (2, 131) + __symbols.push((__start, __Symbol::Variant66(__nt), __end)); + (2, 128) } - pub(crate) fn __reduce349< + pub(crate) fn __reduce343< >( source_code: &str, mode: Mode, @@ -24571,7 +24467,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ExceptStarClause = "except", "*", Test<"all">, ":", Suite => ActionFn(795); + // ExceptStarClause = "except", "*", Test<"all">, ":", Suite => ActionFn(793); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant25(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -24580,11 +24476,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action795::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant66(__nt), __end)); - (5, 132) + let __nt = super::__action793::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + (5, 129) } - pub(crate) fn __reduce350< + pub(crate) fn __reduce344< >( source_code: &str, mode: Mode, @@ -24605,10 +24501,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym6.2; let __nt = super::__action1204::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); - __symbols.push((__start, __Symbol::Variant66(__nt), __end)); - (7, 132) + __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + (7, 129) } - pub(crate) fn __reduce351< + pub(crate) fn __reduce345< >( source_code: &str, mode: Mode, @@ -24618,14 +24514,14 @@ mod __parse__Top { ) -> (usize, usize) { // ExceptStarClause+ = ExceptStarClause => ActionFn(325); - let __sym0 = __pop_Variant66(__symbols); + let __sym0 = __pop_Variant65(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action325::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant67(__nt), __end)); - (1, 133) + __symbols.push((__start, __Symbol::Variant66(__nt), __end)); + (1, 130) } - pub(crate) fn __reduce352< + pub(crate) fn __reduce346< >( source_code: &str, mode: Mode, @@ -24636,15 +24532,15 @@ mod __parse__Top { { // ExceptStarClause+ = ExceptStarClause+, ExceptStarClause => ActionFn(326); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant66(__symbols); - let __sym0 = __pop_Variant67(__symbols); + let __sym1 = __pop_Variant65(__symbols); + let __sym0 = __pop_Variant66(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action326::<>(source_code, mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant67(__nt), __end)); - (2, 133) + __symbols.push((__start, __Symbol::Variant66(__nt), __end)); + (2, 130) } - pub(crate) fn __reduce353< + pub(crate) fn __reduce347< >( source_code: &str, mode: Mode, @@ -24653,18 +24549,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Expression<"all"> = Expression<"all">, "|", XorExpression<"all"> => ActionFn(1309); + // Expression<"all"> = Expression<"all">, "|", XorExpression<"all"> => ActionFn(1307); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant15(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1309::<>(source_code, mode, __sym0, __sym1, __sym2); + let __nt = super::__action1307::<>(source_code, mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (3, 134) + (3, 131) } - pub(crate) fn __reduce354< + pub(crate) fn __reduce348< >( source_code: &str, mode: Mode, @@ -24679,9 +24575,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action372::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 134) + (1, 131) } - pub(crate) fn __reduce355< + pub(crate) fn __reduce349< >( source_code: &str, mode: Mode, @@ -24690,18 +24586,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Expression<"no-withitems"> = Expression<"all">, "|", XorExpression<"all"> => ActionFn(1310); + // Expression<"no-withitems"> = Expression<"all">, "|", XorExpression<"all"> => ActionFn(1308); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant15(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1310::<>(source_code, mode, __sym0, __sym1, __sym2); + let __nt = super::__action1308::<>(source_code, mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (3, 135) + (3, 132) } - pub(crate) fn __reduce356< + pub(crate) fn __reduce350< >( source_code: &str, mode: Mode, @@ -24716,9 +24612,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action526::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 135) + (1, 132) } - pub(crate) fn __reduce357< + pub(crate) fn __reduce351< >( source_code: &str, mode: Mode, @@ -24733,9 +24629,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action230::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 136) + (1, 133) } - pub(crate) fn __reduce358< + pub(crate) fn __reduce352< >( source_code: &str, mode: Mode, @@ -24752,9 +24648,9 @@ mod __parse__Top { let __end = __sym1.2; let __nt = super::__action614::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant33(__nt), __end)); - (2, 137) + (2, 134) } - pub(crate) fn __reduce359< + pub(crate) fn __reduce353< >( source_code: &str, mode: Mode, @@ -24769,9 +24665,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action615::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant33(__nt), __end)); - (1, 137) + (1, 134) } - pub(crate) fn __reduce360< + pub(crate) fn __reduce354< >( source_code: &str, mode: Mode, @@ -24786,9 +24682,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action236::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 138) + (1, 135) } - pub(crate) fn __reduce361< + pub(crate) fn __reduce355< >( source_code: &str, mode: Mode, @@ -24803,9 +24699,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action228::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 139) + (1, 136) } - pub(crate) fn __reduce362< + pub(crate) fn __reduce356< >( source_code: &str, mode: Mode, @@ -24820,9 +24716,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action229::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 139) + (1, 136) } - pub(crate) fn __reduce363< + pub(crate) fn __reduce357< >( source_code: &str, mode: Mode, @@ -24837,9 +24733,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action1752::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (1, 140) + (1, 137) } - pub(crate) fn __reduce364< + pub(crate) fn __reduce358< >( source_code: &str, mode: Mode, @@ -24856,9 +24752,9 @@ mod __parse__Top { let __end = __sym1.2; let __nt = super::__action1753::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (2, 140) + (2, 137) } - pub(crate) fn __reduce365< + pub(crate) fn __reduce359< >( source_code: &str, mode: Mode, @@ -24876,9 +24772,9 @@ mod __parse__Top { let __end = __sym2.2; let __nt = super::__action1754::<>(source_code, mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (3, 140) + (3, 137) } - pub(crate) fn __reduce366< + pub(crate) fn __reduce360< >( source_code: &str, mode: Mode, @@ -24897,9 +24793,9 @@ mod __parse__Top { let __end = __sym3.2; let __nt = super::__action1531::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (4, 140) + (4, 137) } - pub(crate) fn __reduce367< + pub(crate) fn __reduce361< >( source_code: &str, mode: Mode, @@ -24917,9 +24813,9 @@ mod __parse__Top { let __end = __sym2.2; let __nt = super::__action1532::<>(source_code, mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (3, 140) + (3, 137) } - pub(crate) fn __reduce369< + pub(crate) fn __reduce363< >( source_code: &str, mode: Mode, @@ -24929,14 +24825,14 @@ mod __parse__Top { ) -> (usize, usize) { // FStringConversion? = FStringConversion => ActionFn(266); - let __sym0 = __pop_Variant68(__symbols); + let __sym0 = __pop_Variant67(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action266::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (1, 142) + __symbols.push((__start, __Symbol::Variant68(__nt), __end)); + (1, 139) } - pub(crate) fn __reduce370< + pub(crate) fn __reduce364< >( source_code: &str, mode: Mode, @@ -24949,10 +24845,10 @@ mod __parse__Top { 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::<>(source_code, mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant69(__nt), __end)); - (0, 142) + __symbols.push((__start, __Symbol::Variant68(__nt), __end)); + (0, 139) } - pub(crate) fn __reduce371< + pub(crate) fn __reduce365< >( source_code: &str, mode: Mode, @@ -24968,10 +24864,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action1585::<>(source_code, mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant70(__nt), __end)); - (2, 143) + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (2, 140) } - pub(crate) fn __reduce372< + pub(crate) fn __reduce366< >( source_code: &str, mode: Mode, @@ -24983,15 +24879,15 @@ mod __parse__Top { // FStringExpr = FStringStart, FStringMiddlePattern+, FStringEnd => ActionFn(1586); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant71(__symbols); + let __sym1 = __pop_Variant70(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; let __nt = super::__action1586::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant70(__nt), __end)); - (3, 143) + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); + (3, 140) } - pub(crate) fn __reduce373< + pub(crate) fn __reduce367< >( source_code: &str, mode: Mode, @@ -25005,9 +24901,9 @@ mod __parse__Top { let __end = __start.clone(); let __nt = super::__action1587::<>(source_code, mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (0, 144) + (0, 141) } - pub(crate) fn __reduce374< + pub(crate) fn __reduce368< >( source_code: &str, mode: Mode, @@ -25017,14 +24913,14 @@ mod __parse__Top { ) -> (usize, usize) { // FStringFormatSpec = FStringMiddlePattern+ => ActionFn(1588); - let __sym0 = __pop_Variant71(__symbols); + let __sym0 = __pop_Variant70(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action1588::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (1, 144) + (1, 141) } - pub(crate) fn __reduce375< + pub(crate) fn __reduce369< >( source_code: &str, mode: Mode, @@ -25041,9 +24937,9 @@ mod __parse__Top { let __end = __sym1.2; let __nt = super::__action219::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (2, 145) + (2, 142) } - pub(crate) fn __reduce376< + pub(crate) fn __reduce370< >( source_code: &str, mode: Mode, @@ -25058,9 +24954,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action264::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (1, 146) + (1, 143) } - pub(crate) fn __reduce377< + pub(crate) fn __reduce371< >( source_code: &str, mode: Mode, @@ -25074,9 +24970,9 @@ mod __parse__Top { let __end = __start.clone(); let __nt = super::__action265::<>(source_code, mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant45(__nt), __end)); - (0, 146) + (0, 143) } - pub(crate) fn __reduce378< + pub(crate) fn __reduce372< >( source_code: &str, mode: Mode, @@ -25091,9 +24987,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action216::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (1, 147) + (1, 144) } - pub(crate) fn __reduce380< + pub(crate) fn __reduce374< >( source_code: &str, mode: Mode, @@ -25106,10 +25002,10 @@ mod __parse__Top { let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); let __nt = super::__action270::<>(source_code, mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant71(__nt), __end)); - (0, 148) + __symbols.push((__start, __Symbol::Variant70(__nt), __end)); + (0, 145) } - pub(crate) fn __reduce381< + pub(crate) fn __reduce375< >( source_code: &str, mode: Mode, @@ -25119,14 +25015,14 @@ mod __parse__Top { ) -> (usize, usize) { // FStringMiddlePattern* = FStringMiddlePattern+ => ActionFn(271); - let __sym0 = __pop_Variant71(__symbols); + let __sym0 = __pop_Variant70(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action271::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant71(__nt), __end)); - (1, 148) + __symbols.push((__start, __Symbol::Variant70(__nt), __end)); + (1, 145) } - pub(crate) fn __reduce382< + pub(crate) fn __reduce376< >( source_code: &str, mode: Mode, @@ -25140,10 +25036,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action453::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant71(__nt), __end)); - (1, 149) + __symbols.push((__start, __Symbol::Variant70(__nt), __end)); + (1, 146) } - pub(crate) fn __reduce383< + pub(crate) fn __reduce377< >( source_code: &str, mode: Mode, @@ -25155,14 +25051,14 @@ mod __parse__Top { // FStringMiddlePattern+ = FStringMiddlePattern+, FStringMiddlePattern => ActionFn(454); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant44(__symbols); - let __sym0 = __pop_Variant71(__symbols); + let __sym0 = __pop_Variant70(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action454::<>(source_code, mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant71(__nt), __end)); - (2, 149) + __symbols.push((__start, __Symbol::Variant70(__nt), __end)); + (2, 146) } - pub(crate) fn __reduce392< + pub(crate) fn __reduce386< >( source_code: &str, mode: Mode, @@ -25171,17 +25067,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Factor<"all"> = UnaryOp, Factor<"all"> => ActionFn(1318); + // Factor<"all"> = UnaryOp, Factor<"all"> => ActionFn(1316); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant15(__symbols); let __sym0 = __pop_Variant100(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1318::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1316::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (2, 151) + (2, 148) } - pub(crate) fn __reduce393< + pub(crate) fn __reduce387< >( source_code: &str, mode: Mode, @@ -25196,9 +25092,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action528::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 151) + (1, 148) } - pub(crate) fn __reduce394< + pub(crate) fn __reduce388< >( source_code: &str, mode: Mode, @@ -25207,17 +25103,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Factor<"no-withitems"> = UnaryOp, Factor<"all"> => ActionFn(1319); + // Factor<"no-withitems"> = UnaryOp, Factor<"all"> => ActionFn(1317); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant15(__symbols); let __sym0 = __pop_Variant100(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1319::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1317::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (2, 152) + (2, 149) } - pub(crate) fn __reduce395< + pub(crate) fn __reduce389< >( source_code: &str, mode: Mode, @@ -25232,9 +25128,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action577::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 152) + (1, 149) } - pub(crate) fn __reduce396< + pub(crate) fn __reduce390< >( source_code: &str, mode: Mode, @@ -25243,15 +25139,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FlowStatement = "break" => ActionFn(1320); + // FlowStatement = "break" => ActionFn(1318); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1320::<>(source_code, mode, __sym0); + let __nt = super::__action1318::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (1, 153) + (1, 150) } - pub(crate) fn __reduce397< + pub(crate) fn __reduce391< >( source_code: &str, mode: Mode, @@ -25260,15 +25156,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FlowStatement = "continue" => ActionFn(1321); + // FlowStatement = "continue" => ActionFn(1319); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1321::<>(source_code, mode, __sym0); + let __nt = super::__action1319::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (1, 153) + (1, 150) } - pub(crate) fn __reduce398< + pub(crate) fn __reduce392< >( source_code: &str, mode: Mode, @@ -25285,9 +25181,9 @@ mod __parse__Top { let __end = __sym1.2; let __nt = super::__action1748::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (2, 153) + (2, 150) } - pub(crate) fn __reduce399< + pub(crate) fn __reduce393< >( source_code: &str, mode: Mode, @@ -25302,9 +25198,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action1749::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (1, 153) + (1, 150) } - pub(crate) fn __reduce400< + pub(crate) fn __reduce394< >( source_code: &str, mode: Mode, @@ -25313,15 +25209,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FlowStatement = YieldExpr => ActionFn(1323); + // FlowStatement = YieldExpr => ActionFn(1321); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1323::<>(source_code, mode, __sym0); + let __nt = super::__action1321::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (1, 153) + (1, 150) } - pub(crate) fn __reduce401< + pub(crate) fn __reduce395< >( source_code: &str, mode: Mode, @@ -25336,9 +25232,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action57::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (1, 153) + (1, 150) } - pub(crate) fn __reduce402< + pub(crate) fn __reduce396< >( source_code: &str, mode: Mode, @@ -25363,9 +25259,9 @@ mod __parse__Top { let __end = __sym9.2; let __nt = super::__action1739::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (10, 154) + (10, 151) } - pub(crate) fn __reduce403< + pub(crate) fn __reduce397< >( source_code: &str, mode: Mode, @@ -25387,9 +25283,9 @@ mod __parse__Top { let __end = __sym6.2; let __nt = super::__action1740::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (7, 154) + (7, 151) } - pub(crate) fn __reduce404< + pub(crate) fn __reduce398< >( source_code: &str, mode: Mode, @@ -25413,9 +25309,9 @@ mod __parse__Top { let __end = __sym8.2; let __nt = super::__action1741::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (9, 154) + (9, 151) } - pub(crate) fn __reduce405< + pub(crate) fn __reduce399< >( source_code: &str, mode: Mode, @@ -25436,9 +25332,9 @@ mod __parse__Top { let __end = __sym5.2; let __nt = super::__action1742::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (6, 154) + (6, 151) } - pub(crate) fn __reduce406< + pub(crate) fn __reduce400< >( source_code: &str, mode: Mode, @@ -25462,9 +25358,9 @@ mod __parse__Top { let __end = __sym8.2; let __nt = super::__action1763::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (9, 155) + (9, 152) } - pub(crate) fn __reduce407< + pub(crate) fn __reduce401< >( source_code: &str, mode: Mode, @@ -25487,9 +25383,9 @@ mod __parse__Top { let __end = __sym7.2; let __nt = super::__action1764::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (8, 155) + (8, 152) } - pub(crate) fn __reduce408< + pub(crate) fn __reduce402< >( source_code: &str, mode: Mode, @@ -25509,14 +25405,14 @@ mod __parse__Top { let __sym3 = __pop_Variant23(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym9.2; let __nt = super::__action1765::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (10, 155) + (10, 152) } - pub(crate) fn __reduce409< + pub(crate) fn __reduce403< >( source_code: &str, mode: Mode, @@ -25535,14 +25431,14 @@ mod __parse__Top { let __sym3 = __pop_Variant23(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym8.2; let __nt = super::__action1766::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (9, 155) + (9, 152) } - pub(crate) fn __reduce410< + pub(crate) fn __reduce404< >( source_code: &str, mode: Mode, @@ -25564,9 +25460,9 @@ mod __parse__Top { let __end = __sym6.2; let __nt = super::__action1767::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (7, 155) + (7, 152) } - pub(crate) fn __reduce411< + pub(crate) fn __reduce405< >( source_code: &str, mode: Mode, @@ -25587,9 +25483,9 @@ mod __parse__Top { let __end = __sym5.2; let __nt = super::__action1768::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (6, 155) + (6, 152) } - pub(crate) fn __reduce412< + pub(crate) fn __reduce406< >( source_code: &str, mode: Mode, @@ -25607,14 +25503,14 @@ mod __parse__Top { let __sym3 = __pop_Variant23(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym7.2; let __nt = super::__action1769::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (8, 155) + (8, 152) } - pub(crate) fn __reduce413< + pub(crate) fn __reduce407< >( source_code: &str, mode: Mode, @@ -25631,14 +25527,14 @@ mod __parse__Top { let __sym3 = __pop_Variant23(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym6.2; let __nt = super::__action1770::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (7, 155) + (7, 152) } - pub(crate) fn __reduce414< + pub(crate) fn __reduce408< >( source_code: &str, mode: Mode, @@ -25661,9 +25557,9 @@ mod __parse__Top { let __end = __sym7.2; let __nt = super::__action1771::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (8, 155) + (8, 152) } - pub(crate) fn __reduce415< + pub(crate) fn __reduce409< >( source_code: &str, mode: Mode, @@ -25685,9 +25581,9 @@ mod __parse__Top { let __end = __sym6.2; let __nt = super::__action1772::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (7, 155) + (7, 152) } - pub(crate) fn __reduce416< + pub(crate) fn __reduce410< >( source_code: &str, mode: Mode, @@ -25706,14 +25602,14 @@ mod __parse__Top { let __sym3 = __pop_Variant98(__symbols); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym8.2; let __nt = super::__action1773::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (9, 155) + (9, 152) } - pub(crate) fn __reduce417< + pub(crate) fn __reduce411< >( source_code: &str, mode: Mode, @@ -25731,14 +25627,14 @@ mod __parse__Top { let __sym3 = __pop_Variant46(__symbols); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym7.2; let __nt = super::__action1774::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (8, 155) + (8, 152) } - pub(crate) fn __reduce418< + pub(crate) fn __reduce412< >( source_code: &str, mode: Mode, @@ -25759,9 +25655,9 @@ mod __parse__Top { let __end = __sym5.2; let __nt = super::__action1775::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (6, 155) + (6, 152) } - pub(crate) fn __reduce419< + pub(crate) fn __reduce413< >( source_code: &str, mode: Mode, @@ -25781,9 +25677,9 @@ mod __parse__Top { let __end = __sym4.2; let __nt = super::__action1776::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (5, 155) + (5, 152) } - pub(crate) fn __reduce420< + pub(crate) fn __reduce414< >( source_code: &str, mode: Mode, @@ -25800,14 +25696,14 @@ mod __parse__Top { let __sym3 = __pop_Variant98(__symbols); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym6.2; let __nt = super::__action1777::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (7, 155) + (7, 152) } - pub(crate) fn __reduce421< + pub(crate) fn __reduce415< >( source_code: &str, mode: Mode, @@ -25823,14 +25719,14 @@ mod __parse__Top { let __sym3 = __pop_Variant46(__symbols); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant59(__symbols); + let __sym0 = __pop_Variant58(__symbols); let __start = __sym0.0; let __end = __sym5.2; let __nt = super::__action1778::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (6, 155) + (6, 152) } - pub(crate) fn __reduce422< + pub(crate) fn __reduce416< >( source_code: &str, mode: Mode, @@ -25847,9 +25743,9 @@ mod __parse__Top { let __end = __sym1.2; let __nt = super::__action1549::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant31(__nt), __end)); - (2, 156) + (2, 153) } - pub(crate) fn __reduce423< + pub(crate) fn __reduce417< >( source_code: &str, mode: Mode, @@ -25864,9 +25760,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action1550::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant31(__nt), __end)); - (1, 156) + (1, 153) } - pub(crate) fn __reduce424< + pub(crate) fn __reduce418< >( source_code: &str, mode: Mode, @@ -25875,18 +25771,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FunctionArgument = Identifier, "=", Test<"all"> => ActionFn(1325); + // FunctionArgument = Identifier, "=", Test<"all"> => ActionFn(1323); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant15(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant23(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1325::<>(source_code, mode, __sym0, __sym1, __sym2); + let __nt = super::__action1323::<>(source_code, mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant31(__nt), __end)); - (3, 156) + (3, 153) } - pub(crate) fn __reduce425< + pub(crate) fn __reduce419< >( source_code: &str, mode: Mode, @@ -25895,17 +25791,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FunctionArgument = "*", Test<"all"> => ActionFn(1326); + // FunctionArgument = "*", Test<"all"> => ActionFn(1324); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant15(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1326::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1324::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant31(__nt), __end)); - (2, 156) + (2, 153) } - pub(crate) fn __reduce426< + pub(crate) fn __reduce420< >( source_code: &str, mode: Mode, @@ -25914,17 +25810,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // FunctionArgument = "**", Test<"all"> => ActionFn(1327); + // FunctionArgument = "**", Test<"all"> => ActionFn(1325); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant15(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1327::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1325::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant31(__nt), __end)); - (2, 156) + (2, 153) } - pub(crate) fn __reduce427< + pub(crate) fn __reduce421< >( source_code: &str, mode: Mode, @@ -25938,10 +25834,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action464::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant72(__nt), __end)); - (1, 157) + __symbols.push((__start, __Symbol::Variant71(__nt), __end)); + (1, 154) } - pub(crate) fn __reduce428< + pub(crate) fn __reduce422< >( source_code: &str, mode: Mode, @@ -25954,10 +25850,10 @@ mod __parse__Top { 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::<>(source_code, mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant72(__nt), __end)); - (0, 157) + __symbols.push((__start, __Symbol::Variant71(__nt), __end)); + (0, 154) } - pub(crate) fn __reduce429< + pub(crate) fn __reduce423< >( source_code: &str, mode: Mode, @@ -25966,17 +25862,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // GenericList = OneOrMore, "," => ActionFn(1328); + // GenericList = OneOrMore, "," => ActionFn(1326); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant33(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1328::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1326::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (2, 158) + (2, 155) } - pub(crate) fn __reduce430< + pub(crate) fn __reduce424< >( source_code: &str, mode: Mode, @@ -25985,15 +25881,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // GenericList = OneOrMore => ActionFn(1329); + // GenericList = OneOrMore => ActionFn(1327); let __sym0 = __pop_Variant33(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1329::<>(source_code, mode, __sym0); + let __nt = super::__action1327::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 158) + (1, 155) } - pub(crate) fn __reduce431< + pub(crate) fn __reduce425< >( source_code: &str, mode: Mode, @@ -26002,17 +25898,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // GenericList = OneOrMore, "," => ActionFn(1330); + // GenericList = OneOrMore, "," => ActionFn(1328); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant33(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1330::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1328::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (2, 159) + (2, 156) } - pub(crate) fn __reduce432< + pub(crate) fn __reduce426< >( source_code: &str, mode: Mode, @@ -26021,15 +25917,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // GenericList = OneOrMore => ActionFn(1331); + // GenericList = OneOrMore => ActionFn(1329); let __sym0 = __pop_Variant33(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1331::<>(source_code, mode, __sym0); + let __nt = super::__action1329::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 159) + (1, 156) } - pub(crate) fn __reduce433< + pub(crate) fn __reduce427< >( source_code: &str, mode: Mode, @@ -26038,17 +25934,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // GlobalStatement = "global", OneOrMore => ActionFn(1332); + // GlobalStatement = "global", OneOrMore => ActionFn(1330); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant82(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1332::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1330::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (2, 160) + (2, 157) } - pub(crate) fn __reduce434< + pub(crate) fn __reduce428< >( source_code: &str, mode: Mode, @@ -26065,9 +25961,9 @@ mod __parse__Top { let __end = __sym1.2; let __nt = super::__action89::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (2, 161) + (2, 158) } - pub(crate) fn __reduce435< + pub(crate) fn __reduce429< >( source_code: &str, mode: Mode, @@ -26076,15 +25972,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Identifier = name => ActionFn(1333); + // Identifier = name => ActionFn(1331); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1333::<>(source_code, mode, __sym0); + let __nt = super::__action1331::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); - (1, 162) + (1, 159) } - pub(crate) fn __reduce436< + pub(crate) fn __reduce430< >( source_code: &str, mode: Mode, @@ -26106,9 +26002,9 @@ mod __parse__Top { let __end = __sym6.2; let __nt = super::__action1152::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (7, 163) + (7, 160) } - pub(crate) fn __reduce437< + pub(crate) fn __reduce431< >( source_code: &str, mode: Mode, @@ -26127,9 +26023,9 @@ mod __parse__Top { let __end = __sym3.2; let __nt = super::__action1153::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (4, 163) + (4, 160) } - pub(crate) fn __reduce438< + pub(crate) fn __reduce432< >( source_code: &str, mode: Mode, @@ -26152,9 +26048,9 @@ mod __parse__Top { let __end = __sym7.2; let __nt = super::__action1154::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (8, 163) + (8, 160) } - pub(crate) fn __reduce439< + pub(crate) fn __reduce433< >( source_code: &str, mode: Mode, @@ -26174,9 +26070,9 @@ mod __parse__Top { let __end = __sym4.2; let __nt = super::__action1155::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (5, 163) + (5, 160) } - pub(crate) fn __reduce440< + pub(crate) fn __reduce434< >( source_code: &str, mode: Mode, @@ -26185,18 +26081,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ImportAsAlias = DottedName, "as", Identifier => ActionFn(1334); + // ImportAsAlias = DottedName, "as", Identifier => ActionFn(1332); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant23(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1334::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant73(__nt), __end)); - (3, 164) + let __nt = super::__action1332::<>(source_code, mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant72(__nt), __end)); + (3, 161) } - pub(crate) fn __reduce441< + pub(crate) fn __reduce435< >( source_code: &str, mode: Mode, @@ -26205,15 +26101,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ImportAsAlias = DottedName => ActionFn(1335); + // ImportAsAlias = DottedName => ActionFn(1333); let __sym0 = __pop_Variant23(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1335::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant73(__nt), __end)); - (1, 164) + let __nt = super::__action1333::<>(source_code, mode, __sym0); + __symbols.push((__start, __Symbol::Variant72(__nt), __end)); + (1, 161) } - pub(crate) fn __reduce442< + pub(crate) fn __reduce436< >( source_code: &str, mode: Mode, @@ -26222,18 +26118,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ImportAsAlias = Identifier, "as", Identifier => ActionFn(1336); + // ImportAsAlias = Identifier, "as", Identifier => ActionFn(1334); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant23(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1336::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant73(__nt), __end)); - (3, 165) + let __nt = super::__action1334::<>(source_code, mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant72(__nt), __end)); + (3, 162) } - pub(crate) fn __reduce443< + pub(crate) fn __reduce437< >( source_code: &str, mode: Mode, @@ -26242,15 +26138,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ImportAsAlias = Identifier => ActionFn(1337); + // ImportAsAlias = Identifier => ActionFn(1335); let __sym0 = __pop_Variant23(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1337::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant73(__nt), __end)); - (1, 165) + let __nt = super::__action1335::<>(source_code, mode, __sym0); + __symbols.push((__start, __Symbol::Variant72(__nt), __end)); + (1, 162) } - pub(crate) fn __reduce444< + pub(crate) fn __reduce438< >( source_code: &str, mode: Mode, @@ -26259,15 +26155,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ImportAsNames = OneOrMore> => ActionFn(1338); - let __sym0 = __pop_Variant74(__symbols); + // ImportAsNames = OneOrMore> => ActionFn(1336); + let __sym0 = __pop_Variant73(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1338::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); - (1, 166) + let __nt = super::__action1336::<>(source_code, mode, __sym0); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); + (1, 163) } - pub(crate) fn __reduce445< + pub(crate) fn __reduce439< >( source_code: &str, mode: Mode, @@ -26276,19 +26172,19 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ImportAsNames = "(", OneOrMore>, ",", ")" => ActionFn(1339); + // ImportAsNames = "(", OneOrMore>, ",", ")" => ActionFn(1337); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant74(__symbols); + let __sym1 = __pop_Variant73(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1339::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); - (4, 166) + let __nt = super::__action1337::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); + (4, 163) } - pub(crate) fn __reduce446< + pub(crate) fn __reduce440< >( source_code: &str, mode: Mode, @@ -26297,18 +26193,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ImportAsNames = "(", OneOrMore>, ")" => ActionFn(1340); + // ImportAsNames = "(", OneOrMore>, ")" => ActionFn(1338); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant74(__symbols); + let __sym1 = __pop_Variant73(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1340::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); - (3, 166) + let __nt = super::__action1338::<>(source_code, mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); + (3, 163) } - pub(crate) fn __reduce447< + pub(crate) fn __reduce441< >( source_code: &str, mode: Mode, @@ -26317,15 +26213,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ImportAsNames = "*" => ActionFn(1341); + // ImportAsNames = "*" => ActionFn(1339); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1341::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); - (1, 166) + let __nt = super::__action1339::<>(source_code, mode, __sym0); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); + (1, 163) } - pub(crate) fn __reduce448< + pub(crate) fn __reduce442< >( source_code: &str, mode: Mode, @@ -26339,10 +26235,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action64::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant75(__nt), __end)); - (1, 167) + __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + (1, 164) } - pub(crate) fn __reduce449< + pub(crate) fn __reduce443< >( source_code: &str, mode: Mode, @@ -26356,10 +26252,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action65::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant75(__nt), __end)); - (1, 167) + __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + (1, 164) } - pub(crate) fn __reduce450< + pub(crate) fn __reduce444< >( source_code: &str, mode: Mode, @@ -26372,10 +26268,10 @@ mod __parse__Top { 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::<>(source_code, mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant76(__nt), __end)); - (0, 168) + __symbols.push((__start, __Symbol::Variant75(__nt), __end)); + (0, 165) } - pub(crate) fn __reduce451< + pub(crate) fn __reduce445< >( source_code: &str, mode: Mode, @@ -26385,14 +26281,14 @@ mod __parse__Top { ) -> (usize, usize) { // ImportDots* = ImportDots+ => ActionFn(389); - let __sym0 = __pop_Variant76(__symbols); + let __sym0 = __pop_Variant75(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action389::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant76(__nt), __end)); - (1, 168) + __symbols.push((__start, __Symbol::Variant75(__nt), __end)); + (1, 165) } - pub(crate) fn __reduce452< + pub(crate) fn __reduce446< >( source_code: &str, mode: Mode, @@ -26402,14 +26298,14 @@ mod __parse__Top { ) -> (usize, usize) { // ImportDots+ = ImportDots => ActionFn(386); - let __sym0 = __pop_Variant75(__symbols); + let __sym0 = __pop_Variant74(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action386::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant76(__nt), __end)); - (1, 169) + __symbols.push((__start, __Symbol::Variant75(__nt), __end)); + (1, 166) } - pub(crate) fn __reduce453< + pub(crate) fn __reduce447< >( source_code: &str, mode: Mode, @@ -26420,15 +26316,15 @@ mod __parse__Top { { // ImportDots+ = ImportDots+, ImportDots => ActionFn(387); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant75(__symbols); - let __sym0 = __pop_Variant76(__symbols); + let __sym1 = __pop_Variant74(__symbols); + let __sym0 = __pop_Variant75(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action387::<>(source_code, mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant76(__nt), __end)); - (2, 169) + __symbols.push((__start, __Symbol::Variant75(__nt), __end)); + (2, 166) } - pub(crate) fn __reduce454< + pub(crate) fn __reduce448< >( source_code: &str, mode: Mode, @@ -26442,10 +26338,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action1597::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant77(__nt), __end)); - (1, 170) + __symbols.push((__start, __Symbol::Variant76(__nt), __end)); + (1, 167) } - pub(crate) fn __reduce455< + pub(crate) fn __reduce449< >( source_code: &str, mode: Mode, @@ -26457,14 +26353,14 @@ mod __parse__Top { // ImportFromLocation = ImportDots+, DottedName => ActionFn(1598); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant23(__symbols); - let __sym0 = __pop_Variant76(__symbols); + let __sym0 = __pop_Variant75(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action1598::<>(source_code, mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant77(__nt), __end)); - (2, 170) + __symbols.push((__start, __Symbol::Variant76(__nt), __end)); + (2, 167) } - pub(crate) fn __reduce456< + pub(crate) fn __reduce450< >( source_code: &str, mode: Mode, @@ -26474,14 +26370,14 @@ mod __parse__Top { ) -> (usize, usize) { // ImportFromLocation = ImportDots+ => ActionFn(63); - let __sym0 = __pop_Variant76(__symbols); + let __sym0 = __pop_Variant75(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action63::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant77(__nt), __end)); - (1, 170) + __symbols.push((__start, __Symbol::Variant76(__nt), __end)); + (1, 167) } - pub(crate) fn __reduce457< + pub(crate) fn __reduce451< >( source_code: &str, mode: Mode, @@ -26490,17 +26386,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ImportStatement = "import", OneOrMore> => ActionFn(1342); + // ImportStatement = "import", OneOrMore> => ActionFn(1340); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant74(__symbols); + let __sym1 = __pop_Variant73(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1342::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1340::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (2, 171) + (2, 168) } - pub(crate) fn __reduce458< + pub(crate) fn __reduce452< >( source_code: &str, mode: Mode, @@ -26509,19 +26405,19 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ImportStatement = "from", ImportFromLocation, "import", ImportAsNames => ActionFn(1343); + // ImportStatement = "from", ImportFromLocation, "import", ImportAsNames => ActionFn(1341); assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant74(__symbols); + let __sym3 = __pop_Variant73(__symbols); let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant77(__symbols); + let __sym1 = __pop_Variant76(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1343::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1341::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (4, 171) + (4, 168) } - pub(crate) fn __reduce462< + pub(crate) fn __reduce456< >( source_code: &str, mode: Mode, @@ -26532,15 +26428,15 @@ mod __parse__Top { { // KwargParameter = "**", DoubleStarTypedParameter => ActionFn(1571); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action1571::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 175) + (2, 172) } - pub(crate) fn __reduce463< + pub(crate) fn __reduce457< >( source_code: &str, mode: Mode, @@ -26555,9 +26451,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action1572::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 175) + (1, 172) } - pub(crate) fn __reduce464< + pub(crate) fn __reduce458< >( source_code: &str, mode: Mode, @@ -26568,15 +26464,15 @@ mod __parse__Top { { // KwargParameter = "**", StarUntypedParameter => ActionFn(1016); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant64(__symbols); + let __sym1 = __pop_Variant63(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action1016::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 176) + (2, 173) } - pub(crate) fn __reduce465< + pub(crate) fn __reduce459< >( source_code: &str, mode: Mode, @@ -26591,9 +26487,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action1017::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 176) + (1, 173) } - pub(crate) fn __reduce470< + pub(crate) fn __reduce464< >( source_code: &str, mode: Mode, @@ -26610,9 +26506,9 @@ mod __parse__Top { let __end = __sym1.2; let __nt = super::__action622::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant33(__nt), __end)); - (2, 178) + (2, 175) } - pub(crate) fn __reduce471< + pub(crate) fn __reduce465< >( source_code: &str, mode: Mode, @@ -26627,9 +26523,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action623::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant33(__nt), __end)); - (1, 178) + (1, 175) } - pub(crate) fn __reduce472< + pub(crate) fn __reduce466< >( source_code: &str, mode: Mode, @@ -26644,9 +26540,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action572::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (1, 179) + (1, 176) } - pub(crate) fn __reduce473< + pub(crate) fn __reduce467< >( source_code: &str, mode: Mode, @@ -26660,9 +26556,9 @@ mod __parse__Top { let __end = __start.clone(); let __nt = super::__action573::<>(source_code, mode, &__start, &__end); __symbols.push((__start, __Symbol::Variant34(__nt), __end)); - (0, 179) + (0, 176) } - pub(crate) fn __reduce474< + pub(crate) fn __reduce468< >( source_code: &str, mode: Mode, @@ -26671,15 +26567,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // LiteralPattern = "None" => ActionFn(1348); + // LiteralPattern = "None" => ActionFn(1346); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1348::<>(source_code, mode, __sym0); + let __nt = super::__action1346::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (1, 180) + (1, 177) } - pub(crate) fn __reduce475< + pub(crate) fn __reduce469< >( source_code: &str, mode: Mode, @@ -26688,15 +26584,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // LiteralPattern = "True" => ActionFn(1349); + // LiteralPattern = "True" => ActionFn(1347); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1349::<>(source_code, mode, __sym0); + let __nt = super::__action1347::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (1, 180) + (1, 177) } - pub(crate) fn __reduce476< + pub(crate) fn __reduce470< >( source_code: &str, mode: Mode, @@ -26705,15 +26601,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // LiteralPattern = "False" => ActionFn(1350); + // LiteralPattern = "False" => ActionFn(1348); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1350::<>(source_code, mode, __sym0); + let __nt = super::__action1348::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (1, 180) + (1, 177) } - pub(crate) fn __reduce477< + pub(crate) fn __reduce471< >( source_code: &str, mode: Mode, @@ -26722,15 +26618,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // LiteralPattern = ConstantExpr => ActionFn(1351); + // LiteralPattern = NumberExpr => ActionFn(1349); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1351::<>(source_code, mode, __sym0); + let __nt = super::__action1349::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (1, 180) + (1, 177) } - pub(crate) fn __reduce478< + pub(crate) fn __reduce472< >( source_code: &str, mode: Mode, @@ -26739,15 +26635,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // LiteralPattern = AddOpExpr => ActionFn(1352); + // LiteralPattern = AddOpExpr => ActionFn(1350); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1352::<>(source_code, mode, __sym0); + let __nt = super::__action1350::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (1, 180) + (1, 177) } - pub(crate) fn __reduce480< + pub(crate) fn __reduce474< >( source_code: &str, mode: Mode, @@ -26762,9 +26658,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action126::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (1, 181) + (1, 178) } - pub(crate) fn __reduce481< + pub(crate) fn __reduce475< >( source_code: &str, mode: Mode, @@ -26773,15 +26669,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingKey = ConstantExpr => ActionFn(127); + // MappingKey = NumberExpr => ActionFn(127); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action127::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (1, 181) + (1, 178) } - pub(crate) fn __reduce482< + pub(crate) fn __reduce476< >( source_code: &str, mode: Mode, @@ -26796,9 +26692,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action128::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (1, 181) + (1, 178) } - pub(crate) fn __reduce483< + pub(crate) fn __reduce477< >( source_code: &str, mode: Mode, @@ -26807,15 +26703,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingKey = "None" => ActionFn(1354); + // MappingKey = "None" => ActionFn(1352); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1354::<>(source_code, mode, __sym0); + let __nt = super::__action1352::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (1, 181) + (1, 178) } - pub(crate) fn __reduce484< + pub(crate) fn __reduce478< >( source_code: &str, mode: Mode, @@ -26824,15 +26720,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingKey = "True" => ActionFn(1355); + // MappingKey = "True" => ActionFn(1353); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1355::<>(source_code, mode, __sym0); + let __nt = super::__action1353::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (1, 181) + (1, 178) } - pub(crate) fn __reduce485< + pub(crate) fn __reduce479< >( source_code: &str, mode: Mode, @@ -26841,15 +26737,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingKey = "False" => ActionFn(1356); + // MappingKey = "False" => ActionFn(1354); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1356::<>(source_code, mode, __sym0); + let __nt = super::__action1354::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (1, 181) + (1, 178) } - pub(crate) fn __reduce487< + pub(crate) fn __reduce481< >( source_code: &str, mode: Mode, @@ -26858,17 +26754,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", "}" => ActionFn(1358); + // MappingPattern = "{", "}" => ActionFn(1356); 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::__action1358::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1356::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (2, 182) + (2, 179) } - pub(crate) fn __reduce488< + pub(crate) fn __reduce482< >( source_code: &str, mode: Mode, @@ -26877,7 +26773,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", OneOrMore, ",", "}" => ActionFn(1359); + // MappingPattern = "{", OneOrMore, ",", "}" => ActionFn(1357); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -26885,11 +26781,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1359::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1357::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (4, 182) + (4, 179) } - pub(crate) fn __reduce489< + pub(crate) fn __reduce483< >( source_code: &str, mode: Mode, @@ -26898,18 +26794,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", OneOrMore, "}" => ActionFn(1360); + // MappingPattern = "{", OneOrMore, "}" => ActionFn(1358); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant84(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1360::<>(source_code, mode, __sym0, __sym1, __sym2); + let __nt = super::__action1358::<>(source_code, mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (3, 182) + (3, 179) } - pub(crate) fn __reduce490< + pub(crate) fn __reduce484< >( source_code: &str, mode: Mode, @@ -26918,7 +26814,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", "**", Identifier, ",", "}" => ActionFn(1361); + // MappingPattern = "{", "**", Identifier, ",", "}" => ActionFn(1359); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -26927,11 +26823,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action1361::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action1359::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (5, 182) + (5, 179) } - pub(crate) fn __reduce491< + pub(crate) fn __reduce485< >( source_code: &str, mode: Mode, @@ -26940,7 +26836,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", "**", Identifier, "}" => ActionFn(1362); + // MappingPattern = "{", "**", Identifier, "}" => ActionFn(1360); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant23(__symbols); @@ -26948,11 +26844,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action1362::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action1360::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (4, 182) + (4, 179) } - pub(crate) fn __reduce492< + pub(crate) fn __reduce486< >( source_code: &str, mode: Mode, @@ -26961,7 +26857,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", OneOrMore, ",", "**", Identifier, ",", "}" => ActionFn(1363); + // MappingPattern = "{", OneOrMore, ",", "**", Identifier, ",", "}" => ActionFn(1361); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -26972,11 +26868,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action1363::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action1361::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (7, 182) + (7, 179) } - pub(crate) fn __reduce493< + pub(crate) fn __reduce487< >( source_code: &str, mode: Mode, @@ -26985,7 +26881,7 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MappingPattern = "{", OneOrMore, ",", "**", Identifier, "}" => ActionFn(1364); + // MappingPattern = "{", OneOrMore, ",", "**", Identifier, "}" => ActionFn(1362); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant23(__symbols); @@ -26995,11 +26891,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action1364::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action1362::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant35(__nt), __end)); - (6, 182) + (6, 179) } - pub(crate) fn __reduce494< + pub(crate) fn __reduce488< >( source_code: &str, mode: Mode, @@ -27018,10 +26914,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym4.2; let __nt = super::__action1220::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant78(__nt), __end)); - (5, 183) + __symbols.push((__start, __Symbol::Variant77(__nt), __end)); + (5, 180) } - pub(crate) fn __reduce495< + pub(crate) fn __reduce489< >( source_code: &str, mode: Mode, @@ -27039,10 +26935,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym3.2; let __nt = super::__action1221::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant78(__nt), __end)); - (4, 183) + __symbols.push((__start, __Symbol::Variant77(__nt), __end)); + (4, 180) } - pub(crate) fn __reduce496< + pub(crate) fn __reduce490< >( source_code: &str, mode: Mode, @@ -27052,14 +26948,14 @@ mod __parse__Top { ) -> (usize, usize) { // MatchCase+ = MatchCase => ActionFn(366); - let __sym0 = __pop_Variant78(__symbols); + let __sym0 = __pop_Variant77(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action366::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant79(__nt), __end)); - (1, 184) + __symbols.push((__start, __Symbol::Variant78(__nt), __end)); + (1, 181) } - pub(crate) fn __reduce497< + pub(crate) fn __reduce491< >( source_code: &str, mode: Mode, @@ -27070,15 +26966,15 @@ mod __parse__Top { { // MatchCase+ = MatchCase+, MatchCase => ActionFn(367); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant78(__symbols); - let __sym0 = __pop_Variant79(__symbols); + let __sym1 = __pop_Variant77(__symbols); + let __sym0 = __pop_Variant78(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action367::<>(source_code, mode, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant79(__nt), __end)); - (2, 184) + __symbols.push((__start, __Symbol::Variant78(__nt), __end)); + (2, 181) } - pub(crate) fn __reduce498< + pub(crate) fn __reduce492< >( source_code: &str, mode: Mode, @@ -27087,18 +26983,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchKeywordEntry = Identifier, "=", Pattern => ActionFn(1365); + // MatchKeywordEntry = Identifier, "=", Pattern => ActionFn(1363); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant35(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant23(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1365::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant80(__nt), __end)); - (3, 185) + let __nt = super::__action1363::<>(source_code, mode, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant79(__nt), __end)); + (3, 182) } - pub(crate) fn __reduce499< + pub(crate) fn __reduce493< >( source_code: &str, mode: Mode, @@ -27115,10 +27011,10 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym2.2; let __nt = super::__action133::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant81(__nt), __end)); - (3, 186) + __symbols.push((__start, __Symbol::Variant80(__nt), __end)); + (3, 183) } - pub(crate) fn __reduce500< + pub(crate) fn __reduce494< >( source_code: &str, mode: Mode, @@ -27127,15 +27023,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchName = Identifier => ActionFn(1366); + // MatchName = Identifier => ActionFn(1364); let __sym0 = __pop_Variant23(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1366::<>(source_code, mode, __sym0); + let __nt = super::__action1364::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (1, 187) + (1, 184) } - pub(crate) fn __reduce501< + pub(crate) fn __reduce495< >( source_code: &str, mode: Mode, @@ -27144,18 +27040,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchNameOrAttr = MatchName, ".", Identifier => ActionFn(1367); + // MatchNameOrAttr = MatchName, ".", Identifier => ActionFn(1365); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant44(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1367::<>(source_code, mode, __sym0, __sym1, __sym2); + let __nt = super::__action1365::<>(source_code, mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (3, 188) + (3, 185) } - pub(crate) fn __reduce502< + pub(crate) fn __reduce496< >( source_code: &str, mode: Mode, @@ -27164,18 +27060,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchNameOrAttr = MatchNameOrAttr, ".", Identifier => ActionFn(1368); + // MatchNameOrAttr = MatchNameOrAttr, ".", Identifier => ActionFn(1366); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant44(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1368::<>(source_code, mode, __sym0, __sym1, __sym2); + let __nt = super::__action1366::<>(source_code, mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant44(__nt), __end)); - (3, 188) + (3, 185) } - pub(crate) fn __reduce503< + pub(crate) fn __reduce497< >( source_code: &str, mode: Mode, @@ -27184,10 +27080,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchStatement = "match", TestOrStarNamedExpr, ":", "\n", Indent, MatchCase+, Dedent => ActionFn(863); + // MatchStatement = "match", TestOrStarNamedExpr, ":", "\n", Indent, MatchCase+, Dedent => ActionFn(861); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant79(__symbols); + let __sym5 = __pop_Variant78(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -27195,11 +27091,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action863::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action861::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (7, 189) + (7, 186) } - pub(crate) fn __reduce504< + pub(crate) fn __reduce498< >( source_code: &str, mode: Mode, @@ -27208,10 +27104,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchStatement = "match", TestOrStarNamedExpr, ",", ":", "\n", Indent, MatchCase+, Dedent => ActionFn(1369); + // MatchStatement = "match", TestOrStarNamedExpr, ",", ":", "\n", Indent, MatchCase+, Dedent => ActionFn(1367); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant79(__symbols); + let __sym6 = __pop_Variant78(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -27220,11 +27116,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action1369::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action1367::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (8, 189) + (8, 186) } - pub(crate) fn __reduce505< + pub(crate) fn __reduce499< >( source_code: &str, mode: Mode, @@ -27233,10 +27129,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchStatement = "match", TwoOrMore, ",", ":", "\n", Indent, MatchCase+, Dedent => ActionFn(1370); + // MatchStatement = "match", TwoOrMore, ",", ":", "\n", Indent, MatchCase+, Dedent => ActionFn(1368); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); - let __sym6 = __pop_Variant79(__symbols); + let __sym6 = __pop_Variant78(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -27245,11 +27141,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action1370::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action1368::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (8, 189) + (8, 186) } - pub(crate) fn __reduce506< + pub(crate) fn __reduce500< >( source_code: &str, mode: Mode, @@ -27258,10 +27154,10 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // MatchStatement = "match", TwoOrMore, ":", "\n", Indent, MatchCase+, Dedent => ActionFn(1371); + // MatchStatement = "match", TwoOrMore, ":", "\n", Indent, MatchCase+, Dedent => ActionFn(1369); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant79(__symbols); + let __sym5 = __pop_Variant78(__symbols); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -27269,11 +27165,11 @@ mod __parse__Top { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action1371::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action1369::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (7, 189) + (7, 186) } - pub(crate) fn __reduce507< + pub(crate) fn __reduce501< >( source_code: &str, mode: Mode, @@ -27288,9 +27184,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action198::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant49(__nt), __end)); - (1, 190) + (1, 187) } - pub(crate) fn __reduce508< + pub(crate) fn __reduce502< >( source_code: &str, mode: Mode, @@ -27305,9 +27201,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action199::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant49(__nt), __end)); - (1, 190) + (1, 187) } - pub(crate) fn __reduce509< + pub(crate) fn __reduce503< >( source_code: &str, mode: Mode, @@ -27322,9 +27218,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action200::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant49(__nt), __end)); - (1, 190) + (1, 187) } - pub(crate) fn __reduce510< + pub(crate) fn __reduce504< >( source_code: &str, mode: Mode, @@ -27339,9 +27235,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action201::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant49(__nt), __end)); - (1, 190) + (1, 187) } - pub(crate) fn __reduce511< + pub(crate) fn __reduce505< >( source_code: &str, mode: Mode, @@ -27356,9 +27252,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action202::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant49(__nt), __end)); - (1, 190) + (1, 187) } - pub(crate) fn __reduce512< + pub(crate) fn __reduce506< >( source_code: &str, mode: Mode, @@ -27367,18 +27263,18 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // NamedExpression = NamedExpressionName, ":=", Test<"all"> => ActionFn(1372); + // NamedExpression = NamedExpressionName, ":=", Test<"all"> => ActionFn(1370); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant15(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action1372::<>(source_code, mode, __sym0, __sym1, __sym2); + let __nt = super::__action1370::<>(source_code, mode, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (3, 191) + (3, 188) } - pub(crate) fn __reduce513< + pub(crate) fn __reduce507< >( source_code: &str, mode: Mode, @@ -27387,15 +27283,15 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // NamedExpressionName = Identifier => ActionFn(1373); + // NamedExpressionName = Identifier => ActionFn(1371); let __sym0 = __pop_Variant23(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1373::<>(source_code, mode, __sym0); + let __nt = super::__action1371::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 192) + (1, 189) } - pub(crate) fn __reduce514< + pub(crate) fn __reduce508< >( source_code: &str, mode: Mode, @@ -27410,9 +27306,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action179::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 193) + (1, 190) } - pub(crate) fn __reduce515< + pub(crate) fn __reduce509< >( source_code: &str, mode: Mode, @@ -27427,9 +27323,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action180::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 193) + (1, 190) } - pub(crate) fn __reduce516< + pub(crate) fn __reduce510< >( source_code: &str, mode: Mode, @@ -27444,9 +27340,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action36::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 194) + (1, 191) } - pub(crate) fn __reduce517< + pub(crate) fn __reduce511< >( source_code: &str, mode: Mode, @@ -27461,9 +27357,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action37::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 194) + (1, 191) } - pub(crate) fn __reduce518< + pub(crate) fn __reduce512< >( source_code: &str, mode: Mode, @@ -27472,17 +27368,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // NonlocalStatement = "nonlocal", OneOrMore => ActionFn(1374); + // NonlocalStatement = "nonlocal", OneOrMore => ActionFn(1372); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant82(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1374::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1372::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant37(__nt), __end)); - (2, 195) + (2, 192) } - pub(crate) fn __reduce519< + pub(crate) fn __reduce513< >( source_code: &str, mode: Mode, @@ -27491,17 +27387,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // NotTest<"all"> = "not", NotTest<"all"> => ActionFn(1375); + // NotTest<"all"> = "not", NotTest<"all"> => ActionFn(1373); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant15(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1375::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1373::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (2, 196) + (2, 193) } - pub(crate) fn __reduce520< + pub(crate) fn __reduce514< >( source_code: &str, mode: Mode, @@ -27516,9 +27412,9 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action475::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 196) + (1, 193) } - pub(crate) fn __reduce521< + pub(crate) fn __reduce515< >( source_code: &str, mode: Mode, @@ -27527,17 +27423,17 @@ mod __parse__Top { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // NotTest<"no-withitems"> = "not", NotTest<"all"> => ActionFn(1376); + // NotTest<"no-withitems"> = "not", NotTest<"all"> => ActionFn(1374); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant15(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action1376::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1374::<>(source_code, mode, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (2, 197) + (2, 194) } - pub(crate) fn __reduce522< + pub(crate) fn __reduce516< >( source_code: &str, mode: Mode, @@ -27552,8 +27448,112 @@ mod __parse__Top { let __end = __sym0.2; let __nt = super::__action518::<>(source_code, mode, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (1, 194) + } + pub(crate) fn __reduce517< + >( + source_code: &str, + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Number = int => ActionFn(243); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action243::<>(source_code, mode, __sym0); + __symbols.push((__start, __Symbol::Variant81(__nt), __end)); + (1, 195) + } + pub(crate) fn __reduce518< + >( + source_code: &str, + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Number = float => ActionFn(244); + let __sym0 = __pop_Variant2(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action244::<>(source_code, mode, __sym0); + __symbols.push((__start, __Symbol::Variant81(__nt), __end)); + (1, 195) + } + pub(crate) fn __reduce519< + >( + source_code: &str, + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Number = complex => ActionFn(245); + let __sym0 = __pop_Variant1(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action245::<>(source_code, mode, __sym0); + __symbols.push((__start, __Symbol::Variant81(__nt), __end)); + (1, 195) + } + pub(crate) fn __reduce520< + >( + source_code: &str, + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // NumberAtom = Number => ActionFn(1375); + let __sym0 = __pop_Variant81(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1375::<>(source_code, mode, __sym0); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (1, 196) + } + pub(crate) fn __reduce521< + >( + source_code: &str, + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // NumberExpr = NumberAtom => ActionFn(112); + let __sym0 = __pop_Variant15(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action112::<>(source_code, mode, __sym0); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (1, 197) } + pub(crate) fn __reduce522< + >( + source_code: &str, + mode: Mode, + __lookahead_start: Option<&TextSize>, + __symbols: &mut alloc::vec::Vec<(TextSize,__Symbol<>,TextSize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // NumberExpr = "-", NumberAtom => ActionFn(1376); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant15(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action1376::<>(source_code, mode, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant15(__nt), __end)); + (2, 197) + } pub(crate) fn __reduce523< >( source_code: &str, @@ -27564,11 +27564,11 @@ mod __parse__Top { ) -> (usize, usize) { // OneOrMore = DictElement => ActionFn(260); - let __sym0 = __pop_Variant60(__symbols); + let __sym0 = __pop_Variant59(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action260::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant62(__nt), __end)); + __symbols.push((__start, __Symbol::Variant61(__nt), __end)); (1, 198) } pub(crate) fn __reduce524< @@ -27582,13 +27582,13 @@ mod __parse__Top { { // OneOrMore = OneOrMore, ",", DictElement => ActionFn(261); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant60(__symbols); + let __sym2 = __pop_Variant59(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant62(__symbols); + let __sym0 = __pop_Variant61(__symbols); let __start = __sym0.0; let __end = __sym2.2; let __nt = super::__action261::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant62(__nt), __end)); + __symbols.push((__start, __Symbol::Variant61(__nt), __end)); (3, 198) } pub(crate) fn __reduce525< @@ -27682,7 +27682,7 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym2.2; let __nt = super::__action1589::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); (3, 201) } pub(crate) fn __reduce530< @@ -27699,7 +27699,7 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action1590::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); (1, 201) } pub(crate) fn __reduce531< @@ -27717,11 +27717,11 @@ mod __parse__Top { let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant74(__symbols); + let __sym0 = __pop_Variant73(__symbols); let __start = __sym0.0; let __end = __sym4.2; let __nt = super::__action1591::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); (5, 201) } pub(crate) fn __reduce532< @@ -27737,11 +27737,11 @@ mod __parse__Top { assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant74(__symbols); + let __sym0 = __pop_Variant73(__symbols); let __start = __sym0.0; let __end = __sym2.2; let __nt = super::__action1592::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); (3, 201) } pub(crate) fn __reduce533< @@ -27761,7 +27761,7 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym2.2; let __nt = super::__action1593::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); (3, 202) } pub(crate) fn __reduce534< @@ -27778,7 +27778,7 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action1594::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); (1, 202) } pub(crate) fn __reduce535< @@ -27796,11 +27796,11 @@ mod __parse__Top { let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant74(__symbols); + let __sym0 = __pop_Variant73(__symbols); let __start = __sym0.0; let __end = __sym4.2; let __nt = super::__action1595::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); (5, 202) } pub(crate) fn __reduce536< @@ -27816,11 +27816,11 @@ mod __parse__Top { assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant23(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant74(__symbols); + let __sym0 = __pop_Variant73(__symbols); let __start = __sym0.0; let __end = __sym2.2; let __nt = super::__action1596::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant74(__nt), __end)); + __symbols.push((__start, __Symbol::Variant73(__nt), __end)); (3, 202) } pub(crate) fn __reduce537< @@ -27833,7 +27833,7 @@ mod __parse__Top { ) -> (usize, usize) { // OneOrMore = MatchKeywordEntry => ActionFn(343); - let __sym0 = __pop_Variant80(__symbols); + let __sym0 = __pop_Variant79(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action343::<>(source_code, mode, __sym0); @@ -27851,7 +27851,7 @@ mod __parse__Top { { // OneOrMore = OneOrMore, ",", MatchKeywordEntry => ActionFn(344); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant80(__symbols); + let __sym2 = __pop_Variant79(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant83(__symbols); let __start = __sym0.0; @@ -27870,7 +27870,7 @@ mod __parse__Top { ) -> (usize, usize) { // OneOrMore = MatchMappingEntry => ActionFn(347); - let __sym0 = __pop_Variant81(__symbols); + let __sym0 = __pop_Variant80(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action347::<>(source_code, mode, __sym0); @@ -27888,7 +27888,7 @@ mod __parse__Top { { // OneOrMore = OneOrMore, ",", MatchMappingEntry => ActionFn(348); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant81(__symbols); + let __sym2 = __pop_Variant80(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant84(__symbols); let __start = __sym0.0; @@ -29890,7 +29890,7 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym2.2; let __nt = super::__action1488::<>(source_code, mode, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant64(__nt), __end)); + __symbols.push((__start, __Symbol::Variant63(__nt), __end)); (3, 246) } pub(crate) fn __reduce818< @@ -29907,7 +29907,7 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action1489::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant64(__nt), __end)); + __symbols.push((__start, __Symbol::Variant63(__nt), __end)); (1, 246) } pub(crate) fn __reduce819< @@ -29920,11 +29920,11 @@ mod __parse__Top { ) -> (usize, usize) { // StarTypedParameter? = StarTypedParameter => ActionFn(496); - let __sym0 = __pop_Variant64(__symbols); + let __sym0 = __pop_Variant63(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action496::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + __symbols.push((__start, __Symbol::Variant64(__nt), __end)); (1, 247) } pub(crate) fn __reduce820< @@ -29940,7 +29940,7 @@ mod __parse__Top { let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); let __nt = super::__action497::<>(source_code, mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + __symbols.push((__start, __Symbol::Variant64(__nt), __end)); (0, 247) } pub(crate) fn __reduce821< @@ -29957,7 +29957,7 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action1490::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant64(__nt), __end)); + __symbols.push((__start, __Symbol::Variant63(__nt), __end)); (1, 248) } pub(crate) fn __reduce822< @@ -29970,11 +29970,11 @@ mod __parse__Top { ) -> (usize, usize) { // StarUntypedParameter? = StarUntypedParameter => ActionFn(485); - let __sym0 = __pop_Variant64(__symbols); + let __sym0 = __pop_Variant63(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action485::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + __symbols.push((__start, __Symbol::Variant64(__nt), __end)); (1, 249) } pub(crate) fn __reduce823< @@ -29990,7 +29990,7 @@ mod __parse__Top { let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); let __nt = super::__action486::<>(source_code, mode, &__start, &__end); - __symbols.push((__start, __Symbol::Variant65(__nt), __end)); + __symbols.push((__start, __Symbol::Variant64(__nt), __end)); (0, 249) } pub(crate) fn __reduce824< @@ -30203,7 +30203,7 @@ mod __parse__Top { ) -> (usize, usize) { // StringLiteral+ = StringLiteral => ActionFn(351); - let __sym0 = __pop_Variant70(__symbols); + let __sym0 = __pop_Variant69(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action351::<>(source_code, mode, __sym0); @@ -30221,7 +30221,7 @@ mod __parse__Top { { // StringLiteral+ = StringLiteral+, StringLiteral => ActionFn(352); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant70(__symbols); + let __sym1 = __pop_Variant69(__symbols); let __sym0 = __pop_Variant95(__symbols); let __start = __sym0.0; let __end = __sym1.2; @@ -30239,11 +30239,11 @@ mod __parse__Top { ) -> (usize, usize) { // StringLiteralOrFString = StringLiteral => ActionFn(212); - let __sym0 = __pop_Variant70(__symbols); + let __sym0 = __pop_Variant69(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action212::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant70(__nt), __end)); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); (1, 253) } pub(crate) fn __reduce838< @@ -30256,11 +30256,11 @@ mod __parse__Top { ) -> (usize, usize) { // StringLiteralOrFString = FStringExpr => ActionFn(213); - let __sym0 = __pop_Variant70(__symbols); + let __sym0 = __pop_Variant69(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action213::<>(source_code, mode, __sym0); - __symbols.push((__start, __Symbol::Variant70(__nt), __end)); + __symbols.push((__start, __Symbol::Variant69(__nt), __end)); (1, 253) } pub(crate) fn __reduce839< @@ -30273,7 +30273,7 @@ mod __parse__Top { ) -> (usize, usize) { // StringLiteralOrFString+ = StringLiteralOrFString => ActionFn(349); - let __sym0 = __pop_Variant70(__symbols); + let __sym0 = __pop_Variant69(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action349::<>(source_code, mode, __sym0); @@ -30291,7 +30291,7 @@ mod __parse__Top { { // StringLiteralOrFString+ = StringLiteralOrFString+, StringLiteralOrFString => ActionFn(350); assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant70(__symbols); + let __sym1 = __pop_Variant69(__symbols); let __sym0 = __pop_Variant95(__symbols); let __start = __sym0.0; let __end = __sym1.2; @@ -31107,7 +31107,7 @@ mod __parse__Top { let __sym6 = __pop_Variant25(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant67(__symbols); + let __sym3 = __pop_Variant66(__symbols); let __sym2 = __pop_Variant25(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); @@ -31131,7 +31131,7 @@ mod __parse__Top { let __sym6 = __pop_Variant25(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant67(__symbols); + let __sym3 = __pop_Variant66(__symbols); let __sym2 = __pop_Variant25(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); @@ -31155,7 +31155,7 @@ mod __parse__Top { let __sym6 = __pop_Variant25(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant67(__symbols); + let __sym3 = __pop_Variant66(__symbols); let __sym2 = __pop_Variant25(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); @@ -31176,7 +31176,7 @@ mod __parse__Top { { // TryStatement = "try", ":", Suite, ExceptClause+ => ActionFn(1505); assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant67(__symbols); + let __sym3 = __pop_Variant66(__symbols); let __sym2 = __pop_Variant25(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); @@ -31203,7 +31203,7 @@ mod __parse__Top { let __sym6 = __pop_Variant25(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant67(__symbols); + let __sym3 = __pop_Variant66(__symbols); let __sym2 = __pop_Variant25(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); @@ -31227,7 +31227,7 @@ mod __parse__Top { let __sym6 = __pop_Variant25(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant67(__symbols); + let __sym3 = __pop_Variant66(__symbols); let __sym2 = __pop_Variant25(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); @@ -31251,7 +31251,7 @@ mod __parse__Top { let __sym6 = __pop_Variant25(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant67(__symbols); + let __sym3 = __pop_Variant66(__symbols); let __sym2 = __pop_Variant25(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); @@ -31272,7 +31272,7 @@ mod __parse__Top { { // TryStatement = "try", ":", Suite, ExceptStarClause+ => ActionFn(1509); assert!(__symbols.len() >= 4); - let __sym3 = __pop_Variant67(__symbols); + let __sym3 = __pop_Variant66(__symbols); let __sym2 = __pop_Variant25(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); @@ -33604,9 +33604,9 @@ fn __action76< 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 { + let ast::Expr::NumberLiteral(ast::ExprNumberLiteral { value: ast::Number::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()), + error: LexicalErrorType::OtherError("only integer literals are allowed in Subscript expressions in help end escape command".to_string()), location: range.start(), }); }; @@ -34271,12 +34271,12 @@ fn __action111< source_code: &str, mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), - (_, value, _): (TextSize, ast::Constant, TextSize), + (_, value, _): (TextSize, ast::Number, TextSize), (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { - ast::Expr::Constant( - ast::ExprConstant { value, range: (location..end_location).into() } + ast::Expr::NumberLiteral( + ast::ExprNumberLiteral { value, range: (location..end_location).into() } ).into() } @@ -34576,8 +34576,7 @@ fn __action129< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - ast::ExprConstant { - value: ast::Constant::None, + ast::ExprNoneLiteral { range: (location..end_location).into() }.into() } @@ -34593,8 +34592,8 @@ fn __action130< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - ast::ExprConstant { - value: true.into(), + ast::ExprBooleanLiteral { + value: true, range: (location..end_location).into() }.into() } @@ -34610,8 +34609,8 @@ fn __action131< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - ast::ExprConstant { - value: false.into(), + ast::ExprBooleanLiteral { + value: false, range: (location..end_location).into() }.into() } @@ -36713,9 +36712,9 @@ fn __action243< source_code: &str, mode: Mode, (_, value, _): (TextSize, Int, TextSize), -) -> ast::Constant +) -> ast::Number { - ast::Constant::Int(value) + ast::Number::Int(value) } #[allow(unused_variables)] @@ -36725,9 +36724,9 @@ fn __action244< source_code: &str, mode: Mode, (_, value, _): (TextSize, f64, TextSize), -) -> ast::Constant +) -> ast::Number { - ast::Constant::Float(value) + ast::Number::Float(value) } #[allow(unused_variables)] @@ -36737,9 +36736,9 @@ fn __action245< source_code: &str, mode: Mode, (_, s, _): (TextSize, (f64, f64), TextSize), -) -> ast::Constant +) -> ast::Number { - ast::Constant::Complex { real: s.0, imag: s.1 } + ast::Number::Complex { real: s.0, imag: s.1 } } #[allow(unused_variables)] @@ -41028,11 +41027,11 @@ fn __action546< source_code: &str, mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), - (_, value, _): (TextSize, ast::Constant, TextSize), + (_, value, _): (TextSize, ast::Number, TextSize), (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { - ast::ExprConstant { + ast::ExprNumberLiteral { value, range: (location..end_location).into(), }.into() @@ -41338,7 +41337,7 @@ fn __action560< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { - ast::ExprConstant { value: true.into(), range: (location..end_location).into() }.into() + ast::ExprBooleanLiteral { value: true, range: (location..end_location).into() }.into() } #[allow(unused_variables)] @@ -41352,7 +41351,7 @@ fn __action561< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { - ast::ExprConstant { value: false.into(), range: (location..end_location).into() }.into() + ast::ExprBooleanLiteral { value: false, range: (location..end_location).into() }.into() } #[allow(unused_variables)] @@ -41366,7 +41365,7 @@ fn __action562< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { - ast::ExprConstant { value: ast::Constant::None, range: (location..end_location).into() }.into() + ast::ExprNoneLiteral { range: (location..end_location).into() }.into() } #[allow(unused_variables)] @@ -41380,7 +41379,7 @@ fn __action563< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { - ast::ExprConstant { value: ast::Constant::Ellipsis, range: (location..end_location).into() }.into() + ast::ExprEllipsisLiteral { range: (location..end_location).into() }.into() } #[allow(unused_variables)] @@ -41755,11 +41754,11 @@ fn __action589< source_code: &str, mode: Mode, (_, location, _): (TextSize, TextSize, TextSize), - (_, value, _): (TextSize, ast::Constant, TextSize), + (_, value, _): (TextSize, ast::Number, TextSize), (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { - ast::ExprConstant { + ast::ExprNumberLiteral { value, range: (location..end_location).into(), }.into() @@ -42038,7 +42037,7 @@ fn __action602< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { - ast::ExprConstant { value: true.into(), range: (location..end_location).into() }.into() + ast::ExprBooleanLiteral { value: true, range: (location..end_location).into() }.into() } #[allow(unused_variables)] @@ -42052,7 +42051,7 @@ fn __action603< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { - ast::ExprConstant { value: false.into(), range: (location..end_location).into() }.into() + ast::ExprBooleanLiteral { value: false, range: (location..end_location).into() }.into() } #[allow(unused_variables)] @@ -42066,7 +42065,7 @@ fn __action604< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { - ast::ExprConstant { value: ast::Constant::None, range: (location..end_location).into() }.into() + ast::ExprNoneLiteral { range: (location..end_location).into() }.into() } #[allow(unused_variables)] @@ -42080,7 +42079,7 @@ fn __action605< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { - ast::ExprConstant { value: ast::Constant::Ellipsis, range: (location..end_location).into() }.into() + ast::ExprEllipsisLiteral { range: (location..end_location).into() }.into() } #[allow(unused_variables)] @@ -46195,7 +46194,7 @@ fn __action733< >( source_code: &str, mode: Mode, - __0: (TextSize, ast::Constant, TextSize), + __0: (TextSize, ast::Number, TextSize), __1: (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { @@ -46859,7 +46858,7 @@ fn __action754< >( source_code: &str, mode: Mode, - __0: (TextSize, ast::Constant, TextSize), + __0: (TextSize, ast::Number, TextSize), __1: (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { @@ -47864,64 +47863,6 @@ fn __action785< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action786< ->( - source_code: &str, - mode: Mode, - __0: (TextSize, ast::Constant, TextSize), - __1: (TextSize, TextSize, TextSize), -) -> ast::ParenthesizedExpr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action414( - source_code, - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action111( - source_code, - mode, - __temp0, - __0, - __1, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action787< ->( - source_code: &str, - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::ParenthesizedExpr, TextSize), - __2: (TextSize, TextSize, TextSize), -) -> ast::ParenthesizedExpr -{ - let __start0 = __0.0; - let __end0 = __0.0; - let __temp0 = __action414( - source_code, - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action113( - source_code, - mode, - __temp0, - __0, - __1, - __2, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action788< >( source_code: &str, mode: Mode, @@ -47953,7 +47894,7 @@ fn __action788< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action789< +fn __action787< >( source_code: &str, mode: Mode, @@ -47983,7 +47924,7 @@ fn __action789< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action790< +fn __action788< >( source_code: &str, mode: Mode, @@ -48011,7 +47952,7 @@ fn __action790< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action791< +fn __action789< >( source_code: &str, mode: Mode, @@ -48041,7 +47982,7 @@ fn __action791< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action792< +fn __action790< >( source_code: &str, mode: Mode, @@ -48071,7 +48012,7 @@ fn __action792< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action793< +fn __action791< >( source_code: &str, mode: Mode, @@ -48103,7 +48044,7 @@ fn __action793< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action794< +fn __action792< >( source_code: &str, mode: Mode, @@ -48135,7 +48076,7 @@ fn __action794< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action795< +fn __action793< >( source_code: &str, mode: Mode, @@ -48169,7 +48110,7 @@ fn __action795< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action796< +fn __action794< >( source_code: &str, mode: Mode, @@ -48203,7 +48144,7 @@ fn __action796< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action797< +fn __action795< >( source_code: &str, mode: Mode, @@ -48235,7 +48176,7 @@ fn __action797< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action798< +fn __action796< >( source_code: &str, mode: Mode, @@ -48267,7 +48208,7 @@ fn __action798< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action799< +fn __action797< >( source_code: &str, mode: Mode, @@ -48297,7 +48238,7 @@ fn __action799< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action800< +fn __action798< >( source_code: &str, mode: Mode, @@ -48329,7 +48270,7 @@ fn __action800< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action801< +fn __action799< >( source_code: &str, mode: Mode, @@ -48363,7 +48304,7 @@ fn __action801< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action802< +fn __action800< >( source_code: &str, mode: Mode, @@ -48401,7 +48342,7 @@ fn __action802< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action803< +fn __action801< >( source_code: &str, mode: Mode, @@ -48433,7 +48374,7 @@ fn __action803< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action804< +fn __action802< >( source_code: &str, mode: Mode, @@ -48461,7 +48402,7 @@ fn __action804< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action805< +fn __action803< >( source_code: &str, mode: Mode, @@ -48487,7 +48428,7 @@ fn __action805< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action806< +fn __action804< >( source_code: &str, mode: Mode, @@ -48525,7 +48466,7 @@ fn __action806< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action807< +fn __action805< >( source_code: &str, mode: Mode, @@ -48561,7 +48502,7 @@ fn __action807< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action808< +fn __action806< >( source_code: &str, mode: Mode, @@ -48591,7 +48532,7 @@ fn __action808< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action809< +fn __action807< >( source_code: &str, mode: Mode, @@ -48621,7 +48562,7 @@ fn __action809< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action810< +fn __action808< >( source_code: &str, mode: Mode, @@ -48649,7 +48590,7 @@ fn __action810< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action811< +fn __action809< >( source_code: &str, mode: Mode, @@ -48677,7 +48618,7 @@ fn __action811< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action812< +fn __action810< >( source_code: &str, mode: Mode, @@ -48707,7 +48648,7 @@ fn __action812< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action813< +fn __action811< >( source_code: &str, mode: Mode, @@ -48735,7 +48676,7 @@ fn __action813< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action814< +fn __action812< >( source_code: &str, mode: Mode, @@ -48775,7 +48716,7 @@ fn __action814< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action815< +fn __action813< >( source_code: &str, mode: Mode, @@ -48813,7 +48754,7 @@ fn __action815< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action816< +fn __action814< >( source_code: &str, mode: Mode, @@ -48855,7 +48796,7 @@ fn __action816< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action817< +fn __action815< >( source_code: &str, mode: Mode, @@ -48895,7 +48836,7 @@ fn __action817< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action818< +fn __action816< >( source_code: &str, mode: Mode, @@ -48925,7 +48866,7 @@ fn __action818< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action819< +fn __action817< >( source_code: &str, mode: Mode, @@ -48957,7 +48898,7 @@ fn __action819< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action820< +fn __action818< >( source_code: &str, mode: Mode, @@ -48987,7 +48928,7 @@ fn __action820< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action821< +fn __action819< >( source_code: &str, mode: Mode, @@ -49017,7 +48958,7 @@ fn __action821< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action822< +fn __action820< >( source_code: &str, mode: Mode, @@ -49047,7 +48988,7 @@ fn __action822< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action823< +fn __action821< >( source_code: &str, mode: Mode, @@ -49075,7 +49016,7 @@ fn __action823< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action824< +fn __action822< >( source_code: &str, mode: Mode, @@ -49105,7 +49046,7 @@ fn __action824< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action825< +fn __action823< >( source_code: &str, mode: Mode, @@ -49133,7 +49074,7 @@ fn __action825< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action826< +fn __action824< >( source_code: &str, mode: Mode, @@ -49163,7 +49104,7 @@ fn __action826< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action827< +fn __action825< >( source_code: &str, mode: Mode, @@ -49191,7 +49132,7 @@ fn __action827< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action828< +fn __action826< >( source_code: &str, mode: Mode, @@ -49227,7 +49168,7 @@ fn __action828< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action829< +fn __action827< >( source_code: &str, mode: Mode, @@ -49257,7 +49198,7 @@ fn __action829< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action830< +fn __action828< >( source_code: &str, mode: Mode, @@ -49287,7 +49228,7 @@ fn __action830< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action831< +fn __action829< >( source_code: &str, mode: Mode, @@ -49315,7 +49256,7 @@ fn __action831< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action832< +fn __action830< >( source_code: &str, mode: Mode, @@ -49349,7 +49290,7 @@ fn __action832< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action833< +fn __action831< >( source_code: &str, mode: Mode, @@ -49381,7 +49322,7 @@ fn __action833< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action834< +fn __action832< >( source_code: &str, mode: Mode, @@ -49409,7 +49350,7 @@ fn __action834< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action835< +fn __action833< >( source_code: &str, mode: Mode, @@ -49439,7 +49380,7 @@ fn __action835< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action836< +fn __action834< >( source_code: &str, mode: Mode, @@ -49473,7 +49414,7 @@ fn __action836< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action837< +fn __action835< >( source_code: &str, mode: Mode, @@ -49501,7 +49442,7 @@ fn __action837< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action838< +fn __action836< >( source_code: &str, mode: Mode, @@ -49529,7 +49470,7 @@ fn __action838< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action839< +fn __action837< >( source_code: &str, mode: Mode, @@ -49559,7 +49500,7 @@ fn __action839< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action840< +fn __action838< >( source_code: &str, mode: Mode, @@ -49607,7 +49548,7 @@ fn __action840< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action841< +fn __action839< >( source_code: &str, mode: Mode, @@ -49635,7 +49576,7 @@ fn __action841< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action842< +fn __action840< >( source_code: &str, mode: Mode, @@ -49663,7 +49604,7 @@ fn __action842< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action843< +fn __action841< >( source_code: &str, mode: Mode, @@ -49691,7 +49632,7 @@ fn __action843< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action844< +fn __action842< >( source_code: &str, mode: Mode, @@ -49719,7 +49660,7 @@ fn __action844< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action845< +fn __action843< >( source_code: &str, mode: Mode, @@ -49747,7 +49688,7 @@ fn __action845< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action846< +fn __action844< >( source_code: &str, mode: Mode, @@ -49775,7 +49716,7 @@ fn __action846< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action847< +fn __action845< >( source_code: &str, mode: Mode, @@ -49803,7 +49744,7 @@ fn __action847< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action848< +fn __action846< >( source_code: &str, mode: Mode, @@ -49831,7 +49772,7 @@ fn __action848< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action849< +fn __action847< >( source_code: &str, mode: Mode, @@ -49859,7 +49800,7 @@ fn __action849< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action850< +fn __action848< >( source_code: &str, mode: Mode, @@ -49887,7 +49828,7 @@ fn __action850< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action851< +fn __action849< >( source_code: &str, mode: Mode, @@ -49917,7 +49858,7 @@ fn __action851< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action852< +fn __action850< >( source_code: &str, mode: Mode, @@ -49951,7 +49892,7 @@ fn __action852< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action853< +fn __action851< >( source_code: &str, mode: Mode, @@ -49983,7 +49924,7 @@ fn __action853< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action854< +fn __action852< >( source_code: &str, mode: Mode, @@ -50019,7 +49960,7 @@ fn __action854< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action855< +fn __action853< >( source_code: &str, mode: Mode, @@ -50053,7 +49994,7 @@ fn __action855< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action856< +fn __action854< >( source_code: &str, mode: Mode, @@ -50093,7 +50034,7 @@ fn __action856< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action857< +fn __action855< >( source_code: &str, mode: Mode, @@ -50131,7 +50072,7 @@ fn __action857< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action858< +fn __action856< >( source_code: &str, mode: Mode, @@ -50165,7 +50106,7 @@ fn __action858< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action859< +fn __action857< >( source_code: &str, mode: Mode, @@ -50197,7 +50138,7 @@ fn __action859< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action860< +fn __action858< >( source_code: &str, mode: Mode, @@ -50225,7 +50166,7 @@ fn __action860< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action861< +fn __action859< >( source_code: &str, mode: Mode, @@ -50257,7 +50198,7 @@ fn __action861< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action862< +fn __action860< >( source_code: &str, mode: Mode, @@ -50289,7 +50230,7 @@ fn __action862< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action863< +fn __action861< >( source_code: &str, mode: Mode, @@ -50327,7 +50268,7 @@ fn __action863< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action864< +fn __action862< >( source_code: &str, mode: Mode, @@ -50379,7 +50320,7 @@ fn __action864< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action865< +fn __action863< >( source_code: &str, mode: Mode, @@ -50431,7 +50372,7 @@ fn __action865< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action866< +fn __action864< >( source_code: &str, mode: Mode, @@ -50481,7 +50422,7 @@ fn __action866< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action867< +fn __action865< >( source_code: &str, mode: Mode, @@ -50513,7 +50454,7 @@ fn __action867< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action868< +fn __action866< >( source_code: &str, mode: Mode, @@ -50541,7 +50482,7 @@ fn __action868< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action869< +fn __action867< >( source_code: &str, mode: Mode, @@ -50571,7 +50512,7 @@ fn __action869< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action870< +fn __action868< >( source_code: &str, mode: Mode, @@ -50601,7 +50542,7 @@ fn __action870< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action871< +fn __action869< >( source_code: &str, mode: Mode, @@ -50629,6 +50570,64 @@ fn __action871< ) } +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action870< +>( + source_code: &str, + mode: Mode, + __0: (TextSize, ast::Number, TextSize), + __1: (TextSize, TextSize, TextSize), +) -> ast::ParenthesizedExpr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action414( + source_code, + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action111( + source_code, + mode, + __temp0, + __0, + __1, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action871< +>( + source_code: &str, + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::ParenthesizedExpr, TextSize), + __2: (TextSize, TextSize, TextSize), +) -> ast::ParenthesizedExpr +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action414( + source_code, + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action113( + source_code, + mode, + __temp0, + __0, + __1, + __2, + ) +} + #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action872< @@ -57710,7 +57709,7 @@ fn __action1096< __7, ); let __temp0 = (__start0, __temp0, __end0); - __action816( + __action814( source_code, mode, __0, @@ -57750,7 +57749,7 @@ fn __action1097< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action816( + __action814( source_code, mode, __0, @@ -57791,7 +57790,7 @@ fn __action1098< __6, ); let __temp0 = (__start0, __temp0, __end0); - __action817( + __action815( source_code, mode, __0, @@ -57829,7 +57828,7 @@ fn __action1099< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action817( + __action815( source_code, mode, __0, @@ -57944,7 +57943,7 @@ fn __action1103< __2, ); let __temp0 = (__start0, __temp0, __end0); - __action792( + __action790( source_code, mode, __0, @@ -57972,7 +57971,7 @@ fn __action1104< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action792( + __action790( source_code, mode, __0, @@ -58388,7 +58387,7 @@ fn __action1119< __2, ); let __temp0 = (__start0, __temp0, __end0); - __action829( + __action827( source_code, mode, __0, @@ -58416,7 +58415,7 @@ fn __action1120< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action829( + __action827( source_code, mode, __0, @@ -58446,7 +58445,7 @@ fn __action1121< __2, ); let __temp0 = (__start0, __temp0, __end0); - __action830( + __action828( source_code, mode, __0, @@ -58474,7 +58473,7 @@ fn __action1122< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action830( + __action828( source_code, mode, __0, @@ -58539,7 +58538,7 @@ fn __action1124< __9, ); let __temp0 = (__start0, __temp0, __end0); - __action814( + __action812( source_code, mode, __0, @@ -58577,7 +58576,7 @@ fn __action1125< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action814( + __action812( source_code, mode, __0, @@ -58618,7 +58617,7 @@ fn __action1126< __8, ); let __temp0 = (__start0, __temp0, __end0); - __action815( + __action813( source_code, mode, __0, @@ -58654,7 +58653,7 @@ fn __action1127< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action815( + __action813( source_code, mode, __0, @@ -59433,7 +59432,7 @@ fn __action1149< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action828( + __action826( source_code, mode, __0, @@ -59467,7 +59466,7 @@ fn __action1150< __4, ); let __temp0 = (__start0, __temp0, __end0); - __action828( + __action826( source_code, mode, __0, @@ -61111,7 +61110,7 @@ fn __action1203< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action794( + __action792( source_code, mode, __0, @@ -61146,7 +61145,7 @@ fn __action1204< __4, ); let __temp0 = (__start0, __temp0, __end0); - __action796( + __action794( source_code, mode, __0, @@ -61630,7 +61629,7 @@ fn __action1220< __2, ); let __temp0 = (__start0, __temp0, __end0); - __action858( + __action856( source_code, mode, __0, @@ -61662,7 +61661,7 @@ fn __action1221< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action858( + __action856( source_code, mode, __0, @@ -62115,7 +62114,7 @@ fn __action1237< >( source_code: &str, mode: Mode, - __0: (TextSize, ast::Constant, TextSize), + __0: (TextSize, ast::Number, TextSize), ) -> ast::ParenthesizedExpr { let __start0 = __0.2; @@ -62939,7 +62938,7 @@ fn __action1264< >( source_code: &str, mode: Mode, - __0: (TextSize, ast::Constant, TextSize), + __0: (TextSize, ast::Number, TextSize), ) -> ast::ParenthesizedExpr { let __start0 = __0.2; @@ -64046,60 +64045,6 @@ fn __action1300< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action1301< ->( - source_code: &str, - mode: Mode, - __0: (TextSize, ast::Constant, TextSize), -) -> ast::ParenthesizedExpr -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action413( - source_code, - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action786( - source_code, - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1302< ->( - source_code: &str, - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, ast::ParenthesizedExpr, TextSize), -) -> ast::ParenthesizedExpr -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action413( - source_code, - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action787( - source_code, - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1303< >( source_code: &str, mode: Mode, @@ -64117,7 +64062,7 @@ fn __action1303< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action788( + __action786( source_code, mode, __0, @@ -64129,7 +64074,7 @@ fn __action1303< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1304< +fn __action1302< >( source_code: &str, mode: Mode, @@ -64146,7 +64091,7 @@ fn __action1304< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action789( + __action787( source_code, mode, __0, @@ -64157,7 +64102,7 @@ fn __action1304< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1305< +fn __action1303< >( source_code: &str, mode: Mode, @@ -64173,7 +64118,7 @@ fn __action1305< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action790( + __action788( source_code, mode, __0, @@ -64183,7 +64128,7 @@ fn __action1305< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1306< +fn __action1304< >( source_code: &str, mode: Mode, @@ -64200,7 +64145,7 @@ fn __action1306< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action791( + __action789( source_code, mode, __0, @@ -64211,7 +64156,7 @@ fn __action1306< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1307< +fn __action1305< >( source_code: &str, mode: Mode, @@ -64241,7 +64186,7 @@ fn __action1307< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1308< +fn __action1306< >( source_code: &str, mode: Mode, @@ -64267,7 +64212,7 @@ fn __action1308< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1309< +fn __action1307< >( source_code: &str, mode: Mode, @@ -64285,7 +64230,7 @@ fn __action1309< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action797( + __action795( source_code, mode, __0, @@ -64297,7 +64242,7 @@ fn __action1309< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1310< +fn __action1308< >( source_code: &str, mode: Mode, @@ -64315,7 +64260,7 @@ fn __action1310< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action798( + __action796( source_code, mode, __0, @@ -64327,7 +64272,7 @@ fn __action1310< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1311< +fn __action1309< >( source_code: &str, mode: Mode, @@ -64344,7 +64289,7 @@ fn __action1311< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action799( + __action797( source_code, mode, __0, @@ -64355,7 +64300,7 @@ fn __action1311< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1312< +fn __action1310< >( source_code: &str, mode: Mode, @@ -64373,7 +64318,7 @@ fn __action1312< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action800( + __action798( source_code, mode, __0, @@ -64385,7 +64330,7 @@ fn __action1312< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1313< +fn __action1311< >( source_code: &str, mode: Mode, @@ -64404,7 +64349,7 @@ fn __action1313< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action801( + __action799( source_code, mode, __0, @@ -64417,7 +64362,7 @@ fn __action1313< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1314< +fn __action1312< >( source_code: &str, mode: Mode, @@ -64435,7 +64380,7 @@ fn __action1314< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action803( + __action801( source_code, mode, __0, @@ -64447,7 +64392,7 @@ fn __action1314< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1315< +fn __action1313< >( source_code: &str, mode: Mode, @@ -64463,7 +64408,7 @@ fn __action1315< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action804( + __action802( source_code, mode, __0, @@ -64473,7 +64418,7 @@ fn __action1315< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1316< +fn __action1314< >( source_code: &str, mode: Mode, @@ -64494,7 +64439,7 @@ fn __action1316< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action806( + __action804( source_code, mode, __0, @@ -64509,7 +64454,7 @@ fn __action1316< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1317< +fn __action1315< >( source_code: &str, mode: Mode, @@ -64529,7 +64474,7 @@ fn __action1317< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action807( + __action805( source_code, mode, __0, @@ -64543,7 +64488,7 @@ fn __action1317< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1318< +fn __action1316< >( source_code: &str, mode: Mode, @@ -64560,7 +64505,7 @@ fn __action1318< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action808( + __action806( source_code, mode, __0, @@ -64571,7 +64516,7 @@ fn __action1318< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1319< +fn __action1317< >( source_code: &str, mode: Mode, @@ -64588,7 +64533,7 @@ fn __action1319< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action809( + __action807( source_code, mode, __0, @@ -64599,7 +64544,7 @@ fn __action1319< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1320< +fn __action1318< >( source_code: &str, mode: Mode, @@ -64615,7 +64560,7 @@ fn __action1320< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action810( + __action808( source_code, mode, __0, @@ -64625,7 +64570,7 @@ fn __action1320< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1321< +fn __action1319< >( source_code: &str, mode: Mode, @@ -64641,7 +64586,7 @@ fn __action1321< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action811( + __action809( source_code, mode, __0, @@ -64651,7 +64596,7 @@ fn __action1321< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1322< +fn __action1320< >( source_code: &str, mode: Mode, @@ -64668,7 +64613,7 @@ fn __action1322< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action812( + __action810( source_code, mode, __0, @@ -64679,7 +64624,7 @@ fn __action1322< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1323< +fn __action1321< >( source_code: &str, mode: Mode, @@ -64695,7 +64640,7 @@ fn __action1323< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action813( + __action811( source_code, mode, __0, @@ -64705,7 +64650,7 @@ fn __action1323< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1324< +fn __action1322< >( source_code: &str, mode: Mode, @@ -64722,7 +64667,7 @@ fn __action1324< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action818( + __action816( source_code, mode, __0, @@ -64733,7 +64678,7 @@ fn __action1324< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1325< +fn __action1323< >( source_code: &str, mode: Mode, @@ -64751,7 +64696,7 @@ fn __action1325< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action819( + __action817( source_code, mode, __0, @@ -64763,7 +64708,7 @@ fn __action1325< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1326< +fn __action1324< >( source_code: &str, mode: Mode, @@ -64780,7 +64725,7 @@ fn __action1326< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action820( + __action818( source_code, mode, __0, @@ -64791,7 +64736,7 @@ fn __action1326< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1327< +fn __action1325< >( source_code: &str, mode: Mode, @@ -64808,7 +64753,35 @@ fn __action1327< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action821( + __action819( + source_code, + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1326< +>( + source_code: &str, + mode: Mode, + __0: (TextSize, Vec, TextSize), + __1: (TextSize, token::Tok, TextSize), +) -> ast::ParenthesizedExpr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action413( + source_code, + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action820( source_code, mode, __0, @@ -64817,6 +64790,32 @@ fn __action1327< ) } +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1327< +>( + source_code: &str, + mode: Mode, + __0: (TextSize, Vec, TextSize), +) -> ast::ParenthesizedExpr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action413( + source_code, + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action821( + source_code, + mode, + __0, + __temp0, + ) +} + #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action1328< @@ -64877,9 +64876,9 @@ fn __action1330< >( source_code: &str, mode: Mode, - __0: (TextSize, Vec, TextSize), - __1: (TextSize, token::Tok, TextSize), -) -> ast::ParenthesizedExpr + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, Vec, TextSize), +) -> ast::Stmt { let __start0 = __1.2; let __end0 = __1.2; @@ -64905,8 +64904,8 @@ fn __action1331< >( source_code: &str, mode: Mode, - __0: (TextSize, Vec, TextSize), -) -> ast::ParenthesizedExpr + __0: (TextSize, String, TextSize), +) -> ast::Identifier { let __start0 = __0.2; let __end0 = __0.2; @@ -64928,60 +64927,6 @@ fn __action1331< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action1332< ->( - source_code: &str, - mode: Mode, - __0: (TextSize, token::Tok, TextSize), - __1: (TextSize, Vec, TextSize), -) -> ast::Stmt -{ - let __start0 = __1.2; - let __end0 = __1.2; - let __temp0 = __action413( - source_code, - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action826( - source_code, - mode, - __0, - __1, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1333< ->( - source_code: &str, - mode: Mode, - __0: (TextSize, String, TextSize), -) -> ast::Identifier -{ - let __start0 = __0.2; - let __end0 = __0.2; - let __temp0 = __action413( - source_code, - mode, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action827( - source_code, - mode, - __0, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action1334< >( source_code: &str, mode: Mode, @@ -65011,7 +64956,7 @@ fn __action1334< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1335< +fn __action1333< >( source_code: &str, mode: Mode, @@ -65037,7 +64982,7 @@ fn __action1335< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1336< +fn __action1334< >( source_code: &str, mode: Mode, @@ -65067,7 +65012,7 @@ fn __action1336< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1337< +fn __action1335< >( source_code: &str, mode: Mode, @@ -65093,7 +65038,7 @@ fn __action1337< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1338< +fn __action1336< >( source_code: &str, mode: Mode, @@ -65109,7 +65054,7 @@ fn __action1338< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action831( + __action829( source_code, mode, __0, @@ -65119,7 +65064,7 @@ fn __action1338< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1339< +fn __action1337< >( source_code: &str, mode: Mode, @@ -65138,7 +65083,7 @@ fn __action1339< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action832( + __action830( source_code, mode, __0, @@ -65151,7 +65096,7 @@ fn __action1339< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1340< +fn __action1338< >( source_code: &str, mode: Mode, @@ -65169,7 +65114,7 @@ fn __action1340< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action833( + __action831( source_code, mode, __0, @@ -65181,7 +65126,7 @@ fn __action1340< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1341< +fn __action1339< >( source_code: &str, mode: Mode, @@ -65197,7 +65142,7 @@ fn __action1341< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action834( + __action832( source_code, mode, __0, @@ -65207,7 +65152,7 @@ fn __action1341< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1342< +fn __action1340< >( source_code: &str, mode: Mode, @@ -65224,7 +65169,7 @@ fn __action1342< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action835( + __action833( source_code, mode, __0, @@ -65235,7 +65180,7 @@ fn __action1342< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1343< +fn __action1341< >( source_code: &str, mode: Mode, @@ -65254,7 +65199,7 @@ fn __action1343< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action836( + __action834( source_code, mode, __0, @@ -65267,7 +65212,7 @@ fn __action1343< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1344< +fn __action1342< >( source_code: &str, mode: Mode, @@ -65283,7 +65228,7 @@ fn __action1344< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action837( + __action835( source_code, mode, __0, @@ -65293,7 +65238,7 @@ fn __action1344< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1345< +fn __action1343< >( source_code: &str, mode: Mode, @@ -65309,7 +65254,7 @@ fn __action1345< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action838( + __action836( source_code, mode, __0, @@ -65319,7 +65264,7 @@ fn __action1345< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1346< +fn __action1344< >( source_code: &str, mode: Mode, @@ -65336,7 +65281,7 @@ fn __action1346< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action839( + __action837( source_code, mode, __0, @@ -65347,7 +65292,7 @@ fn __action1346< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1347< +fn __action1345< >( source_code: &str, mode: Mode, @@ -65376,7 +65321,7 @@ fn __action1347< &__end1, ); let __temp1 = (__start1, __temp1, __end1); - __action840( + __action838( source_code, mode, __0, @@ -65391,7 +65336,7 @@ fn __action1347< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1348< +fn __action1346< >( source_code: &str, mode: Mode, @@ -65407,7 +65352,7 @@ fn __action1348< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action841( + __action839( source_code, mode, __0, @@ -65417,7 +65362,7 @@ fn __action1348< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1349< +fn __action1347< >( source_code: &str, mode: Mode, @@ -65433,7 +65378,7 @@ fn __action1349< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action842( + __action840( source_code, mode, __0, @@ -65443,7 +65388,7 @@ fn __action1349< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1350< +fn __action1348< >( source_code: &str, mode: Mode, @@ -65459,7 +65404,7 @@ fn __action1350< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action843( + __action841( source_code, mode, __0, @@ -65469,7 +65414,7 @@ fn __action1350< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1351< +fn __action1349< >( source_code: &str, mode: Mode, @@ -65485,7 +65430,7 @@ fn __action1351< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action844( + __action842( source_code, mode, __0, @@ -65495,7 +65440,7 @@ fn __action1351< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1352< +fn __action1350< >( source_code: &str, mode: Mode, @@ -65511,7 +65456,7 @@ fn __action1352< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action845( + __action843( source_code, mode, __0, @@ -65521,7 +65466,7 @@ fn __action1352< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1353< +fn __action1351< >( source_code: &str, mode: Mode, @@ -65537,7 +65482,7 @@ fn __action1353< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action846( + __action844( source_code, mode, __0, @@ -65547,7 +65492,7 @@ fn __action1353< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1354< +fn __action1352< >( source_code: &str, mode: Mode, @@ -65563,7 +65508,7 @@ fn __action1354< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action847( + __action845( source_code, mode, __0, @@ -65573,7 +65518,7 @@ fn __action1354< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1355< +fn __action1353< >( source_code: &str, mode: Mode, @@ -65589,7 +65534,7 @@ fn __action1355< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action848( + __action846( source_code, mode, __0, @@ -65599,7 +65544,7 @@ fn __action1355< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1356< +fn __action1354< >( source_code: &str, mode: Mode, @@ -65615,7 +65560,7 @@ fn __action1356< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action849( + __action847( source_code, mode, __0, @@ -65625,7 +65570,7 @@ fn __action1356< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1357< +fn __action1355< >( source_code: &str, mode: Mode, @@ -65641,7 +65586,7 @@ fn __action1357< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action850( + __action848( source_code, mode, __0, @@ -65651,7 +65596,7 @@ fn __action1357< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1358< +fn __action1356< >( source_code: &str, mode: Mode, @@ -65668,7 +65613,7 @@ fn __action1358< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action851( + __action849( source_code, mode, __0, @@ -65679,7 +65624,7 @@ fn __action1358< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1359< +fn __action1357< >( source_code: &str, mode: Mode, @@ -65698,7 +65643,7 @@ fn __action1359< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action852( + __action850( source_code, mode, __0, @@ -65711,7 +65656,7 @@ fn __action1359< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1360< +fn __action1358< >( source_code: &str, mode: Mode, @@ -65729,7 +65674,7 @@ fn __action1360< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action853( + __action851( source_code, mode, __0, @@ -65741,7 +65686,7 @@ fn __action1360< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1361< +fn __action1359< >( source_code: &str, mode: Mode, @@ -65761,7 +65706,7 @@ fn __action1361< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action854( + __action852( source_code, mode, __0, @@ -65775,7 +65720,7 @@ fn __action1361< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1362< +fn __action1360< >( source_code: &str, mode: Mode, @@ -65794,7 +65739,7 @@ fn __action1362< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action855( + __action853( source_code, mode, __0, @@ -65807,7 +65752,7 @@ fn __action1362< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1363< +fn __action1361< >( source_code: &str, mode: Mode, @@ -65829,7 +65774,7 @@ fn __action1363< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action856( + __action854( source_code, mode, __0, @@ -65845,7 +65790,7 @@ fn __action1363< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1364< +fn __action1362< >( source_code: &str, mode: Mode, @@ -65866,7 +65811,7 @@ fn __action1364< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action857( + __action855( source_code, mode, __0, @@ -65881,7 +65826,7 @@ fn __action1364< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1365< +fn __action1363< >( source_code: &str, mode: Mode, @@ -65899,7 +65844,7 @@ fn __action1365< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action859( + __action857( source_code, mode, __0, @@ -65911,7 +65856,7 @@ fn __action1365< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1366< +fn __action1364< >( source_code: &str, mode: Mode, @@ -65927,7 +65872,7 @@ fn __action1366< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action860( + __action858( source_code, mode, __0, @@ -65937,7 +65882,7 @@ fn __action1366< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1367< +fn __action1365< >( source_code: &str, mode: Mode, @@ -65955,7 +65900,7 @@ fn __action1367< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action861( + __action859( source_code, mode, __0, @@ -65967,7 +65912,7 @@ fn __action1367< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1368< +fn __action1366< >( source_code: &str, mode: Mode, @@ -65985,7 +65930,7 @@ fn __action1368< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action862( + __action860( source_code, mode, __0, @@ -65997,7 +65942,7 @@ fn __action1368< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1369< +fn __action1367< >( source_code: &str, mode: Mode, @@ -66020,7 +65965,7 @@ fn __action1369< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action864( + __action862( source_code, mode, __0, @@ -66037,7 +65982,7 @@ fn __action1369< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1370< +fn __action1368< >( source_code: &str, mode: Mode, @@ -66060,7 +66005,7 @@ fn __action1370< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action865( + __action863( source_code, mode, __0, @@ -66077,7 +66022,7 @@ fn __action1370< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1371< +fn __action1369< >( source_code: &str, mode: Mode, @@ -66099,7 +66044,7 @@ fn __action1371< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action866( + __action864( source_code, mode, __0, @@ -66115,7 +66060,7 @@ fn __action1371< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1372< +fn __action1370< >( source_code: &str, mode: Mode, @@ -66133,7 +66078,7 @@ fn __action1372< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action867( + __action865( source_code, mode, __0, @@ -66145,7 +66090,7 @@ fn __action1372< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1373< +fn __action1371< >( source_code: &str, mode: Mode, @@ -66161,7 +66106,7 @@ fn __action1373< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action868( + __action866( source_code, mode, __0, @@ -66171,7 +66116,7 @@ fn __action1373< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1374< +fn __action1372< >( source_code: &str, mode: Mode, @@ -66188,7 +66133,7 @@ fn __action1374< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action869( + __action867( source_code, mode, __0, @@ -66199,7 +66144,7 @@ fn __action1374< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1375< +fn __action1373< >( source_code: &str, mode: Mode, @@ -66216,7 +66161,35 @@ fn __action1375< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action870( + __action868( + source_code, + mode, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1374< +>( + source_code: &str, + mode: Mode, + __0: (TextSize, token::Tok, TextSize), + __1: (TextSize, ast::ParenthesizedExpr, TextSize), +) -> ast::ParenthesizedExpr +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action413( + source_code, + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action869( source_code, mode, __0, @@ -66225,6 +66198,32 @@ fn __action1375< ) } +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1375< +>( + source_code: &str, + mode: Mode, + __0: (TextSize, ast::Number, TextSize), +) -> ast::ParenthesizedExpr +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action413( + source_code, + mode, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action870( + source_code, + mode, + __0, + __temp0, + ) +} + #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action1376< @@ -71047,7 +71046,7 @@ fn __action1529< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1311( + __action1309( source_code, mode, __0, @@ -71073,7 +71072,7 @@ fn __action1530< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1311( + __action1309( source_code, mode, __0, @@ -71101,7 +71100,7 @@ fn __action1531< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1313( + __action1311( source_code, mode, __0, @@ -71131,7 +71130,7 @@ fn __action1532< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1313( + __action1311( source_code, mode, __0, @@ -71591,7 +71590,7 @@ fn __action1549< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1324( + __action1322( source_code, mode, __0, @@ -71617,7 +71616,7 @@ fn __action1550< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1324( + __action1322( source_code, mode, __0, @@ -72395,7 +72394,7 @@ fn __action1573< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1316( + __action1314( source_code, mode, __0, @@ -72429,7 +72428,7 @@ fn __action1574< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1316( + __action1314( source_code, mode, __0, @@ -72462,7 +72461,7 @@ fn __action1575< __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1317( + __action1315( source_code, mode, __0, @@ -72494,7 +72493,7 @@ fn __action1576< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1317( + __action1315( source_code, mode, __0, @@ -72780,7 +72779,7 @@ fn __action1585< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1314( + __action1312( source_code, mode, __0, @@ -72808,7 +72807,7 @@ fn __action1586< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1314( + __action1312( source_code, mode, __0, @@ -72836,7 +72835,7 @@ fn __action1587< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1315( + __action1313( source_code, mode, __temp0, @@ -72860,7 +72859,7 @@ fn __action1588< __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1315( + __action1313( source_code, mode, __temp0, @@ -72880,7 +72879,7 @@ fn __action1589< { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action1334( + let __temp0 = __action1332( source_code, mode, __0, @@ -72906,7 +72905,7 @@ fn __action1590< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action1335( + let __temp0 = __action1333( source_code, mode, __0, @@ -72934,7 +72933,7 @@ fn __action1591< { let __start0 = __2.0; let __end0 = __4.2; - let __temp0 = __action1334( + let __temp0 = __action1332( source_code, mode, __2, @@ -72964,7 +72963,7 @@ fn __action1592< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action1335( + let __temp0 = __action1333( source_code, mode, __2, @@ -72992,7 +72991,7 @@ fn __action1593< { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action1336( + let __temp0 = __action1334( source_code, mode, __0, @@ -73018,7 +73017,7 @@ fn __action1594< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action1337( + let __temp0 = __action1335( source_code, mode, __0, @@ -73046,7 +73045,7 @@ fn __action1595< { let __start0 = __2.0; let __end0 = __4.2; - let __temp0 = __action1336( + let __temp0 = __action1334( source_code, mode, __2, @@ -73076,7 +73075,7 @@ fn __action1596< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action1337( + let __temp0 = __action1335( source_code, mode, __2, @@ -77492,7 +77491,7 @@ fn __action1723< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1347( + __action1345( source_code, mode, __0, @@ -77524,7 +77523,7 @@ fn __action1724< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1347( + __action1345( source_code, mode, __0, @@ -77615,7 +77614,7 @@ fn __action1727< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action793( + __action791( source_code, mode, __0, @@ -77645,7 +77644,7 @@ fn __action1728< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action793( + __action791( source_code, mode, __0, @@ -78299,7 +78298,7 @@ fn __action1748< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1322( + __action1320( source_code, mode, __0, @@ -78325,7 +78324,7 @@ fn __action1749< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1322( + __action1320( source_code, mode, __0, @@ -78454,7 +78453,7 @@ fn __action1754< __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1312( + __action1310( source_code, mode, __temp0, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__ann_assign_name.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__ann_assign_name.snap index 3c0df82555ece..656770c0946b2 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__ann_assign_name.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__ann_assign_name.snap @@ -21,8 +21,8 @@ expression: parse_ast }, ), value: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 9..10, value: Int( 1, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_attribute.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_attribute.snap index 32a8e89e7d901..e269b2e4d45ed 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_attribute.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_attribute.snap @@ -29,24 +29,24 @@ expression: parse_ast ExprTuple { range: 6..15, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 7..8, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 10..11, value: Int( 2, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 13..14, value: Int( 3, 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 27d264d04fcad..d7775fae99876 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 @@ -18,24 +18,24 @@ expression: parse_ast ExprTuple { range: 9..18, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 10..11, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 13..14, value: Int( 2, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 16..17, value: Int( 3, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_list.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_list.snap index 3ff39502f346f..436e3f449f885 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_list.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_list.snap @@ -34,24 +34,24 @@ expression: parse_ast ExprTuple { range: 9..18, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 10..11, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 13..14, value: Int( 2, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 16..17, value: Int( 3, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_list_comp.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_list_comp.snap index 87867da60d3e9..d73b326211c80 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_list_comp.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_list_comp.snap @@ -39,24 +39,24 @@ expression: parse_ast ExprTuple { range: 16..25, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 17..18, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 20..21, value: Int( 2, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 23..24, value: Int( 3, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_name.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_name.snap index 000931fc1951c..c3b835c27e2ec 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_name.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_name.snap @@ -19,24 +19,24 @@ expression: parse_ast ExprTuple { range: 4..13, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 5..6, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 8..9, value: Int( 2, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 11..12, value: Int( 3, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_named_expr.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_named_expr.snap index 7cb15989d9d45..4177eaaeb8945 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_named_expr.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_named_expr.snap @@ -16,8 +16,8 @@ expression: parse_ast ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 7..8, value: Int( 1, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_set_comp.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_set_comp.snap index 92049ffffb042..f5c256cd2541a 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_set_comp.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_set_comp.snap @@ -39,24 +39,24 @@ expression: parse_ast ExprTuple { range: 16..25, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 17..18, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 20..21, value: Int( 2, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 23..24, value: Int( 3, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_starred.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_starred.snap index 035f4aa0ce2fd..d6401710ed926 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_starred.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_starred.snap @@ -40,24 +40,24 @@ expression: parse_ast ExprTuple { range: 10..19, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 11..12, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 14..15, value: Int( 2, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 17..18, value: Int( 3, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_subscript.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_subscript.snap index 6b1b52325b6ca..abdb9e8088c9c 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_subscript.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_subscript.snap @@ -32,24 +32,24 @@ expression: parse_ast ExprTuple { range: 7..16, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 8..9, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 11..12, value: Int( 2, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 14..15, value: Int( 3, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_tuple.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_tuple.snap index 455b995728476..ac332e78f70e9 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_tuple.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__assign_tuple.snap @@ -34,24 +34,24 @@ expression: parse_ast ExprTuple { range: 9..18, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 10..11, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 13..14, value: Int( 2, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 16..17, value: Int( 3, 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 8951904b64c95..9700d860a8452 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 @@ -10,8 +10,8 @@ expression: parse_ast items: [ WithItem { range: 5..11, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 5..6, value: Int( 1, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_attribute.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_attribute.snap index e0c517de834aa..6286c12485136 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_attribute.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_attribute.snap @@ -28,24 +28,24 @@ expression: parse_ast ExprTuple { range: 7..16, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 8..9, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 11..12, value: Int( 2, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 14..15, value: Int( 3, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_name.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_name.snap index 5bdb12571d475..760e6d3638268 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_name.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_name.snap @@ -14,8 +14,8 @@ expression: parse_ast }, ), op: Add, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 5..6, value: Int( 1, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_subscript.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_subscript.snap index a427014c7b999..6b1feb1798485 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_subscript.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__context__tests__aug_assign_subscript.snap @@ -31,24 +31,24 @@ expression: parse_ast ExprTuple { range: 8..17, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 9..10, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 12..13, value: Int( 2, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 15..16, value: Int( 3, 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 d2928c89a4a6d..4fc404217901d 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 @@ -43,8 +43,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 14..16, value: Int( 20, @@ -64,8 +64,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 20..22, value: Int( 30, 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 892d7d8cd122d..790aebd17cabc 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 @@ -80,8 +80,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 23..25, value: Int( 20, @@ -101,8 +101,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 29..31, value: Int( 30, 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 eb52560edc61d..b3ca641a0b602 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 @@ -89,8 +89,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 27..29, value: Int( 20, @@ -110,8 +110,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 33..35, value: Int( 30, 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 8c36f8acb036e..ce6f07a190701 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 @@ -89,8 +89,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 27..29, value: Int( 20, @@ -110,8 +110,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 33..35, value: Int( 30, 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 4ef26c79570cd..aee38b6fa5823 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 @@ -41,8 +41,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 11..13, value: Int( 20, @@ -62,8 +62,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 17..19, value: Int( 30, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_kw_only_args.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_kw_only_args.snap index c40d94e9b672f..38d20e2b292c7 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_kw_only_args.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_kw_only_args.snap @@ -57,8 +57,8 @@ Ok( kwarg: None, }, ), - body: Constant( - ExprConstant { + body: NumberLiteral( + ExprNumberLiteral { range: 19..20, value: Int( 1, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_kw_only_args_with_defaults.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_kw_only_args_with_defaults.snap index 84eec0e2bfc82..3defc8ae80cc3 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_kw_only_args_with_defaults.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_kw_only_args_with_defaults.snap @@ -40,8 +40,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 15..17, value: Int( 20, @@ -61,8 +61,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 21..23, value: Int( 30, @@ -75,8 +75,8 @@ Ok( kwarg: None, }, ), - body: Constant( - ExprConstant { + body: NumberLiteral( + ExprNumberLiteral { range: 25..26, value: Int( 1, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_no_args.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_no_args.snap index 305dc3c54ff69..3008200f440ec 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_no_args.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_no_args.snap @@ -11,8 +11,8 @@ Ok( ExprLambda { range: 0..9, parameters: None, - body: Constant( - ExprConstant { + body: NumberLiteral( + ExprNumberLiteral { range: 8..9, value: Int( 1, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_and_kw_only_args.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_and_kw_only_args.snap index cdd389a9a4ea7..9f137fa1ace22 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_and_kw_only_args.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_and_kw_only_args.snap @@ -82,8 +82,8 @@ Ok( kwarg: None, }, ), - body: Constant( - ExprConstant { + body: NumberLiteral( + ExprNumberLiteral { range: 25..26, value: Int( 0, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_args.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_args.snap index 895dd7d413e2f..4af124410e137 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_args.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_args.snap @@ -57,8 +57,8 @@ Ok( kwarg: None, }, ), - body: Constant( - ExprConstant { + body: NumberLiteral( + ExprNumberLiteral { range: 16..17, value: Int( 1, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_args_with_defaults.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_args_with_defaults.snap index 07c2993d3082d..7f12863609c13 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_args_with_defaults.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__function__tests__lambda_pos_args_with_defaults.snap @@ -38,8 +38,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 12..14, value: Int( 20, @@ -59,8 +59,8 @@ Ok( annotation: None, }, default: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 18..20, value: Int( 30, @@ -75,8 +75,8 @@ Ok( kwarg: None, }, ), - body: Constant( - ExprConstant { + body: NumberLiteral( + ExprNumberLiteral { range: 22..23, value: Int( 1, 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 8a488120eacb1..7e5c892feac09 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 @@ -7,46 +7,34 @@ Dict( range: 0..25, keys: [ Some( - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 1..4, - value: Str( - StringConstant { - value: "a", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "a", + unicode: false, + implicit_concatenated: false, }, ), ), None, Some( - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 16..19, - value: Str( - StringConstant { - value: "d", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "d", + unicode: false, + implicit_concatenated: false, }, ), ), ], values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 6..9, - value: Str( - StringConstant { - value: "b", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "b", + unicode: false, + implicit_concatenated: false, }, ), Name( @@ -56,16 +44,12 @@ Dict( ctx: Load, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 21..24, - value: Str( - StringConstant { - value: "e", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "e", + unicode: false, + implicit_concatenated: false, }, ), ], diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__fstrings.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__fstrings.snap index f1e664a40990c..7263bb506e71f 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__fstrings.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__fstrings.snap @@ -13,16 +13,12 @@ expression: parse_ast FormattedValue( ExprFormattedValue { range: 2..8, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 3..7, - value: Str( - StringConstant { - value: " f", - unicode: false, - implicit_concatenated: false, - }, - ), + value: " f", + unicode: false, + implicit_concatenated: false, }, ), debug_text: None, @@ -78,8 +74,8 @@ expression: parse_ast ExprTuple { range: 24..26, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 24..25, value: Int( 3, @@ -114,8 +110,8 @@ expression: parse_ast value: Compare( ExprCompare { range: 32..36, - left: Constant( - ExprConstant { + left: NumberLiteral( + ExprNumberLiteral { range: 32..33, value: Int( 3, @@ -126,8 +122,8 @@ expression: parse_ast NotEq, ], comparators: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 35..36, value: Int( 4, @@ -166,8 +162,8 @@ expression: parse_ast FormattedValue( ExprFormattedValue { range: 42..54, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 43..44, value: Int( 3, @@ -184,16 +180,12 @@ expression: parse_ast FormattedValue( ExprFormattedValue { range: 45..50, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 46..49, - value: Str( - StringConstant { - value: "}", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "}", + unicode: false, + implicit_concatenated: false, }, ), debug_text: None, @@ -201,16 +193,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 50..53, - value: Str( - StringConstant { - value: ">10", - unicode: false, - implicit_concatenated: false, - }, - ), + value: ">10", + unicode: false, + implicit_concatenated: false, }, ), ], @@ -236,8 +224,8 @@ expression: parse_ast FormattedValue( ExprFormattedValue { range: 58..70, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 59..60, value: Int( 3, @@ -254,16 +242,12 @@ expression: parse_ast FormattedValue( ExprFormattedValue { range: 61..66, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 62..65, - value: Str( - StringConstant { - value: "{", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "{", + unicode: false, + implicit_concatenated: false, }, ), debug_text: None, @@ -271,16 +255,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 66..69, - value: Str( - StringConstant { - value: ">10", - unicode: false, - implicit_concatenated: false, - }, - ), + value: ">10", + unicode: false, + implicit_concatenated: false, }, ), ], @@ -358,16 +338,12 @@ expression: parse_ast ExprFString { range: 100..105, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 100..105, - value: Str( - StringConstant { - value: ".3f ", - unicode: false, - implicit_concatenated: false, - }, - ), + value: ".3f ", + unicode: false, + implicit_concatenated: false, }, ), ], @@ -430,16 +406,16 @@ expression: parse_ast ExprTuple { range: 132..136, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 132..133, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 135..136, value: Int( 2, @@ -483,8 +459,8 @@ expression: parse_ast FormattedValue( ExprFormattedValue { range: 149..162, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 150..156, value: Float( 3.1415, @@ -503,16 +479,12 @@ expression: parse_ast ExprFString { range: 158..161, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 158..161, - value: Str( - StringConstant { - value: ".1f", - unicode: false, - implicit_concatenated: false, - }, - ), + value: ".1f", + unicode: false, + implicit_concatenated: false, }, ), ], @@ -533,16 +505,12 @@ expression: parse_ast ExprFString { range: 164..168, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 164..168, - value: Str( - StringConstant { - value: "*^20", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "*^20", + unicode: false, + implicit_concatenated: false, }, ), ], @@ -570,16 +538,12 @@ expression: parse_ast ExprFString { range: 173..201, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 174..186, - value: Str( - StringConstant { - value: "foo bar ", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "foo bar ", + unicode: false, + implicit_concatenated: true, }, ), FormattedValue( @@ -610,16 +574,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 193..200, - value: Str( - StringConstant { - value: " baz", - unicode: false, - implicit_concatenated: true, - }, - ), + value: " baz", + unicode: false, + implicit_concatenated: true, }, ), ], @@ -629,8 +589,8 @@ expression: parse_ast ), ], values: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 203..205, value: Int( 10, @@ -658,16 +618,12 @@ expression: parse_ast pattern: MatchValue( PatternMatchValue { range: 227..232, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 227..232, - value: Str( - StringConstant { - value: "one", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "one", + unicode: false, + implicit_concatenated: false, }, ), }, @@ -686,16 +642,12 @@ expression: parse_ast pattern: MatchValue( PatternMatchValue { range: 256..284, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 256..284, - value: Str( - StringConstant { - value: "implicitly concatenated", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "implicitly concatenated", + unicode: false, + implicit_concatenated: true, }, ), }, @@ -719,16 +671,12 @@ expression: parse_ast ExprFString { range: 300..317, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 302..303, - value: Str( - StringConstant { - value: "\\", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\\", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( @@ -746,16 +694,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 308..309, - value: Str( - StringConstant { - value: "\\", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\\", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( @@ -775,16 +719,12 @@ expression: parse_ast ExprFString { range: 314..315, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 314..315, - value: Str( - StringConstant { - value: "\\", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\\", + unicode: false, + implicit_concatenated: false, }, ), ], @@ -807,16 +747,12 @@ expression: parse_ast ExprFString { range: 318..332, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 320..331, - value: Str( - StringConstant { - value: "\\{foo\\}", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\\{foo\\}", + unicode: false, + implicit_concatenated: false, }, ), ], @@ -849,16 +785,12 @@ expression: parse_ast ExprFString { range: 347..369, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 347..369, - value: Str( - StringConstant { - value: "x\n y\n z\n", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "x\n y\n z\n", + unicode: false, + implicit_concatenated: false, }, ), ], diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__fstrings_with_unicode.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__fstrings_with_unicode.snap index b10d76f60f49f..587845166d0c7 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__fstrings_with_unicode.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__fstrings_with_unicode.snap @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..29, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 2..5, - value: Str( - StringConstant { - value: "foo", - unicode: true, - implicit_concatenated: true, - }, - ), + value: "foo", + unicode: true, + implicit_concatenated: true, }, ), FormattedValue( @@ -37,16 +33,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 17..28, - value: Str( - StringConstant { - value: "baz some", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "baz some", + unicode: false, + implicit_concatenated: true, }, ), ], @@ -62,16 +54,12 @@ expression: parse_ast ExprFString { range: 30..59, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 31..34, - value: Str( - StringConstant { - value: "foo", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "foo", + unicode: false, + implicit_concatenated: true, }, ), FormattedValue( @@ -89,16 +77,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 47..58, - value: Str( - StringConstant { - value: "baz some", - unicode: true, - implicit_concatenated: true, - }, - ), + value: "baz some", + unicode: true, + implicit_concatenated: true, }, ), ], @@ -114,16 +98,12 @@ expression: parse_ast ExprFString { range: 60..89, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 61..64, - value: Str( - StringConstant { - value: "foo", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "foo", + unicode: false, + implicit_concatenated: true, }, ), FormattedValue( @@ -141,16 +121,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 76..88, - value: Str( - StringConstant { - value: "baz some", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "baz some", + unicode: false, + implicit_concatenated: true, }, ), ], @@ -166,16 +142,12 @@ expression: parse_ast ExprFString { range: 90..128, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 92..103, - value: Str( - StringConstant { - value: "foobar ", - unicode: true, - implicit_concatenated: true, - }, - ), + value: "foobar ", + unicode: true, + implicit_concatenated: true, }, ), FormattedValue( @@ -193,16 +165,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 108..127, - value: Str( - StringConstant { - value: " reallybarno", - unicode: false, - implicit_concatenated: true, - }, - ), + value: " reallybarno", + unicode: false, + implicit_concatenated: true, }, ), ], 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 b5ffa4e7a6436..5d3cf3b2769a2 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 @@ -8,16 +8,12 @@ Call( func: Attribute( ExprAttribute { range: 0..8, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..3, - value: Str( - StringConstant { - value: " ", - unicode: false, - implicit_concatenated: false, - }, - ), + value: " ", + unicode: false, + implicit_concatenated: false, }, ), attr: Identifier { @@ -67,16 +63,12 @@ Call( body: BinOp( ExprBinOp { range: 43..61, - left: Constant( - ExprConstant { + left: StringLiteral( + ExprStringLiteral { range: 43..53, - value: Str( - StringConstant { - value: "LIMIT %d", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "LIMIT %d", + unicode: false, + implicit_concatenated: false, }, ), op: Mod, @@ -89,10 +81,9 @@ Call( ), }, ), - orelse: Constant( - ExprConstant { + orelse: NoneLiteral( + ExprNoneLiteral { range: 76..80, - value: None, }, ), }, @@ -110,16 +101,12 @@ Call( body: BinOp( ExprBinOp { range: 91..111, - left: Constant( - ExprConstant { + left: StringLiteral( + ExprStringLiteral { range: 91..102, - value: Str( - StringConstant { - value: "OFFSET %d", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "OFFSET %d", + unicode: false, + implicit_concatenated: false, }, ), op: Mod, @@ -132,10 +119,9 @@ Call( ), }, ), - orelse: Constant( - ExprConstant { + orelse: NoneLiteral( + ExprNoneLiteral { range: 128..132, - value: None, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__ipython_escape_commands.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__ipython_escape_commands.snap index 240f724d1b5ba..1ec5ddd1fdee6 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__ipython_escape_commands.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__ipython_escape_commands.snap @@ -221,8 +221,8 @@ Module( arguments: Arguments { range: 725..728, args: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 726..727, value: Int( 5, 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 cc9c5dd5e913d..79b81f92449e3 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 @@ -11,23 +11,19 @@ expression: parse_ast range: 7..18, keys: [ Some( - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 8..14, - value: Str( - StringConstant { - value: "test", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "test", + unicode: false, + implicit_concatenated: false, }, ), ), ], values: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 16..17, value: Int( 1, @@ -98,31 +94,23 @@ expression: parse_ast range: 80..97, keys: [ Some( - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 81..88, - value: Str( - StringConstant { - value: "label", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "label", + unicode: false, + implicit_concatenated: false, }, ), ), ], values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 90..96, - value: Str( - StringConstant { - value: "test", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "test", + unicode: false, + implicit_concatenated: false, }, ), ], @@ -135,16 +123,12 @@ expression: parse_ast PatternMatchMapping { range: 108..155, keys: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 118..125, - value: Str( - StringConstant { - value: "label", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "label", + unicode: false, + implicit_concatenated: false, }, ), ], @@ -253,8 +237,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 197..198, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 197..198, value: Int( 0, @@ -266,8 +250,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 200..201, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 200..201, value: Int( 1, @@ -293,8 +277,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 217..218, value: Int( 0, @@ -328,8 +312,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 238..239, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 238..239, value: Int( 0, @@ -341,8 +325,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 241..242, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 241..242, value: Int( 1, @@ -368,8 +352,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 258..259, value: Int( 0, @@ -403,8 +387,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 279..280, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 279..280, value: Int( 0, @@ -430,8 +414,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 296..297, value: Int( 0, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__match_as_identifier.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__match_as_identifier.snap index af623dab7c107..6591b7c9d0baa 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__match_as_identifier.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__match_as_identifier.snap @@ -627,8 +627,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 520..521, value: Int( 1, @@ -663,8 +663,8 @@ expression: "parse_suite(source, \"\").unwrap()" pattern: MatchValue( PatternMatchValue { range: 550..551, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 550..551, value: Int( 1, @@ -687,8 +687,8 @@ expression: "parse_suite(source, \"\").unwrap()" pattern: MatchValue( PatternMatchValue { range: 567..568, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 567..568, value: Int( 2, @@ -804,8 +804,8 @@ expression: "parse_suite(source, \"\").unwrap()" arguments: Arguments { range: 631..635, args: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 632..634, value: Int( 12, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__numeric_literals.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__numeric_literals.snap index 183ac67430405..c43a803b8992e 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__numeric_literals.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__numeric_literals.snap @@ -15,8 +15,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 4..13, value: Int( 123456789, @@ -37,8 +37,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 18..24, value: Int( 123456, @@ -59,8 +59,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 29..31, value: Float( 0.1, @@ -81,8 +81,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 36..38, value: Float( 1.0, @@ -103,8 +103,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 43..47, value: Float( 10.0, @@ -125,8 +125,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 52..56, value: Float( 0.1, @@ -147,8 +147,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 61..73, value: Float( 1.00000001, @@ -169,8 +169,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 78..97, value: Float( 123456789.12345679, @@ -191,8 +191,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 102..131, value: Float( inf, @@ -213,8 +213,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 136..155, value: Float( inf, @@ -235,8 +235,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 160..170, value: Complex { real: 0.0, @@ -258,8 +258,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 175..195, value: Complex { real: 0.0, @@ -281,8 +281,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 200..207, value: Int( 727756, @@ -303,8 +303,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 212..218, value: Int( 11, @@ -325,8 +325,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 223..228, value: Int( 511, @@ -347,8 +347,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 233..244, value: Float( 6e-9, @@ -369,8 +369,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 249..254, value: Int( 10000, @@ -391,8 +391,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 259..265, value: Int( 133333, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__numeric_literals_attribute_access.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__numeric_literals_attribute_access.snap index a4f07acef7b1b..79d63ba4915b1 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__numeric_literals_attribute_access.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__numeric_literals_attribute_access.snap @@ -21,8 +21,8 @@ expression: "parse_suite(source, \"\").unwrap()" func: Attribute( ExprAttribute { range: 4..17, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 4..6, value: Float( 0.1, @@ -60,8 +60,8 @@ expression: "parse_suite(source, \"\").unwrap()" value: Attribute( ExprAttribute { range: 24..32, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 24..26, value: Float( 1.0, @@ -92,8 +92,8 @@ expression: "parse_suite(source, \"\").unwrap()" value: Attribute( ExprAttribute { range: 37..46, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 37..41, value: Float( 10.0, @@ -124,8 +124,8 @@ expression: "parse_suite(source, \"\").unwrap()" value: Attribute( ExprAttribute { range: 51..60, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 51..55, value: Float( 0.1, @@ -159,8 +159,8 @@ expression: "parse_suite(source, \"\").unwrap()" func: Attribute( ExprAttribute { range: 65..88, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 65..84, value: Float( 123456789.12345679, @@ -198,8 +198,8 @@ expression: "parse_suite(source, \"\").unwrap()" value: Attribute( ExprAttribute { range: 95..130, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 95..124, value: Float( inf, @@ -233,8 +233,8 @@ expression: "parse_suite(source, \"\").unwrap()" func: Attribute( ExprAttribute { range: 135..165, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 135..154, value: Float( inf, @@ -272,8 +272,8 @@ expression: "parse_suite(source, \"\").unwrap()" value: Attribute( ExprAttribute { range: 172..187, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 172..182, value: Complex { real: 0.0, @@ -308,8 +308,8 @@ expression: "parse_suite(source, \"\").unwrap()" func: Attribute( ExprAttribute { range: 192..220, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 192..212, value: Complex { real: 0.0, @@ -333,8 +333,8 @@ expression: "parse_suite(source, \"\").unwrap()" func: Attribute( ExprAttribute { range: 221..238, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 221..227, value: Int( 11, @@ -380,8 +380,8 @@ expression: "parse_suite(source, \"\").unwrap()" func: Attribute( ExprAttribute { range: 246..263, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 246..253, value: Int( 727756, @@ -422,8 +422,8 @@ expression: "parse_suite(source, \"\").unwrap()" func: Attribute( ExprAttribute { range: 270..287, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 270..276, value: Int( 11, @@ -461,8 +461,8 @@ expression: "parse_suite(source, \"\").unwrap()" value: Attribute( ExprAttribute { range: 294..305, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 294..299, value: Int( 511, @@ -496,8 +496,8 @@ expression: "parse_suite(source, \"\").unwrap()" func: Attribute( ExprAttribute { range: 310..327, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 310..321, value: Float( 6e-9, @@ -536,8 +536,8 @@ expression: "parse_suite(source, \"\").unwrap()" ExprUnaryOp { range: 334..344, op: USub, - operand: Constant( - ExprConstant { + operand: NumberLiteral( + ExprNumberLiteral { range: 335..344, value: Complex { real: 0.0, @@ -555,8 +555,8 @@ expression: "parse_suite(source, \"\").unwrap()" test: Attribute( ExprAttribute { range: 349..357, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 349..351, value: Int( 10, @@ -574,10 +574,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 363..366, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 363..366, - value: Ellipsis, }, ), }, @@ -601,8 +600,8 @@ expression: "parse_suite(source, \"\").unwrap()" value: Subscript( ExprSubscript { range: 372..379, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 372..375, value: Int( 100, @@ -636,8 +635,8 @@ expression: "parse_suite(source, \"\").unwrap()" value: Call( ExprCall { range: 384..391, - func: Constant( - ExprConstant { + func: NumberLiteral( + ExprNumberLiteral { range: 384..387, value: Int( 100, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parenthesized_with_statement.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parenthesized_with_statement.snap index 12e66dfc7ec6d..8707ba33d6e21 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parenthesized_with_statement.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parenthesized_with_statement.snap @@ -319,8 +319,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 169..170, value: Int( 0, @@ -358,8 +358,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 189..190, value: Int( 0, @@ -431,8 +431,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 232..233, value: Int( 0, @@ -489,8 +489,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 262..263, value: Int( 0, @@ -539,8 +539,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 287..288, value: Int( 0, 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 e604da964b10c..ebf85a89e247b 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 @@ -113,16 +113,12 @@ expression: "parse_suite(source, \"\").unwrap()" annotation: None, }, default: Some( - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 80..89, - value: Str( - StringConstant { - value: "default", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "default", + unicode: false, + implicit_concatenated: false, }, ), ), diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_class_generic_types.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_class_generic_types.snap index e6e6d0cb2a62d..8d868ecef23a3 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_class_generic_types.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_class_generic_types.snap @@ -39,10 +39,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 26..29, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 26..29, - value: Ellipsis, }, ), }, @@ -94,10 +93,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 73..76, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 73..76, - value: Ellipsis, }, ), }, @@ -164,10 +162,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 135..138, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 135..138, - value: Ellipsis, }, ), }, @@ -221,10 +218,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 178..181, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 178..181, - value: Ellipsis, }, ), }, @@ -278,10 +274,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 220..223, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 220..223, - value: Ellipsis, }, ), }, @@ -324,10 +319,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 258..261, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 258..261, - value: Ellipsis, }, ), }, @@ -370,10 +364,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 293..296, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 293..296, - value: Ellipsis, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_double_list_comprehension.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_double_list_comprehension.snap index 33b3655934ce5..0440c2f331309 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_double_list_comprehension.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_double_list_comprehension.snap @@ -78,8 +78,8 @@ ListComp( Lt, ], comparators: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 36..37, value: Int( 5, @@ -103,8 +103,8 @@ ListComp( Gt, ], comparators: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 45..47, value: Int( 10, 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 edf6c9b3a7edc..323e950616dd2 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 @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..14, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 2..13, - value: Str( - StringConstant { - value: "Hello world", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "Hello world", + unicode: false, + 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 a3c85c36219a8..c673e95d9658c 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 @@ -39,10 +39,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 17..20, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 17..20, - value: Ellipsis, }, ), }, @@ -118,10 +117,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 50..53, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 50..53, - value: Ellipsis, }, ), }, @@ -205,10 +203,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 88..91, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 88..91, - value: Ellipsis, }, ), }, @@ -307,10 +304,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 135..138, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 135..138, - value: Ellipsis, }, ), }, @@ -379,10 +375,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 168..171, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 168..171, - value: Ellipsis, }, ), }, @@ -482,10 +477,9 @@ expression: "parse_suite(source, \"\").unwrap()" Expr( StmtExpr { range: 227..230, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 227..230, - value: Ellipsis, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_if_elif_else.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_if_elif_else.snap index 2d6d498b5cfb8..9f9e87a388c8c 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_if_elif_else.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_if_elif_else.snap @@ -6,8 +6,8 @@ expression: parse_ast If( StmtIf { range: 0..28, - test: Constant( - ExprConstant { + test: NumberLiteral( + ExprNumberLiteral { range: 3..4, value: Int( 1, @@ -18,8 +18,8 @@ expression: parse_ast Expr( StmtExpr { range: 6..8, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 6..8, value: Int( 10, @@ -33,8 +33,8 @@ expression: parse_ast ElifElseClause { range: 9..19, test: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 14..15, value: Int( 2, @@ -46,8 +46,8 @@ expression: parse_ast Expr( StmtExpr { range: 17..19, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 17..19, value: Int( 20, @@ -65,8 +65,8 @@ expression: parse_ast Expr( StmtExpr { range: 26..28, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 26..28, value: Int( 30, 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 c5b72bceaf1a4..5aeea6fccc478 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 @@ -19,16 +19,12 @@ expression: parse_ast arguments: Arguments { range: 7..32, args: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 8..20, - value: Str( - StringConstant { - value: "positional", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "positional", + unicode: false, + implicit_concatenated: false, }, ), ], @@ -41,8 +37,8 @@ expression: parse_ast range: 22..29, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 30..31, value: Int( 2, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_lambda_no_args.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_lambda_no_args.snap index 3e92dce298581..a24210739c977 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_lambda_no_args.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_lambda_no_args.snap @@ -10,8 +10,8 @@ expression: parse_ast ExprLambda { range: 0..9, parameters: None, - body: Constant( - ExprConstant { + body: NumberLiteral( + ExprNumberLiteral { range: 8..9, value: Int( 1, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_named_expression_generator_comprehension.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_named_expression_generator_comprehension.snap index 0c42ad4b8246c..00cb053f1a019 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_named_expression_generator_comprehension.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_named_expression_generator_comprehension.snap @@ -26,8 +26,8 @@ GeneratorExp( }, ), op: Add, - right: Constant( - ExprConstant { + right: NumberLiteral( + ExprNumberLiteral { range: 10..11, value: Int( 1, 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 8da6210bebdf5..d72338562526b 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 @@ -19,20 +19,16 @@ expression: parse_ast arguments: Arguments { range: 5..23, args: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 6..19, - value: Str( - StringConstant { - value: "Hello world", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "Hello world", + unicode: false, + implicit_concatenated: false, }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 21..22, value: Int( 2, 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 67d725d1ff296..4e665b28312f9 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 @@ -19,16 +19,12 @@ expression: parse_ast arguments: Arguments { range: 5..20, args: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 6..19, - value: Str( - StringConstant { - value: "Hello world", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "Hello world", + unicode: false, + implicit_concatenated: false, }, ), ], 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 40dd83f830b12..5f65e7d4a785c 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..13, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..13, - value: Str( - StringConstant { - value: "Hello world", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "Hello world", + unicode: false, + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_tuples.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_tuples.snap index 105599e5e3c57..3dd0a471b213c 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_tuples.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__parse_tuples.snap @@ -34,16 +34,16 @@ expression: "parse_suite(source, \"\").unwrap()" ExprTuple { range: 7..11, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 7..8, value: Int( 4, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 10..11, value: Int( 5, 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 7b0b60304ea15..24cd00399424f 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 @@ -78,16 +78,12 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), op: BitOr, - right: Constant( - ExprConstant { + right: StringLiteral( + ExprStringLiteral { range: 48..61, - value: Str( - StringConstant { - value: "ForwardRefY", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "ForwardRefY", + unicode: false, + implicit_concatenated: false, }, ), }, 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 1b44daf837b44..ab1adbd35e711 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 @@ -23,8 +23,8 @@ expression: parse_ast ExprUnaryOp { range: 85..88, op: USub, - operand: Constant( - ExprConstant { + operand: NumberLiteral( + ExprNumberLiteral { range: 86..88, value: Complex { real: 0.0, @@ -50,8 +50,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 102..103, value: Int( 0, @@ -122,8 +122,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 166..167, value: Int( 0, @@ -153,8 +153,8 @@ expression: parse_ast pattern: MatchValue( PatternMatchValue { range: 208..209, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 208..209, value: Int( 0, @@ -164,8 +164,8 @@ expression: parse_ast }, ), guard: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 213..214, value: Int( 0, @@ -186,8 +186,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 228..229, value: Int( 0, @@ -203,8 +203,8 @@ expression: parse_ast pattern: MatchValue( PatternMatchValue { range: 239..240, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 239..240, value: Int( 0, @@ -214,8 +214,8 @@ expression: parse_ast }, ), guard: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 244..245, value: Int( 1, @@ -236,8 +236,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 259..260, value: Int( 1, @@ -254,8 +254,8 @@ expression: parse_ast Match( StmtMatch { range: 283..332, - subject: Constant( - ExprConstant { + subject: NumberLiteral( + ExprNumberLiteral { range: 289..290, value: Int( 3, @@ -272,8 +272,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 301..302, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 301..302, value: Int( 0, @@ -285,8 +285,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 305..306, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 305..306, value: Int( 1, @@ -298,8 +298,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 309..310, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 309..310, value: Int( 2, @@ -311,8 +311,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 313..314, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 313..314, value: Int( 3, @@ -338,12 +338,10 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: BooleanLiteral( + ExprBooleanLiteral { range: 328..332, - value: Bool( - true, - ), + value: true, }, ), }, @@ -377,8 +375,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 374..375, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 374..375, value: Int( 0, @@ -390,8 +388,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 377..378, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 377..378, value: Int( 1, @@ -410,8 +408,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 383..384, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 383..384, value: Int( 1, @@ -423,8 +421,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 386..387, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 386..387, value: Int( 0, @@ -453,8 +451,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 402..403, value: Int( 0, @@ -500,16 +498,12 @@ expression: parse_ast StmtReturn { range: 477..489, value: Some( - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 484..489, - value: Str( - StringConstant { - value: "seq", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "seq", + unicode: false, + implicit_concatenated: false, }, ), ), @@ -533,16 +527,12 @@ expression: parse_ast StmtReturn { range: 511..523, value: Some( - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 518..523, - value: Str( - StringConstant { - value: "map", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "map", + unicode: false, + implicit_concatenated: false, }, ), ), @@ -570,8 +560,8 @@ expression: parse_ast PatternMatchMapping { range: 564..579, keys: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 565..566, value: Int( 0, @@ -587,8 +577,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 569..570, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 569..570, value: Int( 1, @@ -600,8 +590,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 572..573, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 572..573, value: Int( 2, @@ -639,8 +629,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 593..594, value: Int( 0, @@ -661,8 +651,8 @@ expression: parse_ast PatternMatchMapping { range: 604..626, keys: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 605..606, value: Int( 0, @@ -682,8 +672,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 609..610, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 609..610, value: Int( 1, @@ -695,8 +685,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 612..613, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 612..613, value: Int( 2, @@ -733,8 +723,8 @@ expression: parse_ast PatternMatchMapping { range: 629..638, keys: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 630..631, value: Int( 1, @@ -764,8 +754,8 @@ expression: parse_ast PatternMatchMapping { range: 641..656, keys: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 642..643, value: Int( 0, @@ -781,8 +771,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 646..647, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 646..647, value: Int( 1, @@ -794,8 +784,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 649..650, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 649..650, value: Int( 2, @@ -828,16 +818,12 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 664..667, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 664..667, - value: Str( - StringConstant { - value: "X", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "X", + unicode: false, + implicit_concatenated: false, }, ), }, @@ -867,8 +853,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 686..687, value: Int( 1, @@ -901,8 +887,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 713..714, value: Int( 2, @@ -935,8 +921,8 @@ expression: parse_ast value: BinOp( ExprBinOp { range: 755..767, - left: Constant( - ExprConstant { + left: NumberLiteral( + ExprNumberLiteral { range: 755..759, value: Float( 0.25, @@ -944,8 +930,8 @@ expression: parse_ast }, ), op: Add, - right: Constant( - ExprConstant { + right: NumberLiteral( + ExprNumberLiteral { range: 762..767, value: Complex { real: 0.0, @@ -971,8 +957,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 781..782, value: Int( 0, @@ -1006,8 +992,8 @@ expression: parse_ast ExprUnaryOp { range: 823..826, op: USub, - operand: Constant( - ExprConstant { + operand: NumberLiteral( + ExprNumberLiteral { range: 824..826, value: Complex { real: 0.0, @@ -1033,8 +1019,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 840..841, value: Int( 0, @@ -1051,8 +1037,8 @@ expression: parse_ast Match( StmtMatch { range: 864..913, - subject: Constant( - ExprConstant { + subject: NumberLiteral( + ExprNumberLiteral { range: 870..871, value: Int( 4, @@ -1069,8 +1055,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 882..883, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 882..883, value: Int( 0, @@ -1082,8 +1068,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 886..887, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 886..887, value: Int( 1, @@ -1095,8 +1081,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 890..891, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 890..891, value: Int( 2, @@ -1108,8 +1094,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 894..895, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 894..895, value: Int( 3, @@ -1135,12 +1121,10 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: BooleanLiteral( + ExprBooleanLiteral { range: 909..913, - value: Bool( - true, - ), + value: true, }, ), }, @@ -1166,8 +1150,8 @@ expression: parse_ast pattern: MatchValue( PatternMatchValue { range: 954..955, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 954..955, value: Int( 0, @@ -1198,8 +1182,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 974..975, value: Int( 0, @@ -1230,8 +1214,8 @@ expression: parse_ast PatternMatchMapping { range: 1016..1022, keys: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 1017..1018, value: Int( 1, @@ -1243,8 +1227,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 1020..1021, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1020..1021, value: Int( 0, @@ -1271,8 +1255,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1036..1037, value: Int( 0, @@ -1289,8 +1273,8 @@ expression: parse_ast PatternMatchMapping { range: 1047..1053, keys: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 1048..1049, value: Int( 0, @@ -1302,8 +1286,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 1051..1052, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1051..1052, value: Int( 0, @@ -1330,8 +1314,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1067..1068, value: Int( 1, @@ -1371,8 +1355,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1097..1098, value: Int( 2, @@ -1436,8 +1420,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1161..1162, value: Int( 0, @@ -1467,8 +1451,8 @@ expression: parse_ast pattern: MatchValue( PatternMatchValue { range: 1203..1204, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1203..1204, value: Int( 1, @@ -1491,8 +1475,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1218..1219, value: Int( 0, @@ -1508,8 +1492,8 @@ expression: parse_ast pattern: MatchValue( PatternMatchValue { range: 1229..1230, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1229..1230, value: Int( 1, @@ -1532,8 +1516,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1244..1245, value: Int( 1, @@ -1564,16 +1548,12 @@ expression: parse_ast PatternMatchMapping { range: 1286..1298, keys: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 1287..1292, - value: Str( - StringConstant { - value: "foo", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "foo", + unicode: false, + implicit_concatenated: false, }, ), ], @@ -1629,24 +1609,24 @@ expression: parse_ast ExprTuple { range: 1344..1353, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 1345..1346, value: Int( 0, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 1348..1349, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 1351..1352, value: Int( 2, @@ -1667,8 +1647,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 1365..1366, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1365..1366, value: Int( 0, @@ -1680,8 +1660,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 1368..1369, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1368..1369, value: Int( 1, @@ -1704,8 +1684,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 1375..1376, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1375..1376, value: Int( 2, @@ -1731,8 +1711,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1391..1392, value: Int( 0, @@ -1766,8 +1746,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 1434..1435, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1434..1435, value: Int( 0, @@ -1793,8 +1773,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1450..1451, value: Int( 0, @@ -1814,8 +1794,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 1462..1463, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1462..1463, value: Int( 1, @@ -1827,8 +1807,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 1465..1466, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1465..1466, value: Int( 0, @@ -1866,8 +1846,8 @@ expression: parse_ast range: 1479..1481, lower: None, upper: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 1480..1481, value: Int( 0, @@ -1897,8 +1877,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1497..1498, value: Int( 1, @@ -1918,8 +1898,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 1509..1510, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1509..1510, value: Int( 1, @@ -1931,8 +1911,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 1512..1513, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1512..1513, value: Int( 0, @@ -1958,8 +1938,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1528..1529, value: Int( 2, @@ -2037,8 +2017,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1594..1595, value: Int( 0, @@ -2075,8 +2055,8 @@ expression: parse_ast ExprUnaryOp { range: 1636..1641, op: USub, - operand: Constant( - ExprConstant { + operand: NumberLiteral( + ExprNumberLiteral { range: 1637..1641, value: Float( 0.25, @@ -2086,8 +2066,8 @@ expression: parse_ast }, ), op: Sub, - right: Constant( - ExprConstant { + right: NumberLiteral( + ExprNumberLiteral { range: 1644..1649, value: Complex { real: 0.0, @@ -2113,8 +2093,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1663..1664, value: Int( 0, @@ -2182,8 +2162,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1725..1726, value: Int( 0, @@ -2266,8 +2246,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1788..1789, value: Int( 0, @@ -2314,8 +2294,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1848..1849, value: Int( 0, @@ -2345,8 +2325,8 @@ expression: parse_ast pattern: MatchValue( PatternMatchValue { range: 1890..1891, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1890..1891, value: Int( 0, @@ -2369,8 +2349,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1905..1906, value: Int( 0, @@ -2417,8 +2397,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 1966..1967, value: Int( 0, @@ -2465,8 +2445,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2024..2025, value: Int( 0, @@ -2486,16 +2466,12 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2036..2038, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 2036..2038, - value: Str( - StringConstant { - value: "", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "", + unicode: false, + implicit_concatenated: false, }, ), }, @@ -2517,8 +2493,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2053..2054, value: Int( 1, @@ -2534,16 +2510,12 @@ expression: parse_ast pattern: MatchValue( PatternMatchValue { range: 2064..2066, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 2064..2066, - value: Str( - StringConstant { - value: "", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "", + unicode: false, + implicit_concatenated: false, }, ), }, @@ -2562,8 +2534,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2080..2081, value: Int( 2, @@ -2616,8 +2588,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2137..2138, value: Int( 0, @@ -2700,8 +2672,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2206..2207, value: Int( 0, @@ -2739,8 +2711,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2249..2250, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2249..2250, value: Int( 0, @@ -2765,8 +2737,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2260..2261, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2260..2261, value: Int( 1, @@ -2791,8 +2763,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2271..2272, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2271..2272, value: Int( 2, @@ -2839,8 +2811,8 @@ expression: parse_ast }, ), op: Mod, - right: Constant( - ExprConstant { + right: NumberLiteral( + ExprNumberLiteral { range: 2291..2292, value: Int( 2, @@ -2866,8 +2838,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2306..2307, value: Int( 0, @@ -2898,8 +2870,8 @@ expression: parse_ast PatternMatchMapping { range: 2348..2363, keys: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 2349..2350, value: Int( 0, @@ -2915,8 +2887,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2353..2354, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2353..2354, value: Int( 1, @@ -2928,8 +2900,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2356..2357, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2356..2357, value: Int( 2, @@ -2967,8 +2939,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2377..2378, value: Int( 0, @@ -2989,8 +2961,8 @@ expression: parse_ast PatternMatchMapping { range: 2388..2411, keys: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 2389..2390, value: Int( 0, @@ -3010,8 +2982,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2393..2394, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2393..2394, value: Int( 1, @@ -3023,8 +2995,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2396..2397, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2396..2397, value: Int( 2, @@ -3061,8 +3033,8 @@ expression: parse_ast PatternMatchMapping { range: 2414..2423, keys: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 2415..2416, value: Int( 1, @@ -3092,8 +3064,8 @@ expression: parse_ast PatternMatchMapping { range: 2426..2441, keys: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 2427..2428, value: Int( 0, @@ -3109,8 +3081,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2431..2432, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2431..2432, value: Int( 1, @@ -3122,8 +3094,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2434..2435, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2434..2435, value: Int( 2, @@ -3156,16 +3128,12 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2449..2452, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 2449..2452, - value: Str( - StringConstant { - value: "X", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "X", + unicode: false, + implicit_concatenated: false, }, ), }, @@ -3195,8 +3163,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2471..2472, value: Int( 1, @@ -3229,8 +3197,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2498..2499, value: Int( 2, @@ -3251,24 +3219,24 @@ expression: parse_ast ExprTuple { range: 2528..2537, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 2529..2530, value: Int( 0, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 2532..2533, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 2535..2536, value: Int( 2, @@ -3289,8 +3257,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2548..2549, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2548..2549, value: Int( 0, @@ -3327,8 +3295,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2567..2568, value: Int( 0, @@ -3349,24 +3317,24 @@ expression: parse_ast ExprTuple { range: 2597..2606, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 2598..2599, value: Int( 0, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 2601..2602, value: Int( 1, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 2604..2605, value: Int( 2, @@ -3398,8 +3366,8 @@ expression: parse_ast MatchValue( PatternMatchValue { range: 2621..2622, - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2621..2622, value: Int( 2, @@ -3425,8 +3393,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2637..2638, value: Int( 0, @@ -3494,8 +3462,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2696..2697, value: Int( 0, @@ -3582,8 +3550,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2759..2760, value: Int( 0, @@ -3676,8 +3644,8 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 2828..2829, value: Int( 0, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__slice.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__slice.snap index ed8946f6141d0..3113d14036689 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__slice.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__slice.snap @@ -16,8 +16,8 @@ Subscript( ExprSlice { range: 2..7, lower: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 2..3, value: Int( 1, @@ -26,8 +26,8 @@ Subscript( ), ), upper: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 4..5, value: Int( 2, @@ -36,8 +36,8 @@ Subscript( ), ), step: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 6..7, value: Int( 3, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__star_index.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__star_index.snap index a00b0453c35da..3cd99121dedd8 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__star_index.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__star_index.snap @@ -29,8 +29,8 @@ expression: parse_ast ExprTuple { range: 20..35, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 20..21, value: Int( 0, @@ -54,8 +54,8 @@ expression: parse_ast ExprUnaryOp { range: 33..35, op: USub, - operand: Constant( - ExprConstant { + operand: NumberLiteral( + ExprNumberLiteral { range: 34..35, value: Int( 1, @@ -91,8 +91,8 @@ expression: parse_ast ExprTuple { range: 43..58, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 43..44, value: Int( 0, @@ -116,8 +116,8 @@ expression: parse_ast ExprUnaryOp { range: 56..58, op: USub, - operand: Constant( - ExprConstant { + operand: NumberLiteral( + ExprNumberLiteral { range: 57..58, value: Int( 1, @@ -216,8 +216,8 @@ expression: parse_ast ExprSlice { range: 126..129, lower: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 126..127, value: Int( 3, @@ -226,8 +226,8 @@ expression: parse_ast ), ), upper: Some( - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 128..129, value: Int( 5, 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 b9aab97c0d967..f653b8c7f0d8c 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 @@ -24,8 +24,8 @@ expression: parse_ast arguments: Arguments { range: 25..28, args: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 26..27, value: Int( 1, @@ -82,16 +82,12 @@ expression: parse_ast ExprFString { range: 62..81, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 64..71, - value: Str( - StringConstant { - value: "caught ", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "caught ", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( @@ -180,16 +176,12 @@ expression: parse_ast ExprFString { range: 114..133, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 116..123, - value: Str( - StringConstant { - value: "caught ", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "caught ", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( 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 5f691af0cf773..2ed0abb3ea0fb 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 @@ -24,16 +24,12 @@ expression: parse_ast arguments: Arguments { range: 29..98, args: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 30..34, - value: Str( - StringConstant { - value: "eg", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "eg", + unicode: false, + implicit_concatenated: false, }, ), List( @@ -53,8 +49,8 @@ expression: parse_ast arguments: Arguments { range: 55..58, args: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 56..57, value: Int( 1, @@ -79,8 +75,8 @@ expression: parse_ast arguments: Arguments { range: 69..72, args: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 70..71, value: Int( 2, @@ -105,8 +101,8 @@ expression: parse_ast arguments: Arguments { range: 81..84, args: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 82..83, value: Int( 3, @@ -131,8 +127,8 @@ expression: parse_ast arguments: Arguments { range: 93..96, args: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 94..95, value: Int( 4, @@ -198,16 +194,12 @@ expression: parse_ast ExprFString { range: 133..179, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 135..142, - value: Str( - StringConstant { - value: "caught ", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "caught ", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( @@ -243,16 +235,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 151..164, - value: Str( - StringConstant { - value: " with nested ", - unicode: false, - implicit_concatenated: false, - }, - ), + value: " with nested ", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( @@ -333,16 +321,12 @@ expression: parse_ast ExprFString { range: 213..259, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 215..222, - value: Str( - StringConstant { - value: "caught ", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "caught ", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( @@ -378,16 +362,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 231..244, - value: Str( - StringConstant { - value: " with nested ", - unicode: false, - implicit_concatenated: false, - }, - ), + value: " with nested ", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__type_as_identifier.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__type_as_identifier.snap index 5d6787776a447..ad394b4042ac6 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__type_as_identifier.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__type_as_identifier.snap @@ -627,8 +627,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 492..493, value: Int( 1, @@ -742,8 +742,8 @@ expression: "parse_suite(source, \"\").unwrap()" arguments: Arguments { range: 546..550, args: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 547..549, value: Int( 12, @@ -920,8 +920,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 624..625, value: Int( 1, @@ -949,8 +949,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 637..638, value: Int( 1, @@ -978,8 +978,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, ), ], - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 650..651, value: Int( 1, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__unicode_aliases.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__unicode_aliases.snap index b7e2c7c1899e3..ce30084c32dcd 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__unicode_aliases.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__parser__tests__unicode_aliases.snap @@ -15,16 +15,12 @@ expression: parse_ast }, ), ], - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 4..37, - value: Str( - StringConstant { - value: "\u{8}another cool trick", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\u{8}another cool trick", + unicode: false, + implicit_concatenated: false, }, ), }, 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 5c43a8b07dbbd..82ef9d16c5fec 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 @@ -76,10 +76,9 @@ expression: parse_ast Expr( StmtExpr { range: 46..49, - value: Constant( - ExprConstant { + value: EllipsisLiteral( + ExprEllipsisLiteral { range: 46..49, - value: Ellipsis, }, ), }, 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 74b8279ae4613..de4e64d775aa1 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 @@ -10,8 +10,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 5..6, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 5..6, value: Int( 0, @@ -37,8 +37,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 18..24, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 18..19, value: Int( 0, @@ -72,8 +72,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 36..37, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 36..37, value: Int( 0, @@ -84,8 +84,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, WithItem { range: 39..40, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 39..40, value: Int( 1, @@ -111,8 +111,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 52..58, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 52..53, value: Int( 0, @@ -131,8 +131,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, WithItem { range: 60..66, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 60..61, value: Int( 1, @@ -169,24 +169,24 @@ expression: "parse_suite(source, \"\").unwrap()" context_expr: IfExp( ExprIfExp { range: 78..91, - test: Constant( - ExprConstant { + test: NumberLiteral( + ExprNumberLiteral { range: 83..84, value: Int( 1, ), }, ), - body: Constant( - ExprConstant { + body: NumberLiteral( + ExprNumberLiteral { range: 78..79, value: Int( 0, ), }, ), - orelse: Constant( - ExprConstant { + orelse: NumberLiteral( + ExprNumberLiteral { range: 90..91, value: Int( 2, @@ -217,24 +217,24 @@ expression: "parse_suite(source, \"\").unwrap()" context_expr: IfExp( ExprIfExp { range: 103..116, - test: Constant( - ExprConstant { + test: NumberLiteral( + ExprNumberLiteral { range: 108..109, value: Int( 1, ), }, ), - body: Constant( - ExprConstant { + body: NumberLiteral( + ExprNumberLiteral { range: 103..104, value: Int( 0, ), }, ), - orelse: Constant( - ExprConstant { + orelse: NumberLiteral( + ExprNumberLiteral { range: 115..116, value: Int( 2, @@ -330,8 +330,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 167..168, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 167..168, value: Int( 0, @@ -357,8 +357,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 181..189, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 182..183, value: Int( 0, @@ -392,8 +392,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 202..203, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 202..203, value: Int( 0, @@ -423,8 +423,8 @@ expression: "parse_suite(source, \"\").unwrap()" ExprTuple { range: 217..221, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 218..219, value: Int( 0, @@ -462,8 +462,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 239..240, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 239..240, value: Int( 0, @@ -474,8 +474,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, WithItem { range: 242..243, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 242..243, value: Int( 1, @@ -505,16 +505,16 @@ expression: "parse_suite(source, \"\").unwrap()" ExprTuple { range: 256..262, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 257..258, value: Int( 0, ), }, ), - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 260..261, value: Int( 1, @@ -644,8 +644,8 @@ expression: "parse_suite(source, \"\").unwrap()" ExprTuple { range: 318..325, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 319..320, value: Int( 0, @@ -692,8 +692,8 @@ expression: "parse_suite(source, \"\").unwrap()" ExprTuple { range: 337..344, elts: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 338..339, value: Int( 0, @@ -754,8 +754,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 367..368, value: Int( 0, @@ -793,8 +793,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 387..388, value: Int( 0, @@ -844,8 +844,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 412..413, value: Int( 0, @@ -864,8 +864,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 420..421, value: Int( 1, @@ -911,8 +911,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 440..441, value: Int( 0, @@ -931,8 +931,8 @@ expression: "parse_suite(source, \"\").unwrap()" ctx: Store, }, ), - value: Constant( - ExprConstant { + value: NumberLiteral( + ExprNumberLiteral { range: 448..449, value: Int( 1, @@ -972,8 +972,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 468..474, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 468..469, value: Int( 0, @@ -1007,8 +1007,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 488..494, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 488..489, value: Int( 0, @@ -1042,8 +1042,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 509..515, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 509..510, value: Int( 0, @@ -1062,8 +1062,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, WithItem { range: 517..523, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 517..518, value: Int( 1, @@ -1097,8 +1097,8 @@ expression: "parse_suite(source, \"\").unwrap()" items: [ WithItem { range: 537..543, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 537..538, value: Int( 0, @@ -1117,8 +1117,8 @@ expression: "parse_suite(source, \"\").unwrap()" }, WithItem { range: 545..551, - context_expr: Constant( - ExprConstant { + context_expr: NumberLiteral( + ExprNumberLiteral { range: 545..546, value: Int( 1, 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 f05fffeb99998..f29c2f977121f 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..15, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..15, - value: Str( - StringConstant { - value: "\u{8}", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\u{8}", + unicode: false, + implicit_concatenated: false, }, ), }, 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 e0ef3c542a5d4..ef30240f8a89b 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..9, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..9, - value: Str( - StringConstant { - value: "\u{7}", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\u{7}", + unicode: false, + implicit_concatenated: false, }, ), }, 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 0f1a81266c6c6..4224f30ab7cbe 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..21, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..21, - value: Str( - StringConstant { - value: "\r", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\r", + unicode: false, + implicit_concatenated: false, }, ), }, 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 f86cadd6cd494..735816fc1fedd 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..45, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..45, - value: Str( - StringConstant { - value: "\u{89}", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\u{89}", + unicode: false, + implicit_concatenated: false, }, ), }, 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 7ad63ab23d3f3..e54a28743075d 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..12, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..12, - value: Str( - StringConstant { - value: "\u{7f}", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\u{7f}", + unicode: false, + implicit_concatenated: false, }, ), }, 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 99b35c5b407b2..e3b24f2b52285 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 @@ -6,272 +6,268 @@ expression: parse_ast Expr( StmtExpr { range: 0..738, - value: Constant( - ExprConstant { + value: BytesLiteral( + ExprBytesLiteral { range: 0..738, - value: Bytes( - 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, - }, - ), + 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, }, ), }, 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 5efa42a127de2..871b5788cadb3 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..12, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..12, - value: Str( - StringConstant { - value: "\u{1b}", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\u{1b}", + unicode: false, + implicit_concatenated: false, }, ), }, 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 ff789cab8f2dc..1ad9fb00a0f37 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 @@ -6,26 +6,22 @@ expression: parse_ast Expr( StmtExpr { range: 0..13, - value: Constant( - ExprConstant { + value: BytesLiteral( + ExprBytesLiteral { range: 0..13, - value: Bytes( - BytesConstant { - value: [ - 111, - 109, - 107, - 109, - 111, - 107, - 92, - 88, - 97, - 97, - ], - implicit_concatenated: false, - }, - ), + value: [ + 111, + 109, + 107, + 109, + 111, + 107, + 92, + 88, + 97, + 97, + ], + implicit_concatenated: false, }, ), }, 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 d32f060205d75..1471b60aa0413 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 @@ -6,21 +6,17 @@ expression: parse_ast Expr( StmtExpr { range: 0..14, - value: Constant( - ExprConstant { + value: BytesLiteral( + ExprBytesLiteral { range: 0..14, - value: Bytes( - BytesConstant { - value: [ - 35, - 97, - 4, - 83, - 52, - ], - implicit_concatenated: false, - }, - ), + value: [ + 35, + 97, + 4, + 83, + 52, + ], + implicit_concatenated: false, }, ), }, 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 c974de85af64d..d574d60f91466 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..15, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..15, - value: Str( - StringConstant { - value: "\u{c}", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\u{c}", + unicode: false, + implicit_concatenated: false, }, ), }, 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 245d664aa8756..2609db65ebcf0 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 @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..22, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 2..5, - value: Str( - StringConstant { - value: "aaa", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "aaa", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( @@ -37,16 +33,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 10..13, - value: Str( - StringConstant { - value: "ccc", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "ccc", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( @@ -64,16 +56,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 18..21, - value: Str( - StringConstant { - value: "eee", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "eee", + unicode: false, + 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 796b97b9eac02..9d179474d18c1 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 @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..8, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 2..4, - value: Str( - StringConstant { - value: "\\", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\\", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( 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 17dc9dbe2bd73..aa63b7d99d05c 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 @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..8, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 2..4, - value: Str( - StringConstant { - value: "\n", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\n", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( 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 fcf985cc79c3c..52dd4c6e45842 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 @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..9, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 3..5, - value: Str( - StringConstant { - value: "\\\n", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\\\n", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( 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 c3f98691021dd..1cf05d42dd09c 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 @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..38, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 2..6, - value: Str( - StringConstant { - value: "mix ", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "mix ", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( @@ -42,16 +38,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 13..28, - value: Str( - StringConstant { - value: " with text and ", - unicode: false, - implicit_concatenated: false, - }, - ), + value: " with text and ", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( 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 21fca06ff64b2..5e17b1c8a2843 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 @@ -32,16 +32,12 @@ expression: parse_ast ExprFString { range: 9..12, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 9..12, - value: Str( - StringConstant { - value: ">10", - unicode: false, - implicit_concatenated: false, - }, - ), + value: ">10", + unicode: false, + 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 654b947387a38..7ec5e8b42a353 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 @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..11, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 4..5, - value: Str( - StringConstant { - value: "\n", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\n", + unicode: false, + implicit_concatenated: false, }, ), FormattedValue( 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 3e699ccf70a65..48eab469043b3 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..9, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..9, - value: Str( - StringConstant { - value: "\u{88}", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "\u{88}", + unicode: false, + implicit_concatenated: false, }, ), }, 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 db3c59a6385ea..97c70a7a22e64 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 @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..17, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 1..16, - value: Str( - StringConstant { - value: "Hello world", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "Hello world", + unicode: false, + 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 db3c59a6385ea..97c70a7a22e64 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 @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..17, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 1..16, - value: Str( - StringConstant { - value: "Hello world", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "Hello world", + unicode: false, + 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 d7887a62aae9c..ccfe7c6484998 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 @@ -10,31 +10,23 @@ expression: parse_ast ExprFString { range: 0..22, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 1..16, - value: Str( - StringConstant { - value: "Hello world", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "Hello world", + unicode: false, + implicit_concatenated: true, }, ), FormattedValue( ExprFormattedValue { range: 16..21, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 17..20, - value: Str( - StringConstant { - value: "!", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "!", + unicode: false, + implicit_concatenated: false, }, ), debug_text: None, 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 index 86e8c4f5b8514..e6cb23a586837 100644 --- 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 @@ -10,31 +10,23 @@ expression: parse_ast ExprFString { range: 0..31, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 1..16, - value: Str( - StringConstant { - value: "Hello world", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "Hello world", + unicode: false, + implicit_concatenated: true, }, ), FormattedValue( ExprFormattedValue { range: 16..21, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 17..20, - value: Str( - StringConstant { - value: "!", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "!", + unicode: false, + implicit_concatenated: false, }, ), debug_text: None, @@ -42,16 +34,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 24..30, - value: Str( - StringConstant { - value: "again!", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "again!", + unicode: false, + 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 ec007012e25db..6ee1be1ee840d 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 @@ -40,16 +40,12 @@ expression: parse_ast format_spec: None, }, ), - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 10..17, - value: Str( - StringConstant { - value: "{foo}", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "{foo}", + unicode: false, + implicit_concatenated: false, }, ), ], diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_equals.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_equals.snap index 99e94a06b52cb..25315bc0359a0 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_equals.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_equals.snap @@ -16,8 +16,8 @@ expression: parse_ast value: Compare( ExprCompare { range: 3..11, - left: Constant( - ExprConstant { + left: NumberLiteral( + ExprNumberLiteral { range: 3..5, value: Int( 42, @@ -28,8 +28,8 @@ expression: parse_ast Eq, ], comparators: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 9..11, value: Int( 42, 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 index 105460ecbcd24..070a1d0eea32f 100644 --- 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 @@ -30,16 +30,12 @@ expression: parse_ast FormattedValue( ExprFormattedValue { range: 7..14, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 8..13, - value: Str( - StringConstant { - value: "", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "", + unicode: false, + implicit_concatenated: true, }, ), debug_text: None, 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 index b1abddec3d7d0..327506de08aa8 100644 --- 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 @@ -30,16 +30,12 @@ expression: parse_ast FormattedValue( ExprFormattedValue { range: 7..11, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 8..10, - value: Str( - StringConstant { - value: "", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "", + unicode: false, + implicit_concatenated: false, }, ), debug_text: None, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_not_equals.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_not_equals.snap index c0035a45b9405..216021cec10c5 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_not_equals.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__parse_fstring_not_equals.snap @@ -16,8 +16,8 @@ expression: parse_ast value: Compare( ExprCompare { range: 3..9, - left: Constant( - ExprConstant { + left: NumberLiteral( + ExprNumberLiteral { range: 3..4, value: Int( 1, @@ -28,8 +28,8 @@ expression: parse_ast NotEq, ], comparators: [ - Constant( - ExprConstant { + NumberLiteral( + ExprNumberLiteral { range: 8..9, value: Int( 2, 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 e5cc2fade40ae..cb1664e20c9c2 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 @@ -27,16 +27,12 @@ expression: parse_ast ExprFString { range: 7..11, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 7..11, - value: Str( - StringConstant { - value: "spec", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "spec", + unicode: false, + 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 2e3e059ba36cf..93c14088eb2f0 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..16, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..16, - value: Str( - StringConstant { - value: "Hello world", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "Hello world", + unicode: false, + implicit_concatenated: true, }, ), }, 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 b7acd40d9ebd0..9347faf323fa9 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..20, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..20, - value: Str( - StringConstant { - value: "Hello, world!", - unicode: true, - implicit_concatenated: false, - }, - ), + value: "Hello, world!", + unicode: true, + implicit_concatenated: false, }, ), }, 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 5f0ecabfed2a9..df260efb74a14 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 @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..18, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 2..17, - value: Str( - StringConstant { - value: "Hello world", - unicode: true, - implicit_concatenated: true, - }, - ), + value: "Hello world", + unicode: true, + 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 39610847fe217..aced9ed7983cd 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 @@ -10,16 +10,12 @@ expression: parse_ast ExprFString { range: 0..22, values: [ - Constant( - ExprConstant { + StringLiteral( + ExprStringLiteral { range: 2..21, - value: Str( - StringConstant { - value: "Hello world!", - unicode: true, - implicit_concatenated: true, - }, - ), + value: "Hello world!", + unicode: true, + 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 9b1eeaf6028da..21dd4a1c10911 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..17, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..17, - value: Str( - StringConstant { - value: "Hello world", - unicode: false, - implicit_concatenated: true, - }, - ), + value: "Hello world", + unicode: false, + implicit_concatenated: true, }, ), }, 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 ea32b3ef27fc5..19c9f87309d02 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 @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..17, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..17, - value: Str( - StringConstant { - value: "Hello world", - unicode: true, - implicit_concatenated: true, - }, - ), + value: "Hello world", + unicode: true, + implicit_concatenated: true, }, ), }, 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 b2d41140023ba..0ddea1aeca5ff 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 @@ -6,20 +6,16 @@ expression: parse_ast Expr( StmtExpr { range: 0..8, - value: Constant( - ExprConstant { + value: BytesLiteral( + ExprBytesLiteral { range: 0..8, - value: Bytes( - BytesConstant { - value: [ - 92, - 120, - 49, - 122, - ], - implicit_concatenated: false, - }, - ), + value: [ + 92, + 120, + 49, + 122, + ], + implicit_concatenated: false, }, ), }, 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 bd22e64b0cda7..c7f13431590a8 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 @@ -6,18 +6,14 @@ expression: parse_ast Expr( StmtExpr { range: 0..6, - value: Constant( - ExprConstant { + value: BytesLiteral( + ExprBytesLiteral { range: 0..6, - value: Bytes( - BytesConstant { - value: [ - 92, - 92, - ], - implicit_concatenated: false, - }, - ), + value: [ + 92, + 92, + ], + 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 99b35c5b407b2..e3b24f2b52285 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 @@ -6,272 +6,268 @@ expression: parse_ast Expr( StmtExpr { range: 0..738, - value: Constant( - ExprConstant { + value: BytesLiteral( + ExprBytesLiteral { range: 0..738, - value: Bytes( - 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, - }, - ), + 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, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_mac_eol.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_mac_eol.snap index 451aae8765f97..50d87b93a57cc 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_mac_eol.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_mac_eol.snap @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..18, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..18, - value: Str( - StringConstant { - value: "text more text", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "text more text", + unicode: false, + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_unix_eol.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_unix_eol.snap index 451aae8765f97..50d87b93a57cc 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_unix_eol.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_unix_eol.snap @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..18, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..18, - value: Str( - StringConstant { - value: "text more text", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "text more text", + unicode: false, + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_windows_eol.snap b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_windows_eol.snap index 9b839986a3f55..fcee590ad5ca8 100644 --- a/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_windows_eol.snap +++ b/crates/ruff_python_parser/src/snapshots/ruff_python_parser__string__tests__string_parser_escaped_windows_eol.snap @@ -6,16 +6,12 @@ expression: parse_ast Expr( StmtExpr { range: 0..19, - value: Constant( - ExprConstant { + value: StringLiteral( + ExprStringLiteral { range: 0..19, - value: Str( - StringConstant { - value: "text more text", - unicode: false, - implicit_concatenated: false, - }, - ), + value: "text more text", + unicode: false, + implicit_concatenated: false, }, ), }, diff --git a/crates/ruff_python_parser/src/string.rs b/crates/ruff_python_parser/src/string.rs index 406a04950e245..64c0834e80321 100644 --- a/crates/ruff_python_parser/src/string.rs +++ b/crates/ruff_python_parser/src/string.rs @@ -1,36 +1,14 @@ //! Parsing of string literals, bytes literals, and implicit string concatenation. -use ruff_python_ast::{self as ast, BytesConstant, Constant, Expr, StringConstant}; +use ruff_python_ast::{self as ast, Expr}; use ruff_text_size::{Ranged, TextLen, TextRange, TextSize}; use crate::lexer::{LexicalError, LexicalErrorType}; use crate::token::{StringKind, Tok}; -pub(crate) struct StringConstantWithRange { - value: StringConstant, - range: TextRange, -} - -impl Ranged for StringConstantWithRange { - fn range(&self) -> TextRange { - self.range - } -} - -pub(crate) struct BytesConstantWithRange { - value: BytesConstant, - range: TextRange, -} - -impl Ranged for BytesConstantWithRange { - fn range(&self) -> TextRange { - self.range - } -} - pub(crate) enum StringType { - Str(StringConstantWithRange), - Bytes(BytesConstantWithRange), + Str(ast::ExprStringLiteral), + Bytes(ast::ExprBytesLiteral), FString(ast::ExprFString), } @@ -47,7 +25,7 @@ impl Ranged for StringType { impl StringType { fn is_unicode(&self) -> bool { match self { - Self::Str(StringConstantWithRange { value, .. }) => value.unicode, + Self::Str(ast::ExprStringLiteral { unicode, .. }) => *unicode, _ => false, } } @@ -266,8 +244,10 @@ impl<'a> StringParser<'a> { ch => value.push(ch), } } - Ok(Expr::from(ast::ExprConstant { - value: value.into(), + Ok(Expr::from(ast::ExprStringLiteral { + value, + unicode: false, + implicit_concatenated: false, range: self.range(start_location), })) } @@ -294,8 +274,9 @@ impl<'a> StringParser<'a> { } } - Ok(StringType::Bytes(BytesConstantWithRange { - value: content.chars().map(|c| c as u8).collect::>().into(), + Ok(StringType::Bytes(ast::ExprBytesLiteral { + value: content.chars().map(|c| c as u8).collect::>(), + implicit_concatenated: false, range: self.range(start_location), })) } @@ -320,13 +301,10 @@ impl<'a> StringParser<'a> { self.parse_escaped_char(&mut value)?; } } - - Ok(StringType::Str(StringConstantWithRange { - value: StringConstant { - value, - unicode: self.kind.is_unicode(), - implicit_concatenated: false, - }, + Ok(StringType::Str(ast::ExprStringLiteral { + value, + unicode: self.kind.is_unicode(), + implicit_concatenated: false, range: self.range(start_location), })) } @@ -402,18 +380,13 @@ pub(crate) fn concatenate_strings( let mut content: Vec = vec![]; for string in strings { match string { - StringType::Bytes(BytesConstantWithRange { - value: BytesConstant { value, .. }, - .. - }) => content.extend(value), + StringType::Bytes(ast::ExprBytesLiteral { value, .. }) => content.extend(value), _ => unreachable!("Unexpected non-bytes literal."), } } - return Ok(ast::ExprConstant { - value: Constant::Bytes(BytesConstant { - value: content, - implicit_concatenated, - }), + return Ok(ast::ExprBytesLiteral { + value: content, + implicit_concatenated, range, } .into()); @@ -424,19 +397,14 @@ pub(crate) fn concatenate_strings( let is_unicode = strings.first().map_or(false, StringType::is_unicode); for string in strings { match string { - StringType::Str(StringConstantWithRange { - value: StringConstant { value, .. }, - .. - }) => content.push_str(&value), + StringType::Str(ast::ExprStringLiteral { value, .. }) => content.push_str(&value), _ => unreachable!("Unexpected non-string literal."), } } - return Ok(ast::ExprConstant { - value: Constant::Str(StringConstant { - value: content, - unicode: is_unicode, - implicit_concatenated, - }), + return Ok(ast::ExprStringLiteral { + value: content, + unicode: is_unicode, + implicit_concatenated, range, } .into()); @@ -450,12 +418,10 @@ pub(crate) fn concatenate_strings( let mut is_unicode = false; let take_current = |current: &mut String, start, end, unicode| -> Expr { - Expr::Constant(ast::ExprConstant { - value: Constant::Str(StringConstant { - value: std::mem::take(current), - unicode, - implicit_concatenated, - }), + Expr::StringLiteral(ast::ExprStringLiteral { + value: std::mem::take(current), + unicode, + implicit_concatenated, range: TextRange::new(start, end), }) }; @@ -479,10 +445,7 @@ pub(crate) fn concatenate_strings( deduped.push(value); is_unicode = false; } - Expr::Constant(ast::ExprConstant { - value: Constant::Str(StringConstant { value, unicode, .. }), - .. - }) => { + Expr::StringLiteral(ast::ExprStringLiteral { value, unicode, .. }) => { if current.is_empty() { is_unicode |= unicode; current_start = value_range.start(); @@ -490,14 +453,13 @@ pub(crate) fn concatenate_strings( current_end = value_range.end(); current.push_str(&value); } - _ => unreachable!("Expected `Expr::FormattedValue` or `Expr::Constant`"), + _ => { + unreachable!("Expected `Expr::FormattedValue` or `Expr::StringLiteral`") + } } } } - StringType::Str(StringConstantWithRange { - value: StringConstant { value, unicode, .. }, - .. - }) => { + StringType::Str(ast::ExprStringLiteral { value, unicode, .. }) => { if current.is_empty() { is_unicode |= unicode; current_start = string_range.start(); diff --git a/crates/ruff_python_semantic/src/analyze/type_inference.rs b/crates/ruff_python_semantic/src/analyze/type_inference.rs index 4bba5b9826010..1ef88f57c087d 100644 --- a/crates/ruff_python_semantic/src/analyze/type_inference.rs +++ b/crates/ruff_python_semantic/src/analyze/type_inference.rs @@ -3,7 +3,7 @@ use rustc_hash::FxHashSet; use ruff_python_ast as ast; -use ruff_python_ast::{Constant, Expr, Operator, UnaryOp}; +use ruff_python_ast::{Expr, Operator, UnaryOp}; #[derive(Debug, Clone, PartialEq, Eq)] pub enum ResolvedPythonType { @@ -59,22 +59,24 @@ impl From<&Expr> for ResolvedPythonType { 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(_) => { + Expr::StringLiteral(_) => ResolvedPythonType::Atom(PythonType::String), + Expr::BytesLiteral(_) => ResolvedPythonType::Atom(PythonType::Bytes), + Expr::NumberLiteral(ast::ExprNumberLiteral { value, .. }) => match value { + ast::Number::Int(_) => { ResolvedPythonType::Atom(PythonType::Number(NumberLike::Integer)) } - Constant::Float(_) => { + ast::Number::Float(_) => { ResolvedPythonType::Atom(PythonType::Number(NumberLike::Float)) } - Constant::Bool(_) => ResolvedPythonType::Atom(PythonType::Number(NumberLike::Bool)), - Constant::Complex { .. } => { + ast::Number::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), }, + Expr::BooleanLiteral(_) => { + ResolvedPythonType::Atom(PythonType::Number(NumberLike::Bool)) + } + Expr::NoneLiteral(_) => ResolvedPythonType::Atom(PythonType::None), + Expr::EllipsisLiteral(_) => ResolvedPythonType::Atom(PythonType::Ellipsis), // Simple container expressions. Expr::NamedExpr(ast::ExprNamedExpr { value, .. }) => { ResolvedPythonType::from(value.as_ref()) diff --git a/crates/ruff_python_semantic/src/analyze/typing.rs b/crates/ruff_python_semantic/src/analyze/typing.rs index c1fcab65a82f4..d6032573dc433 100644 --- a/crates/ruff_python_semantic/src/analyze/typing.rs +++ b/crates/ruff_python_semantic/src/analyze/typing.rs @@ -2,9 +2,7 @@ use ruff_python_ast::call_path::{from_qualified_name, from_unqualified_name, CallPath}; use ruff_python_ast::helpers::{any_over_expr, is_const_false, map_subscript}; -use ruff_python_ast::{ - self as ast, Constant, Expr, Int, Operator, ParameterWithDefault, Parameters, Stmt, -}; +use ruff_python_ast::{self as ast, Expr, Int, Operator, ParameterWithDefault, Parameters, Stmt}; use ruff_python_stdlib::typing::{ as_pep_585_generic, has_pep_585_generic, is_immutable_generic_type, is_immutable_non_generic_type, is_immutable_return_type, is_literal_member, @@ -144,10 +142,7 @@ pub fn to_pep604_operator( /// Returns `true` if any argument in the slice is a quoted annotation. fn quoted_annotation(slice: &Expr) -> bool { match slice { - Expr::Constant(ast::ExprConstant { - value: Constant::Str(_), - .. - }) => true, + Expr::StringLiteral(_) => true, Expr::Tuple(ast::ExprTuple { elts, .. }) => elts.iter().any(quoted_annotation), _ => false, } @@ -257,10 +252,7 @@ pub fn is_immutable_annotation( is_immutable_annotation(left, semantic, extend_immutable_calls) && is_immutable_annotation(right, semantic, extend_immutable_calls) } - Expr::Constant(ast::ExprConstant { - value: Constant::None, - .. - }) => true, + Expr::NoneLiteral(_) => true, _ => false, } } @@ -314,8 +306,8 @@ pub fn is_type_checking_block(stmt: &ast::StmtIf, semantic: &SemanticModel) -> b // Ex) `if 0:` if matches!( test.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Int(Int::ZERO), + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: ast::Number::Int(Int::ZERO), .. }) ) {