From 66ae3fc8c0c718529f47f79368e4614872eb5630 Mon Sep 17 00:00:00 2001 From: Dhruv Manilawala Date: Thu, 19 Oct 2023 19:05:34 +0530 Subject: [PATCH] Split `Constant` to individual literal nodes --- .../src/checkers/ast/analyze/expression.rs | 37 +- crates/ruff_linter/src/checkers/ast/mod.rs | 13 +- crates/ruff_linter/src/doc_lines.rs | 8 +- .../ruff_linter/src/docstrings/extraction.rs | 10 +- .../rules/airflow/rules/task_variable_name.rs | 11 +- .../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_password_string.rs | 7 +- .../rules/jinja2_autoescape_false.rs | 7 +- .../flake8_bandit/rules/shell_injection.rs | 11 +- .../rules/snmp_insecure_version.rs | 6 +- .../rules/weak_cryptographic_key.rs | 6 +- .../src/rules/flake8_boolean_trap/helpers.rs | 11 +- .../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 | 20 +- .../rules/logging_call.rs | 10 +- .../rules/unnecessary_dict_kwargs.rs | 12 +- .../rules/unnecessary_range_start.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 | 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 +- .../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 | 71 +- .../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 | 26 +- ...convert_named_tuple_functional_to_class.rs | 9 +- .../convert_typed_dict_functional_to_class.rs | 7 +- .../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 +- .../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 +- .../rules/refurb/rules/print_empty_string.rs | 6 +- .../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 | 172 +- crates/ruff_python_ast/src/helpers.rs | 111 +- crates/ruff_python_ast/src/node.rs | 399 +- crates/ruff_python_ast/src/nodes.rs | 362 +- 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 +- crates/ruff_python_codegen/src/generator.rs | 113 +- .../src/comments/placement.rs | 2 +- .../src/expression/binary_like.rs | 7 +- .../src/expression/expr_attribute.rs | 6 +- .../src/expression/expr_bin_op.rs | 10 +- .../src/expression/expr_boolean_literal.rs | 37 + .../src/expression/expr_bytes_literal.rs | 71 + .../src/expression/expr_compare.rs | 10 +- .../src/expression/expr_constant.rs | 99 - .../src/expression/expr_ellipsis_literal.rs | 33 + .../src/expression/expr_none_literal.rs | 33 + .../src/expression/expr_number_literal.rs | 38 + .../src/expression/expr_slice.rs | 2 +- .../src/expression/expr_string_literal.rs | 71 + .../src/expression/mod.rs | 46 +- .../src/expression/number.rs | 32 +- .../src/expression/string.rs | 41 +- crates/ruff_python_formatter/src/generated.rs | 204 +- .../src/statement/suite.rs | 32 +- crates/ruff_python_parser/src/python.lalrpop | 51 +- crates/ruff_python_parser/src/python.rs | 4347 ++++++++--------- crates/ruff_python_parser/src/string.rs | 103 +- .../src/analyze/type_inference.rs | 22 +- .../src/analyze/typing.rs | 16 +- 136 files changed, 4419 insertions(+), 3832 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/expression.rs b/crates/ruff_linter/src/checkers/ast/analyze/expression.rs index a686c2c1b66786..9086ef17d9b340 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, ); } } @@ -987,11 +985,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, @@ -1228,26 +1222,17 @@ 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(ast::ExprStringLiteral { value, unicode, .. }) => { if checker.enabled(Rule::HardcodedBindAllInterfaces) { if let Some(diagnostic) = flake8_bandit::rules::hardcoded_bind_all_interfaces(value, expr.range()) @@ -1259,7 +1244,7 @@ pub(crate) fn expression(expr: &Expr, checker: &mut Checker) { flake8_bandit::rules::hardcoded_tmp_directory(checker, expr, value); } if checker.enabled(Rule::UnicodeKindPrefix) { - pyupgrade::rules::unicode_kind_prefix(checker, expr, value.unicode); + pyupgrade::rules::unicode_kind_prefix(checker, expr, *unicode); } 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 0cd527f7612954..196a182bcddbe6 100644 --- a/crates/ruff_linter/src/checkers/ast/mod.rs +++ b/crates/ruff_linter/src/checkers/ast/mod.rs @@ -31,7 +31,7 @@ use std::path::Path; use itertools::Itertools; use log::debug; use ruff_python_ast::{ - self as ast, Arguments, Comprehension, Constant, ElifElseClause, ExceptHandler, Expr, + self as ast, Arguments, Comprehension, ElifElseClause, ExceptHandler, Expr, ExprContext, Keyword, MatchCase, Parameter, ParameterWithDefault, Parameters, Pattern, Stmt, Suite, UnaryOp, }; @@ -787,11 +787,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 +1182,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 f45dfd0cf60fa2..e7864be3c1786c 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}; @@ -70,11 +70,7 @@ 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 value.is_string_literal_expr() { for line in UniversalNewlineIterator::with_offset( self.locator.slice(value.as_ref()), value.start(), diff --git a/crates/ruff_linter/src/docstrings/extraction.rs b/crates/ruff_linter/src/docstrings/extraction.rs index c642b7527176e3..c0ca748145febc 100644 --- a/crates/ruff_linter/src/docstrings/extraction.rs +++ b/crates/ruff_linter/src/docstrings/extraction.rs @@ -1,6 +1,6 @@ //! Extract docstrings from an AST. -use ruff_python_ast::{self as ast, Constant, Expr, Stmt}; +use ruff_python_ast::{self as ast, Expr, Stmt}; use ruff_python_semantic::{Definition, DefinitionId, Definitions, Member, MemberKind}; /// Extract a docstring from a function or class body. @@ -11,13 +11,7 @@ pub(crate) fn docstring_from(suite: &[Stmt]) -> Option<&Expr> { return None; }; // Only match strings. - if !matches!( - value.as_ref(), - Expr::Constant(ast::ExprConstant { - value: Constant::Str(_), - .. - }) - ) { + if !value.is_string_literal_expr() { return None; } Some(value) 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 fccf1a79aade10..6f730b2360098f 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,12 +78,10 @@ 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 Some(ast::ExprStringLiteral { value: task_id, .. }) = + keyword.value.as_string_literal_expr() + else { + return None; }; // If the target name is the same as the task_id, no violation. 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 debb88697e56a3..e2a7b0ccdf7762 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 f92c0da03d57a0..8f9e4500940e09 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 1db658efef2691..3ac9fe21140384 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 0c019360fe5dbc..ad31e991377282 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 61d5bbd77555cb..4bc6da38c1aadd 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_password_string.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/hardcoded_password_string.rs index 0a3702251a9a15..9839cd58ae2834 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/jinja2_autoescape_false.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/jinja2_autoescape_false.rs index 9d7093b35a1b81..2cd35d104971c5 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 6fde131b5b4fc3..cfce2ddd9a9503 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; @@ -455,14 +455,9 @@ 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. +// TODO(dhruvmanila): Remove this? 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 62ec65103bc03a..23d92d96faa951 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/weak_cryptographic_key.rs b/crates/ruff_linter/src/rules/flake8_bandit/rules/weak_cryptographic_key.rs index af4ae9f3d6342d..f5ebb656a1f338 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 038ab49c12d2ad..8a49fbd42c1dc0 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 { @@ -64,12 +64,7 @@ pub(super) fn allow_boolean_trap(func: &Expr) -> bool { } /// Returns `true` if an expression is a boolean literal. +// TODO(dhruvmanila): Remove this pub(super) const fn is_boolean(expr: &Expr) -> bool { - matches!( - &expr, - Expr::Constant(ast::ExprConstant { - value: Constant::Bool(_), - .. - }) - ) + expr.is_boolean_literal_expr() } 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 f6178b7cf13d24..7c8fa6d360301a 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 2913efc3f9efc6..ac98296434e545 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 8dbd3d5efb9001..5b2ccd77b7c195 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 b9b26249501239..4c6133d7797333 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 65534e540e593b..3efc6d8c7d8476 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 290f3ebc87197d..92599a5807eba7 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 3fd3dacdaab9bb..804ce3b6e03ef2 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 400f5d31c13966..a66671048a41db 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 57521418eae843..c6c8de7f098c82 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 4caa72892eceb5..baabf909b0ae8f 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 f758fb0042c617..6efde68d0d2ccb 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 50a7f98c55a447..8e97c68c2ca0f5 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 06543424f46e87..caec91dd7ab986 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 865ad9a4261f0d..334aef836bee7b 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 6934e720ac6974..2aaf56c14390da 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}; @@ -49,21 +49,9 @@ pub(crate) fn explicit(expr: &Expr, locator: &Locator) -> Option { }) = expr { if matches!(op, Operator::Add) { - if matches!( - left.as_ref(), - Expr::FString(_) - | Expr::Constant(ast::ExprConstant { - value: Constant::Str(..) | Constant::Bytes(..), - .. - }) - ) && matches!( - right.as_ref(), - Expr::FString(_) - | Expr::Constant(ast::ExprConstant { - value: Constant::Str(..) | Constant::Bytes(..), - .. - }) - ) && locator.contains_line_break(*range) + if left.is_any_string_expr() + && right.is_any_string_expr() + && 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 2074f5cc8588bd..4b214fffec95f5 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 b28000c41b0c97..8a518c88906f43 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 1bc2bd1cf79239..2ddcb313c9a69a 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/ellipsis_in_non_empty_class_body.rs b/crates/ruff_linter/src/rules/flake8_pyi/rules/ellipsis_in_non_empty_class_body.rs index 6afb063a4ab4d9..4ad5b51f7a9160 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 55827e066515da..2eae1f7b75d235 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 dcd080c66a5e65..6523cae84a18e9 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 dd93d496138c48..cd78602a7e7179 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 2ad818501c3a41..d8fa801c942f92 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 5793c24ae498bc..dc84fdffa10f87 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 3d9a743f845105..223575db971ae1 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 43a183267fa78a..7a3d8c0532b247 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, CallPath}; use ruff_python_ast::helpers::map_callable; @@ -45,11 +45,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 @@ -58,11 +54,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 4ab938ffef5cc1..cd943e243458e7 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 5dcbf58f2e0dcf..92ac5389b5671a 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 6b7f185b7d2837..4b99eae88d0b0d 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 dc3b165b21d56d..6fef3c2e6e8eae 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; @@ -130,11 +130,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 @@ -182,14 +178,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; @@ -206,12 +198,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(); @@ -247,7 +237,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 7f9cde0604edfb..4e305b68e71694 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_trivia::{SimpleTokenKind, SimpleTokenizer}; use ruff_source_file::Locator; @@ -201,13 +201,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; } @@ -248,10 +242,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 a7afd23c985837..88862b5f7b42eb 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_text_size::Ranged; @@ -66,12 +66,12 @@ pub(crate) fn manual_dict_lookup(checker: &mut Checker, stmt_if: &ast::StmtIf) { 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; }; @@ -82,8 +82,9 @@ pub(crate) fn manual_dict_lookup(checker: &mut Checker, stmt_if: &ast::StmtIf) { 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; @@ -117,12 +118,12 @@ pub(crate) fn manual_dict_lookup(checker: &mut Checker, stmt_if: &ast::StmtIf) { 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)) @@ -130,7 +131,8 @@ pub(crate) fn manual_dict_lookup(checker: &mut Checker, stmt_if: &ast::StmtIf) { return; }; - constants.insert(constant.into()); + // The `expr` was checked to be a literal above, so this is safe. + literals.insert(expr.into()); } // Different `elif` _ => { @@ -139,7 +141,7 @@ pub(crate) fn manual_dict_lookup(checker: &mut Checker, stmt_if: &ast::StmtIf) { } } - 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 a8d8622cfe5a8f..34a664ce2bce13 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_text_size::{Ranged, TextRange}; use crate::checkers::ast::Checker; @@ -167,10 +167,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 651b775ddf338a..dd3c93d508ef6f 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 f58c2f165255ba..c196823de73780 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 5b90db881d8e64..4a1b6a3a8f75d6 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 b85bba684e10c2..0fc1cbee681de3 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 18d14b091f90c6..224d395462edae 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::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 bc2e18197a0a29..685d90388b0379 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 4f4c68c5e7975b..8da7a91eb2c498 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 c0952f61afcdbb..4dc880e039b389 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 6be1585fd0bfb5..1c8f3104422918 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 4d4aafb9ee2759..6f7d8cb813c3e9 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 03f8ea988f2400..39f0f5b5ca735d 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 cb8806d91961cb..3af9eb4e1acba2 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 c582bb17427784..9ce87aa2df033c 100644 --- a/crates/ruff_linter/src/rules/pydocstyle/helpers.rs +++ b/crates/ruff_linter/src/rules/pydocstyle/helpers.rs @@ -68,6 +68,6 @@ pub(crate) fn should_ignore_docstring(docstring: &Expr) -> bool { // 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()) + .as_string_literal_expr() + .is_some_and(|string_literal| string_literal.implicit_concatenated) } 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 1d8fa4daadbaa6..963ddd73925a9e 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 317c5692ea289b..8821f576ffbd05 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 7d99ea90422da8..aadd753b00f016 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 50589bc6ec95e5..d1ebda0237c793 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_str_strip_call.rs b/crates/ruff_linter/src/rules/pylint/rules/bad_str_strip_call.rs index 0d3381a30db535..36fc831d59c8be 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 94172eebdff736..0ea6884da096aa 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 98d2f0a426d888..cdb703e4b97d9d 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 1544a526f003d2..aaebf29fceddeb 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 b5a22c153cb5c9..4c3b083bfc640e 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 1aa03fff485a80..8a77a6f9d12b06 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 e101a5e235fc65..0765b5a4c7337c 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 81e24c4ca603a3..d7be287163007e 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}; @@ -51,42 +51,36 @@ 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> { - match expr { - Expr::Constant(ast::ExprConstant { value, .. }) => Some(value), +fn is_magic_value(expr: &Expr, allowed_types: &[ConstantType]) -> bool { + // We're only interested in a literal expression or unary operation on a + // literal expression. + let expr = match expr { 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, - }, - _ => None, - } -} + .. + }) if operand.is_literal_expr() => operand.as_ref(), + expr if expr.is_literal_expr() => expr, + _ => return false, + }; -/// 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) { + if let Ok(constant_type) = ConstantType::try_from(expr) { if allowed_types.contains(&constant_type) { return false; } } - match constant { - // 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, .. }) => { + + match expr { + // 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, } } @@ -96,23 +90,24 @@ 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 left.is_literal_expr() && right.is_literal_expr() { return; } } for comparison_expr in std::iter::once(left).chain(comparators.iter()) { - if let Some(value) = as_constant(comparison_expr) { - if is_magic_value(value, &checker.settings.pylint.allow_magic_value_types) { - checker.diagnostics.push(Diagnostic::new( - MagicValueComparison { - value: checker.generator().expr(comparison_expr), - }, - comparison_expr.range(), - )); - } + if is_magic_value( + comparison_expr, + &checker.settings.pylint.allow_magic_value_types, + ) { + checker.diagnostics.push(Diagnostic::new( + MagicValueComparison { + value: checker.generator().expr(comparison_expr), + }, + comparison_expr.range(), + )); } } } 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 82ba8bbbc9afb3..fac31d5a66658b 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 8d2b83dddec9df..49c5575199cf9c 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 1221cf7eaaee58..581b2036f57e0d 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 93e28b2679521c..690a6bd6615368 100644 --- a/crates/ruff_linter/src/rules/pylint/settings.rs +++ b/crates/ruff_linter/src/rules/pylint/settings.rs @@ -1,10 +1,10 @@ //! 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 +17,19 @@ pub enum ConstantType { Str, } -impl TryFrom<&Constant> for ConstantType { - type Error = anyhow::Error; +impl TryFrom<&Expr> for ConstantType { + type Error = (); - fn try_from(value: &Constant) -> Result { + fn try_from(value: &Expr) -> 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")) - } + Expr::StringLiteral(_) => Ok(Self::Str), + Expr::BytesLiteral(_) => Ok(Self::Bytes), + Expr::NumberLiteral(ExprNumberLiteral { value, .. }) => match value { + Number::Int(_) => Ok(Self::Int), + Number::Float(_) => Ok(Self::Float), + Number::Complex { .. } => Ok(Self::Complex), + }, + _ => Err(()), } } } 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 27e1ef79c00892..3a8135f93c4bdd 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 462ea9ceab71a3..a71a5f98abe2d4 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 @@ -2,7 +2,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, + self as ast, Arguments, Expr, ExprContext, Identifier, Keyword, Stmt, }; use ruff_python_codegen::Generator; use ruff_python_semantic::SemanticModel; @@ -175,10 +175,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 290a7cd55294ae..4f4bc59ae6e862 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 7f672851442aa7..c5d96934d7075b 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 784984e053eab5..d8b336aa201e01 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 @@ -5,7 +5,7 @@ use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, violation}; 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; @@ -145,8 +145,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 { @@ -407,8 +407,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 6f46f1fb9d917d..3c757820d90780 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 52356297c7caf3..549b340a761273 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 f65ce23ff29d81..592fe91202615e 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/unnecessary_encode_utf8.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/unnecessary_encode_utf8.rs index 9cc79ce4dab73d..5966624d9e6610 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 3e3666d39a27f5..d3d0866c39da85 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 4e81b2e961deb3..5ad2cb9b1c4bdb 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 81c0cfe214c81c..5dfc4c2d11c2b3 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 a4cf83d55783ff..1ea75fbc9ad468 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: str, .. }) = arg else { return; }; - if !matches!(str.value.as_str(), "" | ".") { + if !matches!(str.as_str(), "" | ".") { return; } } 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 e450cf30987ad2..612cab8af3b028 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; @@ -184,8 +184,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/single_item_membership_test.rs b/crates/ruff_linter/src/rules/refurb/rules/single_item_membership_test.rs index 8e828942bf3aa2..80241cec902917 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::{CmpOp, Expr}; +use ruff_python_ast::{ExprStringLiteral}; 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 b5652ec02b0be8..b737d131c81c81 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 287ee0fbc10527..2a0634f819bc92 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 3db7162124c056..5ab39b60f0bd9e 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,30 @@ 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(), - )); - } - } - 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()) { + // If the index is a literal, require an integer + if index_type.is_literal() && 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(), + )); + } 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 +118,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 +147,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, PartialEq)] +enum CheckableExprType { FString, + StringLiteral, + BytesLiteral, + IntLiteral, + FloatLiteral, + ComplexLiteral, + BooleanLiteral, + NoneLiteral, + EllipsisLiteral, List, ListComp, SetComp, @@ -168,11 +168,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 +192,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 +217,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 c6f1de26f1f83a..9f4bed6e4df66c 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 fc5b0a88b2ee5e..4f57393bc1b8a9 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 e52fe4889bf274..100ca9ddd4953d 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 6f8d40f053992e..730e93357ef948 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 bb07a670b1b02b..58f94a56e7bf30 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 bd0bd66d04a7fa..23472dafb61f94 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 295ab5b576d936..d0a219a3367cf3 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 041c0a0e4ea055..6f07a6a52c5ac1 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(), @@ -289,3 +336,114 @@ impl Ranged for ExpressionRef<'_> { } } } + +// TODO(dhruvmanila): Is this required? If not, remove it. + +/// Unowned pendant to any literal expressions that stores a reference instead of an owned value. +#[derive(Copy, Clone, Debug, PartialEq)] +pub enum AnyLiteralExpressionRef<'a> { + StringLiteral(&'a ast::ExprStringLiteral), + BytesLiteral(&'a ast::ExprBytesLiteral), + NumberLiteral(&'a ast::ExprNumberLiteral), + BooleanLiteral(&'a ast::ExprBooleanLiteral), + NoneLiteral(&'a ast::ExprNoneLiteral), + EllipsisLiteral(&'a ast::ExprEllipsisLiteral), +} + +impl<'a> TryFrom<&'a Box> for AnyLiteralExpressionRef<'a> { + type Error = (); + + fn try_from(value: &'a Box) -> Result { + AnyLiteralExpressionRef::try_from(value.as_ref()) + } +} + +impl<'a> TryFrom<&'a Expr> for AnyLiteralExpressionRef<'a> { + type Error = (); + + fn try_from(value: &'a Expr) -> Result { + match value { + Expr::StringLiteral(value) => Ok(AnyLiteralExpressionRef::StringLiteral(value)), + Expr::BytesLiteral(value) => Ok(AnyLiteralExpressionRef::BytesLiteral(value)), + Expr::NumberLiteral(value) => Ok(AnyLiteralExpressionRef::NumberLiteral(value)), + Expr::BooleanLiteral(value) => Ok(AnyLiteralExpressionRef::BooleanLiteral(value)), + Expr::NoneLiteral(value) => Ok(AnyLiteralExpressionRef::NoneLiteral(value)), + Expr::EllipsisLiteral(value) => Ok(AnyLiteralExpressionRef::EllipsisLiteral(value)), + _ => Err(()), + } + } +} + +impl<'a> From<&'a ast::ExprStringLiteral> for AnyLiteralExpressionRef<'a> { + fn from(value: &'a ast::ExprStringLiteral) -> Self { + AnyLiteralExpressionRef::StringLiteral(value) + } +} + +impl<'a> From<&'a ast::ExprBytesLiteral> for AnyLiteralExpressionRef<'a> { + fn from(value: &'a ast::ExprBytesLiteral) -> Self { + AnyLiteralExpressionRef::BytesLiteral(value) + } +} + +impl<'a> From<&'a ast::ExprNumberLiteral> for AnyLiteralExpressionRef<'a> { + fn from(value: &'a ast::ExprNumberLiteral) -> Self { + AnyLiteralExpressionRef::NumberLiteral(value) + } +} + +impl<'a> From<&'a ast::ExprBooleanLiteral> for AnyLiteralExpressionRef<'a> { + fn from(value: &'a ast::ExprBooleanLiteral) -> Self { + AnyLiteralExpressionRef::BooleanLiteral(value) + } +} + +impl<'a> From<&'a ast::ExprNoneLiteral> for AnyLiteralExpressionRef<'a> { + fn from(value: &'a ast::ExprNoneLiteral) -> Self { + AnyLiteralExpressionRef::NoneLiteral(value) + } +} + +impl<'a> From<&'a ast::ExprEllipsisLiteral> for AnyLiteralExpressionRef<'a> { + fn from(value: &'a ast::ExprEllipsisLiteral) -> Self { + AnyLiteralExpressionRef::EllipsisLiteral(value) + } +} + +impl<'a> From> for AnyNodeRef<'a> { + fn from(value: AnyLiteralExpressionRef<'a>) -> Self { + match value { + AnyLiteralExpressionRef::StringLiteral(expression) => { + AnyNodeRef::ExprStringLiteral(expression) + } + AnyLiteralExpressionRef::BytesLiteral(expression) => { + AnyNodeRef::ExprBytesLiteral(expression) + } + AnyLiteralExpressionRef::NumberLiteral(expression) => { + AnyNodeRef::ExprNumberLiteral(expression) + } + AnyLiteralExpressionRef::BooleanLiteral(expression) => { + AnyNodeRef::ExprBooleanLiteral(expression) + } + AnyLiteralExpressionRef::NoneLiteral(expression) => { + AnyNodeRef::ExprNoneLiteral(expression) + } + AnyLiteralExpressionRef::EllipsisLiteral(expression) => { + AnyNodeRef::ExprEllipsisLiteral(expression) + } + } + } +} + +impl Ranged for AnyLiteralExpressionRef<'_> { + fn range(&self) -> TextRange { + match self { + AnyLiteralExpressionRef::StringLiteral(expression) => expression.range(), + AnyLiteralExpressionRef::BytesLiteral(expression) => expression.range(), + AnyLiteralExpressionRef::NumberLiteral(expression) => expression.range(), + AnyLiteralExpressionRef::BooleanLiteral(expression) => expression.range(), + AnyLiteralExpressionRef::NoneLiteral(expression) => expression.range(), + AnyLiteralExpressionRef::EllipsisLiteral(expression) => expression.range(), + } + } +} diff --git a/crates/ruff_python_ast/src/helpers.rs b/crates/ruff_python_ast/src/helpers.rs index 4bd66427f8311c..416878406db70e 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, } @@ -579,24 +596,16 @@ pub fn is_constant_non_singleton(expr: &Expr) -> bool { } /// Return `true` if an [`Expr`] is `None`. +// TODO(dhruvmanila): can we inline this? 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 +613,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 +945,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 +1072,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 +1192,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 +1242,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 +1292,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 4a13ea63d63e59..e1a3b5ebf64869 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 bb7d9dcd7c6675..195795b08aa84e 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,51 @@ 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(_) + ) + } + + /// Returns `true` if the expression is either a string literal, bytes literal + /// or a f-string. + pub fn is_any_string_expr(&self) -> bool { + matches!( + self, + Expr::FString(_) | Expr::StringLiteral(_) | Expr::BytesLiteral(_) + ) + } + + 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 +996,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 +2761,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 +3037,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 +3099,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 +3405,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 +3483,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 122cdbc259ba0b..badef9f9f63aed 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 d0b62fa7af9eb5..8084f030c8f559 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 94d957c61736ef..8de18d1413ff61 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 9017b016821933..02f1c3bea332b2 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_codegen/src/generator.rs b/crates/ruff_python_codegen/src/generator.rs index 49a23162a103aa..8e1a2813ff8cc6 100644 --- a/crates/ruff_python_codegen/src/generator.rs +++ b/crates/ruff_python_codegen/src/generator.rs @@ -4,10 +4,9 @@ use std::ops::Deref; use ast::Singleton; use ruff_python_ast::{ - self as ast, Alias, ArgOrKeyword, BoolOp, CmpOp, Comprehension, Constant, ConversionFlag, - DebugText, ExceptHandler, Expr, Identifier, MatchCase, Operator, Parameter, Parameters, - Pattern, 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, Stmt, + Suite, TypeParam, TypeParamParamSpec, TypeParamTypeVar, TypeParamTypeVarTuple, WithItem, }; use ruff_python_ast::{ParameterWithDefault, TypeParams}; use ruff_python_literal::escape::{AsciiEscape, Escape, UnicodeEscape}; @@ -116,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); @@ -1091,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, .. }) => { + assert_eq!(f64::MAX_10_EXP, 308); + let inf_str = "1e309"; + + 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() { @@ -1175,46 +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 @@ -1327,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 acb8b9db00bb25..3b6bde34f666c2 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/expression/binary_like.rs b/crates/ruff_python_formatter/src/expression/binary_like.rs index 8e4ab0f93b0fd6..3fbbf784b52717 100644 --- a/crates/ruff_python_formatter/src/expression/binary_like.rs +++ b/crates/ruff_python_formatter/src/expression/binary_like.rs @@ -5,7 +5,7 @@ use smallvec::SmallVec; use ruff_formatter::write; use ruff_python_ast::{ - Constant, Expr, ExprAttribute, ExprBinOp, ExprBoolOp, ExprCompare, ExprConstant, ExprUnaryOp, + Expr, ExprAttribute, ExprBinOp, ExprBoolOp, ExprCompare, ExprUnaryOp, UnaryOp, }; use ruff_python_trivia::CommentRanges; @@ -505,10 +505,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(_), - .. - }) => true, + Expr::NumberLiteral(_) => 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 16d3956b26cbcc..38c58125047848 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}; @@ -41,8 +41,8 @@ impl FormatNodeRule for FormatExprAttribute { // If the value is an integer, we need to parenthesize it to avoid a syntax error. matches!( value.as_ref(), - Expr::Constant(ExprConstant { - value: Constant::Int(_) | Constant::Float(_), + Expr::NumberLiteral(ExprNumberLiteral { + value: Number::Int(_) | Number::Float(_), .. }) ) || is_expression_parenthesized(value.into(), f.context().comments().ranges(), f.context().source()); 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 4d5ea27354ae52..4a9361881d7e53 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 00000000000000..48b40cce050d12 --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_boolean_literal.rs @@ -0,0 +1,37 @@ +use ruff_python_ast::node::AnyNodeRef; +use ruff_python_ast::ExprBooleanLiteral; + +use crate::comments::SourceComment; +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) + } + } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + Ok(()) + } +} + +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 00000000000000..33fba12bf528f1 --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_bytes_literal.rs @@ -0,0 +1,71 @@ +use ruff_formatter::FormatRuleWithOptions; +use ruff_python_ast::node::AnyNodeRef; +use ruff_python_ast::ExprBytesLiteral; +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 FormatExprBytesLiteral { + layout: StringLayout, +} + +impl FormatRuleWithOptions> for FormatExprBytesLiteral { + type Options = StringLayout; + + fn with_options(mut self, options: Self::Options) -> Self { + self.layout = options; + self + } +} + +impl FormatNodeRule for FormatExprBytesLiteral { + fn fmt_fields(&self, item: &ExprBytesLiteral, f: &mut PyFormatter) -> FormatResult<()> { + FormatString::new(&AnyString::Bytes(item)) + .with_layout(self.layout) + .fmt(f) + } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + 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 + } + } +} + +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/expr_compare.rs b/crates/ruff_python_formatter/src/expression/expr_compare.rs index e4f638831cc3e1..f48bd66eccd9c4 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 f9dda6c555f628..00000000000000 --- 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 00000000000000..6cc8c989fbb6b3 --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_ellipsis_literal.rs @@ -0,0 +1,33 @@ +use ruff_python_ast::node::AnyNodeRef; +use ruff_python_ast::ExprEllipsisLiteral; + +use crate::comments::SourceComment; +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) + } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + Ok(()) + } +} + +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 00000000000000..9a95cbcba4eb0d --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_none_literal.rs @@ -0,0 +1,33 @@ +use ruff_python_ast::node::AnyNodeRef; +use ruff_python_ast::ExprNoneLiteral; + +use crate::comments::SourceComment; +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) + } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + Ok(()) + } +} + +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 00000000000000..836c8e08b57dce --- /dev/null +++ b/crates/ruff_python_formatter/src/expression/expr_number_literal.rs @@ -0,0 +1,38 @@ +use ruff_python_ast::node::AnyNodeRef; +use ruff_python_ast::{ExprNumberLiteral, Number}; + +use crate::comments::SourceComment; +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), + } + } + + fn fmt_dangling_comments( + &self, + _dangling_comments: &[SourceComment], + _f: &mut PyFormatter, + ) -> FormatResult<()> { + Ok(()) + } +} + +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 5837a22605aebc..b371e57468b0b6 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 00000000000000..4aa3f03479baf3 --- /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::node::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 0f6550654db230..42ef20d3407e91 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; @@ -25,11 +25,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; @@ -40,10 +42,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; @@ -92,7 +97,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), @@ -466,7 +476,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), @@ -671,16 +686,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 { @@ -698,7 +709,12 @@ impl<'input> CanOmitOptionalParenthesesVisitor<'input> { | Expr::YieldFrom(_) | Expr::FormattedValue(_) | Expr::FString(_) - | Expr::Constant(_) + | Expr::StringLiteral(_) + | Expr::BytesLiteral(_) + | Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) | Expr::Starred(_) | Expr::Name(_) | Expr::Slice(_) => {} diff --git a/crates/ruff_python_formatter/src/expression/number.rs b/crates/ruff_python_formatter/src/expression/number.rs index 7583bfd5cf0a2b..ac97e58538ad2a 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 b6f7da74554bb3..279b7dfb38f6f7 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 08c248e221e5ce..dfa93b8961ac3f 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 ea48cdf4088c77..47987ab936e9dc 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; @@ -488,13 +487,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) + matches!(value.as_ref(), Expr::EllipsisLiteral(_)) && !comments.has_leading(node) } _ => false, } @@ -546,10 +539,13 @@ impl<'a> DocstringStmt<'a> { return None; }; - if let Expr::Constant(ExprConstant { value, .. }) = value.as_ref() { - if !value.is_implicit_concatenated() { - return Some(DocstringStmt(stmt)); - } + // Bytes literals are not docstrings + if let Expr::StringLiteral(ast::ExprStringLiteral { + implicit_concatenated: false, + .. + }) = value.as_ref() + { + return Some(DocstringStmt(stmt)); } None @@ -564,13 +560,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 @@ -578,9 +574,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 8d3aacdfd80cda..f5ae5d487a5e27 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(), }); }; @@ -621,15 +621,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()), @@ -639,7 +639,7 @@ ConstantExpr: ast::ParenthesizedExpr = { } AddOpExpr: ast::ParenthesizedExpr = { - => ast::ExprBinOp { + => ast::ExprBinOp { left: Box::new(left.into()), op, right: Box::new(right.into()), @@ -660,7 +660,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(), @@ -712,18 +712,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())?), @@ -1678,7 +1677,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(), @@ -1770,10 +1769,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 = { @@ -1926,10 +1925,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 db1de2e1b353db..a2113905a0c99c 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: 659bb984f00c336cf30c371b9f53bf4487db048c52419c0000f09a9c049551d4 +// sha3: 9cc1f2a68b52b9a1df0d1e8a697b68c877919dfdfd92e2c8ca3f4190820841b7 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(1574); 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(1575); 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(1576); 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(1577); 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(1578); 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(1579); 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(1580); 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(1581); 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(1778); 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(1779); 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(1780); 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(1781); 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(1612); 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(1613); 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(1614); 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(1639); 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(1640); 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(1641); 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(1645); 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(1646); 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(1647); 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(1403); 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(1411); 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(1413); 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(1672); 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(1673); 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(1674); 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(1699); 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(1700); 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(1701); 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(1705); 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(1706); 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(1707); 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(1441); 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(1449); 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(1451); 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(1564); 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(1566); 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::__action1754::<>(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::__action1755::<>(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::__action1758::<>(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::__action1759::<>(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::__action1724::<>(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::__action1725::<>(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::__action1749::<>(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::__action1750::<>(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::__action1751::<>(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::__action1528::<>(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::__action1529::<>(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::__action1582::<>(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(1583); 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::__action1583::<>(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::__action1584::<>(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(1585); - let __sym0 = __pop_Variant71(__symbols); + let __sym0 = __pop_Variant70(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action1585::<>(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::__action1745::<>(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::__action1746::<>(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::__action1736::<>(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::__action1737::<>(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::__action1738::<>(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::__action1739::<>(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::__action1760::<>(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::__action1761::<>(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::__action1762::<>(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::__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 __reduce410< + pub(crate) fn __reduce404< >( source_code: &str, mode: Mode, @@ -25564,9 +25460,9 @@ mod __parse__Top { let __end = __sym6.2; let __nt = super::__action1764::<>(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::__action1765::<>(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::__action1766::<>(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::__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 __reduce414< + pub(crate) fn __reduce408< >( source_code: &str, mode: Mode, @@ -25661,9 +25557,9 @@ mod __parse__Top { let __end = __sym7.2; let __nt = super::__action1768::<>(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::__action1769::<>(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::__action1770::<>(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::__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 __reduce418< + pub(crate) fn __reduce412< >( source_code: &str, mode: Mode, @@ -25759,9 +25655,9 @@ mod __parse__Top { let __end = __sym5.2; let __nt = super::__action1772::<>(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::__action1773::<>(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::__action1774::<>(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::__action1775::<>(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::__action1546::<>(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::__action1547::<>(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::__action1594::<>(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(1595); 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::__action1595::<>(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(1568); 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::__action1568::<>(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::__action1569::<>(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(864); + // MatchStatement = "match", TestOrStarNamedExpr, ",", ":", "\n", Indent, MatchCase+, Dedent => ActionFn(862); 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::__action864::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action862::<>(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(865); + // MatchStatement = "match", TwoOrMore, ",", ":", "\n", Indent, MatchCase+, Dedent => ActionFn(863); 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::__action865::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action863::<>(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(866); + // MatchStatement = "match", TwoOrMore, ":", "\n", Indent, MatchCase+, Dedent => ActionFn(864); 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::__action866::<>(source_code, mode, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action864::<>(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(1369); + // NamedExpression = NamedExpressionName, ":=", Test<"all"> => ActionFn(1367); 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::__action1369::<>(source_code, mode, __sym0, __sym1, __sym2); + let __nt = super::__action1367::<>(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(1370); + // NamedExpressionName = Identifier => ActionFn(1368); let __sym0 = __pop_Variant23(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action1370::<>(source_code, mode, __sym0); + let __nt = super::__action1368::<>(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(1371); + // NonlocalStatement = "nonlocal", OneOrMore => ActionFn(1369); 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::__action1371::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1369::<>(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(1372); + // NotTest<"all"> = "not", NotTest<"all"> => ActionFn(1370); 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::__action1372::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1370::<>(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(1373); + // NotTest<"no-withitems"> = "not", NotTest<"all"> => ActionFn(1371); 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::__action1373::<>(source_code, mode, __sym0, __sym1); + let __nt = super::__action1371::<>(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(1372); + let __sym0 = __pop_Variant81(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action1372::<>(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(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::__action1373::<>(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::__action1586::<>(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::__action1587::<>(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::__action1588::<>(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::__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 __reduce533< @@ -27761,7 +27761,7 @@ mod __parse__Top { let __start = __sym0.0; let __end = __sym2.2; let __nt = super::__action1590::<>(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::__action1591::<>(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::__action1592::<>(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::__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 __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::__action1485::<>(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::__action1486::<>(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::__action1487::<>(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(1502); 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(1506); 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(), }); }; @@ -34261,12 +34261,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() } @@ -34566,8 +34566,7 @@ fn __action129< (_, end_location, _): (TextSize, TextSize, TextSize), ) -> ast::Expr { - ast::ExprConstant { - value: ast::Constant::None, + ast::ExprNoneLiteral { range: (location..end_location).into() }.into() } @@ -34583,8 +34582,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() } @@ -34600,8 +34599,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() } @@ -36703,9 +36702,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)] @@ -36715,9 +36714,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)] @@ -36727,9 +36726,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)] @@ -41018,11 +41017,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() @@ -41328,7 +41327,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)] @@ -41342,7 +41341,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)] @@ -41356,7 +41355,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)] @@ -41370,7 +41369,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)] @@ -41745,11 +41744,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() @@ -42028,7 +42027,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)] @@ -42042,7 +42041,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)] @@ -42056,7 +42055,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)] @@ -42070,7 +42069,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)] @@ -46177,7 +46176,7 @@ fn __action733< >( source_code: &str, mode: Mode, - __0: (TextSize, ast::Constant, TextSize), + __0: (TextSize, ast::Number, TextSize), __1: (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { @@ -46841,7 +46840,7 @@ fn __action754< >( source_code: &str, mode: Mode, - __0: (TextSize, ast::Constant, TextSize), + __0: (TextSize, ast::Number, TextSize), __1: (TextSize, TextSize, TextSize), ) -> ast::ParenthesizedExpr { @@ -47846,64 +47845,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, @@ -47935,7 +47876,7 @@ fn __action788< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action789< +fn __action787< >( source_code: &str, mode: Mode, @@ -47965,7 +47906,7 @@ fn __action789< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action790< +fn __action788< >( source_code: &str, mode: Mode, @@ -47993,7 +47934,7 @@ fn __action790< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action791< +fn __action789< >( source_code: &str, mode: Mode, @@ -48023,7 +47964,7 @@ fn __action791< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action792< +fn __action790< >( source_code: &str, mode: Mode, @@ -48053,7 +47994,7 @@ fn __action792< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action793< +fn __action791< >( source_code: &str, mode: Mode, @@ -48085,7 +48026,7 @@ fn __action793< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action794< +fn __action792< >( source_code: &str, mode: Mode, @@ -48117,7 +48058,7 @@ fn __action794< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action795< +fn __action793< >( source_code: &str, mode: Mode, @@ -48151,7 +48092,7 @@ fn __action795< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action796< +fn __action794< >( source_code: &str, mode: Mode, @@ -48185,7 +48126,7 @@ fn __action796< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action797< +fn __action795< >( source_code: &str, mode: Mode, @@ -48217,7 +48158,7 @@ fn __action797< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action798< +fn __action796< >( source_code: &str, mode: Mode, @@ -48249,7 +48190,7 @@ fn __action798< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action799< +fn __action797< >( source_code: &str, mode: Mode, @@ -48279,7 +48220,7 @@ fn __action799< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action800< +fn __action798< >( source_code: &str, mode: Mode, @@ -48311,7 +48252,7 @@ fn __action800< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action801< +fn __action799< >( source_code: &str, mode: Mode, @@ -48345,7 +48286,7 @@ fn __action801< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action802< +fn __action800< >( source_code: &str, mode: Mode, @@ -48383,7 +48324,7 @@ fn __action802< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action803< +fn __action801< >( source_code: &str, mode: Mode, @@ -48415,7 +48356,7 @@ fn __action803< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action804< +fn __action802< >( source_code: &str, mode: Mode, @@ -48443,7 +48384,7 @@ fn __action804< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action805< +fn __action803< >( source_code: &str, mode: Mode, @@ -48469,7 +48410,7 @@ fn __action805< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action806< +fn __action804< >( source_code: &str, mode: Mode, @@ -48507,7 +48448,7 @@ fn __action806< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action807< +fn __action805< >( source_code: &str, mode: Mode, @@ -48543,7 +48484,7 @@ fn __action807< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action808< +fn __action806< >( source_code: &str, mode: Mode, @@ -48573,7 +48514,7 @@ fn __action808< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action809< +fn __action807< >( source_code: &str, mode: Mode, @@ -48603,7 +48544,7 @@ fn __action809< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action810< +fn __action808< >( source_code: &str, mode: Mode, @@ -48631,7 +48572,7 @@ fn __action810< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action811< +fn __action809< >( source_code: &str, mode: Mode, @@ -48659,7 +48600,7 @@ fn __action811< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action812< +fn __action810< >( source_code: &str, mode: Mode, @@ -48689,7 +48630,7 @@ fn __action812< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action813< +fn __action811< >( source_code: &str, mode: Mode, @@ -48717,7 +48658,7 @@ fn __action813< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action814< +fn __action812< >( source_code: &str, mode: Mode, @@ -48757,7 +48698,7 @@ fn __action814< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action815< +fn __action813< >( source_code: &str, mode: Mode, @@ -48795,7 +48736,7 @@ fn __action815< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action816< +fn __action814< >( source_code: &str, mode: Mode, @@ -48837,7 +48778,7 @@ fn __action816< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action817< +fn __action815< >( source_code: &str, mode: Mode, @@ -48877,7 +48818,7 @@ fn __action817< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action818< +fn __action816< >( source_code: &str, mode: Mode, @@ -48907,7 +48848,7 @@ fn __action818< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action819< +fn __action817< >( source_code: &str, mode: Mode, @@ -48939,7 +48880,7 @@ fn __action819< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action820< +fn __action818< >( source_code: &str, mode: Mode, @@ -48969,7 +48910,7 @@ fn __action820< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action821< +fn __action819< >( source_code: &str, mode: Mode, @@ -48999,7 +48940,7 @@ fn __action821< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action822< +fn __action820< >( source_code: &str, mode: Mode, @@ -49029,7 +48970,7 @@ fn __action822< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action823< +fn __action821< >( source_code: &str, mode: Mode, @@ -49057,7 +48998,7 @@ fn __action823< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action824< +fn __action822< >( source_code: &str, mode: Mode, @@ -49087,7 +49028,7 @@ fn __action824< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action825< +fn __action823< >( source_code: &str, mode: Mode, @@ -49115,7 +49056,7 @@ fn __action825< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action826< +fn __action824< >( source_code: &str, mode: Mode, @@ -49145,7 +49086,7 @@ fn __action826< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action827< +fn __action825< >( source_code: &str, mode: Mode, @@ -49173,7 +49114,7 @@ fn __action827< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action828< +fn __action826< >( source_code: &str, mode: Mode, @@ -49209,7 +49150,7 @@ fn __action828< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action829< +fn __action827< >( source_code: &str, mode: Mode, @@ -49239,7 +49180,7 @@ fn __action829< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action830< +fn __action828< >( source_code: &str, mode: Mode, @@ -49269,7 +49210,7 @@ fn __action830< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action831< +fn __action829< >( source_code: &str, mode: Mode, @@ -49297,7 +49238,7 @@ fn __action831< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action832< +fn __action830< >( source_code: &str, mode: Mode, @@ -49331,7 +49272,7 @@ fn __action832< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action833< +fn __action831< >( source_code: &str, mode: Mode, @@ -49363,7 +49304,7 @@ fn __action833< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action834< +fn __action832< >( source_code: &str, mode: Mode, @@ -49391,7 +49332,7 @@ fn __action834< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action835< +fn __action833< >( source_code: &str, mode: Mode, @@ -49421,7 +49362,7 @@ fn __action835< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action836< +fn __action834< >( source_code: &str, mode: Mode, @@ -49455,7 +49396,7 @@ fn __action836< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action837< +fn __action835< >( source_code: &str, mode: Mode, @@ -49483,7 +49424,7 @@ fn __action837< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action838< +fn __action836< >( source_code: &str, mode: Mode, @@ -49511,7 +49452,7 @@ fn __action838< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action839< +fn __action837< >( source_code: &str, mode: Mode, @@ -49541,7 +49482,7 @@ fn __action839< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action840< +fn __action838< >( source_code: &str, mode: Mode, @@ -49589,7 +49530,7 @@ fn __action840< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action841< +fn __action839< >( source_code: &str, mode: Mode, @@ -49617,7 +49558,7 @@ fn __action841< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action842< +fn __action840< >( source_code: &str, mode: Mode, @@ -49645,7 +49586,7 @@ fn __action842< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action843< +fn __action841< >( source_code: &str, mode: Mode, @@ -49673,7 +49614,7 @@ fn __action843< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action844< +fn __action842< >( source_code: &str, mode: Mode, @@ -49701,7 +49642,7 @@ fn __action844< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action845< +fn __action843< >( source_code: &str, mode: Mode, @@ -49729,7 +49670,7 @@ fn __action845< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action846< +fn __action844< >( source_code: &str, mode: Mode, @@ -49757,7 +49698,7 @@ fn __action846< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action847< +fn __action845< >( source_code: &str, mode: Mode, @@ -49785,7 +49726,7 @@ fn __action847< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action848< +fn __action846< >( source_code: &str, mode: Mode, @@ -49813,7 +49754,7 @@ fn __action848< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action849< +fn __action847< >( source_code: &str, mode: Mode, @@ -49841,7 +49782,7 @@ fn __action849< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action850< +fn __action848< >( source_code: &str, mode: Mode, @@ -49869,7 +49810,7 @@ fn __action850< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action851< +fn __action849< >( source_code: &str, mode: Mode, @@ -49899,7 +49840,7 @@ fn __action851< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action852< +fn __action850< >( source_code: &str, mode: Mode, @@ -49933,7 +49874,7 @@ fn __action852< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action853< +fn __action851< >( source_code: &str, mode: Mode, @@ -49965,7 +49906,7 @@ fn __action853< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action854< +fn __action852< >( source_code: &str, mode: Mode, @@ -50001,7 +49942,7 @@ fn __action854< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action855< +fn __action853< >( source_code: &str, mode: Mode, @@ -50035,7 +49976,7 @@ fn __action855< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action856< +fn __action854< >( source_code: &str, mode: Mode, @@ -50075,7 +50016,7 @@ fn __action856< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action857< +fn __action855< >( source_code: &str, mode: Mode, @@ -50113,7 +50054,7 @@ fn __action857< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action858< +fn __action856< >( source_code: &str, mode: Mode, @@ -50147,7 +50088,7 @@ fn __action858< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action859< +fn __action857< >( source_code: &str, mode: Mode, @@ -50179,7 +50120,7 @@ fn __action859< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action860< +fn __action858< >( source_code: &str, mode: Mode, @@ -50207,7 +50148,7 @@ fn __action860< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action861< +fn __action859< >( source_code: &str, mode: Mode, @@ -50239,7 +50180,7 @@ fn __action861< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action862< +fn __action860< >( source_code: &str, mode: Mode, @@ -50271,7 +50212,7 @@ fn __action862< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action863< +fn __action861< >( source_code: &str, mode: Mode, @@ -50309,7 +50250,7 @@ fn __action863< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action864< +fn __action862< >( source_code: &str, mode: Mode, @@ -50349,7 +50290,7 @@ fn __action864< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action865< +fn __action863< >( source_code: &str, mode: Mode, @@ -50389,7 +50330,7 @@ fn __action865< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action866< +fn __action864< >( source_code: &str, mode: Mode, @@ -50427,7 +50368,7 @@ fn __action866< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action867< +fn __action865< >( source_code: &str, mode: Mode, @@ -50459,7 +50400,7 @@ fn __action867< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action868< +fn __action866< >( source_code: &str, mode: Mode, @@ -50487,7 +50428,7 @@ fn __action868< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action869< +fn __action867< >( source_code: &str, mode: Mode, @@ -50517,7 +50458,7 @@ fn __action869< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action870< +fn __action868< >( source_code: &str, mode: Mode, @@ -50547,7 +50488,7 @@ fn __action870< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action871< +fn __action869< >( source_code: &str, mode: Mode, @@ -50575,6 +50516,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< @@ -57656,7 +57655,7 @@ fn __action1096< __7, ); let __temp0 = (__start0, __temp0, __end0); - __action816( + __action814( source_code, mode, __0, @@ -57696,7 +57695,7 @@ fn __action1097< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action816( + __action814( source_code, mode, __0, @@ -57737,7 +57736,7 @@ fn __action1098< __6, ); let __temp0 = (__start0, __temp0, __end0); - __action817( + __action815( source_code, mode, __0, @@ -57775,7 +57774,7 @@ fn __action1099< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action817( + __action815( source_code, mode, __0, @@ -57890,7 +57889,7 @@ fn __action1103< __2, ); let __temp0 = (__start0, __temp0, __end0); - __action792( + __action790( source_code, mode, __0, @@ -57918,7 +57917,7 @@ fn __action1104< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action792( + __action790( source_code, mode, __0, @@ -58334,7 +58333,7 @@ fn __action1119< __2, ); let __temp0 = (__start0, __temp0, __end0); - __action829( + __action827( source_code, mode, __0, @@ -58362,7 +58361,7 @@ fn __action1120< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action829( + __action827( source_code, mode, __0, @@ -58392,7 +58391,7 @@ fn __action1121< __2, ); let __temp0 = (__start0, __temp0, __end0); - __action830( + __action828( source_code, mode, __0, @@ -58420,7 +58419,7 @@ fn __action1122< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action830( + __action828( source_code, mode, __0, @@ -58485,7 +58484,7 @@ fn __action1124< __9, ); let __temp0 = (__start0, __temp0, __end0); - __action814( + __action812( source_code, mode, __0, @@ -58523,7 +58522,7 @@ fn __action1125< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action814( + __action812( source_code, mode, __0, @@ -58564,7 +58563,7 @@ fn __action1126< __8, ); let __temp0 = (__start0, __temp0, __end0); - __action815( + __action813( source_code, mode, __0, @@ -58600,7 +58599,7 @@ fn __action1127< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action815( + __action813( source_code, mode, __0, @@ -59379,7 +59378,7 @@ fn __action1149< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action828( + __action826( source_code, mode, __0, @@ -59413,7 +59412,7 @@ fn __action1150< __4, ); let __temp0 = (__start0, __temp0, __end0); - __action828( + __action826( source_code, mode, __0, @@ -61057,7 +61056,7 @@ fn __action1203< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action794( + __action792( source_code, mode, __0, @@ -61092,7 +61091,7 @@ fn __action1204< __4, ); let __temp0 = (__start0, __temp0, __end0); - __action796( + __action794( source_code, mode, __0, @@ -61576,7 +61575,7 @@ fn __action1220< __2, ); let __temp0 = (__start0, __temp0, __end0); - __action858( + __action856( source_code, mode, __0, @@ -61608,7 +61607,7 @@ fn __action1221< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action858( + __action856( source_code, mode, __0, @@ -62061,7 +62060,7 @@ fn __action1237< >( source_code: &str, mode: Mode, - __0: (TextSize, ast::Constant, TextSize), + __0: (TextSize, ast::Number, TextSize), ) -> ast::ParenthesizedExpr { let __start0 = __0.2; @@ -62885,7 +62884,7 @@ fn __action1264< >( source_code: &str, mode: Mode, - __0: (TextSize, ast::Constant, TextSize), + __0: (TextSize, ast::Number, TextSize), ) -> ast::ParenthesizedExpr { let __start0 = __0.2; @@ -63992,60 +63991,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, @@ -64063,7 +64008,7 @@ fn __action1303< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action788( + __action786( source_code, mode, __0, @@ -64075,7 +64020,7 @@ fn __action1303< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1304< +fn __action1302< >( source_code: &str, mode: Mode, @@ -64092,7 +64037,7 @@ fn __action1304< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action789( + __action787( source_code, mode, __0, @@ -64103,7 +64048,7 @@ fn __action1304< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1305< +fn __action1303< >( source_code: &str, mode: Mode, @@ -64119,7 +64064,7 @@ fn __action1305< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action790( + __action788( source_code, mode, __0, @@ -64129,7 +64074,7 @@ fn __action1305< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1306< +fn __action1304< >( source_code: &str, mode: Mode, @@ -64146,7 +64091,7 @@ fn __action1306< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action791( + __action789( source_code, mode, __0, @@ -64157,7 +64102,7 @@ fn __action1306< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1307< +fn __action1305< >( source_code: &str, mode: Mode, @@ -64187,7 +64132,7 @@ fn __action1307< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1308< +fn __action1306< >( source_code: &str, mode: Mode, @@ -64213,7 +64158,7 @@ fn __action1308< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1309< +fn __action1307< >( source_code: &str, mode: Mode, @@ -64231,7 +64176,7 @@ fn __action1309< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action797( + __action795( source_code, mode, __0, @@ -64243,7 +64188,7 @@ fn __action1309< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1310< +fn __action1308< >( source_code: &str, mode: Mode, @@ -64261,7 +64206,7 @@ fn __action1310< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action798( + __action796( source_code, mode, __0, @@ -64273,7 +64218,7 @@ fn __action1310< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1311< +fn __action1309< >( source_code: &str, mode: Mode, @@ -64290,7 +64235,7 @@ fn __action1311< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action799( + __action797( source_code, mode, __0, @@ -64301,7 +64246,7 @@ fn __action1311< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1312< +fn __action1310< >( source_code: &str, mode: Mode, @@ -64319,7 +64264,7 @@ fn __action1312< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action800( + __action798( source_code, mode, __0, @@ -64331,7 +64276,7 @@ fn __action1312< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1313< +fn __action1311< >( source_code: &str, mode: Mode, @@ -64350,7 +64295,7 @@ fn __action1313< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action801( + __action799( source_code, mode, __0, @@ -64363,7 +64308,7 @@ fn __action1313< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1314< +fn __action1312< >( source_code: &str, mode: Mode, @@ -64381,7 +64326,7 @@ fn __action1314< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action803( + __action801( source_code, mode, __0, @@ -64393,7 +64338,7 @@ fn __action1314< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1315< +fn __action1313< >( source_code: &str, mode: Mode, @@ -64409,7 +64354,7 @@ fn __action1315< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action804( + __action802( source_code, mode, __0, @@ -64419,7 +64364,7 @@ fn __action1315< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1316< +fn __action1314< >( source_code: &str, mode: Mode, @@ -64440,7 +64385,7 @@ fn __action1316< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action806( + __action804( source_code, mode, __0, @@ -64455,7 +64400,7 @@ fn __action1316< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1317< +fn __action1315< >( source_code: &str, mode: Mode, @@ -64475,7 +64420,7 @@ fn __action1317< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action807( + __action805( source_code, mode, __0, @@ -64489,7 +64434,7 @@ fn __action1317< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1318< +fn __action1316< >( source_code: &str, mode: Mode, @@ -64506,7 +64451,7 @@ fn __action1318< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action808( + __action806( source_code, mode, __0, @@ -64517,7 +64462,7 @@ fn __action1318< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1319< +fn __action1317< >( source_code: &str, mode: Mode, @@ -64534,7 +64479,7 @@ fn __action1319< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action809( + __action807( source_code, mode, __0, @@ -64545,7 +64490,7 @@ fn __action1319< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1320< +fn __action1318< >( source_code: &str, mode: Mode, @@ -64561,7 +64506,7 @@ fn __action1320< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action810( + __action808( source_code, mode, __0, @@ -64571,7 +64516,7 @@ fn __action1320< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1321< +fn __action1319< >( source_code: &str, mode: Mode, @@ -64587,7 +64532,7 @@ fn __action1321< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action811( + __action809( source_code, mode, __0, @@ -64597,7 +64542,7 @@ fn __action1321< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1322< +fn __action1320< >( source_code: &str, mode: Mode, @@ -64614,7 +64559,7 @@ fn __action1322< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action812( + __action810( source_code, mode, __0, @@ -64625,7 +64570,7 @@ fn __action1322< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1323< +fn __action1321< >( source_code: &str, mode: Mode, @@ -64641,7 +64586,7 @@ fn __action1323< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action813( + __action811( source_code, mode, __0, @@ -64651,7 +64596,7 @@ fn __action1323< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1324< +fn __action1322< >( source_code: &str, mode: Mode, @@ -64668,7 +64613,7 @@ fn __action1324< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action818( + __action816( source_code, mode, __0, @@ -64679,7 +64624,7 @@ fn __action1324< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1325< +fn __action1323< >( source_code: &str, mode: Mode, @@ -64697,7 +64642,7 @@ fn __action1325< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action819( + __action817( source_code, mode, __0, @@ -64709,7 +64654,7 @@ fn __action1325< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1326< +fn __action1324< >( source_code: &str, mode: Mode, @@ -64726,7 +64671,7 @@ fn __action1326< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action820( + __action818( source_code, mode, __0, @@ -64737,7 +64682,7 @@ fn __action1326< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1327< +fn __action1325< >( source_code: &str, mode: Mode, @@ -64754,7 +64699,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, @@ -64763,6 +64736,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< @@ -64823,9 +64822,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; @@ -64851,8 +64850,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; @@ -64874,60 +64873,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, @@ -64957,7 +64902,7 @@ fn __action1334< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1335< +fn __action1333< >( source_code: &str, mode: Mode, @@ -64983,7 +64928,7 @@ fn __action1335< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1336< +fn __action1334< >( source_code: &str, mode: Mode, @@ -65013,7 +64958,7 @@ fn __action1336< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1337< +fn __action1335< >( source_code: &str, mode: Mode, @@ -65039,7 +64984,7 @@ fn __action1337< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1338< +fn __action1336< >( source_code: &str, mode: Mode, @@ -65055,7 +65000,7 @@ fn __action1338< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action831( + __action829( source_code, mode, __0, @@ -65065,7 +65010,7 @@ fn __action1338< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1339< +fn __action1337< >( source_code: &str, mode: Mode, @@ -65084,7 +65029,7 @@ fn __action1339< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action832( + __action830( source_code, mode, __0, @@ -65097,7 +65042,7 @@ fn __action1339< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1340< +fn __action1338< >( source_code: &str, mode: Mode, @@ -65115,7 +65060,7 @@ fn __action1340< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action833( + __action831( source_code, mode, __0, @@ -65127,7 +65072,7 @@ fn __action1340< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1341< +fn __action1339< >( source_code: &str, mode: Mode, @@ -65143,7 +65088,7 @@ fn __action1341< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action834( + __action832( source_code, mode, __0, @@ -65153,7 +65098,7 @@ fn __action1341< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1342< +fn __action1340< >( source_code: &str, mode: Mode, @@ -65170,7 +65115,7 @@ fn __action1342< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action835( + __action833( source_code, mode, __0, @@ -65181,7 +65126,7 @@ fn __action1342< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1343< +fn __action1341< >( source_code: &str, mode: Mode, @@ -65200,7 +65145,7 @@ fn __action1343< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action836( + __action834( source_code, mode, __0, @@ -65213,7 +65158,7 @@ fn __action1343< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1344< +fn __action1342< >( source_code: &str, mode: Mode, @@ -65229,7 +65174,7 @@ fn __action1344< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action837( + __action835( source_code, mode, __0, @@ -65239,7 +65184,7 @@ fn __action1344< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1345< +fn __action1343< >( source_code: &str, mode: Mode, @@ -65255,7 +65200,7 @@ fn __action1345< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action838( + __action836( source_code, mode, __0, @@ -65265,7 +65210,7 @@ fn __action1345< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1346< +fn __action1344< >( source_code: &str, mode: Mode, @@ -65282,7 +65227,7 @@ fn __action1346< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action839( + __action837( source_code, mode, __0, @@ -65293,7 +65238,7 @@ fn __action1346< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1347< +fn __action1345< >( source_code: &str, mode: Mode, @@ -65322,7 +65267,7 @@ fn __action1347< &__end1, ); let __temp1 = (__start1, __temp1, __end1); - __action840( + __action838( source_code, mode, __0, @@ -65337,7 +65282,7 @@ fn __action1347< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1348< +fn __action1346< >( source_code: &str, mode: Mode, @@ -65353,7 +65298,7 @@ fn __action1348< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action841( + __action839( source_code, mode, __0, @@ -65363,7 +65308,7 @@ fn __action1348< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1349< +fn __action1347< >( source_code: &str, mode: Mode, @@ -65379,7 +65324,7 @@ fn __action1349< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action842( + __action840( source_code, mode, __0, @@ -65389,7 +65334,7 @@ fn __action1349< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1350< +fn __action1348< >( source_code: &str, mode: Mode, @@ -65405,7 +65350,7 @@ fn __action1350< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action843( + __action841( source_code, mode, __0, @@ -65415,7 +65360,7 @@ fn __action1350< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1351< +fn __action1349< >( source_code: &str, mode: Mode, @@ -65431,7 +65376,7 @@ fn __action1351< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action844( + __action842( source_code, mode, __0, @@ -65441,7 +65386,7 @@ fn __action1351< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1352< +fn __action1350< >( source_code: &str, mode: Mode, @@ -65457,7 +65402,7 @@ fn __action1352< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action845( + __action843( source_code, mode, __0, @@ -65467,7 +65412,7 @@ fn __action1352< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1353< +fn __action1351< >( source_code: &str, mode: Mode, @@ -65483,7 +65428,7 @@ fn __action1353< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action846( + __action844( source_code, mode, __0, @@ -65493,7 +65438,7 @@ fn __action1353< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1354< +fn __action1352< >( source_code: &str, mode: Mode, @@ -65509,7 +65454,7 @@ fn __action1354< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action847( + __action845( source_code, mode, __0, @@ -65519,7 +65464,7 @@ fn __action1354< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1355< +fn __action1353< >( source_code: &str, mode: Mode, @@ -65535,7 +65480,7 @@ fn __action1355< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action848( + __action846( source_code, mode, __0, @@ -65545,7 +65490,7 @@ fn __action1355< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1356< +fn __action1354< >( source_code: &str, mode: Mode, @@ -65561,7 +65506,7 @@ fn __action1356< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action849( + __action847( source_code, mode, __0, @@ -65571,7 +65516,7 @@ fn __action1356< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1357< +fn __action1355< >( source_code: &str, mode: Mode, @@ -65587,7 +65532,7 @@ fn __action1357< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action850( + __action848( source_code, mode, __0, @@ -65597,7 +65542,7 @@ fn __action1357< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1358< +fn __action1356< >( source_code: &str, mode: Mode, @@ -65614,7 +65559,7 @@ fn __action1358< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action851( + __action849( source_code, mode, __0, @@ -65625,7 +65570,7 @@ fn __action1358< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1359< +fn __action1357< >( source_code: &str, mode: Mode, @@ -65644,7 +65589,7 @@ fn __action1359< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action852( + __action850( source_code, mode, __0, @@ -65657,7 +65602,7 @@ fn __action1359< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1360< +fn __action1358< >( source_code: &str, mode: Mode, @@ -65675,7 +65620,7 @@ fn __action1360< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action853( + __action851( source_code, mode, __0, @@ -65687,7 +65632,7 @@ fn __action1360< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1361< +fn __action1359< >( source_code: &str, mode: Mode, @@ -65707,7 +65652,7 @@ fn __action1361< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action854( + __action852( source_code, mode, __0, @@ -65721,7 +65666,7 @@ fn __action1361< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1362< +fn __action1360< >( source_code: &str, mode: Mode, @@ -65740,7 +65685,7 @@ fn __action1362< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action855( + __action853( source_code, mode, __0, @@ -65753,7 +65698,7 @@ fn __action1362< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1363< +fn __action1361< >( source_code: &str, mode: Mode, @@ -65775,7 +65720,7 @@ fn __action1363< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action856( + __action854( source_code, mode, __0, @@ -65791,7 +65736,7 @@ fn __action1363< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1364< +fn __action1362< >( source_code: &str, mode: Mode, @@ -65812,7 +65757,7 @@ fn __action1364< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action857( + __action855( source_code, mode, __0, @@ -65827,7 +65772,7 @@ fn __action1364< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1365< +fn __action1363< >( source_code: &str, mode: Mode, @@ -65845,7 +65790,7 @@ fn __action1365< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action859( + __action857( source_code, mode, __0, @@ -65857,7 +65802,7 @@ fn __action1365< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1366< +fn __action1364< >( source_code: &str, mode: Mode, @@ -65873,7 +65818,7 @@ fn __action1366< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action860( + __action858( source_code, mode, __0, @@ -65883,7 +65828,7 @@ fn __action1366< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1367< +fn __action1365< >( source_code: &str, mode: Mode, @@ -65901,7 +65846,7 @@ fn __action1367< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action861( + __action859( source_code, mode, __0, @@ -65913,7 +65858,7 @@ fn __action1367< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1368< +fn __action1366< >( source_code: &str, mode: Mode, @@ -65931,7 +65876,7 @@ fn __action1368< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action862( + __action860( source_code, mode, __0, @@ -65943,7 +65888,7 @@ fn __action1368< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1369< +fn __action1367< >( source_code: &str, mode: Mode, @@ -65961,7 +65906,7 @@ fn __action1369< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action867( + __action865( source_code, mode, __0, @@ -65973,7 +65918,7 @@ fn __action1369< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1370< +fn __action1368< >( source_code: &str, mode: Mode, @@ -65989,7 +65934,7 @@ fn __action1370< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action868( + __action866( source_code, mode, __0, @@ -65999,7 +65944,7 @@ fn __action1370< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1371< +fn __action1369< >( source_code: &str, mode: Mode, @@ -66016,7 +65961,7 @@ fn __action1371< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action869( + __action867( source_code, mode, __0, @@ -66027,7 +65972,7 @@ fn __action1371< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action1372< +fn __action1370< >( source_code: &str, mode: Mode, @@ -66044,7 +65989,7 @@ fn __action1372< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action870( + __action868( source_code, mode, __0, @@ -66053,6 +65998,60 @@ fn __action1372< ) } +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1371< +>( + 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, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action1372< +>( + 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 __action1373< @@ -70875,7 +70874,7 @@ fn __action1526< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1311( + __action1309( source_code, mode, __0, @@ -70901,7 +70900,7 @@ fn __action1527< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1311( + __action1309( source_code, mode, __0, @@ -70929,7 +70928,7 @@ fn __action1528< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1313( + __action1311( source_code, mode, __0, @@ -70959,7 +70958,7 @@ fn __action1529< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1313( + __action1311( source_code, mode, __0, @@ -71419,7 +71418,7 @@ fn __action1546< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1324( + __action1322( source_code, mode, __0, @@ -71445,7 +71444,7 @@ fn __action1547< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1324( + __action1322( source_code, mode, __0, @@ -72223,7 +72222,7 @@ fn __action1570< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action1316( + __action1314( source_code, mode, __0, @@ -72257,7 +72256,7 @@ fn __action1571< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1316( + __action1314( source_code, mode, __0, @@ -72290,7 +72289,7 @@ fn __action1572< __2, ); let __temp0 = (__start0, __temp0, __end0); - __action1317( + __action1315( source_code, mode, __0, @@ -72322,7 +72321,7 @@ fn __action1573< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1317( + __action1315( source_code, mode, __0, @@ -72608,7 +72607,7 @@ fn __action1582< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1314( + __action1312( source_code, mode, __0, @@ -72636,7 +72635,7 @@ fn __action1583< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1314( + __action1312( source_code, mode, __0, @@ -72664,7 +72663,7 @@ fn __action1584< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1315( + __action1313( source_code, mode, __temp0, @@ -72688,7 +72687,7 @@ fn __action1585< __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1315( + __action1313( source_code, mode, __temp0, @@ -72708,7 +72707,7 @@ fn __action1586< { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action1334( + let __temp0 = __action1332( source_code, mode, __0, @@ -72734,7 +72733,7 @@ fn __action1587< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action1335( + let __temp0 = __action1333( source_code, mode, __0, @@ -72762,7 +72761,7 @@ fn __action1588< { let __start0 = __2.0; let __end0 = __4.2; - let __temp0 = __action1334( + let __temp0 = __action1332( source_code, mode, __2, @@ -72792,7 +72791,7 @@ fn __action1589< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action1335( + let __temp0 = __action1333( source_code, mode, __2, @@ -72820,7 +72819,7 @@ fn __action1590< { let __start0 = __0.0; let __end0 = __2.2; - let __temp0 = __action1336( + let __temp0 = __action1334( source_code, mode, __0, @@ -72846,7 +72845,7 @@ fn __action1591< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action1337( + let __temp0 = __action1335( source_code, mode, __0, @@ -72874,7 +72873,7 @@ fn __action1592< { let __start0 = __2.0; let __end0 = __4.2; - let __temp0 = __action1336( + let __temp0 = __action1334( source_code, mode, __2, @@ -72904,7 +72903,7 @@ fn __action1593< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action1337( + let __temp0 = __action1335( source_code, mode, __2, @@ -77320,7 +77319,7 @@ fn __action1720< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1347( + __action1345( source_code, mode, __0, @@ -77352,7 +77351,7 @@ fn __action1721< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1347( + __action1345( source_code, mode, __0, @@ -77443,7 +77442,7 @@ fn __action1724< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action793( + __action791( source_code, mode, __0, @@ -77473,7 +77472,7 @@ fn __action1725< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action793( + __action791( source_code, mode, __0, @@ -78127,7 +78126,7 @@ fn __action1745< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action1322( + __action1320( source_code, mode, __0, @@ -78153,7 +78152,7 @@ fn __action1746< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action1322( + __action1320( source_code, mode, __0, @@ -78282,7 +78281,7 @@ fn __action1751< __0, ); let __temp0 = (__start0, __temp0, __end0); - __action1312( + __action1310( source_code, mode, __temp0, diff --git a/crates/ruff_python_parser/src/string.rs b/crates/ruff_python_parser/src/string.rs index 81cbe2f9a1ce34..2040cceab14399 100644 --- a/crates/ruff_python_parser/src/string.rs +++ b/crates/ruff_python_parser/src/string.rs @@ -1,6 +1,6 @@ //! 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}; @@ -9,31 +9,9 @@ use crate::token::{StringKind, Tok}; // unicode_name2 does not expose `MAX_NAME_LENGTH`, so we replicate that constant here, fix #3798 const MAX_UNICODE_NAME: usize = 88; -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), } @@ -50,7 +28,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, } } @@ -243,8 +221,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), })) } @@ -271,8 +251,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), })) } @@ -288,12 +269,10 @@ impl<'a> StringParser<'a> { ch => value.push(ch), } } - 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), })) } @@ -369,18 +348,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()); @@ -391,19 +365,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()); @@ -417,12 +386,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), }) }; @@ -446,10 +413,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(); @@ -457,14 +421,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 4bba5b98260104..1ef88f57c087d9 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 9b478518b7d99c..010ac0c223630f 100644 --- a/crates/ruff_python_semantic/src/analyze/typing.rs +++ b/crates/ruff_python_semantic/src/analyze/typing.rs @@ -3,7 +3,7 @@ use ruff_python_ast::call_path::{from_qualified_name, from_unqualified_name, CallPath}; use ruff_python_ast::helpers::{is_const_false, map_subscript}; use ruff_python_ast::{ - self as ast, Constant, Expr, Int, Operator, ParameterWithDefault, Parameters, Stmt, + 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, @@ -144,10 +144,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 +254,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 +308,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), .. }) ) {